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); }
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); }