internal static MyMeshMaterialId GetMaterialId(MyMaterialDescriptor importDesc, string contentPath, string assetFile = null) { MyMeshMaterialInfo desc; if (importDesc != null) { desc = new MyMeshMaterialInfo { Name = X.TEXT(importDesc.MaterialName), ContentPath = contentPath, ColorMetal_Texture = X.TEXT(importDesc.Textures.Get("ColorMetalTexture", "")), NormalGloss_Texture = X.TEXT(importDesc.Textures.Get("NormalGlossTexture", "")), Extensions_Texture = X.TEXT(importDesc.Textures.Get("AddMapsTexture", "")), Alphamask_Texture = X.TEXT(importDesc.Textures.Get("AlphamaskTexture", null)), Technique = importDesc.Technique, Facing = importDesc.Facing, WindScaleAndFreq = importDesc.WindScaleAndFreq }; } else { return(NullMaterialId); } return(GetMaterialId(ref desc, assetFile)); }
internal static void CreateCommonMaterials() { var nullMatDesc = new MyMeshMaterialInfo { Name = X.TEXT("__NULL_MATERIAL"), ColorMetal_Texture = MyStringId.NullOrEmpty, NormalGloss_Texture = MyStringId.NullOrEmpty, Extensions_Texture = MyStringId.NullOrEmpty, Alphamask_Texture = MyStringId.NullOrEmpty, Technique = "MESH" }; NullMaterialId = GetMaterialId(ref nullMatDesc); var debugMatDesc = new MyMeshMaterialInfo { Name = X.TEXT("__DEBUG_MATERIAL"), ColorMetal_Texture = MyRender11.DebugMode ? X.TEXT("Pink") : MyStringId.NullOrEmpty, NormalGloss_Texture = MyStringId.NullOrEmpty, Extensions_Texture = MyStringId.NullOrEmpty, Alphamask_Texture = MyStringId.NullOrEmpty, Technique = "MESH" }; DebugMaterialId = GetMaterialId(ref debugMatDesc); }
internal static MyMeshMaterialId GetMaterialId(ref MyMeshMaterialInfo desc) { var rk = CalculateRK(ref desc); if (!MaterialRkIndex.ContainsKey(rk)) { var id = MaterialRkIndex[rk] = new MyMeshMaterialId { Index = MaterialsPool.Allocate() }; desc.Id = id; desc.RepresentationKey = rk; MaterialsPool.Data[id.Index] = desc; MaterialProxyIndex[id] = MyMaterials1.AllocateProxy(); MaterialQueryResourcesTable.Add(id); var nameIndex = desc.Name; if (MERGABLE_MATERIAL_NAMES.Contains(nameIndex)) { MergableRKs.Add(desc.RepresentationKey); } MaterialNameIndex[nameIndex] = id; return(id); } return(MaterialRkIndex[rk]); }
internal static void RequestResources(ref MyMeshMaterialInfo info) { if (!info.GeometryTextureRef.IsUsed) { MyFileTextureManager texManager = MyManagers.FileTextures; texManager.GetTexture(info.ColorMetal_Texture, MyFileTextureEnum.COLOR_METAL, false, info.Facing == MyFacingEnum.Impostor); texManager.GetTexture(info.NormalGloss_Texture, MyFileTextureEnum.NORMALMAP_GLOSS); texManager.GetTexture(info.Extensions_Texture, MyFileTextureEnum.EXTENSIONS); texManager.GetTexture(info.Alphamask_Texture, MyFileTextureEnum.ALPHAMASK); } else { if (info.GeometryTextureRef.ColorMetalTexture != null) { info.GeometryTextureRef.ColorMetalTexture.Update(); } if (info.GeometryTextureRef.NormalGlossTexture != null) { info.GeometryTextureRef.NormalGlossTexture.Update(); } if (info.GeometryTextureRef.ExtensionTexture != null) { info.GeometryTextureRef.ExtensionTexture.Update(); } if (info.GeometryTextureRef.AlphamaskTexture != null) { info.GeometryTextureRef.AlphamaskTexture.Update(); } } }
internal static void RequestResources(ref MyMeshMaterialInfo info) { MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL); MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { ISrvBindable A, B, C, D; if (!info.GeometryTextureRef.IsUsed) { MyFileTextureManager texManager = MyManagers.FileTextures; A = texManager.GetTexture(info.ColorMetal_Texture, MyFileTextureEnum.COLOR_METAL); B = texManager.GetTexture(info.NormalGloss_Texture, MyFileTextureEnum.NORMALMAP_GLOSS); C = texManager.GetTexture(info.Extensions_Texture, MyFileTextureEnum.EXTENSIONS); D = texManager.GetTexture(info.Alphamask_Texture, MyFileTextureEnum.ALPHAMASK); } else { A = info.GeometryTextureRef.ColorMetalTexture; B = info.GeometryTextureRef.NormalGlossTexture; C = info.GeometryTextureRef.ExtensionTexture; D = info.GeometryTextureRef.AlphamaskTexture; } var materialSrvs = new MySrvTable { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, Srvs = new ISrvBindable[] { A, B, C, D }, Version = info.Id.GetHashCode() }; return (new MyMaterialProxy_2 { MaterialSrvs = materialSrvs }); }
internal static MyMeshMaterialId GetMaterialId(ref MyMeshMaterialInfo desc, string assetFile = null) { var rk = CalculateRK(ref desc); if (!MaterialRkIndex.ContainsKey(rk)) { var id = MaterialRkIndex[rk] = new MyMeshMaterialId { Index = MaterialsPool.Allocate() }; desc.Id = id; desc.RepresentationKey = rk; MaterialsPool.Data[id.Index] = desc; MaterialProxyIndex[id] = MyMaterials1.AllocateProxy(); MaterialQueryResourcesTable.Add(id); MaterialNameIndex[desc.Name] = id; if (MERGABLE_MATERIAL_NAMES.Contains(desc.Name)) { MergableRKs.Add(desc.RepresentationKey); } else if (assetFile != null) { VRageRender.MyRender11.Log.WriteLine(String.Format("Asset {0} tries to overrwrite material {1} with different textures", assetFile, desc.Name.ToString())); } return(id); } return(MaterialRkIndex[rk]); }
internal static void RequestResources(ref MyMeshMaterialInfo info) { MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL, false, info.Facing == MyFacingEnum.Impostor); MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); }
internal static void CreateCommonMaterials() { var nullMatDesc = new MyMeshMaterialInfo { Name = X.TEXT_("__NULL_MATERIAL"), ColorMetal_Texture = string.Empty, NormalGloss_Texture = string.Empty, Extensions_Texture = string.Empty, Alphamask_Texture = string.Empty, Technique = MyMeshDrawTechnique.MESH }; NullMaterialId = GetMaterialId(ref nullMatDesc); var debugMatDesc = new MyMeshMaterialInfo { Name = X.TEXT_("__DEBUG_MATERIAL"), ColorMetal_Texture = MyRender11.DebugMode ? "PINK" : string.Empty, NormalGloss_Texture = string.Empty, Extensions_Texture = string.Empty, Alphamask_Texture = string.Empty, Technique = MyMeshDrawTechnique.MESH }; DebugMaterialId = GetMaterialId(ref debugMatDesc); }
internal static void OnResourcesRequesting() { foreach (var id in MaterialQueryResourcesTable) { // ask for resources MyMeshMaterialInfo.RequestResources(ref MaterialsPool.Data[id.Index]); } }
internal static void RequestResources(ref MyMeshMaterialInfo info) { MyFileTextureManager texManager = MyManagers.FileTextures; string contentPath = info.ContentPath; texManager.GetTexture(GetFilepath(contentPath, info.ColorMetal_Texture.ToString()), MyFileTextureEnum.COLOR_METAL, false, info.Facing == MyFacingEnum.Impostor); texManager.GetTexture(GetFilepath(contentPath, info.NormalGloss_Texture.ToString()), MyFileTextureEnum.NORMALMAP_GLOSS); texManager.GetTexture(GetFilepath(contentPath, info.Extensions_Texture.ToString()), MyFileTextureEnum.EXTENSIONS); texManager.GetTexture(GetFilepath(contentPath, info.Alphamask_Texture.ToString()), MyFileTextureEnum.ALPHAMASK); }
internal static int CalculateRK(ref MyMeshMaterialInfo desc) { var key = desc.ColorMetal_Texture.GetHashCode(); MyHashHelper.Combine(ref key, desc.NormalGloss_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Extensions_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Alphamask_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Technique.GetHashCode()); MyHashHelper.Combine(ref key, desc.Name.GetHashCode()); return(key); }
internal static void OnResourcesGathering() { if (MaterialQueryResourcesTable.Count > 0) { // update proxies foreach material foreach (var id in MaterialQueryResourcesTable) { MyMaterials1.ProxyPool.Data[MaterialProxyIndex[id].Index] = MyMeshMaterialInfo.CreateProxy(ref MaterialsPool.Data[id.Index]); } } MaterialQueryResourcesTable.Clear(); }
internal static MyMeshMaterialId GetMaterialId(string name, string contentPath, string colorMetalTexture, string normalGlossTexture, string extensionTexture, string technique) { MyMeshMaterialInfo desc; desc = new MyMeshMaterialInfo { Name = X.TEXT(name), ContentPath = contentPath, ColorMetal_Texture = MyStringId.GetOrCompute(colorMetalTexture), NormalGloss_Texture = MyStringId.GetOrCompute(normalGlossTexture), Extensions_Texture = MyStringId.GetOrCompute(extensionTexture), Technique = technique }; return(GetMaterialId(ref desc)); }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { var A = MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL); var B = MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); var C = MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); var D = MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); var materialSrvs = new MySrvTable { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, SRVs = new IShaderResourceBindable[] { A, B, C, D }, Version = info.Id.GetHashCode() }; return new MyMaterialProxy_2 { MaterialSRVs = materialSrvs }; }
internal static MyMeshMaterialId GetMaterialId(string name, string contentPath, string colorMetalTexture, string normalGlossTexture, string extensionTexture, string technique) { MyMeshMaterialInfo desc; desc = new MyMeshMaterialInfo { Name = X.TEXT(name), ContentPath = contentPath, ColorMetal_Texture = X.TEXT(colorMetalTexture), NormalGloss_Texture = X.TEXT(normalGlossTexture), Extensions_Texture = X.TEXT(extensionTexture), Technique = technique, Facing = MyFacingEnum.None, }; return(GetMaterialId(ref desc)); }
internal static MyMeshMaterialId GetMaterialId(string name, string contentPath, string colorMetalTexture, string normalGlossTexture, string extensionTexture, string technique) { MyMeshMaterialInfo desc; desc = new MyMeshMaterialInfo { Name = X.TEXT_(name), ColorMetal_Texture = MyResourceUtils.GetTextureFullPath(colorMetalTexture, contentPath), NormalGloss_Texture = MyResourceUtils.GetTextureFullPath(normalGlossTexture, contentPath), Extensions_Texture = MyResourceUtils.GetTextureFullPath(extensionTexture, contentPath), Alphamask_Texture = String.Empty, Technique = ConvertToDrawTechnique(technique), TextureTypes = GetMaterialTextureTypes(colorMetalTexture, normalGlossTexture, extensionTexture, null), Facing = MyFacingEnum.None, }; return(GetMaterialId(ref desc)); }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { var A = MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL); var B = MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); var C = MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); var D = MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); var materialSrvs = new MySrvTable { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, SRVs = new IShaderResourceBindable[] { A, B, C, D }, Version = info.Id.GetHashCode() }; return (new MyMaterialProxy_2 { MaterialSRVs = materialSrvs }); }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { var A = MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL); var B = MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); var C = MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); var D = MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); return new MyMaterialProxy_2 { MaterialSRVs = { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, SRVs = new ShaderResourceView[] { MyTextures.Views[A.Index], MyTextures.Views[B.Index], MyTextures.Views[C.Index], MyTextures.Views[D.Index] }, Version = info.Id.GetHashCode() } }; }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { MyFileTextureManager texManager = MyManagers.FileTextures; string contentPath = info.ContentPath; var A = texManager.GetTexture(GetFilepath(contentPath, info.ColorMetal_Texture.ToString()), MyFileTextureEnum.COLOR_METAL); var B = texManager.GetTexture(GetFilepath(contentPath, info.NormalGloss_Texture.ToString()), MyFileTextureEnum.NORMALMAP_GLOSS); var C = texManager.GetTexture(GetFilepath(contentPath, info.Extensions_Texture.ToString()), MyFileTextureEnum.EXTENSIONS); var D = texManager.GetTexture(GetFilepath(contentPath, info.Alphamask_Texture.ToString()), MyFileTextureEnum.ALPHAMASK); var materialSrvs = new MySrvTable { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, Srvs = new ShaderResourceView[] { A.Srv, B.Srv, C.Srv, D.Srv }, Version = info.Id.GetHashCode() }; return (new MyMaterialProxy_2 { MaterialSrvs = materialSrvs }); }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { var A = MyTextures.GetTexture(info.ColorMetal_Texture, info.ContentPath, MyTextureEnum.COLOR_METAL); var B = MyTextures.GetTexture(info.NormalGloss_Texture, info.ContentPath, MyTextureEnum.NORMALMAP_GLOSS); var C = MyTextures.GetTexture(info.Extensions_Texture, info.ContentPath, MyTextureEnum.EXTENSIONS); var D = MyTextures.GetTexture(info.Alphamask_Texture, info.ContentPath, MyTextureEnum.ALPHAMASK); return (new MyMaterialProxy_2 { MaterialSRVs = { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, SRVs = new ShaderResourceView[] { MyTextures.Views[A.Index], MyTextures.Views[B.Index], MyTextures.Views[C.Index], MyTextures.Views[D.Index] }, Version = info.Id.GetHashCode() } }); }
public static MyMeshMaterialInfo ConvertImportDescToMeshMaterialInfo(MyMaterialDescriptor importDesc, string contentPath, string assetFile = null) { string colorMetalTexture = importDesc.Textures.Get("ColorMetalTexture", ""); string normalGlossTexture = importDesc.Textures.Get("NormalGlossTexture", ""); string extensionTexture = importDesc.Textures.Get("AddMapsTexture", ""); string alphamaskTexture = importDesc.Textures.Get("AlphamaskTexture", null); MyMeshMaterialInfo info = new MyMeshMaterialInfo { Name = X.TEXT_(importDesc.MaterialName), ColorMetal_Texture = MyResourceUtils.GetTextureFullPath(colorMetalTexture, contentPath), NormalGloss_Texture = MyResourceUtils.GetTextureFullPath(normalGlossTexture, contentPath), Extensions_Texture = MyResourceUtils.GetTextureFullPath(extensionTexture, contentPath), Alphamask_Texture = MyResourceUtils.GetTextureFullPath(alphamaskTexture, contentPath), TextureTypes = GetMaterialTextureTypes(colorMetalTexture, normalGlossTexture, extensionTexture, alphamaskTexture), Technique = ConvertToDrawTechnique(importDesc.Technique), Facing = importDesc.Facing, WindScaleAndFreq = importDesc.WindScaleAndFreq }; return(info); }
internal static MyMeshMaterialId GetMaterialId(MyMaterialDescriptor importDesc, string contentPath) { MyMeshMaterialInfo desc; if (importDesc != null) { desc = new MyMeshMaterialInfo { Name = X.TEXT(importDesc.MaterialName), ContentPath = contentPath, ColorMetal_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("ColorMetalTexture", "")), NormalGloss_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("NormalGlossTexture", "")), Extensions_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("AddMapsTexture", "")), Alphamask_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("AlphamaskTexture", null)), Technique = importDesc.Technique }; } else { return(NullMaterialId); } return(GetMaterialId(ref desc)); }
public bool IsMaterialAcceptableForTheSystem(MyMeshMaterialInfo info) { if (m_ignoredMaterials.Contains(info.Name.String)) return false; if (MyFileTextureParamsManager.IsArrayTextureInFile(info.ColorMetal_Texture)) return false; if (MyFileTextureParamsManager.IsArrayTextureInFile(info.NormalGloss_Texture)) return false; if (MyFileTextureParamsManager.IsArrayTextureInFile(info.Extensions_Texture)) return false; if (MyFileTextureParamsManager.IsArrayTextureInFile(info.Alphamask_Texture)) return false; return true; }
public void ValidateMaterialTextures(MyMeshMaterialInfo info) { Vector2I texSize = GetDefaultTextureSize(info.ColorMetal_Texture, info.NormalGloss_Texture, info.Extensions_Texture, info.Alphamask_Texture); CheckTexture(info.ColorMetal_Texture, MyChannel.ColorMetal, Format.BC7_UNorm_SRgb, texSize); CheckTexture(info.NormalGloss_Texture, MyChannel.NormalGloss, Format.BC7_UNorm, texSize); CheckTexture(info.Extensions_Texture, MyChannel.Extension, Format.BC7_UNorm_SRgb, texSize); CheckTexture(info.Alphamask_Texture, MyChannel.Alphamask, Format.BC4_UNorm, texSize); }
public MyMeshMaterialId GetOrCreateMaterialId(MyMeshMaterialInfo info) { Vector2I defaultTextureSize = GetDefaultTextureSize(info.ColorMetal_Texture, info.NormalGloss_Texture, info.Extensions_Texture, info.Alphamask_Texture); IDynamicFileArrayTexture cmArrayTex = GetArrayTextureFromFilepath(info.ColorMetal_Texture, MyChannel.ColorMetal, defaultTextureSize); int cmIndex = cmArrayTex.GetOrAddSlice(info.ColorMetal_Texture); IDynamicFileArrayTexture ngArrayTex = GetArrayTextureFromFilepath(info.NormalGloss_Texture, MyChannel.NormalGloss, defaultTextureSize); int ngIndex = ngArrayTex.GetOrAddSlice(info.NormalGloss_Texture); IDynamicFileArrayTexture extArrayTex = GetArrayTextureFromFilepath(info.Extensions_Texture, MyChannel.Extension, defaultTextureSize); int extIndex = extArrayTex.GetOrAddSlice(info.Extensions_Texture); info.ColorMetal_Texture = cmArrayTex.Name; info.NormalGloss_Texture = ngArrayTex.Name; info.Extensions_Texture = extArrayTex.Name; MyMaterialKey materialKey = new MyMaterialKey(info.ColorMetal_Texture, info.NormalGloss_Texture, info.Extensions_Texture, info.Alphamask_Texture); m_setDebugMaterials.Add(materialKey); MyGeometryTextureSystemReference geoTextureRef; geoTextureRef.ColorMetalTexture = cmArrayTex; geoTextureRef.ColorMetalIndex = cmIndex; geoTextureRef.NormalGlossTexture = ngArrayTex; geoTextureRef.NormalGlossIndex = ngIndex; geoTextureRef.ExtensionTexture = extArrayTex; geoTextureRef.ExtensionIndex = extIndex; geoTextureRef.AlphamaskTexture = null; geoTextureRef.AlphamaskIndex = DEFAULT_ARRAY_TEXTURE_INDEX; if (!string.IsNullOrEmpty(info.Alphamask_Texture)) { IDynamicFileArrayTexture alphamaskArrayTex = GetArrayTextureFromFilepath(info.Alphamask_Texture, MyChannel.Alphamask, defaultTextureSize); int alphamaskIndex = alphamaskArrayTex.GetOrAddSlice(info.Alphamask_Texture); info.Alphamask_Texture = alphamaskArrayTex.Name; geoTextureRef.AlphamaskTexture = alphamaskArrayTex; geoTextureRef.AlphamaskIndex = alphamaskIndex; } geoTextureRef.IsUsed = true; info.GeometryTextureRef = geoTextureRef; return MyMeshMaterials1.GetMaterialId(ref info); }
internal static MyMeshMaterialId GetMaterialId(string name, string contentPath, string colorMetalTexture, string normalGlossTexture, string extensionTexture, string technique) { MyMeshMaterialInfo desc; desc = new MyMeshMaterialInfo { Name = X.TEXT(name), ContentPath = contentPath, ColorMetal_Texture = X.TEXT(colorMetalTexture), NormalGloss_Texture = X.TEXT(normalGlossTexture), Extensions_Texture = X.TEXT(extensionTexture), Technique = technique, Facing = MyFacingEnum.None, }; return GetMaterialId(ref desc); }
internal static MyMeshMaterialId GetMaterialId(MyMaterialDescriptor importDesc, string contentPath) { MyMeshMaterialInfo desc; if(importDesc != null) { desc = new MyMeshMaterialInfo { Name = X.TEXT(importDesc.MaterialName), ContentPath = contentPath, ColorMetal_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("ColorMetalTexture", "")), NormalGloss_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("NormalGlossTexture", "")), Extensions_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("AddMapsTexture", "")), Alphamask_Texture = MyStringId.GetOrCompute(importDesc.Textures.Get("AlphamaskTexture", null)), Technique = importDesc.Technique }; } else { return NullMaterialId; } return GetMaterialId(ref desc); }
internal static int CalculateRK(ref MyMeshMaterialInfo desc) { var key = desc.ColorMetal_Texture.GetHashCode(); MyHashHelper.Combine(ref key, desc.NormalGloss_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Extensions_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Alphamask_Texture.GetHashCode()); MyHashHelper.Combine(ref key, desc.Technique.GetHashCode()); MyHashHelper.Combine(ref key, desc.Name.GetHashCode()); if (desc.ContentPath != null) { MyHashHelper.Combine(ref key, desc.ContentPath.GetHashCode()); } return key; }
internal static MyMaterialProxy_2 CreateProxy(ref MyMeshMaterialInfo info) { MyFileTextureManager texManager = MyManagers.FileTextures; string contentPath = info.ContentPath; var A = texManager.GetTexture(GetFilepath(contentPath, info.ColorMetal_Texture.ToString()), MyFileTextureEnum.COLOR_METAL); var B = texManager.GetTexture(GetFilepath(contentPath, info.NormalGloss_Texture.ToString()), MyFileTextureEnum.NORMALMAP_GLOSS); var C = texManager.GetTexture(GetFilepath(contentPath, info.Extensions_Texture.ToString()), MyFileTextureEnum.EXTENSIONS); var D = texManager.GetTexture(GetFilepath(contentPath, info.Alphamask_Texture.ToString()), MyFileTextureEnum.ALPHAMASK); var materialSrvs = new MySrvTable { BindFlag = MyBindFlag.BIND_PS, StartSlot = 0, Srvs = new ShaderResourceView[] { A.Srv, B.Srv, C.Srv, D.Srv }, Version = info.Id.GetHashCode() }; return new MyMaterialProxy_2 { MaterialSrvs = materialSrvs }; }
internal static MyMeshMaterialId GetMaterialId(ref MyMeshMaterialInfo desc) { var rk = CalculateRK(ref desc); if(!MaterialRkIndex.ContainsKey(rk)) { var id = MaterialRkIndex[rk] = new MyMeshMaterialId { Index = MaterialsPool.Allocate() }; desc.Id = id; desc.RepresentationKey = rk; MaterialsPool.Data[id.Index] = desc; MaterialProxyIndex[id] = MyMaterials1.AllocateProxy(); MaterialQueryResourcesTable.Add(id); var nameIndex = desc.Name; if(MERGABLE_MATERIAL_NAMES.Contains(nameIndex)) { MergableRKs.Add(desc.RepresentationKey); } MaterialNameIndex[nameIndex] = id; return id; } return MaterialRkIndex[rk]; }
internal static MyMeshMaterialId GetMaterialId(ref MyMeshMaterialInfo desc, string assetFile = null) { var rk = CalculateRK(ref desc); if(!MaterialRkIndex.ContainsKey(rk)) { var id = MaterialRkIndex[rk] = new MyMeshMaterialId { Index = MaterialsPool.Allocate() }; desc.Id = id; desc.RepresentationKey = rk; MaterialsPool.Data[id.Index] = desc; MaterialProxyIndex[id] = MyMaterials1.AllocateProxy(); MaterialQueryResourcesTable.Add(id); var nameIndex = desc.Name; if(MERGABLE_MATERIAL_NAMES.Contains(nameIndex)) { MergableRKs.Add(desc.RepresentationKey); } if(!MaterialNameIndex.ContainsKey(nameIndex)) { MaterialNameIndex[nameIndex] = id; } else if(assetFile != null) { VRageRender.MyRender11.Log.WriteLine(String.Format("Asset {0} tries to overrwrite material {1} with different textures", assetFile, desc.Name.ToString())); } return id; } return MaterialRkIndex[rk]; }
internal static MyMeshMaterialId GetMaterialId(MyMaterialDescriptor importDesc, string contentPath, string assetFile = null) { MyMeshMaterialInfo desc; if(importDesc != null) { desc = new MyMeshMaterialInfo { Name = X.TEXT(importDesc.MaterialName), ContentPath = contentPath, ColorMetal_Texture = X.TEXT(importDesc.Textures.Get("ColorMetalTexture", "")), NormalGloss_Texture = X.TEXT(importDesc.Textures.Get("NormalGlossTexture", "")), Extensions_Texture = X.TEXT(importDesc.Textures.Get("AddMapsTexture", "")), Alphamask_Texture = X.TEXT(importDesc.Textures.Get("AlphamaskTexture", null)), Technique = importDesc.Technique, Facing = importDesc.Facing, WindScaleAndFreq = importDesc.WindScaleAndFreq }; } else { return NullMaterialId; } return GetMaterialId(ref desc, assetFile); }
internal static MyMeshMaterialId GetMaterialId(string name, string contentPath, string colorMetalTexture, string normalGlossTexture, string extensionTexture, string technique) { MyMeshMaterialInfo desc; desc = new MyMeshMaterialInfo { Name = X.TEXT(name), ContentPath = contentPath, ColorMetal_Texture = MyStringId.GetOrCompute(colorMetalTexture), NormalGloss_Texture = MyStringId.GetOrCompute(normalGlossTexture), Extensions_Texture = MyStringId.GetOrCompute(extensionTexture), Technique = technique }; return GetMaterialId(ref desc); }