Rewrite all the texture modes to use proper enums

This commit is contained in:
KillzXGaming 2019-08-03 15:23:05 -04:00
parent db065e1c57
commit 1ab2164339
27 changed files with 225 additions and 158 deletions

Binary file not shown.

View file

@ -85,43 +85,35 @@ namespace FirstPlugin
switch (TextureMapInfo.WrapU)
{
case PICATextureWrap.Repeat: tex1.wrapModeS = 0; break;
case PICATextureWrap.Mirror: tex1.wrapModeS = 1; break;
case PICATextureWrap.ClampToEdge: tex1.wrapModeS = 2; break;
case PICATextureWrap.ClampToBorder: tex1.wrapModeS = 2; break;
case PICATextureWrap.Repeat: tex1.WrapModeS = STTextureWrapMode.Repeat; break;
case PICATextureWrap.Mirror: tex1.WrapModeS = STTextureWrapMode.Mirror; break;
case PICATextureWrap.ClampToEdge: tex1.WrapModeS = STTextureWrapMode.Clamp; break;
case PICATextureWrap.ClampToBorder: tex1.WrapModeS = STTextureWrapMode.Clamp; break;
}
switch (TextureMapInfo.WrapV)
{
case PICATextureWrap.Repeat: tex1.wrapModeT = 0; break;
case PICATextureWrap.Mirror: tex1.wrapModeT = 1; break;
case PICATextureWrap.ClampToEdge: tex1.wrapModeT = 2; break;
case PICATextureWrap.ClampToBorder: tex1.wrapModeT = 2; break;
case PICATextureWrap.Repeat: tex1.WrapModeT = STTextureWrapMode.Repeat; break;
case PICATextureWrap.Mirror: tex1.WrapModeT = STTextureWrapMode.Mirror; break;
case PICATextureWrap.ClampToEdge: tex1.WrapModeT = STTextureWrapMode.Clamp; break;
case PICATextureWrap.ClampToBorder: tex1.WrapModeT = STTextureWrapMode.Clamp; break;
}
switch (TextureMapInfo.MagFilter)
{
case PICATextureFilter.Linear: tex1.magFilter = 0; break;
case PICATextureFilter.Nearest: tex1.magFilter = 1; break;
case PICATextureFilter.Linear: tex1.MagFilter = STTextureMagFilter.Linear; break;
case PICATextureFilter.Nearest: tex1.MagFilter = STTextureMagFilter.Nearest; break;
}
switch (TextureMapInfo.MinFilter)
{
case PICATextureFilter.Linear: tex1.minFilter = 0; break;
case PICATextureFilter.Nearest: tex1.minFilter = 1; break;
case PICATextureFilter.Linear: tex1.MagFilter = STTextureMagFilter.Linear; break;
case PICATextureFilter.Nearest: tex1.MagFilter = STTextureMagFilter.Nearest; break;
}
switch (TextureMapInfo.MipFilter)
{
case PICATextureFilter.Linear: tex1.mipDetail = 0; break;
case PICATextureFilter.Nearest: tex1.mipDetail = 1; break;
}
switch (TextureMapInfo.WrapV)
{
case PICATextureWrap.Repeat: tex1.wrapModeT = 0; break;
case PICATextureWrap.Mirror: tex1.wrapModeT = 1; break;
case PICATextureWrap.ClampToEdge: tex1.wrapModeT = 2; break;
case PICATextureWrap.ClampToBorder: tex1.wrapModeT = 2; break;
case PICATextureFilter.Linear: tex1.MagFilter = STTextureMagFilter.Linear; break;
case PICATextureFilter.Nearest: tex1.MagFilter = STTextureMagFilter.Nearest; break;
}

View file

@ -983,8 +983,8 @@ namespace Bfres.Structs
//Note we can't add/remove samplers so we must fill these slots
foreach (var t in fmat.TextureMaps)
{
t.wrapModeS = 0;
t.wrapModeT = 0;
t.WrapModeS = STTextureWrapMode.Repeat;
t.WrapModeT = STTextureWrapMode.Repeat;
switch (t.Type)
{
@ -1076,9 +1076,9 @@ namespace Bfres.Structs
if (t.Type == tex.Type)
{
t.Name = tex.Name;
t.wrapModeS = tex.wrapModeS;
t.wrapModeT = tex.wrapModeT;
t.wrapModeW = tex.wrapModeW;
t.WrapModeS = tex.WrapModeS;
t.WrapModeT = tex.WrapModeT;
t.WrapModeW = tex.WrapModeW;
t.Type = tex.Type;
}
}

View file

@ -791,7 +791,7 @@ namespace Bfres.Structs
texSampler.LodBias = matTex.BiasLod;
texSampler.MaxLod = matTex.MaxLod;
texSampler.MinLod = matTex.minFilter;
texSampler.MinLod = matTex.MinLod;
return texSampler;
}

View file

@ -690,19 +690,19 @@ namespace FirstPlugin
MatTexture texture = new MatTexture();
texture.switchSampler = mat.Samplers[id];
texture.wrapModeS = (int)mat.Samplers[id].WrapModeU;
texture.wrapModeT = (int)mat.Samplers[id].WrapModeV;
texture.wrapModeW = (int)mat.Samplers[id].WrapModeW;
texture.WrapModeS = (STTextureWrapMode)mat.Samplers[id].WrapModeU;
texture.WrapModeT = (STTextureWrapMode)mat.Samplers[id].WrapModeV;
texture.WrapModeW = (STTextureWrapMode)mat.Samplers[id].WrapModeW;
texture.SamplerName = mat.SamplerDict.GetKey(id);
if (mat.Samplers[id].ShrinkXY == Sampler.ShrinkFilterModes.Points)
texture.minFilter = 1;
texture.MinFilter = STTextureMinFilter.Nearest;
else
texture.minFilter = 0;
texture.MinFilter = STTextureMinFilter.Linear;
if (mat.Samplers[id].ExpandXY == Sampler.ExpandFilterModes.Points)
texture.magFilter = 1;
texture.MagFilter = STTextureMagFilter.Nearest;
else
texture.magFilter = 0;
texture.MagFilter = STTextureMagFilter.Linear;
string useSampler = texture.SamplerName;

View file

@ -474,9 +474,9 @@ namespace FirstPlugin
texture.MaxLod = mat.Samplers[id].TexSampler.MaxLod;
texture.BiasLod = mat.Samplers[id].TexSampler.LodBias;
texture.wrapModeS = (int)mat.Samplers[id].TexSampler.ClampX;
texture.wrapModeT = (int)mat.Samplers[id].TexSampler.ClampY;
texture.wrapModeW = (int)mat.Samplers[id].TexSampler.ClampZ;
texture.WrapModeS = (STTextureWrapMode)mat.Samplers[id].TexSampler.ClampX;
texture.WrapModeT = (STTextureWrapMode)mat.Samplers[id].TexSampler.ClampY;
texture.WrapModeW = (STTextureWrapMode)mat.Samplers[id].TexSampler.ClampZ;
mat.Samplers.TryGetKey(mat.Samplers[id], out texture.SamplerName);
string useSampler = texture.SamplerName;
@ -487,13 +487,13 @@ namespace FirstPlugin
if (mat.Samplers[id].TexSampler.MinFilter == GX2TexXYFilterType.Point)
texture.minFilter = 1;
texture.MinFilter = STTextureMinFilter.Nearest;
if (mat.Samplers[id].TexSampler.MagFilter == GX2TexXYFilterType.Point)
texture.magFilter = 1;
texture.MagFilter = STTextureMagFilter.Nearest;
if (mat.Samplers[id].TexSampler.MinFilter == GX2TexXYFilterType.Bilinear)
texture.minFilter = 0;
texture.MinFilter = STTextureMinFilter.Linear;
if (mat.Samplers[id].TexSampler.MagFilter == GX2TexXYFilterType.Bilinear)
texture.magFilter = 0;
texture.MagFilter = STTextureMagFilter.Linear;
if (Runtime.activeGame == Runtime.ActiveGame.MK8D)
{

View file

@ -41,10 +41,10 @@ namespace FirstPlugin
matTexture.Type = STGenericMatTexture.TextureType.Diffuse;
matTexture.textureUnit = textureUnit++;
matTexture.wrapModeS = (int)GXToOpenGL.GetWrapMode(ParentModel.Textures[texIndex].WrapS);
matTexture.wrapModeT = (int)GXToOpenGL.GetWrapMode(ParentModel.Textures[texIndex].WrapT);
matTexture.minFilter = (int)GXToOpenGL.GetMinFilter(ParentModel.Textures[texIndex].MinFilter);
matTexture.magFilter = (int)GXToOpenGL.GetMinFilter(ParentModel.Textures[texIndex].MagFilter);
matTexture.WrapModeS = (STTextureWrapMode)GXToOpenGL.GetWrapMode(ParentModel.Textures[texIndex].WrapS);
matTexture.WrapModeT = (STTextureWrapMode)GXToOpenGL.GetWrapMode(ParentModel.Textures[texIndex].WrapT);
matTexture.MinFilter = (STTextureMinFilter)GXToOpenGL.GetMinFilter(ParentModel.Textures[texIndex].MinFilter);
matTexture.MagFilter = (STTextureMagFilter)GXToOpenGL.GetMinFilter(ParentModel.Textures[texIndex].MagFilter);
TextureMaps.Add(matTexture);

View file

@ -270,8 +270,8 @@ namespace FirstPlugin
STGenericMatTexture matTexture = new STGenericMatTexture();
matTexture.Name = textureMap.Name;
matTexture.textureUnit = textureUnit++;
matTexture.wrapModeS = 1;
matTexture.wrapModeT = 0;
matTexture.WrapModeS = STTextureWrapMode.Mirror;
matTexture.WrapModeT = STTextureWrapMode.Repeat;
if (textureMap.Effect == "Col0Tex")
{

View file

@ -203,10 +203,8 @@ namespace FirstPlugin
{
if (tex.TextureIndex != -1)
{
CMBTextureMapWrapper matTexture = new CMBTextureMapWrapper();
CMBTextureMapWrapper matTexture = new CMBTextureMapWrapper(tex);
matTexture.TextureIndex = tex.TextureIndex;
matTexture.wrapModeS = tex.WrapS;
matTexture.wrapModeT = tex.WrapT;
material.TextureMaps.Add(matTexture);
if (tex.TextureIndex < Renderer.TextureList.Count && tex.TextureIndex >= 0)
@ -390,6 +388,54 @@ namespace FirstPlugin
public class CMBTextureMapWrapper : STGenericMatTexture
{
public int TextureIndex { get; set; }
public TextureMap TextureMapData;
public CMBTextureMapWrapper(TextureMap texMap)
{
TextureMapData = texMap;
this.WrapModeS = ConvertWrapMode(TextureMapData.WrapS);
this.WrapModeT = ConvertWrapMode(TextureMapData.WrapT);
this.MinFilter = ConvertMinFilterMode(TextureMapData.MinFiler);
this.MagFilter = ConvertMagFilterMode(TextureMapData.MagFiler);
}
private STTextureMinFilter ConvertMinFilterMode(ushort PicaFilterMode)
{
switch ((TextureFilter)PicaFilterMode)
{
case TextureFilter.LINEAR: return STTextureMinFilter.Linear;
case TextureFilter.LINEAR_MIPMAP_LINEAR: return STTextureMinFilter.LinearMipMapNearest;
case TextureFilter.LINEAR_MIPMAP_NEAREST: return STTextureMinFilter.NearestMipmapLinear;
case TextureFilter.NEAREST: return STTextureMinFilter.Nearest;
case TextureFilter.NEAREST_MIPMAP_LINEAR: return STTextureMinFilter.NearestMipmapLinear;
case TextureFilter.NEAREST_MIPMAP_NEAREST: return STTextureMinFilter.NearestMipmapNearest;
default: return 0;
}
}
private STTextureMagFilter ConvertMagFilterMode(ushort PicaFilterMode)
{
switch ((TextureFilter)PicaFilterMode)
{
case TextureFilter.LINEAR: return STTextureMagFilter.Linear;
case TextureFilter.NEAREST: return STTextureMagFilter.Nearest;
default: return 0;
}
}
private STTextureWrapMode ConvertWrapMode(ushort PicaWrapMode)
{
switch ((CMBTextureWrapMode)PicaWrapMode)
{
case CMBTextureWrapMode.REPEAT: return STTextureWrapMode.Repeat;
case CMBTextureWrapMode.MIRRORED_REPEAT: return STTextureWrapMode.Mirror;
case CMBTextureWrapMode.CLAMP: return STTextureWrapMode.Clamp;
case CMBTextureWrapMode.CLAMP_TO_EDGE: return STTextureWrapMode.Clamp;
default: return STTextureWrapMode.Repeat;
}
}
}
public class CmbMeshWrapper : GenericRenderedObject

View file

@ -50,7 +50,7 @@ namespace Grezzo.CmbEnums
SMOOTH_SKINNING = 0x02,
}
public enum TextureWrapMode
public enum CMBTextureWrapMode
{
CLAMP = 0x2900,
REPEAT = 0x2901,

View file

@ -275,10 +275,10 @@ namespace FirstPlugin
{
// GL.ActiveTexture(TextureUnit.Texture0 + texid);
GL.BindTexture(TextureTarget.Texture2D, texid);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[tex.wrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[tex.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[tex.minFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[tex.magFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[tex.WrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[tex.WrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[tex.MinFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[tex.MagFilter]);
GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f);
}

View file

@ -704,10 +704,10 @@ namespace FirstPlugin
// GL.ActiveTexture(TextureUnit.Texture0 + texid);
GL.BindTexture(TextureTarget.Texture2D, texture.RenderableTex.TexID);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)MatTexture.wrapmode[tex.wrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)MatTexture.wrapmode[tex.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)MatTexture.minfilter[tex.minFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)MatTexture.magfilter[tex.magFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)MatTexture.wrapmode[tex.WrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)MatTexture.wrapmode[tex.WrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)MatTexture.minfilter[tex.MinFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)MatTexture.magfilter[tex.MagFilter]);
GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f);
}
private void DrawModel(FSHP m, FMDL mdl, SF.Shader shader, bool ModelSelected)

View file

@ -376,10 +376,10 @@ namespace FirstPlugin
// GL.ActiveTexture(TextureUnit.Texture0 + texid);
GL.BindTexture(TextureTarget.Texture2D, texture.RenderableTex.TexID);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[tex.wrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[tex.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[tex.minFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[tex.magFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[tex.WrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[tex.WrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[tex.MinFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[tex.MagFilter]);
GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f);
}

View file

@ -112,12 +112,10 @@ namespace FirstPlugin.Forms
TextureMap.UVScale = Utils.ToVec4(material.matparam["gsys_bake_st1"].ValueFloat).Xy;
TextureMap.UVTranslate = Utils.ToVec4(material.matparam["gsys_bake_st1"].ValueFloat).Zw;
}
TextureMap.wrapModeS = texmap.wrapModeS;
TextureMap.wrapModeT = texmap.wrapModeT;
TextureMap.mipDetail = texmap.mipDetail;
TextureMap.minFilter = texmap.minFilter;
TextureMap.magFilter = texmap.mapMode;
TextureMap.mapMode = texmap.mapMode;
TextureMap.WrapModeS = texmap.WrapModeS;
TextureMap.WrapModeT = texmap.WrapModeT;
TextureMap.MinFilter = texmap.MinFilter;
TextureMap.MagFilter = texmap.MagFilter;
TextureMap.texture = genericTexture;
return TextureMap;

View file

@ -417,9 +417,9 @@ namespace FirstPlugin.Forms
tex.FragShaderSampler = "_a1";
tex.Name = "Untitled";
tex.Type = Toolbox.Library.STGenericMatTexture.TextureType.Unknown;
tex.wrapModeS = 0;
tex.wrapModeT = 0;
tex.wrapModeW = 2;
tex.WrapModeS = Toolbox.Library.STTextureWrapMode.Repeat;
tex.WrapModeT = Toolbox.Library.STTextureWrapMode.Repeat;
tex.WrapModeW = Toolbox.Library.STTextureWrapMode.Clamp;
if (material.GetResFileU() != null)
{

View file

@ -187,51 +187,51 @@ namespace FirstPlugin.Forms
if (ActiveMatTexture.wiiUSampler != null)
{
ActiveMatTexture.wrapModeS = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampX);
ActiveMatTexture.wrapModeT = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampY);
ActiveMatTexture.wrapModeW = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampZ);
ActiveMatTexture.WrapModeS = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampX);
ActiveMatTexture.WrapModeT = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampY);
ActiveMatTexture.WrapModeW = SetWrapMode((int)ActiveMatTexture.wiiUSampler.ClampZ);
if (ActiveMatTexture.wiiUSampler.MinFilter == ResUGX2.GX2TexXYFilterType.Point)
ActiveMatTexture.minFilter = 1;
ActiveMatTexture.MinFilter = STTextureMinFilter.Nearest;
if (ActiveMatTexture.wiiUSampler.MagFilter == ResUGX2.GX2TexXYFilterType.Point)
ActiveMatTexture.magFilter = 1;
ActiveMatTexture.MagFilter = STTextureMagFilter.Nearest;
if (ActiveMatTexture.wiiUSampler.MinFilter == ResUGX2.GX2TexXYFilterType.Bilinear)
ActiveMatTexture.minFilter = 0;
ActiveMatTexture.MinFilter = STTextureMinFilter.Linear;
if (ActiveMatTexture.wiiUSampler.MagFilter == ResUGX2.GX2TexXYFilterType.Bilinear)
ActiveMatTexture.magFilter = 0;
ActiveMatTexture.MagFilter = STTextureMagFilter.Linear;
}
else
{
ActiveMatTexture.wrapModeS = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeU);
ActiveMatTexture.wrapModeT = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeV);
ActiveMatTexture.wrapModeW = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeW);
ActiveMatTexture.WrapModeS = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeU);
ActiveMatTexture.WrapModeT = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeV);
ActiveMatTexture.WrapModeW = SetWrapMode((int)ActiveMatTexture.switchSampler.WrapModeW);
if (ActiveMatTexture.switchSampler.ShrinkXY == ResNX.Sampler.ShrinkFilterModes.Points)
ActiveMatTexture.minFilter = 1;
ActiveMatTexture.MinFilter = STTextureMinFilter.Nearest;
if (ActiveMatTexture.switchSampler.ExpandXY == ResNX.Sampler.ExpandFilterModes.Points)
ActiveMatTexture.magFilter = 1;
ActiveMatTexture.MagFilter = STTextureMagFilter.Nearest;
if (ActiveMatTexture.switchSampler.ShrinkXY == ResNX.Sampler.ShrinkFilterModes.Linear)
ActiveMatTexture.minFilter = 0;
ActiveMatTexture.MinFilter = STTextureMinFilter.Linear;
if (ActiveMatTexture.switchSampler.ExpandXY == ResNX.Sampler.ExpandFilterModes.Linear)
ActiveMatTexture.magFilter = 0;
ActiveMatTexture.MagFilter = STTextureMagFilter.Linear;
}
LibraryGUI.UpdateViewport();
}
private int SetWrapMode(int wrapMode)
private STTextureWrapMode SetWrapMode(int wrapMode)
{
switch (wrapMode)
{
case (int)ResNX.GFX.TexClamp.Repeat:
return 0;
return STTextureWrapMode.Repeat;
case (int)ResNX.GFX.TexClamp.Mirror:
return 1;
return STTextureWrapMode.Mirror;
case (int)ResNX.GFX.TexClamp.Clamp:
case (int)ResNX.GFX.TexClamp.ClampToEdge:
return 2;
return STTextureWrapMode.Clamp;
default:
return 2;
return STTextureWrapMode.Clamp;
}
}
@ -368,9 +368,9 @@ namespace FirstPlugin.Forms
tex.FragShaderSampler = "_a0";
tex.Name = "Untitled";
tex.Type = Toolbox.Library.STGenericMatTexture.TextureType.Unknown;
tex.wrapModeS = 0;
tex.wrapModeT = 0;
tex.wrapModeW = 2;
tex.WrapModeS = STTextureWrapMode.Repeat;
tex.WrapModeT = STTextureWrapMode.Repeat;
tex.WrapModeW = STTextureWrapMode.Clamp;
if (material.GetResFileU() != null)
{

View file

@ -77,33 +77,34 @@ namespace FirstPlugin.Forms
{
if (ActiveMatTexture.wiiUSampler != null)
{
ActiveMatTexture.wrapModeS = (int)ActiveMatTexture.wiiUSampler.ClampX;
ActiveMatTexture.wrapModeT = (int)ActiveMatTexture.wiiUSampler.ClampY;
ActiveMatTexture.wrapModeW = (int)ActiveMatTexture.wiiUSampler.ClampZ;
ActiveMatTexture.WrapModeS = (STTextureWrapMode)ActiveMatTexture.wiiUSampler.ClampX;
ActiveMatTexture.WrapModeT = (STTextureWrapMode)ActiveMatTexture.wiiUSampler.ClampY;
ActiveMatTexture.WrapModeW = (STTextureWrapMode)ActiveMatTexture.wiiUSampler.ClampZ;
if (ActiveMatTexture.wiiUSampler.MinFilter == ResUGX2.GX2TexXYFilterType.Point)
ActiveMatTexture.minFilter = 1;
ActiveMatTexture.MinFilter = STTextureMinFilter.Nearest;
if (ActiveMatTexture.wiiUSampler.MagFilter == ResUGX2.GX2TexXYFilterType.Point)
ActiveMatTexture.magFilter = 1;
ActiveMatTexture.MagFilter = STTextureMagFilter.Nearest;
if (ActiveMatTexture.wiiUSampler.MinFilter == ResUGX2.GX2TexXYFilterType.Bilinear)
ActiveMatTexture.minFilter = 0;
ActiveMatTexture.MinFilter = STTextureMinFilter.Linear;
if (ActiveMatTexture.wiiUSampler.MagFilter == ResUGX2.GX2TexXYFilterType.Bilinear)
ActiveMatTexture.magFilter = 0;
ActiveMatTexture.MagFilter = STTextureMagFilter.Linear;
}
else
{
ActiveMatTexture.wrapModeS = (int)ActiveMatTexture.switchSampler.WrapModeU;
ActiveMatTexture.wrapModeT = (int)ActiveMatTexture.switchSampler.WrapModeV;
ActiveMatTexture.wrapModeW = (int)ActiveMatTexture.switchSampler.WrapModeW;
ActiveMatTexture.WrapModeS = (STTextureWrapMode)ActiveMatTexture.switchSampler.WrapModeU;
ActiveMatTexture.WrapModeT = (STTextureWrapMode)ActiveMatTexture.switchSampler.WrapModeV;
ActiveMatTexture.WrapModeW = (STTextureWrapMode)ActiveMatTexture.switchSampler.WrapModeW;
if (ActiveMatTexture.switchSampler.ShrinkXY == Sampler.ShrinkFilterModes.Points)
ActiveMatTexture.minFilter = 1;
ActiveMatTexture.MinFilter = STTextureMinFilter.Nearest;
if (ActiveMatTexture.switchSampler.ExpandXY == Sampler.ExpandFilterModes.Points)
ActiveMatTexture.magFilter = 1;
ActiveMatTexture.MagFilter = STTextureMagFilter.Nearest;
if (ActiveMatTexture.switchSampler.ShrinkXY == Sampler.ShrinkFilterModes.Linear)
ActiveMatTexture.minFilter = 0;
ActiveMatTexture.MinFilter = STTextureMinFilter.Linear;
if (ActiveMatTexture.switchSampler.ExpandXY == Sampler.ExpandFilterModes.Linear)
ActiveMatTexture.magFilter = 0;
ActiveMatTexture.MagFilter = STTextureMagFilter.Linear;
}
LibraryGUI.UpdateViewport();

View file

@ -404,27 +404,27 @@ namespace Toolbox.Library
}
matTex.Name = System.IO.Path.GetFileNameWithoutExtension(tex.FilePath);
matTex.wrapModeS = SetWrapMode(tex.WrapModeU);
matTex.wrapModeT = SetWrapMode(tex.WrapModeV);
matTex.WrapModeS = SetWrapMode(tex.WrapModeU);
matTex.WrapModeT = SetWrapMode(tex.WrapModeV);
STConsole.WriteLine($"Getting assimp texture slot {matTex.Name} Type {matTex.Type}");
return matTex;
}
private int SetWrapMode(TextureWrapMode wrap)
private STTextureWrapMode SetWrapMode(TextureWrapMode wrap)
{
switch (wrap)
{
case TextureWrapMode.Wrap:
return 0;
return STTextureWrapMode.Repeat;
case TextureWrapMode.Mirror:
return 1;
return STTextureWrapMode.Mirror;
case TextureWrapMode.Clamp:
return 2;
return STTextureWrapMode.Clamp;
case TextureWrapMode.Decal:
return 0;
return STTextureWrapMode.Repeat;
default:
return 0;
return STTextureWrapMode.Repeat;
}
}

View file

@ -556,7 +556,7 @@ namespace Toolbox.Library
continue;
TextureSlot slot2 = new TextureSlot(path, ConvertToAssimpTextureType(tex.Type), 0, TextureMapping.FromUV,
0, 1.0f, Assimp.TextureOperation.Add, ConvertToAssimpWrapType(tex.wrapModeS), ConvertToAssimpWrapType(tex.wrapModeT), 0);
0, 1.0f, Assimp.TextureOperation.Add, ConvertToAssimpWrapType(tex.WrapModeS), ConvertToAssimpWrapType(tex.WrapModeT), 0);
material.AddMaterialTexture(ref slot2);
}
@ -565,13 +565,13 @@ namespace Toolbox.Library
}
private static Assimp.TextureWrapMode ConvertToAssimpWrapType(int type)
private static Assimp.TextureWrapMode ConvertToAssimpWrapType(STTextureWrapMode type)
{
switch (type)
{
case 0: return TextureWrapMode.Wrap;
case 1: return TextureWrapMode.Mirror;
case 2: return TextureWrapMode.Clamp;
case STTextureWrapMode.Repeat: return TextureWrapMode.Wrap;
case STTextureWrapMode.Mirror: return TextureWrapMode.Mirror;
case STTextureWrapMode.Clamp: return TextureWrapMode.Clamp;
default:
return TextureWrapMode.Wrap;
}

View file

@ -34,11 +34,14 @@ namespace Toolbox.Library.Forms
public STGenericTexture texture;
public int UvChannelIndex;
public int mapMode = 0;
public int wrapModeS = 1;
public int wrapModeT = 1;
public int minFilter = 3;
public int magFilter = 2;
public int mipDetail = 6;
public STTextureWrapMode WrapModeS = STTextureWrapMode.Repeat;
public STTextureWrapMode WrapModeT = STTextureWrapMode.Repeat;
public STTextureWrapMode WrapModeW = STTextureWrapMode.Clamp;
public STTextureMinFilter MinFilter = STTextureMinFilter.Linear;
public STTextureMagFilter MagFilter = STTextureMagFilter.Linear;
public uint texWidth = 0;
public uint texHeight = 0;
}
@ -277,12 +280,12 @@ namespace Toolbox.Library.Forms
//Draws a textured plan for our uvs to show on
GL.Enable(EnableCap.Texture2D);
GL.BindTexture(TextureTarget.Texture2D, texid);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)STGenericMatTexture.wrapmode[activeTexture.WrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)STGenericMatTexture.wrapmode[activeTexture.WrapModeT]);
// GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[activeTexture.wrapModeS]);
// GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[activeTexture.minFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[activeTexture.magFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[activeTexture.MinFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[activeTexture.MagFilter]);
}

View file

@ -335,13 +335,13 @@ namespace Toolbox.Library.Forms.test
private void DrawTexturedPlane(float scale, uint TextureWidth, uint TextureHeight)
{
//Draws a textured plan for our uvs to show on
GL.Enable(EnableCap.Texture2D);
/* GL.Enable(EnableCap.Texture2D);
GL.BindTexture(TextureTarget.Texture2D, texid);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[activeTexture.minFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[activeTexture.magFilter]);
*/
float HalfWidth = (float)gL_ControlLegacy2D1.Width / 2.0f;
float HalfHeight = (float)gL_ControlLegacy2D1.Height / 2.0f;

View file

@ -7,15 +7,38 @@ using OpenTK.Graphics.OpenGL;
namespace Toolbox.Library
{
public enum STTextureWrapMode
{
Repeat,
Mirror,
Clamp,
}
public enum STTextureMagFilter
{
Nearest,
Linear,
}
public enum STTextureMinFilter
{
LinearMipMapNearest,
Nearest,
Linear,
NearestMipmapLinear,
NearestMipmapNearest,
}
public class STGenericMatTexture
{
public int mapMode = 0;
public int wrapModeS = 1;
public int wrapModeT = 1;
public int wrapModeW = 1; //Used for 3D textures
public int minFilter = 3;
public int magFilter = 2;
public int mipDetail = 6;
public STTextureWrapMode WrapModeS = STTextureWrapMode.Repeat;
public STTextureWrapMode WrapModeT = STTextureWrapMode.Repeat;
public STTextureWrapMode WrapModeW = STTextureWrapMode.Clamp;
public STTextureMinFilter MinFilter = STTextureMinFilter.Linear;
public STTextureMagFilter MagFilter = STTextureMagFilter.Linear;
public string Name;
public string SamplerName;
public int textureUnit;
@ -56,24 +79,28 @@ namespace Toolbox.Library
SubSurfaceScattering = 15,
}
public static readonly Dictionary<int, TextureMinFilter> minfilter = new Dictionary<int, TextureMinFilter>()
public static readonly Dictionary<STTextureMinFilter, TextureMinFilter> minfilter = new Dictionary<STTextureMinFilter, TextureMinFilter>()
{
{ 0x00, TextureMinFilter.LinearMipmapLinear},
{ 0x01, TextureMinFilter.Nearest},
{ 0x02, TextureMinFilter.Linear},
{ 0x03, TextureMinFilter.NearestMipmapLinear},
{ STTextureMinFilter.LinearMipMapNearest, TextureMinFilter.LinearMipmapLinear},
{ STTextureMinFilter.Nearest, TextureMinFilter.Nearest},
{ STTextureMinFilter.Linear, TextureMinFilter.Linear},
{ STTextureMinFilter.NearestMipmapLinear, TextureMinFilter.NearestMipmapLinear},
{ STTextureMinFilter.NearestMipmapNearest, TextureMinFilter.NearestMipmapNearest},
};
public static readonly Dictionary<int, TextureMagFilter> magfilter = new Dictionary<int, TextureMagFilter>()
public static readonly Dictionary<STTextureMagFilter, TextureMagFilter> magfilter = new Dictionary<STTextureMagFilter, TextureMagFilter>()
{
{ 0x00, TextureMagFilter.Linear},
{ 0x01, TextureMagFilter.Nearest},
{ 0x02, TextureMagFilter.Linear}
{ STTextureMagFilter.Linear, TextureMagFilter.Linear},
{ STTextureMagFilter.Nearest, TextureMagFilter.Nearest},
{ (STTextureMagFilter)3, TextureMagFilter.Linear},
};
public static Dictionary<int, TextureWrapMode> wrapmode = new Dictionary<int, TextureWrapMode>(){
{ 0x00, TextureWrapMode.Repeat},
{ 0x01, TextureWrapMode.MirroredRepeat},
{ 0x02, TextureWrapMode.ClampToEdge},
{ 0x03, TextureWrapMode.MirroredRepeat},
public static Dictionary<STTextureWrapMode, TextureWrapMode> wrapmode = new Dictionary<STTextureWrapMode, TextureWrapMode>(){
{ STTextureWrapMode.Repeat, TextureWrapMode.Repeat},
{ STTextureWrapMode.Mirror, TextureWrapMode.MirroredRepeat},
{ STTextureWrapMode.Clamp, TextureWrapMode.ClampToEdge},
{ (STTextureWrapMode)3, TextureWrapMode.ClampToEdge},
{ (STTextureWrapMode)4, TextureWrapMode.ClampToEdge},
{ (STTextureWrapMode)5, TextureWrapMode.ClampToEdge},
};
}
}

View file

@ -362,10 +362,10 @@ namespace Toolbox.Library.Rendering
// GL.ActiveTexture(TextureUnit.Texture0 + texid);
GL.BindTexture(TextureTarget.Texture2D, texture.RenderableTex.TexID);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)tex.wrapModeS);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)tex.wrapModeT);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)tex.minFilter);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)tex.magFilter);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[tex.WrapModeS]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[tex.WrapModeT]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[tex.MinFilter]);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[tex.MagFilter]);
GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f);
}

View file

@ -258,7 +258,7 @@
<Compile Include="Rendering\GenericModelRenderer\GenericRenderedObject.cs" />
<Compile Include="Security\Cryptography\crc32.cs" />
<Compile Include="DrawableContainer.cs" />
<Compile Include="FileFormats\3DS\ETC1.cs" />
<Compile Include="Texture Decoding\3DS\ETC1.cs" />
<Compile Include="FileFormats\Animation\SMD.cs" />
<Compile Include="FileFormats\APNG\APNG.cs" />
<Compile Include="FileFormats\APNG\CRC.cs" />