コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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]);
        }
コード例 #4
0
 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();
         }
     }
 }
コード例 #5
0
 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);
 }
コード例 #6
0
        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
            });
        }
コード例 #7
0
        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]);
        }
コード例 #8
0
ファイル: MeshMaterial.cs プロジェクト: fluxit/SpaceEngineers
 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);
 }
コード例 #9
0
        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);
        }
コード例 #10
0
 internal static void OnResourcesRequesting()
 {
     foreach (var id in MaterialQueryResourcesTable)
     {
         // ask for resources
         MyMeshMaterialInfo.RequestResources(ref MaterialsPool.Data[id.Index]);
     }
 }
コード例 #11
0
ファイル: MeshMaterial.cs プロジェクト: rem02/SpaceEngineers
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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();
        }
コード例 #15
0
        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));
        }
コード例 #16
0
        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 };
        }
コード例 #17
0
        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));
        }
コード例 #18
0
        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));
        }
コード例 #19
0
        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
            });
        }
コード例 #20
0
ファイル: MeshMaterial.cs プロジェクト: fluxit/SpaceEngineers
        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()
                    } };
        }
コード例 #21
0
        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
            });
        }
コード例 #22
0
        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()
                }
            });
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        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));
        }
コード例 #25
0
        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;
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
ファイル: Materials.cs プロジェクト: fluxit/SpaceEngineers
        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);
        }
コード例 #29
0
        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);
        }
コード例 #30
0
ファイル: Materials.cs プロジェクト: fluxit/SpaceEngineers
        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;
        }
コード例 #31
0
ファイル: Materials.cs プロジェクト: fluxit/SpaceEngineers
        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);
        }
コード例 #32
0
ファイル: MeshMaterial.cs プロジェクト: rem02/SpaceEngineers
        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 };
        }
コード例 #33
0
        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];
        }
コード例 #34
0
ファイル: Materials.cs プロジェクト: fluxit/SpaceEngineers
        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];
        }
コード例 #35
0
ファイル: Materials.cs プロジェクト: fluxit/SpaceEngineers
        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);
        }
コード例 #36
0
ファイル: Materials.cs プロジェクト: caomw/SpaceEngineers
        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);
        }