Example #1
0
 private void InitializeShaderOptionList(BFRES.MaterialData mat)
 {
     foreach (var op in mat.shaderassign.options)
     {
         dataGridView3.Rows.Add(op.Key, op.Value);
     }
 }
        private void RenderTexture(BFRES.Mesh m = null, BRTI tex = null, FTEX ftex = null)
        {
            Texture     = tex;
            FTEXTexture = ftex;
            mesh        = m;
            mat         = mesh.material;

            foreach (BFRES.MatTexture te in mat.textures)
            {
                if (tex != null)
                {
                    if (te.Name == tex.Text)
                    {
                        Mattex = te;
                        comboBox1.SelectedIndex = te.wrapModeS;
                        comboBox2.SelectedIndex = te.wrapModeT;
                    }
                }
                if (ftex != null)
                {
                    if (te.Name == ftex.Text)
                    {
                        Mattex = te;
                        comboBox1.SelectedIndex = te.wrapModeS;
                        comboBox2.SelectedIndex = te.wrapModeT;
                    }
                }
            }
        }
Example #3
0
        public void LoadMaterial(BFRES.Mesh p)
        {
            listView1.Items.Clear();
            dataGridView3.Rows.Clear();
            dataGridView4.Rows.Clear();

            textureImageList.ColorDepth = ColorDepth.Depth32Bit;
            textureImageList.ImageSize  = new Size(64, 64);

            poly = p;
            mat  = p.material;

            FillForm();

            textBox1.Text            = mat.Name;
            ShaderArchivelabel1.Text = $"Shader Archive {mat.shaderassign.ShaderArchive}";
            ShaderMdllabel2.Text     = $"Shader Model {mat.shaderassign.ShaderModel}";

            paramColorList.ImageSize = new Size(10, 10);
            listView1.SmallImageList = paramColorList;
            listView1.FullRowSelect  = true;

            TextureRefListView.SmallImageList = textureImageList;
            TextureRefListView.FullRowSelect  = true;
        }
        private void InitializeRenderInfoList(BFRES.MaterialData mat)
        {
            foreach (var rnd in mat.renderinfo)
            {
                string value = "";

                if (rnd.Type == RenderInfoType.Int32)
                {
                    foreach (int item in rnd.Value_Ints)
                    {
                        value += $" {item}";
                    }

                    dataGridView4.Rows.Add(rnd.Name, value, "Int");
                }
                if (rnd.Type == RenderInfoType.Single)
                {
                    foreach (float item in rnd.Value_Floats)
                    {
                        value += $" {item}";
                    }

                    dataGridView4.Rows.Add(rnd.Name, value, "Float");
                }
                if (rnd.Type == RenderInfoType.String)
                {
                    foreach (string item in rnd.Value_Strings)
                    {
                        value += $" {item}";
                    }

                    dataGridView4.Rows.Add(rnd.Name, value, "String");
                }
            }
        }
Example #5
0
        public static byte[] WriteShaderParams(this BFRES.MaterialData m)
        {
            using (var mem = new MemoryStream())
                using (Syroot.BinaryData.BinaryDataWriter writer = new Syroot.BinaryData.BinaryDataWriter(mem))
                {
                    writer.ByteOrder = Syroot.BinaryData.ByteOrder.LittleEndian;
                    foreach (var prm in m.matparam.Values)
                    {
                        switch (prm.Type)
                        {
                        case Syroot.NintenTools.Bfres.ShaderParamType.Float:
                            writer.Write(prm.Value_float);
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.Float2:
                            writer.Write(prm.Value_float2.X);
                            writer.Write(prm.Value_float2.Y);
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.Float3:
                            writer.Write(prm.Value_float3.X);
                            writer.Write(prm.Value_float3.Y);
                            writer.Write(prm.Value_float3.Z);
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.Float4:
                            writer.Write(prm.Value_float4.X);
                            writer.Write(prm.Value_float4.Y);
                            writer.Write(prm.Value_float4.Z);
                            writer.Write(prm.Value_float4.W);
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.TexSrt:
                            writer.Write(prm.Value_TexSrt.Mode);
                            writer.Write(prm.Value_TexSrt.scale.X);
                            writer.Write(prm.Value_TexSrt.scale.Y);
                            writer.Write(prm.Value_TexSrt.rotate);
                            writer.Write(prm.Value_TexSrt.translate.X);
                            writer.Write(prm.Value_TexSrt.translate.Y);
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.Float4x4:
                            foreach (float f in prm.Value_float4x4)
                            {
                                writer.Write(f);
                            }
                            break;

                        case Syroot.NintenTools.Bfres.ShaderParamType.UInt:
                            writer.Write(prm.Value_UInt);
                            break;

                        default:
                            writer.Write(prm.UnkownTypeData);
                            break;
                        }
                    }
                    return(mem.ToArray());
                }
        }
Example #6
0
        private void InitializeTextureListView(BFRES.MaterialData mat)
        {
            // Shaders weren't initialized.
            if (OpenTkSharedResources.SetupStatus != OpenTkSharedResources.SharedResourceStatus.Initialized)
            {
                return;
            }

            int curTex = 0;

            TextureRefListView.Items.Clear();
            textureImageList.Images.Clear();

            foreach (var texure in mat.textures)
            {
                TextureRefListView.Items.Add(texure.Name);
            }

            if (BFRES.IsSwitchBFRES == true)
            {
                foreach (BNTX bntx in Runtime.bntxList)
                {
                    foreach (ListViewItem texure in TextureRefListView.Items)
                    {
                        if (bntx.glTexByName.ContainsKey(texure.Text))
                        {
                            Bitmap bitmap = TextureToBitmap.RenderBitmapUseExistingContext((SFGraphics.GLObjects.Textures.Texture2D)bntx.glTexByName[texure.Text], 64, 64);

                            textureImageList.Images.Add(texure.Text, bitmap);

                            texure.ImageIndex = curTex++;

                            var dummy = textureImageList.Handle;
                            bitmap.Dispose();
                        }
                    }
                }
            }
            else
            {
                foreach (FTEXContainer ftexC in Runtime.ftexContainerList)
                {
                    foreach (ListViewItem texure in TextureRefListView.Items)
                    {
                        if (ftexC.glTexByName.ContainsKey(texure.Text))
                        {
                            Bitmap bitmap = TextureToBitmap.RenderBitmapUseExistingContext((SFGraphics.GLObjects.Textures.Texture2D)ftexC.glTexByName[texure.Text], 64, 64);

                            textureImageList.Images.Add(texure.Text, bitmap);

                            texure.ImageIndex = curTex++;

                            var dummy = textureImageList.Handle;
                            bitmap.Dispose();
                        }
                    }
                }
            }
        }
Example #7
0
        public void FillForm()
        {
            BFRES.MaterialData material = mat;

            InitializeTextureListView(material);
            InitializeParamListView(material);
            InitializeShaderOptionList(material);
            InitializeRenderInfoList(material);
        }
Example #8
0
        public BFRES_MaterialEditor(BFRES.Mesh p)
        {
            InitializeComponent();
            this.poly = p;

            Console.WriteLine("Material Editor");
            Console.WriteLine(p.Text);

            mat           = p.material;
            textBox1.Text = mat.Name;
        }
Example #9
0
        public static void SetSwitchMaterial(this BFRES.MaterialData mat, Material m)
        {
            //Now use that to setup the new values
            mat.IsVisable = (int)m.Flags;
            mat.Name      = m.Name;

            int CurTex = 0;

            foreach (TextureRef texture in m.TextureRefs)
            {
                BFRES.MatTexture tex = new BFRES.MatTexture();
                texture.Name = texture.Name;
                mat.textures.Add(tex);

                tex.BorderColorType = m.Samplers[CurTex].BorderColorType;
                tex.CompareFunc     = m.Samplers[CurTex].CompareFunc;
                tex.FilterMode      = m.Samplers[CurTex].FilterMode;
                tex.LODBias         = m.Samplers[CurTex].LODBias;
                tex.MaxAnisotropic  = m.Samplers[CurTex].MaxAnisotropic;
                tex.magFilter       = (int)m.Samplers[CurTex].MaxLOD;
                tex.minFilter       = (int)m.Samplers[CurTex].MinLOD;
                tex.wrapModeS       = (int)m.Samplers[CurTex].WrapModeU;
                tex.wrapModeT       = (int)m.Samplers[CurTex].WrapModeV;
                tex.wrapModeW       = (int)m.Samplers[CurTex].WrapModeW;
                tex.SamplerName     = m.SamplerDict.GetKey(CurTex);
                CurTex++;
            }
            foreach (RenderInfo renderinfo in m.RenderInfos)
            {
                BFRES.RenderInfoData rnd = new BFRES.RenderInfoData();
                rnd.Name = renderinfo.Name;

                if (renderinfo.Type == RenderInfoType.Int32)
                {
                    rnd.Value_Ints = renderinfo.GetValueInt32s();
                }
                if (renderinfo.Type == RenderInfoType.Single)
                {
                    rnd.Value_Floats = renderinfo.GetValueSingles();
                }
                if (renderinfo.Type == RenderInfoType.String)
                {
                    rnd.Value_Strings = renderinfo.GetValueStrings();
                }
            }
        }
Example #10
0
 private void InitializeRenderInfoList(BFRES.MaterialData mat)
 {
     foreach (var rnd in mat.renderinfo)
     {
         if (rnd.Type == RenderInfoType.Int32)
         {
             dataGridView4.Rows.Add(rnd.Name, rnd.Value_Int.ToString(), "Int");
         }
         if (rnd.Type == RenderInfoType.Single)
         {
             dataGridView4.Rows.Add(rnd.Name, rnd.Value_Float.ToString(), "Float");
         }
         if (rnd.Type == RenderInfoType.String)
         {
             dataGridView4.Rows.Add(rnd.Name, rnd.Value_String.ToString(), "String");
         }
     }
 }
Example #11
0
        private void RenderTexture(BFRES.Mesh m, Texture texture, string texName)
        {
            this.texture = texture;
            mesh         = m;
            mat          = mesh.material;

            foreach (BFRES.MatTexture te in mat.textures)
            {
                if (this.texture != null)
                {
                    if (te.Name == texName)
                    {
                        mattex = te;
                        comboBox1.SelectedIndex = te.wrapModeS;
                        comboBox2.SelectedIndex = te.wrapModeT;
                    }
                }
            }
        }
Example #12
0
        private void InitializeParamListView(BFRES.MaterialData mat)
        {
            int curParam = 0;

            foreach (var prm in mat.matparam)
            {
                string displayValue = "";

                //   listBox2.Items.Add(prm);
                var item = new ListViewItem(prm.Key);

                Color setColor = Color.White;

                if (prm.Value.Type == ShaderParamType.Float)
                {
                    displayValue = mat.matparam[prm.Key].Value_float.ToString();
                }
                if (prm.Value.Type == ShaderParamType.Float2)
                {
                    displayValue = mat.matparam[prm.Key].Value_float2.ToString();
                }
                if (prm.Value.Type == ShaderParamType.Float3)
                {
                    displayValue = mat.matparam[prm.Key].Value_float3.ToString();

                    bool isColor = prm.Key.Contains("Color") || prm.Key.Contains("color");
                    if (isColor)
                    {
                        Vector3 col = mat.matparam[prm.Key].Value_float3;

                        float someIntX = col.X;
                        float someIntY = col.Y;
                        float someIntZ = col.Z;

                        someIntX = (float)Math.Pow(someIntX, 2.2f);
                        someIntY = (float)Math.Pow(someIntY, 2.2f);
                        someIntZ = (float)Math.Pow(someIntZ, 2.2f);

                        if (someIntX <= 1 && someIntY <= 1 && someIntZ <= 1)
                        {
                            setColor = Color.FromArgb(
                                255,
                                (int)Math.Ceiling(someIntX * 255.0f),
                                (int)Math.Ceiling(someIntY * 255.0f),
                                (int)Math.Ceiling(someIntZ * 255.0f)
                                );
                        }
                    }
                }
                if (prm.Value.Type == ShaderParamType.Float4)
                {
                    displayValue = mat.matparam[prm.Key].Value_float4.ToString();

                    bool isColor = prm.Key.Contains("Color") || prm.Key.Contains("color") || prm.Key.Contains("konst0");
                    if (isColor)
                    {
                        Vector4 col = mat.matparam[prm.Key].Value_float4;

                        float someIntX = col.X;
                        float someIntY = col.Y;
                        float someIntZ = col.Z;

                        someIntX = (float)Math.Pow(someIntX, 2.2f);
                        someIntY = (float)Math.Pow(someIntY, 2.2f);
                        someIntZ = (float)Math.Pow(someIntZ, 2.2f);

                        System.Diagnostics.Debug.WriteLine($"{prm.Key} R {someIntX} G {someIntY} B {someIntZ}");

                        if (someIntX <= 1 && someIntY <= 1 && someIntZ <= 1)
                        {
                            setColor = Color.FromArgb(
                                255,
                                (int)Math.Ceiling(someIntX * 255.0f),
                                (int)Math.Ceiling(someIntY * 255.0f),
                                (int)Math.Ceiling(someIntZ * 255.0f)
                                );
                        }
                    }
                }

                item.UseItemStyleForSubItems = false;
                item.SubItems.Add(displayValue);
                item.SubItems.Add("");
                item.SubItems[2].BackColor = setColor;
                listView1.View             = View.Details;
                listView1.Items.Add(item);
                curParam++;
            }
        }
        private static void BFRES_DrawUVTriangleAndGrid(Vector2 v1, Vector2 v2, Vector2 v3, int divisionsX, int divisionsY, Color uvColor, float lineWidth, Color gridColor, BFRES.MaterialData mat)
        {
            // No shaders
            GL.UseProgram(0);

            float   bounds  = 1;
            Vector2 scaleUv = new Vector2(1, 1);
            Vector2 transUv = new Vector2(0, 0);

            if (Runtime.uvChannel == Runtime.UVChannel.Channel2)
            {
                if (mat.matparam.ContainsKey("gsys_bake_st0"))
                {
                    scaleUv = mat.matparam["gsys_bake_st0"].Value_float4.Xy;
                    transUv = mat.matparam["gsys_bake_st0"].Value_float4.Zw;
                }
            }


            SetupUvRendering(lineWidth);

            BFRES_DrawUvTriangle(v1, v2, v3, uvColor, scaleUv, transUv);

            // Draw Grid
            GL.Color3(gridColor);
            DrawHorizontalGrid(divisionsX, bounds, scaleUv);
            DrawVerticalGrid(divisionsY, bounds, scaleUv);
        }
Example #14
0
        public static Material CreateSwitchMaterial(this BFRES.MaterialData mat)
        {
            Material m = new Material();

            m.Flags            = (MaterialFlags)mat.IsVisable;
            m.Name             = mat.Name;
            m.TextureRefs      = new List <TextureRef>();
            m.RenderInfos      = new List <RenderInfo>();
            m.Samplers         = new List <Sampler>();
            m.VolatileFlags    = new byte[0];
            m.UserDatas        = new List <UserData>();
            m.ShaderParams     = new List <ShaderParam>();
            m.SamplerDict      = new ResDict();
            m.RenderInfoDict   = new ResDict();
            m.ShaderParamDict  = new ResDict();
            m.UserDataDict     = new ResDict();
            m.VolatileFlags    = new byte[0];
            m.TextureSlotArray = new long[mat.textures.Count];
            m.SamplerSlotArray = new long[mat.textures.Count];
            m.ShaderParamData  = WriteShaderParams(mat);

            int CurTex = 0;

            foreach (BFRES.MatTexture tex in mat.textures)
            {
                TextureRef texture = new TextureRef();
                texture.Name = tex.Name;
                m.TextureRefs.Add(texture);

                Sampler samp = new Sampler();
                samp.BorderColorType = tex.BorderColorType;
                samp.CompareFunc     = tex.CompareFunc;
                samp.FilterMode      = tex.FilterMode;
                samp.LODBias         = tex.LODBias;
                samp.MaxAnisotropic  = tex.MaxAnisotropic;
                samp.MaxLOD          = tex.magFilter;
                samp.MinLOD          = tex.minFilter;
                samp.WrapModeU       = (TexClamp)tex.wrapModeS;
                samp.WrapModeV       = (TexClamp)tex.wrapModeT;
                samp.WrapModeW       = (TexClamp)tex.wrapModeW;

                m.Samplers.Add(samp);

                m.SamplerDict.Add(tex.SamplerName);

                m.TextureSlotArray[CurTex] = -1;
                m.SamplerSlotArray[CurTex] = -1;

                CurTex++;
            }

            int CurParam = 0;

            foreach (var prm in mat.matparam)
            {
                ShaderParam shaderParam = new ShaderParam();
                shaderParam.Name          = prm.Key;
                shaderParam.Type          = (ShaderParamType)prm.Value.Type;
                shaderParam.DependIndex   = (ushort)CurParam;
                shaderParam.DependedIndex = (ushort)CurParam;
                shaderParam.DataOffset    = (ushort)prm.Value.DataOffset;
                CurParam++;
            }
            foreach (BFRES.RenderInfoData rnd in mat.renderinfo)
            {
                RenderInfo renderInfo = new RenderInfo();
                renderInfo.Name = rnd.Name;

                if (rnd.Type == Syroot.NintenTools.Bfres.RenderInfoType.Int32)
                {
                    renderInfo.SetValue(rnd.Value_Ints);
                }
                if (rnd.Type == Syroot.NintenTools.Bfres.RenderInfoType.Single)
                {
                    renderInfo.SetValue(rnd.Value_Floats);
                }
                if (rnd.Type == Syroot.NintenTools.Bfres.RenderInfoType.String)
                {
                    renderInfo.SetValue(rnd.Value_Strings);
                }

                m.RenderInfos.Add(renderInfo);
            }

            ShaderAssign shaderAssign = new ShaderAssign();

            shaderAssign.ShaderArchiveName = mat.shaderassign.ShaderArchive;
            shaderAssign.ShadingModelName  = mat.shaderassign.ShaderModel;

            shaderAssign.ShaderOptionDict  = new ResDict();
            shaderAssign.AttribAssignDict  = new ResDict();
            shaderAssign.SamplerAssignDict = new ResDict();
            shaderAssign.ShaderOptions     = new List <string>();
            shaderAssign.AttribAssigns     = new List <string>();
            shaderAssign.SamplerAssigns    = new List <string>();

            foreach (var op in mat.shaderassign.options)
            {
                shaderAssign.ShaderOptionDict.Add(op.Key);
                shaderAssign.ShaderOptions.Add(op.Value);
            }
            foreach (var att in mat.shaderassign.attributes)
            {
                shaderAssign.AttribAssignDict.Add(att.Key);
                shaderAssign.AttribAssigns.Add(att.Value);
            }
            foreach (var smp in mat.shaderassign.samplers)
            {
                shaderAssign.SamplerAssignDict.Add(smp.Key);
                shaderAssign.SamplerAssigns.Add(smp.Value);
            }

            m.ShaderAssign = shaderAssign;

            return(m);
        }
Example #15
0
        public void LoadMaterial(BFRES.Mesh p)
        {
            listView1.Items.Clear();
            dataGridView3.Rows.Clear();
            dataGridView4.Rows.Clear();
            tabTextureMaps.Controls.Clear();
            TexPanelHeight = 31;

            poly = p;

            Console.WriteLine("Material Editor");
            Console.WriteLine(p.Text);


            mat                       = p.material;
            textBox1.Text             = mat.Name;
            ShaderArchivelabel1.Text += $" {mat.shaderassign.ShaderArchive}";
            ShaderMdllabel2.Text     += $" {mat.shaderassign.ShaderModel}";

            int CurParam = 0;

            foreach (var prm in mat.matparam)
            {
                string DisplayValue = "";

                //   listBox2.Items.Add(prm);
                var item = new ListViewItem(prm.Key);

                Color SetColor = Color.White;

                if (prm.Value.Type == ShaderParamType.Float)
                {
                    DisplayValue = mat.matparam[prm.Key].Value_float.ToString();
                }
                if (prm.Value.Type == ShaderParamType.Float2)
                {
                    DisplayValue = mat.matparam[prm.Key].Value_float2.ToString();
                }
                if (prm.Value.Type == ShaderParamType.Float3)
                {
                    DisplayValue = mat.matparam[prm.Key].Value_float3.ToString();

                    bool IsColor = prm.Key.Contains("Color") || prm.Key.Contains("color");

                    if (IsColor)
                    {
                        int someIntX = (int)Math.Ceiling(mat.matparam[prm.Key].Value_float3.X * 255);
                        int someIntY = (int)Math.Ceiling(mat.matparam[prm.Key].Value_float3.Y * 255);
                        int someIntZ = (int)Math.Ceiling(mat.matparam[prm.Key].Value_float3.Z * 255);

                        if (someIntX <= 255 && someIntY <= 255 && someIntZ <= 255)
                        {
                            Console.WriteLine($"{prm.Key} R {someIntX} G {someIntY} B {someIntZ}");

                            SetColor = Color.FromArgb(
                                255,
                                someIntX,
                                someIntY,
                                someIntZ
                                );
                        }
                    }
                }
                if (prm.Value.Type == ShaderParamType.Float4)
                {
                    DisplayValue = mat.matparam[prm.Key].Value_float4.ToString();



                    bool IsColor = prm.Key.Contains("Color") || prm.Key.Contains("color") || prm.Key.Contains("konst0");


                    if (IsColor)
                    {
                        Vector4 col = mat.matparam[prm.Key].Value_float4;

                        int someIntX = (int)Math.Ceiling(col.X);
                        int someIntY = (int)Math.Ceiling(col.Y);
                        int someIntZ = (int)Math.Ceiling(col.Z);

                        if (mat.shaderassign.ShaderArchive == "uking_mat") //BOTW uses gamma correction
                        {
                            someIntX = MathHelper.Clamp((int)((255.0 * System.Math.Pow(255.0, 1.0 / mat.matparam[prm.Key].Value_float4.X)) + 0.5), 255, 0);
                            someIntY = MathHelper.Clamp((int)((255.0 * System.Math.Pow(255.0, 1.0 / mat.matparam[prm.Key].Value_float4.Y)) + 0.5), 255, 0);
                            someIntZ = MathHelper.Clamp((int)((255.0 * System.Math.Pow(255.0, 1.0 / mat.matparam[prm.Key].Value_float4.Z)) + 0.5), 255, 0);
                        }



                        if (someIntX <= 255 && someIntY <= 255 && someIntZ <= 255)
                        {
                            Console.WriteLine($"{prm.Key} R {someIntX} G {someIntY} B {someIntZ}");

                            SetColor = Color.FromArgb(
                                255,
                                someIntX,
                                someIntY,
                                someIntZ
                                );
                        }
                    }
                }

                item.UseItemStyleForSubItems = false;
                item.SubItems.Add(DisplayValue);
                item.SubItems.Add("");
                item.SubItems[2].BackColor = SetColor;
                listView1.View             = View.Details;
                listView1.Items.Add(item);
                CurParam++;
            }
            il.ImageSize             = new Size(10, 10);
            listView1.SmallImageList = il;
            listView1.FullRowSelect  = true;

            foreach (var rnd in mat.renderinfo)
            {
                if (rnd.Type == RenderInfoType.Int32)
                {
                    dataGridView4.Rows.Add(rnd.Name, rnd.Value_Int.ToString(), "Int");
                }
                if (rnd.Type == RenderInfoType.Single)
                {
                    dataGridView4.Rows.Add(rnd.Name, rnd.Value_Float.ToString(), "Float");
                }
                if (rnd.Type == RenderInfoType.String)
                {
                    dataGridView4.Rows.Add(rnd.Name, rnd.Value_String.ToString(), "String");
                }
            }

            foreach (var op in mat.shaderassign.options)
            {
                dataGridView3.Rows.Add(op.Key, op.Value);
            }

            Panel[]  arr    = new Panel[mat.textures.Count];
            Button[] Btnarr = new Button[mat.textures.Count];
            picboxArray = new PictureBox[mat.textures.Count];

            if (BFRES.IsSwitchBFRES == true)
            {
                foreach (BRTI tex in BNTX.textures)
                {
                    foreach (var texure in mat.textures)
                    {
                        if (tex.Text == texure.Name)
                        {
                            Bitmap bmp = textureRGBA(tex.texture, tex.display);

                            SetTexturePanel(bmp, texure);
                        }
                    }
                }
            }
            else
            {
                foreach (var texure in mat.textures)
                {
                    if (BFRES.FTEXtextures.ContainsKey(texure.Name))
                    {
                        Bitmap bmp = FTEXRGBA(BFRES.FTEXtextures[texure.Name].texture, BFRES.FTEXtextures[texure.Name].texture.display);

                        SetTexturePanel(bmp, texure);
                    }
                }
            }
        }