Switch-Toolbox/File_Format_Library/FileFormats/Shader/SHARCFBNX.cs

113 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Toolbox.Library.IO;
using Toolbox.Library;
using Toolbox.Library.Forms;
using System.Windows.Forms;
using FirstPlugin.Forms;
namespace FirstPlugin
{
public class SHARCFBNX : TreeNodeCustom
{
public Header header;
public class Header
{
public List<ShaderProgram> ShaderPrograms = new List<ShaderProgram>();
public void Read(FileReader reader)
{
reader.Position = 0;
reader.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian;
reader.ReadSignature(4, "BAHS");
uint Version = reader.ReadUInt32();
uint FileSize = reader.ReadUInt32();
uint ByteOrderMark = reader.ReadUInt32();
if (ByteOrderMark == 1)
reader.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian;
else
reader.ByteOrder = Syroot.BinaryData.ByteOrder.LittleEndian;
uint unk = reader.ReadUInt32();
uint Alignment = reader.ReadUInt32();
uint BinaryArraySize = reader.ReadUInt32();
uint BinaryArrayOffset = reader.ReadUInt32();
reader.Seek(336, System.IO.SeekOrigin.Begin); //String table always at 336
//String Table here
reader.Seek(336 + Alignment, System.IO.SeekOrigin.Begin);
var Position = reader.Position; //All offsets will be relative to this
uint ShaderProgramArrayOffset = reader.ReadUInt32();
reader.Seek(Position + ShaderProgramArrayOffset, System.IO.SeekOrigin.Begin);
uint ProgramArraySize = reader.ReadUInt32();
uint ProgramCount = reader.ReadUInt32();
for (int i = 0; i < ProgramCount; i++)
{
ShaderProgram program = new ShaderProgram();
program.Read(reader);
ShaderPrograms.Add(program);
}
}
}
public class ShaderProgram : TreeNodeCustom
{
public VariationMacroData variationMacroData;
public VariationSymbolData variationSymbolData;
public ShaderSymbolData UniformVariables;
public override void OnClick(TreeView treeview)
{
ShaderEditor editor = (ShaderEditor)LibraryGUI.GetActiveContent(typeof(ShaderEditor));
if (editor == null)
{
editor = new ShaderEditor();
LibraryGUI.LoadEditor(editor);
}
editor.Text = Text;
editor.Dock = DockStyle.Fill;
editor.FillEditor(this, ((SHARCFB)Parent.Parent).header.sharcNX.header);
}
public void Read(FileReader reader)
{
var pos = reader.Position;
uint SectionSize = reader.ReadUInt32();
uint NameLength = reader.ReadUInt32();
uint ShaderType = reader.ReadUInt32();
uint index = reader.ReadUInt32();
Text = reader.ReadString((int)NameLength);
variationMacroData = new VariationMacroData();
variationSymbolData = new VariationSymbolData();
UniformVariables = new ShaderSymbolData();
variationMacroData.Read(reader);
variationSymbolData.Read(reader);
UniformVariables.Read(reader);
reader.Seek(SectionSize + pos, System.IO.SeekOrigin.Begin);
}
}
}
}