Example #1
0
        public static SHARC Load(Stream stream)
        {
            SHARC shader = new SHARC();

            shader.Read(stream);
            return(shader);
        }
        public SHARC.ShaderProgram TryLoadSharcProgram(BFRES bfres, string shaderFile, string shaderModel)
        {
            var archiveFile = bfres.FileInfo.ParentArchive;

            if (archiveFile == null)
            {
                return(null);
            }

            foreach (var file in archiveFile.Files)
            {
                if (file.FileName == $"{shaderFile}.sharc")
                {
                    var sharc = SHARC.Load(file.FileData);
                    return(sharc.ShaderPrograms.FirstOrDefault(x => x.Name == shaderModel));
                }
            }
            return(null);
        }
Example #3
0
            public ShaderProgram(SHARC sharc, FileReader reader, uint version)
            {
                ParentSharc = sharc;
                var pos = reader.Position;

                uint SectionSize = reader.ReadUInt32();
                uint NameLength  = reader.ReadUInt32();

                VertexShaderIndex    = reader.ReadInt32();
                FragmentShaderIndex  = reader.ReadInt32();
                GeoemetryShaderIndex = reader.ReadInt32();
                Name = reader.ReadString((int)NameLength, true);

                variationVertexMacroData.Read(reader, version);
                variationFragmenMacroData.Read(reader, version);
                variationGeometryMacroData.Read(reader, version);
                if (version >= 13)
                {
                    variationComputeMacroData.Read(reader, version);
                }

                variationSymbolData.Read(reader);

                if (version >= 11)
                {
                    variationSymbolDataFull.Read(reader);
                }

                if (version <= 12)
                {
                    UniformVariables.Read(reader);
                    if (version >= 11)
                    {
                        UniformBlocks.Read(reader, version);
                    }
                    SamplerVariables.Read(reader);
                    AttributeVariables.Read(reader);
                }

                reader.Seek(SectionSize + pos, System.IO.SeekOrigin.Begin);
            }