Material, Texture and Font treeviews (BCLYT)

Also made a start on a complete CGFX shader with uniforms.
This commit is contained in:
Gericom 2015-01-07 19:06:42 +01:00
parent 1b4f8f11e8
commit 486c6a29e4
12 changed files with 334 additions and 8 deletions

View File

@ -217,7 +217,11 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="NintendoWare\GFX\Shaders\CGFXFrag.glsl" />
<Content Include="NintendoWare\GFX\Shaders\CGFXFrag.c" />
<None Include="Resources\image-sunset.png" />
<None Include="Resources\edit-language.png" />
<None Include="Resources\t-shirt.png" />
<None Include="Resources\t-shirt-gray.png" />
<None Include="Resources\leaf.png" />
</ItemGroup>
<ItemGroup>

View File

@ -187,8 +187,8 @@ namespace _3DS.NintendoWare.GFX
"j1.rgb + j2.rgb - vec3(0.5)",
"j1.rgb * j3.rgb + j2.rgb * (vec3(1.0) - j3.rgb)",
"j1.rgb - j2.rgb",
"vec3(4 * ((j1.r - 0.5) * (j1.r - 0.5) + (j1.g - 0.5) * (j2.g - 0.5) + (j1.b - 0.5) * (j2.b - 0.5)))",
"vec4(4 * ((j1.r - 0.5) * (j1.r - 0.5) + (j1.g - 0.5) * (j2.g - 0.5) + (j1.b - 0.5) * (j2.b - 0.5)))",
"vec3(4 * ((j1.r - 0.5) * (j2.r - 0.5) + (j1.g - 0.5) * (j2.g - 0.5) + (j1.b - 0.5) * (j2.b - 0.5)))",
"vec4(4 * ((j1.r - 0.5) * (j2.r - 0.5) + (j1.g - 0.5) * (j2.g - 0.5) + (j1.b - 0.5) * (j2.b - 0.5)))",
"(j1.rgb * j2.rgb) + j3.rgb",//"j1.rgb * j2.aaa + j3.rgb" //"(vec3(1.0) - ((vec3(1.0) - j1.rgb) + (vec3(1.0) - j2.rgb))) + j3.rgb",//"j2.rgb * j1.rgb + j3.rgb * (vec3(1.0) - j1.rgb)",//"j1.rgb * j2.rgb + j3.rgb * (vec3(1.0) - j2.rgb)",//"j1.rgb * j2.rgb + j3.rgb * (vec3(1.0) - j2.rgb)"//"j2.rgb + j1.rgb - (vec3(1.0) - j3.rgb)",//Unknown 8
"clamp(j1.rgb + j2.rgb, 0.0, 1.0) * j3.rgb"//"j2.rgb + (j1.rgb * j3.rgb)"//"j3.rgb * j1.rgb + j2.rgb - vec3(0.1)"//"j2.rgb * j3.rgb + j1.rgb - vec3(0.5)"//"j1.rgb * j2.rgb + j3.rgb * (vec3(1.0) - j2.rgb)"//"j1.rgb + j3.rgb * j2.rgb"//"j3.rgb"//Unknown 9
};
@ -284,7 +284,7 @@ namespace _3DS.NintendoWare.GFX
frag_ss.AppendFormat("vec4 DefLt0Spec0 = {0};\n", GetVec4(DefaultLight0.Specular0));
frag_ss.AppendFormat("vec4 DefLt0Spec1 = {0};\n", GetVec4(DefaultLight0.Specular1));
frag_ss.AppendFormat("vec4 DefLt0Pos = {0};\n", GetVec4(DefaultLight0.Position));
frag_ss.AppendLine("void main()");
frag_ss.AppendLine("{");
{

View File

@ -0,0 +1,164 @@
//Should contain one shader that can be used for all CGFX files, using dmp uniforms
struct FragmentMaterial
{
vec4 ambient;
vec4 emission;
vec4 diffuse;
vec4 specular0;
vec4 specular1;
};
struct TevCombiner
{
int combineRgb;
int combineAlpha;
int srcRgb;
int srcAlpha;
int operandRgb;
int operandAlpha;
int bufferInput;
float scaleRgb;
float scaleAlpha;
vec4 constRgba;
vec4 bufferColor;
};
uniform sampler2D dmp_Texture[4];
uniform FragmentMaterial dmp_FragmentMaterial;
uniform TevCombiner dmp_TexEnv[6];
vec4 previous = vec4(1.0);
vec4 buf[5];
vec4 bufin;
vec4 constRgba;
void main()
{
buf[0] = dmp_TexEnv[0].bufferColor;
for(int i = 0; i < 6; i++)
{
if (i > 0 && i < 5)
{
if (dmp_TexEnv[i].bufferInput & 1) buf[i].rgb = previous.rgb;
else buf[i].rgb = buf[i-1].rgb;
if ((dmp_TexEnv[i].bufferInput >> 1) & 1) buf[i].a = previous.a;
else buf[i].a = buf[i-1].a;
}
if (i > 0) bufin = buf[i - 1];
constRgba = dmp_TexEnv[i].constRgba;
vec4 inputs[3];
for(int i = 0; i < 3; i++)
{
int srcRgb = (dmp_TexEnv[i].srcRgb >> (i * 4)) & 0xF;
int opRgb = (dmp_TexEnv[i].operandRgb >> (i * 4)) & 0xF;
inputs[i].rgb = getOperandRgb(opRgb, getSource(srcRgb));
}
for(int i = 0; i < 3; i++)
{
int srcAlpha = (dmp_TexEnv[i].srcAlpha >> (i * 4)) & 0xF;
int opAlpha = (dmp_TexEnv[i].operandAlpha >> (i * 4)) & 0xF;
inputs[i].a = getOperandAlpha(opAlpha, getSource(srcAlpha));
}
previous = clamp(vec4(
getCombinedRgb(dmp_TexEnv[i].combineRgb, inputs[0], inputs[1], inputs[2]) * vec3(dmp_TexEnv[i].scaleRgb),
getCombinedAlpha(dmp_TexEnv[i].combineAlpha, inputs[0], inputs[1], inputs[2]) * dmp_TexEnv[i].scaleAlpha),
0.0, 1.0);
}
gl_FragColor = previous;
}
vec4 getSource(int src)
{
switch(src)
{
case 0: return gl_Color;
case 1: return vec4(0.5, 0.5, 0.5, 1.0);//tempoarly
case 2: return vec4(0.5, 0.5, 0.5, 1.0);//tempoarly
case 3: return texture2D(dmp_Texture[0], gl_TexCoord[0].st);
case 4: return texture2D(dmp_Texture[1], gl_TexCoord[1].st);
case 5: return texture2D(dmp_Texture[2], gl_TexCoord[2].st);
//proctex not supported!
//case 6: return texture2D(dmp_Texture[3], gl_TexCoord[3].st);
case 13: return bufin;
case 14: return constRgba;
case 15: return previous;
}
return vec4(0.0, 0.0, 0.0, 1.0);
}
vec3 getOperandRgb(int op, vec4 src)
{
switch(op)
{
case 0: return src.rgb;
case 1: return vec3(1.0) - src.rgb;
case 2: return src.aaa;
case 3: return vec3(1.0) - src.aaa;
case 4: return src.rrr;
case 5: return vec3(1.0) - src.rrr;
case 8: return src.ggg;
case 9: return vec3(1.0) - src.ggg;
case 12: return src.bbb;
case 13: return vec3(1.0) - src.bbb;
}
return vec3(0);
}
float getOperandAlpha(int op, vec4 src)
{
switch(op)
{
case 0: return src.a;
case 1: return 1.0 - src.a;
case 2: return src.r;
case 3: return 1.0 - src.r;
case 4: return src.g;
case 5: return 1.0 - src.g;
case 6: return src.b;
case 7: return 1.0 - src.b;
}
return 1;
}
vec3 getCombinedRgb(int comb, vec4 a, vec4 b, vec4 c)
{
switch(comb)
{
case 0: return a.rgb;
case 1: return a.rgb * b.rgb;
case 2: return a.rgb + b.rgb;
case 3: return a.rgb + b.rgb - vec3(0.5);
case 4: return a.rgb * c.rgb + b.rgb * (vec3(1.0) - c.rgb);
case 5: return a.rgb - b.rgb;
case 6:
case 7: return vec3(4 * ((a.r - 0.5) * (b.r - 0.5) + (a.g - 0.5) * (b.g - 0.5) + (a.b - 0.5) * (b.b - 0.5)));
case 8: return (a.rgb * b.rgb) + c.rgb;
case 9: return clamp(a.rgb + b.rgb, 0.0, 1.0) * c.rgb;
}
return vec3(0);
}
float getCombinedAlpha(int comb, vec4 a, vec4 b, vec4 c)
{
switch(comb)
{
case 0: return a.a;
case 1: return a.a * b.a;
case 2: return a.a + b.a;
case 3: return a.a + b.a - 0.5;
case 4: return a.a * c.a + b.a * (1.0 - c.a);
case 5: return a.a - b.a;
//not possible?
//case 6:
case 7: return 4 * ((a.r - 0.5) * (b.r - 0.5) + (a.g - 0.5) * (b.g - 0.5) + (a.b - 0.5) * (b.b - 0.5));
case 8: return (a.a * b.a) + c.a;
case 9: return clamp(a.a + b.a, 0.0, 1.0) * c.a;
}
return 1;
}

View File

@ -1 +0,0 @@
//Should contain one shader that can be used for all CGFX files, using dmp uniforms

View File

@ -60,6 +60,42 @@ namespace _3DS {
}
}
/// <summary>
/// Looks up a localized string similar to //Should contain one shader that can be used for all CGFX files, using dmp uniforms
///struct FragmentMaterial
///{
/// vec4 ambient;
/// vec4 emission;
/// vec4 diffuse;
/// vec4 specular0;
/// vec4 specular1;
///};
///
///struct TevCombiner
///{
/// int combineRgb;
/// int combineAlpha;
/// int srcRgb;
/// int srcAlpha;
/// int operandRgb;
/// int operandAlpha;
/// int bufferInput;
/// float scaleRgb;
/// float scaleAlpha;
/// vec4 constRgba;
/// vec4 bufferColor;
///};
///
///uniform sampler2D dmp_Texture[4];
///
///uniform FragmentMaterial dmp_FragmentMate [rest of string was truncated]&quot;;.
/// </summary>
internal static string CGFXFrag {
get {
return ResourceManager.GetString("CGFXFrag", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -70,6 +106,16 @@ namespace _3DS {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap edit_language {
get {
object obj = ResourceManager.GetObject("edit_language", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -80,6 +126,16 @@ namespace _3DS {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap image_sunset {
get {
object obj = ResourceManager.GetObject("image_sunset", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -120,6 +176,16 @@ namespace _3DS {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap t_shirt {
get {
object obj = ResourceManager.GetObject("t_shirt", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@ -118,15 +118,24 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="CGFXFrag" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>nintendoware\gfx\shaders\cgfxfrag.c;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit_language" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\edit-language.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image16" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image_sunset" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\image-sunset.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="leaf" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\leaf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -136,6 +145,9 @@
<data name="slide" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\slide.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="t_shirt" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\t-shirt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="zone" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\zone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

BIN
3DS/Resources/t-shirt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

View File

@ -37,12 +37,15 @@
this.tabPage2 = new System.Windows.Forms.TabPage();
this.treeView2 = new System.Windows.Forms.TreeView();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.treeView3 = new System.Windows.Forms.TreeView();
this.tabPage4 = new System.Windows.Forms.TabPage();
this.tabPage5 = new System.Windows.Forms.TabPage();
this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
this.simpleOpenGlControl1 = new Tao.Platform.Windows.SimpleOpenGlControl();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.mainMenu1 = new LibEveryFileExplorer.UI.MainMenu(this.components);
this.treeView4 = new System.Windows.Forms.TreeView();
this.treeView5 = new System.Windows.Forms.TreeView();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@ -54,6 +57,9 @@
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
this.tabPage3.SuspendLayout();
this.tabPage4.SuspendLayout();
this.tabPage5.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
@ -150,19 +156,29 @@
//
// tabPage3
//
this.tabPage3.Controls.Add(this.treeView3);
this.tabPage3.Location = new System.Drawing.Point(4, 22);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
this.tabPage3.Size = new System.Drawing.Size(186, 156);
this.tabPage3.TabIndex = 2;
this.tabPage3.Text = "Materials";
this.tabPage3.UseVisualStyleBackColor = true;
//
// treeView3
//
this.treeView3.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView3.HideSelection = false;
this.treeView3.HotTracking = true;
this.treeView3.Location = new System.Drawing.Point(0, 0);
this.treeView3.Name = "treeView3";
this.treeView3.Size = new System.Drawing.Size(186, 156);
this.treeView3.TabIndex = 1;
//
// tabPage4
//
this.tabPage4.Controls.Add(this.treeView4);
this.tabPage4.Location = new System.Drawing.Point(4, 22);
this.tabPage4.Name = "tabPage4";
this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
this.tabPage4.Size = new System.Drawing.Size(186, 156);
this.tabPage4.TabIndex = 3;
this.tabPage4.Text = "Textures";
@ -170,9 +186,9 @@
//
// tabPage5
//
this.tabPage5.Controls.Add(this.treeView5);
this.tabPage5.Location = new System.Drawing.Point(4, 22);
this.tabPage5.Name = "tabPage5";
this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
this.tabPage5.Size = new System.Drawing.Size(186, 156);
this.tabPage5.TabIndex = 4;
this.tabPage5.Text = "Fonts";
@ -210,6 +226,26 @@
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
//
// treeView4
//
this.treeView4.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView4.HideSelection = false;
this.treeView4.HotTracking = true;
this.treeView4.Location = new System.Drawing.Point(0, 0);
this.treeView4.Name = "treeView4";
this.treeView4.Size = new System.Drawing.Size(186, 156);
this.treeView4.TabIndex = 2;
//
// treeView5
//
this.treeView5.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView5.HideSelection = false;
this.treeView5.HotTracking = true;
this.treeView5.Location = new System.Drawing.Point(0, 0);
this.treeView5.Name = "treeView5";
this.treeView5.Size = new System.Drawing.Size(186, 156);
this.treeView5.TabIndex = 2;
//
// CLYTViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -235,6 +271,9 @@
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage2.ResumeLayout(false);
this.tabPage3.ResumeLayout(false);
this.tabPage4.ResumeLayout(false);
this.tabPage5.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -255,5 +294,8 @@
private System.Windows.Forms.TabPage tabPage5;
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.TreeView treeView2;
private System.Windows.Forms.TreeView treeView3;
private System.Windows.Forms.TreeView treeView4;
private System.Windows.Forms.TreeView treeView5;
}
}

View File

@ -29,6 +29,9 @@ namespace _3DS.UI
InitializeComponent();
Win32Util.SetWindowTheme(treeView1.Handle, "explorer", null);
Win32Util.SetWindowTheme(treeView2.Handle, "explorer", null);
Win32Util.SetWindowTheme(treeView3.Handle, "explorer", null);
Win32Util.SetWindowTheme(treeView4.Handle, "explorer", null);
Win32Util.SetWindowTheme(treeView5.Handle, "explorer", null);
}
private void CLYTViewer_Load(object sender, EventArgs e)
@ -86,8 +89,14 @@ namespace _3DS.UI
ImageL.Images.Add("wnd1", Resource.slide);
ImageL.Images.Add("txt1", Resource.edit);
ImageL.Images.Add("grp1", Resource.zones_stack);
ImageL.Images.Add(Resource.t_shirt);
ImageL.Images.Add(Resource.image_sunset);
ImageL.Images.Add(Resource.edit_language);
treeView1.ImageList = ImageL;
treeView2.ImageList = ImageL;
treeView3.ImageList = ImageL;
treeView4.ImageList = ImageL;
treeView5.ImageList = ImageL;
treeView1.BeginUpdate();
treeView1.Nodes.Clear();
@ -99,6 +108,36 @@ namespace _3DS.UI
treeView2.Nodes.Add(NWLayout.RootGroup.GetTreeNodes());
treeView2.EndUpdate();
if (NWLayout.Materials != null)
{
treeView3.BeginUpdate();
treeView3.Nodes.Clear();
foreach (var v in NWLayout.Materials.Materials)
treeView3.Nodes.Add(new TreeNode(v.Name, 5, 5));
treeView3.EndUpdate();
}
int q = 0;
if (NWLayout.TextureList != null)
{
treeView4.BeginUpdate();
treeView4.Nodes.Clear();
foreach (var v in NWLayout.TextureList.TextureNames)
treeView4.Nodes.Add(new TreeNode(v, 6, 6) { ForeColor = (Textures[q] == null) ? Color.Red : Color.Black });
treeView4.EndUpdate();
q++;
}
if (NWLayout.FontList != null)
{
treeView5.BeginUpdate();
treeView5.Nodes.Clear();
foreach (var v in NWLayout.FontList.FontNames)
treeView5.Nodes.Add(new TreeNode(v, 7, 7));
treeView5.EndUpdate();
}
init = true;
Render();
}