mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-10 07:04:36 +00:00
Add improvements from yesterday.
PBR shader slghtly improved. Skyobx toggle now works while viewport is active, Cubemaps now have a check wether or not the file given is a valid cube map dds. Update column sizing so forms load much faster Option to right click and clear paths in settings if set
This commit is contained in:
parent
dbf12e5fdc
commit
cd57a856fc
31 changed files with 383 additions and 110 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1075,7 +1075,8 @@ namespace FirstPlugin
|
|||
default:
|
||||
setting.LoadBitMap(FileName);
|
||||
importer.LoadSetting(setting);
|
||||
setting.Format = GenericToBntxSurfaceFormat(DefaultFormat);
|
||||
if (!IsAtscFormat(DefaultFormat))
|
||||
setting.Format = GenericToBntxSurfaceFormat(DefaultFormat);
|
||||
|
||||
if (MaxMipLevel != 0)
|
||||
{
|
||||
|
|
|
@ -230,13 +230,17 @@ namespace FirstPlugin
|
|||
{
|
||||
current.Text += $" : <Dictionary> {dictionaryIndex++}";
|
||||
current.Tag = node[k];
|
||||
current.Nodes.Add("✯✯dummy✯✯"); //a text that can't be in a byml
|
||||
|
||||
if (HasDynamicListChildren(current))
|
||||
current.Nodes.Add("✯✯dummy✯✯"); //a text that can't be in a byml
|
||||
}
|
||||
else if (node[k] is IList<dynamic>)
|
||||
{
|
||||
current.Text += $" : <Array> {arrayIndex++}";
|
||||
current.Tag = ((IList<dynamic>)node[k]);
|
||||
current.Nodes.Add("✯✯dummy✯✯");
|
||||
|
||||
if (HasDynamicListChildren(current))
|
||||
current.Nodes.Add("✯✯dummy✯✯");
|
||||
}
|
||||
else if (node[k] is IList<ByamlPathPoint>)
|
||||
{
|
||||
|
@ -277,7 +281,9 @@ namespace FirstPlugin
|
|||
{
|
||||
TreeNode current = addto.Add($"<Dictionary> {dictionaryIndex++}");
|
||||
current.Tag = ((IDictionary<string, dynamic>)k);
|
||||
current.Nodes.Add("✯✯dummy✯✯");
|
||||
|
||||
if (HasDynamicListChildren(current))
|
||||
current.Nodes.Add("✯✯dummy✯✯");
|
||||
}
|
||||
else if (k is IList<dynamic>)
|
||||
{
|
||||
|
@ -296,6 +302,49 @@ namespace FirstPlugin
|
|||
}
|
||||
}
|
||||
|
||||
//Search through the properties of a dictionary or list and see if it contains a list/dictionary
|
||||
//Then use this information to add tree nodes.
|
||||
//This is so nodes can be added on click but visually have children
|
||||
private bool HasDynamicListChildren(TreeNode Node)
|
||||
{
|
||||
if (Node.Tag != null)
|
||||
{
|
||||
if (((dynamic)Node.Tag).Count > 0)
|
||||
{
|
||||
if (Node.Tag is IList<dynamic>)
|
||||
return ListHasListChild((IList<dynamic>)Node.Tag);
|
||||
if (Node.Tag is IDictionary<string, dynamic>)
|
||||
return DictionaryHasListChild((IDictionary<string, dynamic>)Node.Tag);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool ListHasListChild(IList<dynamic> list)
|
||||
{
|
||||
foreach (dynamic k in list)
|
||||
{
|
||||
if (k is IDictionary<string, dynamic>)
|
||||
return true;
|
||||
else if (k is IList<dynamic>)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool DictionaryHasListChild(IDictionary<string, dynamic> node)
|
||||
{
|
||||
foreach (string k in node.Keys)
|
||||
{
|
||||
if (node[k] is IDictionary<string, dynamic>)
|
||||
return true;
|
||||
else if (node[k] is IList<dynamic>)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void BeforeExpand(object sender, TreeViewCancelEventArgs e)
|
||||
{
|
||||
if (e.Node.Tag != null && e.Node.Nodes.Count == 1 && e.Node.Nodes[0].Text == "✯✯dummy✯✯")
|
||||
|
|
|
@ -28,15 +28,15 @@ namespace FirstPlugin.Forms
|
|||
|
||||
foreach (string dir in Directory.GetFiles($"{GamePath}\\ObjectData", "Mario*"))
|
||||
{
|
||||
|
||||
string filename = Path.GetFileNameWithoutExtension(dir);
|
||||
|
||||
listViewCustom1.BeginUpdate();
|
||||
bool Exluded = ExcludeFileList.Any(filename.Contains);
|
||||
|
||||
if (Exluded == false)
|
||||
{
|
||||
listViewCustom1.Items.Add(new ListViewItem(filename) { Tag = dir });
|
||||
}
|
||||
listViewCustom1.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -238,8 +238,6 @@ namespace FirstPlugin
|
|||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -119,7 +119,6 @@ namespace FirstPlugin
|
|||
private void OpenCostumeDialog(string GamePath)
|
||||
{
|
||||
var costumSelector = new OdysseyCostumeSelector(GamePath);
|
||||
|
||||
if (costumSelector.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
LoadCostumes(costumSelector.SelectedCostumeName);
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -497,7 +497,7 @@ namespace Switch_Toolbox.Library.Animations
|
|||
return FrameCount;
|
||||
}
|
||||
|
||||
public void NextFrame(STSkeleton skeleton, bool isChild = false)
|
||||
public void NextFrame(STSkeleton skeleton, bool isChild = false, bool AdancedNextFrame = false)
|
||||
{
|
||||
if (Frame >= FrameCount) return;
|
||||
|
||||
|
@ -575,6 +575,13 @@ namespace Switch_Toolbox.Library.Animations
|
|||
|
||||
}
|
||||
|
||||
if (AdancedNextFrame)
|
||||
{
|
||||
Frame++;
|
||||
if (Frame >= FrameCount)
|
||||
Frame = 0;
|
||||
}
|
||||
|
||||
if (!isChild && Updated)
|
||||
{
|
||||
skeleton.update();
|
||||
|
|
|
@ -13,13 +13,7 @@ namespace Switch_Toolbox.Library.Animations
|
|||
anim.SetFrame(0);
|
||||
for (int frame = 0; frame < anim.FrameCount; frame++)
|
||||
{
|
||||
anim.NextFrame(skeleton);
|
||||
|
||||
//Add frames to the playing animation
|
||||
anim.Frame++;
|
||||
//Reset it when it reaches the total frame count
|
||||
if (anim.Frame >= anim.FrameCount)
|
||||
anim.Frame = 0;
|
||||
anim.NextFrame(skeleton, false, true);
|
||||
|
||||
foreach (Animation.KeyNode boneAnim in anim.Bones)
|
||||
{
|
||||
|
|
|
@ -273,10 +273,7 @@ namespace Switch_Toolbox.Library.Animations
|
|||
anim.SetFrame(0);
|
||||
for (int i = 0; i <= anim.FrameCount; i++)
|
||||
{
|
||||
anim.NextFrame(Skeleton);
|
||||
anim.Frame++;
|
||||
if (anim.Frame >= anim.FrameCount)
|
||||
anim.Frame = 0;
|
||||
anim.NextFrame(Skeleton, false, true);
|
||||
|
||||
file.WriteLine("time " + i);
|
||||
|
||||
|
|
|
@ -687,7 +687,7 @@ namespace Switch_Toolbox.Library
|
|||
cubemap[0].mipmaps,
|
||||
cubemap[1].mipmaps,
|
||||
cubemap[2].mipmaps,
|
||||
cubemap[3].mipmaps,
|
||||
cubemap[3].mipmaps,
|
||||
cubemap[4].mipmaps,
|
||||
cubemap[5].mipmaps);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ namespace Switch_Toolbox.Library.Forms
|
|||
FillHeight(ctrl);
|
||||
}
|
||||
|
||||
|
||||
base.OnSizeChanged(e);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Switch_Toolbox.Library.Forms
|
||||
{
|
||||
|
@ -55,8 +56,43 @@ namespace Switch_Toolbox.Library.Forms
|
|||
|
||||
}
|
||||
|
||||
[System.Runtime.InteropServices.DllImport("user32")]
|
||||
private static extern IntPtr GetDC(IntPtr hwnd);
|
||||
[System.Runtime.InteropServices.DllImport("user32")]
|
||||
private static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc);
|
||||
|
||||
public static IntPtr GetHeaderControl(ListView list)
|
||||
{
|
||||
const int LVM_GETHEADER = 0x1000 + 31;
|
||||
return SendMessage(list.Handle, LVM_GETHEADER, 0, 0);
|
||||
}
|
||||
|
||||
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
||||
|
||||
|
||||
|
||||
private void ListViewCustom_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
|
||||
{
|
||||
/* if (e.ColumnIndex == 3) //last column index
|
||||
{
|
||||
ListView lv = e.Header.ListView;
|
||||
IntPtr headerControl = NativeMethods.GetHeaderControl(lv);
|
||||
IntPtr hdc = GetDC(headerControl);
|
||||
Graphics g = Graphics.FromHdc(hdc);
|
||||
|
||||
// Do your extra drawing here
|
||||
Rectangle rc = new Rectangle(e.Bounds.Right, //Right instead of Left - offsets the rectangle
|
||||
e.Bounds.Top,
|
||||
e.Bounds.Width,
|
||||
e.Bounds.Height);
|
||||
|
||||
e.Graphics.FillRectangle(Brushes.Red, rc);
|
||||
|
||||
g.Dispose();
|
||||
ReleaseDC(headerControl, hdc);
|
||||
}*/
|
||||
|
||||
using (SolidBrush brush = new SolidBrush(FormThemes.BaseTheme.FormBackColor))
|
||||
{
|
||||
e.Graphics.FillRectangle(brush, e.Bounds);
|
||||
|
@ -81,8 +117,12 @@ namespace Switch_Toolbox.Library.Forms
|
|||
|
||||
private void ListViewCustom_Resize(object sender, EventArgs e)
|
||||
{
|
||||
if (View == View.Details && CanResizeList)
|
||||
if (View == View.Details && HeaderStyle != ColumnHeaderStyle.None && CanResizeList)
|
||||
{
|
||||
((ListView)sender).BeginUpdate();
|
||||
SizeLastColumn((ListView)sender);
|
||||
((ListView)sender).EndUpdate();
|
||||
}
|
||||
}
|
||||
private void SizeLastColumn(ListView lv)
|
||||
{
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace Switch_Toolbox.Library.Forms
|
|||
|
||||
public STCheckBox()
|
||||
{
|
||||
this.BoxColor = FormThemes.BaseTheme.CheckBoxBackColor;
|
||||
SetColor();
|
||||
|
||||
this.Paint += OnPaint;
|
||||
this.CheckedChanged += new EventHandler(CheckedChangedEvent);
|
||||
|
@ -52,6 +52,8 @@ namespace Switch_Toolbox.Library.Forms
|
|||
/// <param name="e"></param>
|
||||
private void OnPaint(object sender, PaintEventArgs e)
|
||||
{
|
||||
SetColor();
|
||||
|
||||
e.Graphics.FillRectangle(new SolidBrush(this.BoxColor), new Rectangle(0, 0, 15, 15));
|
||||
if (this.Checked)
|
||||
{
|
||||
|
@ -81,14 +83,7 @@ namespace Switch_Toolbox.Library.Forms
|
|||
{
|
||||
value = Checked;
|
||||
|
||||
if (Checked)
|
||||
{
|
||||
BoxColor = FormThemes.BaseTheme.CheckBoxEnabledBackColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
BoxColor = FormThemes.BaseTheme.CheckBoxBackColor;
|
||||
}
|
||||
SetColor();
|
||||
this.Invalidate();
|
||||
|
||||
foreach (Binding data in DataBindings)
|
||||
|
@ -96,5 +91,15 @@ namespace Switch_Toolbox.Library.Forms
|
|||
data.WriteValue();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetColor()
|
||||
{
|
||||
if (!Enabled)
|
||||
this.BoxColor = FormThemes.BaseTheme.DisabledItemColor;
|
||||
else if (Checked)
|
||||
BoxColor = FormThemes.BaseTheme.CheckBoxEnabledBackColor;
|
||||
else
|
||||
BoxColor = FormThemes.BaseTheme.CheckBoxBackColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,18 +136,13 @@ namespace Switch_Toolbox.Library
|
|||
var xyzLnes = new DrawableXyzLines();
|
||||
scene.staticObjects.Add(xyzLnes);
|
||||
|
||||
if (Runtime.PBR.UseSkybox)
|
||||
{
|
||||
var skybox = new DrawableSkybox();
|
||||
scene.staticObjects.Add(skybox);
|
||||
}
|
||||
else if (Runtime.renderBackGround)
|
||||
{
|
||||
var background = new DrawableBackground();
|
||||
scene.staticObjects.Add(background);
|
||||
}
|
||||
var skybox = new DrawableSkybox();
|
||||
scene.staticObjects.Add(skybox);
|
||||
|
||||
// scene.objects.Add(new SingleObject(new Vector3(0, 0, 0)));
|
||||
var background = new DrawableBackground();
|
||||
scene.staticObjects.Add(background);
|
||||
|
||||
// scene.objects.Add(new SingleObject(new Vector3(0, 0, 0)));
|
||||
|
||||
// LoadFog();
|
||||
|
||||
|
|
|
@ -9,6 +9,82 @@ namespace Switch_Toolbox.Library.IO
|
|||
{
|
||||
public static class MatrixExenstion
|
||||
{
|
||||
public static float Deg2Rad = (float)(System.Math.PI * 2) / 360;
|
||||
public static float Rad2Deg = (float)(360 / (System.Math.PI * 2));
|
||||
|
||||
public static OpenTK.Vector3 QuaternionToEuler(OpenTK.Quaternion q1)
|
||||
{
|
||||
float sqw = q1.W * q1.W;
|
||||
float sqx = q1.X * q1.X;
|
||||
float sqy = q1.Y * q1.Y;
|
||||
float sqz = q1.Z * q1.Z;
|
||||
float unit = sqx + sqy + sqz + sqw; // if normalised is one, otherwise is correction factor
|
||||
float test = q1.X * q1.W - q1.Y * q1.Z;
|
||||
OpenTK.Vector3 v;
|
||||
|
||||
|
||||
|
||||
if (test > 0.4995f * unit)
|
||||
{ // singularity at north pole
|
||||
v.Y = 2f * (float)System.Math.Atan2(q1.X, q1.Y);
|
||||
v.X = (float)System.Math.PI / 2;
|
||||
v.Z = 0;
|
||||
return NormalizeAngles(v * Rad2Deg);
|
||||
}
|
||||
if (test < -0.4995f * unit)
|
||||
{ // singularity at south pole
|
||||
v.Y = -2f * (float)System.Math.Atan2(q1.Y, q1.X);
|
||||
v.X = (float)-System.Math.PI / 2;
|
||||
v.Z = 0;
|
||||
return NormalizeAngles(v * Rad2Deg);
|
||||
}
|
||||
Quaternion q = new Quaternion(q1.W, q1.Z, q1.X, q1.Y);
|
||||
v.Y = (float)Math.Atan2(2f * q.X * q.W + 2f * q.Y * q.Z, 1 - 2f * (q.Z * q.Z + q.W * q.W)); // Yaw
|
||||
v.X = (float)Math.Asin(2f * (q.X * q.Z - q.W * q.Y)); // Pitch
|
||||
v.Z = (float)Math.Atan2(2f * q.X * q.Y + 2f * q.Z * q.W, 1 - 2f * (q.Y * q.Y + q.Z * q.Z)); // Roll
|
||||
return NormalizeAngles(v * Rad2Deg);
|
||||
}
|
||||
|
||||
static OpenTK.Vector3 NormalizeAngles(OpenTK.Vector3 angles)
|
||||
{
|
||||
angles.X = NormalizeAngle(angles.X);
|
||||
angles.Y = NormalizeAngle(angles.Y);
|
||||
angles.Z = NormalizeAngle(angles.Z);
|
||||
return angles;
|
||||
}
|
||||
|
||||
static float NormalizeAngle(float angle)
|
||||
{
|
||||
while (angle > 360)
|
||||
angle -= 360;
|
||||
while (angle < 0)
|
||||
angle += 360;
|
||||
return angle;
|
||||
}
|
||||
|
||||
public static OpenTK.Quaternion EulerToQuaternion(float yaw, float pitch, float roll)
|
||||
{
|
||||
yaw *= Deg2Rad;
|
||||
pitch *= Deg2Rad;
|
||||
roll *= Deg2Rad;
|
||||
float rollOver2 = roll * 0.5f;
|
||||
float sinRollOver2 = (float)Math.Sin((double)rollOver2);
|
||||
float cosRollOver2 = (float)Math.Cos((double)rollOver2);
|
||||
float pitchOver2 = pitch * 0.5f;
|
||||
float sinPitchOver2 = (float)Math.Sin((double)pitchOver2);
|
||||
float cosPitchOver2 = (float)Math.Cos((double)pitchOver2);
|
||||
float yawOver2 = yaw * 0.5f;
|
||||
float sinYawOver2 = (float)Math.Sin((double)yawOver2);
|
||||
float cosYawOver2 = (float)Math.Cos((double)yawOver2);
|
||||
OpenTK.Quaternion result = OpenTK.Quaternion.Identity;
|
||||
result.W = cosYawOver2 * cosPitchOver2 * cosRollOver2 + sinYawOver2 * sinPitchOver2 * sinRollOver2;
|
||||
result.X = cosYawOver2 * sinPitchOver2 * cosRollOver2 + sinYawOver2 * cosPitchOver2 * sinRollOver2;
|
||||
result.Y = sinYawOver2 * cosPitchOver2 * cosRollOver2 - cosYawOver2 * sinPitchOver2 * sinRollOver2;
|
||||
result.Z = cosYawOver2 * cosPitchOver2 * sinRollOver2 - sinYawOver2 * sinPitchOver2 * cosRollOver2;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static OpenTK.Matrix4 CreateRotation(OpenTK.Vector3 Normal, OpenTK.Vector3 Tangent)
|
||||
{
|
||||
var mat4 = OpenTK.Matrix4.Identity;
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace Switch_Toolbox.Library.Rendering
|
|||
|
||||
public override void Draw(GL_ControlModern control, Pass pass)
|
||||
{
|
||||
if (pass == Pass.TRANSPARENT || solidColorShaderProgram == null)
|
||||
if (pass == Pass.TRANSPARENT || Runtime.PBR.UseSkybox || solidColorShaderProgram == null)
|
||||
return;
|
||||
|
||||
bool buffersWereInitialized = vbo_position != 0;
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace Switch_Toolbox.Library.Rendering
|
|||
SFGraphics.GLObjects.Textures.TextureCubeMap specularPbr;
|
||||
public override void Draw(GL_ControlModern control, Pass pass)
|
||||
{
|
||||
if (!Runtime.OpenTKInitialized || pass == Pass.TRANSPARENT)
|
||||
if (!Runtime.OpenTKInitialized || !Runtime.PBR.UseSkybox || pass == Pass.TRANSPARENT)
|
||||
return;
|
||||
|
||||
GL.Enable(EnableCap.DepthTest);
|
||||
|
@ -50,7 +50,7 @@ namespace Switch_Toolbox.Library.Rendering
|
|||
|
||||
GL.Enable(EnableCap.StencilTest);
|
||||
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Replace);
|
||||
|
||||
|
||||
|
||||
control.CurrentShader = defaultShaderProgram;
|
||||
// enable seamless cubemap sampling for lower mip levels in the pre-filter map.
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace Switch_Toolbox.Library
|
|||
{
|
||||
if (diffusepbr == null)
|
||||
{
|
||||
if (System.IO.File.Exists(Runtime.PBR.SpecularCubeMapPath))
|
||||
if (System.IO.File.Exists(Runtime.PBR.DiffuseCubeMapPath))
|
||||
{
|
||||
DDS diffuseSdr = new DDS(Runtime.PBR.DiffuseCubeMapPath);
|
||||
diffusepbr = DDS.CreateGLCubeMap(diffuseSdr);
|
||||
|
|
57
Toolbox/GUI/Settings.Designer.cs
generated
57
Toolbox/GUI/Settings.Designer.cs
generated
|
@ -28,6 +28,7 @@
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.label1 = new Switch_Toolbox.Library.Forms.STLabel();
|
||||
this.chkBoxSpecular = new Switch_Toolbox.Library.Forms.STCheckBox();
|
||||
this.chkBoxNormalMap = new Switch_Toolbox.Library.Forms.STCheckBox();
|
||||
|
@ -101,12 +102,14 @@
|
|||
this.stLabel10 = new Switch_Toolbox.Library.Forms.STLabel();
|
||||
this.mk8PathTB = new Switch_Toolbox.Library.Forms.STTextBox();
|
||||
this.tabPage4 = new System.Windows.Forms.TabPage();
|
||||
this.chkDiffyseSkybox = new Switch_Toolbox.Library.Forms.STCheckBox();
|
||||
this.stLabel16 = new Switch_Toolbox.Library.Forms.STLabel();
|
||||
this.diffuseCubemapPathTB = new Switch_Toolbox.Library.Forms.STTextBox();
|
||||
this.stContextMenuStrip1 = new Switch_Toolbox.Library.Forms.STContextMenuStrip(this.components);
|
||||
this.clearSettingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.chkUseSkyobx = new Switch_Toolbox.Library.Forms.STCheckBox();
|
||||
this.stLabel15 = new Switch_Toolbox.Library.Forms.STLabel();
|
||||
this.specularCubemapPathTB = new Switch_Toolbox.Library.Forms.STTextBox();
|
||||
this.chkDiffyseSkybox = new Switch_Toolbox.Library.Forms.STCheckBox();
|
||||
this.contentContainer.SuspendLayout();
|
||||
this.panel2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cameraMaxSpeedUD)).BeginInit();
|
||||
|
@ -128,6 +131,7 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.bgGradientTop)).BeginInit();
|
||||
this.tabPage3.SuspendLayout();
|
||||
this.tabPage4.SuspendLayout();
|
||||
this.stContextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// contentContainer
|
||||
|
@ -977,6 +981,7 @@
|
|||
// botwGamePathTB
|
||||
//
|
||||
this.botwGamePathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.botwGamePathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.botwGamePathTB.Location = new System.Drawing.Point(112, 120);
|
||||
this.botwGamePathTB.Name = "botwGamePathTB";
|
||||
this.botwGamePathTB.Size = new System.Drawing.Size(258, 20);
|
||||
|
@ -995,6 +1000,7 @@
|
|||
// tpGamePathTB
|
||||
//
|
||||
this.tpGamePathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.tpGamePathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.tpGamePathTB.Location = new System.Drawing.Point(112, 94);
|
||||
this.tpGamePathTB.Name = "tpGamePathTB";
|
||||
this.tpGamePathTB.Size = new System.Drawing.Size(258, 20);
|
||||
|
@ -1013,6 +1019,7 @@
|
|||
// SMOPathTB
|
||||
//
|
||||
this.SMOPathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.SMOPathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.SMOPathTB.Location = new System.Drawing.Point(112, 68);
|
||||
this.SMOPathTB.Name = "SMOPathTB";
|
||||
this.SMOPathTB.Size = new System.Drawing.Size(258, 20);
|
||||
|
@ -1031,6 +1038,7 @@
|
|||
// mk8DPathTB
|
||||
//
|
||||
this.mk8DPathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.mk8DPathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.mk8DPathTB.Location = new System.Drawing.Point(112, 42);
|
||||
this.mk8DPathTB.Name = "mk8DPathTB";
|
||||
this.mk8DPathTB.Size = new System.Drawing.Size(258, 20);
|
||||
|
@ -1049,6 +1057,8 @@
|
|||
// mk8PathTB
|
||||
//
|
||||
this.mk8PathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.mk8PathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.mk8PathTB.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.mk8PathTB.Location = new System.Drawing.Point(112, 16);
|
||||
this.mk8PathTB.Name = "mk8PathTB";
|
||||
this.mk8PathTB.Size = new System.Drawing.Size(258, 20);
|
||||
|
@ -1071,6 +1081,18 @@
|
|||
this.tabPage4.Text = "PBR";
|
||||
this.tabPage4.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkDiffyseSkybox
|
||||
//
|
||||
this.chkDiffyseSkybox.AutoSize = true;
|
||||
this.chkDiffyseSkybox.Enabled = false;
|
||||
this.chkDiffyseSkybox.Location = new System.Drawing.Point(108, 16);
|
||||
this.chkDiffyseSkybox.Name = "chkDiffyseSkybox";
|
||||
this.chkDiffyseSkybox.Size = new System.Drawing.Size(173, 17);
|
||||
this.chkDiffyseSkybox.TabIndex = 5;
|
||||
this.chkDiffyseSkybox.Text = "Display Diffuse Map on Skybox";
|
||||
this.chkDiffyseSkybox.UseVisualStyleBackColor = true;
|
||||
this.chkDiffyseSkybox.CheckedChanged += new System.EventHandler(this.chkDiffyseSkybox_CheckedChanged);
|
||||
//
|
||||
// stLabel16
|
||||
//
|
||||
this.stLabel16.AutoSize = true;
|
||||
|
@ -1083,12 +1105,27 @@
|
|||
// diffuseCubemapPathTB
|
||||
//
|
||||
this.diffuseCubemapPathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.diffuseCubemapPathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.diffuseCubemapPathTB.Location = new System.Drawing.Point(160, 71);
|
||||
this.diffuseCubemapPathTB.Name = "diffuseCubemapPathTB";
|
||||
this.diffuseCubemapPathTB.Size = new System.Drawing.Size(197, 20);
|
||||
this.diffuseCubemapPathTB.TabIndex = 3;
|
||||
this.diffuseCubemapPathTB.Click += new System.EventHandler(this.diffuseCubemapPathTBB_Click);
|
||||
//
|
||||
// stContextMenuStrip1
|
||||
//
|
||||
this.stContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.clearSettingToolStripMenuItem});
|
||||
this.stContextMenuStrip1.Name = "stContextMenuStrip1";
|
||||
this.stContextMenuStrip1.Size = new System.Drawing.Size(142, 26);
|
||||
//
|
||||
// clearSettingToolStripMenuItem
|
||||
//
|
||||
this.clearSettingToolStripMenuItem.Name = "clearSettingToolStripMenuItem";
|
||||
this.clearSettingToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
|
||||
this.clearSettingToolStripMenuItem.Text = "Clear Setting";
|
||||
this.clearSettingToolStripMenuItem.Click += new System.EventHandler(this.clearSettingToolStripMenuItem_Click);
|
||||
//
|
||||
// chkUseSkyobx
|
||||
//
|
||||
this.chkUseSkyobx.AutoSize = true;
|
||||
|
@ -1112,23 +1149,13 @@
|
|||
// specularCubemapPathTB
|
||||
//
|
||||
this.specularCubemapPathTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.specularCubemapPathTB.ContextMenuStrip = this.stContextMenuStrip1;
|
||||
this.specularCubemapPathTB.Location = new System.Drawing.Point(160, 45);
|
||||
this.specularCubemapPathTB.Name = "specularCubemapPathTB";
|
||||
this.specularCubemapPathTB.Size = new System.Drawing.Size(197, 20);
|
||||
this.specularCubemapPathTB.TabIndex = 0;
|
||||
this.specularCubemapPathTB.Click += new System.EventHandler(this.cubemapPathTB_Click);
|
||||
//
|
||||
// chkDiffyseSkybox
|
||||
//
|
||||
this.chkDiffyseSkybox.AutoSize = true;
|
||||
this.chkDiffyseSkybox.Enabled = false;
|
||||
this.chkDiffyseSkybox.Location = new System.Drawing.Point(108, 16);
|
||||
this.chkDiffyseSkybox.Name = "chkDiffyseSkybox";
|
||||
this.chkDiffyseSkybox.Size = new System.Drawing.Size(173, 17);
|
||||
this.chkDiffyseSkybox.TabIndex = 5;
|
||||
this.chkDiffyseSkybox.Text = "Display Diffuse Map on Skybox";
|
||||
this.chkDiffyseSkybox.UseVisualStyleBackColor = true;
|
||||
this.chkDiffyseSkybox.CheckedChanged += new System.EventHandler(this.chkDiffyseSkybox_CheckedChanged);
|
||||
this.specularCubemapPathTB.TextChanged += new System.EventHandler(this.specularCubemapPathTB_TextChanged);
|
||||
//
|
||||
// Settings
|
||||
//
|
||||
|
@ -1139,6 +1166,7 @@
|
|||
this.Name = "Settings";
|
||||
this.Text = "Settings";
|
||||
this.Load += new System.EventHandler(this.Settings_Load);
|
||||
this.Controls.SetChildIndex(this.contentContainer, 0);
|
||||
this.contentContainer.ResumeLayout(false);
|
||||
this.panel2.ResumeLayout(false);
|
||||
this.panel2.PerformLayout();
|
||||
|
@ -1166,6 +1194,7 @@
|
|||
this.tabPage3.PerformLayout();
|
||||
this.tabPage4.ResumeLayout(false);
|
||||
this.tabPage4.PerformLayout();
|
||||
this.stContextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
@ -1251,5 +1280,7 @@
|
|||
private Switch_Toolbox.Library.Forms.STLabel stLabel16;
|
||||
private Switch_Toolbox.Library.Forms.STTextBox diffuseCubemapPathTB;
|
||||
private Switch_Toolbox.Library.Forms.STCheckBox chkDiffyseSkybox;
|
||||
private Switch_Toolbox.Library.Forms.STContextMenuStrip stContextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem clearSettingToolStripMenuItem;
|
||||
}
|
||||
}
|
|
@ -422,8 +422,8 @@ namespace Toolbox
|
|||
FolderSelectDialog sfd = new FolderSelectDialog();
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
SMOPathTB.Text = sfd.SelectedPath;
|
||||
Runtime.TpGamePath = SMOPathTB.Text;
|
||||
tpGamePathTB.Text = sfd.SelectedPath;
|
||||
Runtime.TpGamePath = tpGamePathTB.Text;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -446,29 +446,111 @@ namespace Toolbox
|
|||
|
||||
private void cubemapPathTB_Click(object sender, EventArgs e) {
|
||||
OpenFileDialog sfd = new OpenFileDialog();
|
||||
sfd.Filter = "DDS |*.dds;";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
specularCubemapPathTB.Text = System.IO.Path.GetFileName(sfd.FileName);
|
||||
Runtime.PBR.SpecularCubeMapPath = sfd.FileName;
|
||||
if (IsValidCubeMap(sfd.FileName))
|
||||
{
|
||||
specularCubemapPathTB.Text = System.IO.Path.GetFileName(sfd.FileName);
|
||||
Runtime.PBR.SpecularCubeMapPath = sfd.FileName;
|
||||
}
|
||||
else
|
||||
MessageBox.Show("Invalid cube map file. Make sure it is a DDS with a cube map.");
|
||||
}
|
||||
}
|
||||
|
||||
private void diffuseCubemapPathTBB_Click(object sender, EventArgs e) {
|
||||
OpenFileDialog sfd = new OpenFileDialog();
|
||||
sfd.Filter = "DDS |*.dds;";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
diffuseCubemapPathTB.Text = System.IO.Path.GetFileName(sfd.FileName);
|
||||
Runtime.PBR.DiffuseCubeMapPath = sfd.FileName;
|
||||
if (IsValidCubeMap(sfd.FileName))
|
||||
{
|
||||
diffuseCubemapPathTB.Text = System.IO.Path.GetFileName(sfd.FileName);
|
||||
Runtime.PBR.DiffuseCubeMapPath = sfd.FileName;
|
||||
}
|
||||
else
|
||||
MessageBox.Show("Invalid cube map file. Make sure it is a DDS with a cube map.");
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsValidCubeMap(string FilePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
DDS dds = new DDS(FilePath);
|
||||
if (dds.ArrayCount == 6)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void chkUseSkyobx_CheckedChanged(object sender, EventArgs e) {
|
||||
Runtime.PBR.UseSkybox = chkUseSkyobx.Checked;
|
||||
chkDiffyseSkybox.Enabled = chkUseSkyobx.Checked;
|
||||
chkDiffyseSkybox.Enabled = chkUseSkyobx.Checked;
|
||||
UpdateViewportSettings();
|
||||
}
|
||||
|
||||
private void chkDiffyseSkybox_CheckedChanged(object sender, EventArgs e) {
|
||||
Runtime.PBR.UseDiffuseSkyTexture = chkDiffyseSkybox.Checked;
|
||||
UpdateViewportSettings();
|
||||
}
|
||||
|
||||
private void clearSettingToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Try to cast the sender to a ToolStripItem
|
||||
ToolStripItem menuItem = sender as ToolStripItem;
|
||||
if (menuItem != null)
|
||||
{
|
||||
// Retrieve the ContextMenuStrip that owns this ToolStripItem
|
||||
ContextMenuStrip owner = menuItem.Owner as ContextMenuStrip;
|
||||
if (owner != null)
|
||||
{
|
||||
// Get the control that is displaying this context menu
|
||||
Control sourceControl = owner.SourceControl;
|
||||
switch (sourceControl.Name)
|
||||
{
|
||||
case "diffuseCubemapPathTB":
|
||||
diffuseCubemapPathTB.Text = "";
|
||||
Runtime.PBR.DiffuseCubeMapPath = "";
|
||||
break;
|
||||
case "specularCubemapPathTB":
|
||||
specularCubemapPathTB.Text = "";
|
||||
Runtime.PBR.SpecularCubeMapPath = "";
|
||||
break;
|
||||
case "mk8DPathTB":
|
||||
mk8DPathTB.Text = "";
|
||||
Runtime.Mk8dGamePath = "";
|
||||
break;
|
||||
case "mk8PathTB":
|
||||
mk8PathTB.Text = "";
|
||||
Runtime.Mk8GamePath = "";
|
||||
break;
|
||||
case "SMOPathTB":
|
||||
SMOPathTB.Text = "";
|
||||
Runtime.SmoGamePath = "";
|
||||
break;
|
||||
case "tpGamePathTB":
|
||||
tpGamePathTB.Text = "";
|
||||
Runtime.TpGamePath = "";
|
||||
break;
|
||||
case "botwGamePathTB":
|
||||
botwGamePathTB.Text = "";
|
||||
Runtime.BotwGamePath = "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void specularCubemapPathTB_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,4 +117,7 @@
|
|||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="stContextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -172,6 +172,38 @@ void main()
|
|||
if (HasNormalMap == 1 && useNormalMap == 1)
|
||||
N = CalcBumpedNormal(normal, NormalMap, vert, uking_texture2_texcoord);
|
||||
|
||||
float metallic = 0;
|
||||
float roughness = 1;
|
||||
float specIntensity = 1;
|
||||
float ao = 1;
|
||||
|
||||
if (HasMRA == 1) //Kirby Star Allies PBR map
|
||||
{
|
||||
//Note KSA has no way to tell if one gets unused or not because shaders :(
|
||||
//Usually it's just metalness with roughness and works fine
|
||||
metallic = texture(MRA, f_texcoord0).r;
|
||||
roughness = texture(MRA, f_texcoord0).g;
|
||||
specIntensity = texture(MRA, f_texcoord0).b;
|
||||
ao = texture(MRA, f_texcoord0).a;
|
||||
}
|
||||
else if (HasShadowMap == 1)
|
||||
{
|
||||
ao = texture(BakeShadowMap, f_texcoord1).r;
|
||||
}
|
||||
|
||||
if (HasMetalnessMap == 1)
|
||||
{
|
||||
metallic = texture(MetalnessMap, displayTexCoord).r;
|
||||
}
|
||||
if (HasRoughnessMap == 1)
|
||||
{
|
||||
roughness = texture(RoughnessMap, displayTexCoord).r;
|
||||
}
|
||||
if (HasSpecularMap == 1)
|
||||
{
|
||||
specIntensity = texture(SpecularMap, f_texcoord0).r;
|
||||
}
|
||||
|
||||
if (renderType == 1) // normals vertexColor
|
||||
{
|
||||
vec3 displayNormal = (N * 0.5) + 0.5;
|
||||
|
@ -195,15 +227,7 @@ void main()
|
|||
fragColor = vertexColor;
|
||||
else if (renderType == 6) //Display Ambient Occlusion
|
||||
{
|
||||
if (HasShadowMap == 1)
|
||||
{
|
||||
float Shadow = texture(BakeShadowMap, f_texcoord1).r;
|
||||
fragColor = vec4(vec3(Shadow), 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(1);
|
||||
}
|
||||
fragColor = vec4(vec3(ao), 1);
|
||||
}
|
||||
else if (renderType == 7) // uv coords
|
||||
fragColor = vec4(displayTexCoord.x, displayTexCoord.y, 1, 1);
|
||||
|
@ -246,15 +270,7 @@ void main()
|
|||
}
|
||||
else if (renderType == 13) //Specular
|
||||
{
|
||||
if (HasSpecularMap == 1)
|
||||
{
|
||||
vec3 Specular = texture(SpecularMap, f_texcoord0).rrr;
|
||||
fragColor = vec4(Specular, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(1);
|
||||
}
|
||||
fragColor = vec4(vec3(specIntensity), 1);
|
||||
}
|
||||
else if (renderType == 14) //Shadow
|
||||
{
|
||||
|
@ -270,27 +286,11 @@ void main()
|
|||
}
|
||||
else if (renderType == 15) //MetalnessMap
|
||||
{
|
||||
if (HasMetalnessMap == 1)
|
||||
{
|
||||
float mtl = texture(MetalnessMap, displayTexCoord).r;
|
||||
fragColor = vec4(vec3(mtl), 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(1);
|
||||
}
|
||||
fragColor = vec4(vec3(metallic), 1);
|
||||
}
|
||||
else if (renderType == 16) //RoughnessMap
|
||||
{
|
||||
if (HasRoughnessMap == 1)
|
||||
{
|
||||
float rgh = texture(RoughnessMap, displayTexCoord).r;
|
||||
fragColor = vec4(vec3(rgh), 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(1);
|
||||
}
|
||||
fragColor = vec4(vec3(roughness), 1);
|
||||
}
|
||||
else if (renderType == 17) //SubSurfaceScatteringMap
|
||||
{
|
||||
|
|
|
@ -306,17 +306,15 @@ void main()
|
|||
// Diffuse pass
|
||||
vec3 diffuseIblColor = texture(irradianceMap, N).rgb;
|
||||
vec3 diffuseTerm = diffuseIblColor * albedo;
|
||||
diffuseTerm *= kD;
|
||||
// diffuseTerm *= kD;
|
||||
diffuseTerm *= cavity;
|
||||
diffuseTerm *= ao;
|
||||
diffuseTerm *= shadow;
|
||||
diffuseTerm += LightingDiffuse;
|
||||
|
||||
// Adjust for metalness.
|
||||
// diffuseTerm *= clamp(1 - metallic, 0, 1);
|
||||
|
||||
|
||||
// diffuseTerm *= vec3(1) - kS.xxx;
|
||||
diffuseTerm *= clamp(1 - metallic, 0, 1);
|
||||
diffuseTerm *= vec3(1) - kS.xxx;
|
||||
|
||||
// Specular pass.
|
||||
int maxSpecularLod = 8;
|
||||
|
@ -349,7 +347,6 @@ void main()
|
|||
float alpha = texture(DiffuseMap, f_texcoord0).a;
|
||||
fragColor.a = alpha;
|
||||
|
||||
|
||||
// Toggles rendering of individual color channels for all render modes.
|
||||
fragColor.rgb *= vec3(renderR, renderG, renderB);
|
||||
if (renderR == 1 && renderG == 0 && renderB == 0)
|
||||
|
|
Loading…
Reference in a new issue