Beispiel #1
0
                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);
                }
Beispiel #2
0
            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);
            }