private ShaderData ReadShaderData(string relative_path) { BinaryReader reader = new BinaryReader(Project.directory_path + "\\" + relative_path); if (!reader.is_ok) { return(null); } ShaderData shaderData = new ShaderData(); shaderData.Read(reader); return(shaderData); }
public void Read(FileReader reader) { byte ShaderType = reader.ReadByte(); byte Format = reader.ReadByte(); reader.Seek(6); long VertexShaderOffset = reader.ReadInt64(); long UnkShaderOffset = reader.ReadInt64(); //Might be TessControl long Unk2ShaderOffset = reader.ReadInt64(); //Might be TessEvaluation long GeometryShaderOffset = reader.ReadInt64(); long FragmentShaderOffset = reader.ReadInt64(); long ComputeShaderOffset = reader.ReadInt64(); long pos = reader.Position; if (Format == 3) { if (VertexShaderOffset != 0) { reader.Seek(VertexShaderOffset, SeekOrigin.Begin); VertexShader = new ShaderSourceData(); VertexShader.shaderType = NSWShaderDecompile.NswShaderType.Vertex; VertexShader.Format = Format; VertexShader.Read(reader); } if (FragmentShaderOffset != 0) { reader.Seek(FragmentShaderOffset, SeekOrigin.Begin); FragmentShader = new ShaderSourceData(); FragmentShader.shaderType = NSWShaderDecompile.NswShaderType.Fragment; FragmentShader.Format = Format; FragmentShader.Read(reader); } } else { if (VertexShaderOffset != 0) { reader.Seek(VertexShaderOffset, SeekOrigin.Begin); VertexShader = new ShaderData(); VertexShader.shaderType = NSWShaderDecompile.NswShaderType.Vertex; VertexShader.Format = Format; VertexShader.Read(reader); } if (UnkShaderOffset != 0) { reader.Seek(UnkShaderOffset, SeekOrigin.Begin); UnkShader = new ShaderData(); UnkShader.Read(reader); } if (Unk2ShaderOffset != 0) { reader.Seek(Unk2ShaderOffset, SeekOrigin.Begin); Unk2Shader = new ShaderData(); Unk2Shader.Read(reader); } if (GeometryShaderOffset != 0) { reader.Seek(GeometryShaderOffset, SeekOrigin.Begin); GeometryShader = new ShaderData(); GeometryShader.shaderType = NSWShaderDecompile.NswShaderType.Geometry; GeometryShader.Format = Format; GeometryShader.Read(reader); } if (FragmentShaderOffset != 0) { reader.Seek(FragmentShaderOffset, SeekOrigin.Begin); FragmentShader = new ShaderData(); FragmentShader.shaderType = NSWShaderDecompile.NswShaderType.Fragment; FragmentShader.Format = Format; FragmentShader.Read(reader); } if (ComputeShaderOffset != 0) { reader.Seek(ComputeShaderOffset, SeekOrigin.Begin); ComputeShader = new ShaderData(); ComputeShader.shaderType = NSWShaderDecompile.NswShaderType.Compute; ComputeShader.Format = Format; ComputeShader.Read(reader); } } reader.Seek(pos, SeekOrigin.Begin); }