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));
        }
        public Vector4I[] CreateTextureIndices(List <MyRuntimeSectionInfo> sectionInfos, List <int> indices, int verticesNum)
        {
            Vector4I defaultArrayTexIndex = new Vector4I(DEFAULT_ARRAY_TEXTURE_INDEX, DEFAULT_ARRAY_TEXTURE_INDEX, DEFAULT_ARRAY_TEXTURE_INDEX, DEFAULT_ARRAY_TEXTURE_INDEX);

            Vector4I[] texIndices = new Vector4I[verticesNum];
            for (int i = 0; i < verticesNum; i++)
            {
                texIndices[i] = defaultArrayTexIndex;
            }

            if (!MyRender11.Settings.UseGeometryArrayTextures) // system is disabled
            {
                return(texIndices);
            }

            foreach (MyRuntimeSectionInfo sectionInfo in sectionInfos)
            {
                MyMeshMaterialId material = MyMeshMaterials1.GetMaterialId(sectionInfo.MaterialName);
                MyRenderProxy.Assert(material != MyMeshMaterialId.NULL);
                if (!material.Info.GeometryTextureRef.IsUsed)
                {
                    continue;
                }
                Vector4I materialTexIndex = material.Info.GeometryTextureRef.TextureSliceIndices;

                for (int i = 0; i < sectionInfo.TriCount * 3; i++)
                {
                    int      index        = indices[i + sectionInfo.IndexStart];
                    Vector4I prevTexIndex = texIndices[index];
                    MyRenderProxy.Assert(defaultArrayTexIndex.CompareTo(prevTexIndex) == 0 || materialTexIndex.CompareTo(prevTexIndex) == 0, "Vertex is used with different material!");
                    texIndices[index] = materialTexIndex;
                }
            }

            return(texIndices);
        }