mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-29 16:00:32 +00:00
CMB model previewing and parsing
This commit is contained in:
parent
894e53ea07
commit
f06cfbd053
12 changed files with 1161 additions and 26 deletions
Binary file not shown.
|
@ -254,10 +254,16 @@ namespace FirstPlugin
|
||||||
node.Nodes.Insert(index, NewNode);
|
node.Nodes.Insert(index, NewNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static byte[] GetASSTData(FileEntry entry)
|
public static byte[] GetASSTData(FileEntry entry)
|
||||||
{
|
{
|
||||||
|
return entry.CompressedData;
|
||||||
|
|
||||||
if (entry.IsCompressed)
|
if (entry.IsCompressed)
|
||||||
|
{
|
||||||
return STLibraryCompression.ZSTD.Decompress(entry.CompressedData);
|
return STLibraryCompression.ZSTD.Decompress(entry.CompressedData);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return entry.CompressedData;
|
return entry.CompressedData;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,8 @@ using OpenTK;
|
||||||
|
|
||||||
namespace FirstPlugin
|
namespace FirstPlugin
|
||||||
{
|
{
|
||||||
public class BMD : TreeNodeFile, IFileFormat, IContextMenuNode, ITextureContainer, ITextureIconLoader
|
public class BMD : TreeNodeFile, IFileFormat, IContextMenuNode, ITextureContainer
|
||||||
{
|
{
|
||||||
public List<STGenericTexture> IconTextureList { get; set; }
|
|
||||||
|
|
||||||
public FileType FileType { get; set; } = FileType.Layout;
|
public FileType FileType { get; set; } = FileType.Layout;
|
||||||
|
|
||||||
public bool CanSave { get; set; }
|
public bool CanSave { get; set; }
|
||||||
|
@ -117,7 +115,6 @@ namespace FirstPlugin
|
||||||
DrawableContainer.Drawables.Add(Skeleton);
|
DrawableContainer.Drawables.Add(Skeleton);
|
||||||
|
|
||||||
Textures = new Dictionary<string, STGenericTexture>();
|
Textures = new Dictionary<string, STGenericTexture>();
|
||||||
IconTextureList = new List<STGenericTexture>();
|
|
||||||
|
|
||||||
BMD_Renderer.TextureContainers.Add(this);
|
BMD_Renderer.TextureContainers.Add(this);
|
||||||
|
|
||||||
|
@ -278,7 +275,6 @@ namespace FirstPlugin
|
||||||
var texWrapper = new BMDTextureWrapper(BMDFile.Textures.Textures[i]);
|
var texWrapper = new BMDTextureWrapper(BMDFile.Textures.Textures[i]);
|
||||||
TextureFolder.Nodes.Add(texWrapper);
|
TextureFolder.Nodes.Add(texWrapper);
|
||||||
Renderer.TextureList.Add(texWrapper);
|
Renderer.TextureList.Add(texWrapper);
|
||||||
IconTextureList.Add(texWrapper);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
116
File_Format_Library/FileFormats/Grezzo/CMB_Enums.cs
Normal file
116
File_Format_Library/FileFormats/Grezzo/CMB_Enums.cs
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Grezzo.CmbEnums
|
||||||
|
{
|
||||||
|
//All enums from
|
||||||
|
//https://github.com/magcius/noclip.website/blob/master/src/oot3d/cmb.ts
|
||||||
|
public enum TextureFilter
|
||||||
|
{
|
||||||
|
NEAREST = 0x2600,
|
||||||
|
LINEAR = 0x2601,
|
||||||
|
NEAREST_MIPMAP_NEAREST = 0x2700,
|
||||||
|
LINEAR_MIPMAP_NEAREST = 0x2701,
|
||||||
|
NEAREST_MIPMAP_LINEAR = 0x2702,
|
||||||
|
LINEAR_MIPMAP_LINEAR = 0x2703,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SepdVertexAttribMode : ushort
|
||||||
|
{
|
||||||
|
ARRAY = 0,
|
||||||
|
CONSTANT = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CmbDataType : ushort
|
||||||
|
{
|
||||||
|
Byte = 0x1400,
|
||||||
|
UByte = 0x1401,
|
||||||
|
Short = 0x1402,
|
||||||
|
UShort = 0x1403,
|
||||||
|
Int = 0x1404,
|
||||||
|
UInt = 0x1405,
|
||||||
|
Float = 0x1406,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CullMode : byte
|
||||||
|
{
|
||||||
|
FRONT_AND_BACK,
|
||||||
|
BACK,
|
||||||
|
FRONT,
|
||||||
|
NONE,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SkinningMode : ushort
|
||||||
|
{
|
||||||
|
SINGLE_BONE = 0x00,
|
||||||
|
RIGID_SKINNING = 0x01,
|
||||||
|
SMOOTH_SKINNING = 0x02,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum TextureWrapMode
|
||||||
|
{
|
||||||
|
CLAMP = 0x2900,
|
||||||
|
REPEAT = 0x2901,
|
||||||
|
CLAMP_TO_EDGE = 0x812F,
|
||||||
|
MIRRORED_REPEAT = 0x8370,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CombineResultOpDMP
|
||||||
|
{
|
||||||
|
REPLACE = 0x1E01,
|
||||||
|
MODULATE = 0x2100,
|
||||||
|
ADD = 0x0104,
|
||||||
|
ADD_SIGNED = 0x8574,
|
||||||
|
INTERPOLATE = 0x8575,
|
||||||
|
SUBTRACT = 0x84E7,
|
||||||
|
DOT3_RGB = 0x86AE,
|
||||||
|
DOT3_RGBA = 0x86AF,
|
||||||
|
MULT_ADD = 0x6401,
|
||||||
|
ADD_MULT = 0x6402,
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum CombineScaleDMP
|
||||||
|
{
|
||||||
|
_1 = 0x01,
|
||||||
|
_2 = 0x02,
|
||||||
|
_4 = 0x04,
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum CombineBufferInputDMP
|
||||||
|
{
|
||||||
|
PREVIOUS = 0x8578,
|
||||||
|
PREVIOUS_BUFFER = 0x8579,
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum CombineSourceDMP
|
||||||
|
{
|
||||||
|
TEXTURE0 = 0x84C0,
|
||||||
|
TEXTURE1 = 0x84C1,
|
||||||
|
TEXTURE2 = 0x84C2,
|
||||||
|
TEXTURE3 = 0x84C3,
|
||||||
|
CONSTANT = 0x8576,
|
||||||
|
PRIMARY_COLOR = 0x8577,
|
||||||
|
PREVIOUS = 0x8578,
|
||||||
|
PREVIOUS_BUFFER = 0x8579,
|
||||||
|
FRAGMENT_PRIMARY_COLOR = 0x6210,
|
||||||
|
FRAGMENT_SECONDARY_COLOR = 0x6211,
|
||||||
|
};
|
||||||
|
|
||||||
|
public enum CombineOpDMP
|
||||||
|
{
|
||||||
|
SRC_COLOR = 0x0300,
|
||||||
|
ONE_MINUS_SRC_COLOR = 0x0301,
|
||||||
|
SRC_ALPHA = 0x0302,
|
||||||
|
ONE_MINUS_SRC_ALPHA = 0x0303,
|
||||||
|
SRC_R = 0x8580,
|
||||||
|
SRC_G = 0x8581,
|
||||||
|
SRC_B = 0x8582,
|
||||||
|
ONE_MINUS_SRC_R = 0x8583,
|
||||||
|
ONE_MINUS_SRC_G = 0x8584,
|
||||||
|
ONE_MINUS_SRC_B = 0x8585,
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -206,6 +206,7 @@
|
||||||
<Compile Include="FileFormats\Archives\ARC.cs" />
|
<Compile Include="FileFormats\Archives\ARC.cs" />
|
||||||
<Compile Include="FileFormats\Archives\GFA.cs" />
|
<Compile Include="FileFormats\Archives\GFA.cs" />
|
||||||
<Compile Include="FileFormats\Archives\LM2\LM2_Material.cs" />
|
<Compile Include="FileFormats\Archives\LM2\LM2_Material.cs" />
|
||||||
|
<Compile Include="FileFormats\Grezzo\CMB_Enums.cs" />
|
||||||
<Compile Include="FileFormats\HyruleWarriors\G1T.cs" />
|
<Compile Include="FileFormats\HyruleWarriors\G1T.cs" />
|
||||||
<Compile Include="FileFormats\HyruleWarriors\HWBinGzResource.cs" />
|
<Compile Include="FileFormats\HyruleWarriors\HWBinGzResource.cs" />
|
||||||
<Compile Include="FileFormats\Archives\IGA_PAK.cs" />
|
<Compile Include="FileFormats\Archives\IGA_PAK.cs" />
|
||||||
|
@ -278,6 +279,7 @@
|
||||||
<Compile Include="FileFormats\Texture\TPL.cs" />
|
<Compile Include="FileFormats\Texture\TPL.cs" />
|
||||||
<Compile Include="FileFormats\Rom\GCDisk.cs" />
|
<Compile Include="FileFormats\Rom\GCDisk.cs" />
|
||||||
<Compile Include="GL\BMD_Renderer.cs" />
|
<Compile Include="GL\BMD_Renderer.cs" />
|
||||||
|
<Compile Include="GL\CMB_Renderer.cs" />
|
||||||
<Compile Include="GL\GXToOpenGL.cs" />
|
<Compile Include="GL\GXToOpenGL.cs" />
|
||||||
<Compile Include="GL\LM2_Render.cs" />
|
<Compile Include="GL\LM2_Render.cs" />
|
||||||
<Compile Include="GUI\BFFNT\BffntEditor.cs">
|
<Compile Include="GUI\BFFNT\BffntEditor.cs">
|
||||||
|
|
45
File_Format_Library/GL/CMB_Renderer.cs
Normal file
45
File_Format_Library/GL/CMB_Renderer.cs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Toolbox.Library.Rendering;
|
||||||
|
using GL_EditorFramework.GL_Core;
|
||||||
|
using GL_EditorFramework.Interfaces;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics.OpenGL;
|
||||||
|
using Toolbox.Library;
|
||||||
|
|
||||||
|
namespace FirstPlugin
|
||||||
|
{
|
||||||
|
public class CMB_Renderer : GenericModelRenderer
|
||||||
|
{
|
||||||
|
public override float PreviewScale { get; set; } = 0.01f;
|
||||||
|
|
||||||
|
public List<CTXB.TextureWrapper> TextureList = new List<CTXB.TextureWrapper>();
|
||||||
|
|
||||||
|
public override void OnRender(GLControl control)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int BindTexture(STGenericMatTexture tex, ShaderProgram shader)
|
||||||
|
{
|
||||||
|
GL.ActiveTexture(TextureUnit.Texture0 + tex.textureUnit + 1);
|
||||||
|
GL.BindTexture(TextureTarget.Texture2D, RenderTools.defaultTex.RenderableTex.TexID);
|
||||||
|
|
||||||
|
string activeTex = tex.Name;
|
||||||
|
|
||||||
|
foreach (var texture in TextureList)
|
||||||
|
{
|
||||||
|
if (TextureList.IndexOf(texture) == ((CMB.CMBTextureMapWrapper)tex).TextureIndex)
|
||||||
|
{
|
||||||
|
BindGLTexture(tex, shader, TextureList[((CMB.CMBTextureMapWrapper)tex).TextureIndex]);
|
||||||
|
return tex.textureUnit + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tex.textureUnit + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -272,7 +272,7 @@ namespace Toolbox.Library
|
||||||
imgList.Images.Add("vec3", Properties.Resources.IconVec3);
|
imgList.Images.Add("vec3", Properties.Resources.IconVec3);
|
||||||
imgList.Images.Add("vec4", Properties.Resources.IconVec4);
|
imgList.Images.Add("vec4", Properties.Resources.IconVec4);
|
||||||
|
|
||||||
Bitmap bmp = new Bitmap(32, 32);
|
Bitmap bmp = new Bitmap(Width, Height);
|
||||||
Graphics g = Graphics.FromImage(bmp);
|
Graphics g = Graphics.FromImage(bmp);
|
||||||
g.Clear(Color.Transparent);
|
g.Clear(Color.Transparent);
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@ namespace Toolbox.Library
|
||||||
{
|
{
|
||||||
public class STSkeleton : EditableObject
|
public class STSkeleton : EditableObject
|
||||||
{
|
{
|
||||||
|
public virtual float PreviewScale { get; set; } = 1.0f;
|
||||||
|
|
||||||
public Vector3 position = new Vector3(0, 0, 0);
|
public Vector3 position = new Vector3(0, 0, 0);
|
||||||
|
|
||||||
protected bool Selected = false;
|
protected bool Selected = false;
|
||||||
|
@ -200,7 +202,7 @@ namespace Toolbox.Library
|
||||||
DrawBoundingBoxes();
|
DrawBoundingBoxes();
|
||||||
|
|
||||||
control.UpdateModelMatrix(
|
control.UpdateModelMatrix(
|
||||||
Matrix4.CreateScale(Runtime.previewScale) *
|
Matrix4.CreateScale(Runtime.previewScale * PreviewScale) *
|
||||||
Matrix4.CreateTranslation(Selected ? editorScene.CurrentAction.NewPos(position) : position));
|
Matrix4.CreateTranslation(Selected ? editorScene.CurrentAction.NewPos(position) : position));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ namespace Toolbox.Library.Rendering
|
||||||
{
|
{
|
||||||
public class GenericModelRenderer : AbstractGlDrawable
|
public class GenericModelRenderer : AbstractGlDrawable
|
||||||
{
|
{
|
||||||
|
public virtual float PreviewScale { get; set; } = 1.0f;
|
||||||
|
|
||||||
public static List<ITextureContainer> TextureContainers = new List<ITextureContainer>();
|
public static List<ITextureContainer> TextureContainers = new List<ITextureContainer>();
|
||||||
|
|
||||||
public List<GenericRenderedObject> Meshes = new List<GenericRenderedObject>();
|
public List<GenericRenderedObject> Meshes = new List<GenericRenderedObject>();
|
||||||
|
@ -170,7 +172,7 @@ namespace Toolbox.Library.Rendering
|
||||||
|
|
||||||
ShaderProgram shader = defaultShaderProgram;
|
ShaderProgram shader = defaultShaderProgram;
|
||||||
control.CurrentShader = shader;
|
control.CurrentShader = shader;
|
||||||
control.UpdateModelMatrix(Matrix4.CreateScale(Runtime.previewScale) * ModelTransform);
|
control.UpdateModelMatrix(Matrix4.CreateScale(Runtime.previewScale * PreviewScale) * ModelTransform);
|
||||||
|
|
||||||
OnRender(control);
|
OnRender(control);
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue