/// <summary> /// Constructor /// </summary> /// <param name="rs"></param> /// <param name="path"></param> /// <param name="combinerEnum"></param> public Ubershader ( GraphicsDevice device, Stream stream ) : base(device) { database.Clear(); using ( var br = new BinaryReader( stream ) ) { var foucCC = br.ReadFourCC(); if (foucCC!=UbershaderSignature) { throw new IOException("Bad ubershader signature"); } var count = br.ReadInt32(); for (int i=0; i<count; i++) { var defines = br.ReadString(); int length; br.ExpectFourCC("PSBC", "ubershader"); length = br.ReadInt32(); var ps = br.ReadBytes( length ); br.ExpectFourCC("VSBC", "ubershader"); length = br.ReadInt32(); var vs = br.ReadBytes( length ); br.ExpectFourCC("GSBC", "ubershader"); length = br.ReadInt32(); var gs = br.ReadBytes( length ); br.ExpectFourCC("HSBC", "ubershader"); length = br.ReadInt32(); var hs = br.ReadBytes( length ); br.ExpectFourCC("DSBC", "ubershader"); length = br.ReadInt32(); var ds = br.ReadBytes( length ); br.ExpectFourCC("CSBC", "ubershader"); length = br.ReadInt32(); var cs = br.ReadBytes( length ); //Log.Message("{0}", profile ); //PrintSignature( bytecode, "ISGN" ); //PrintSignature( bytecode, "OSGN" ); //PrintSignature( bytecode, "OSG5" ); if (database.ContainsKey(defines)) { Log.Warning("Duplicate definitions: {0}", defines ); continue; } database.Add( defines, new UsdbEntry( defines, ps, vs, gs, hs, ds, cs ) ); } } Log.Debug("Ubershader: {0} shaders", database.Count ); }
protected override void Read(BinaryReader reader) { Magic = reader.ReadFourCC(); Version = reader.ReadInt32(); PermutationCount = reader.ReadInt32(); for (var i = 0; i < PermutationCount; i++) Chunks.Add(new BLSChunk(reader)); }
protected override void Read(BinaryReader reader) { Magic = reader.ReadFourCC(); Load = reader.ReadInt32(); LastModified = reader.ReadInt32(); Build = reader.ReadInt32(); while (!reader.BaseStream.IsRead()) Records.Add(new TBLRecord(reader)); }
protected override void Read(BinaryReader reader) { Magic = reader.ReadFourCC(); // TODO: Magic check. Load = reader.ReadInt32(); // TODO: What's this do? LastModified = reader.ReadInt32(); Build = reader.ReadInt32(); if (Build < 0) throw new InvalidDataException("Negative build was encountered."); while (!reader.BaseStream.IsRead()) Records.Add(new TBLRecord(reader)); }
protected override void Read(BinaryReader reader) { Magic = reader.ReadFourCC(); // TODO: Magic check. Version = reader.ReadInt32(); if (Version < 0) throw new InvalidDataException("Negative version encountered."); PermutationCount = reader.ReadInt32(); if (PermutationCount < 0) throw new InvalidDataException("Negative permutation count encountered."); for (var i = 0; i < PermutationCount; i++) Chunks.Add(new BLSChunk(reader)); }
public XFRMChunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); // TODO: Magic check. BlockSize = reader.ReadInt32(); if (BlockSize < 0) throw new InvalidDataException("Negative block size encountered."); Type = reader.ReadFourCC(); }
public const int HashLength = 16; // Size of MD5 digest. No framework constant... public MD5Chunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); // TODO: Magic check. BlockSize = reader.ReadInt32(); if (BlockSize < 0) throw new InvalidDataException("Negative block size encountered."); OldHash = reader.ReadBytes(HashLength); NewHash = reader.ReadBytes(HashLength); }
public PTCHChunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); // TODO: Magic check. PatchSize = reader.ReadInt32(); if (PatchSize < 0) throw new InvalidDataException("Negative patch size encountered."); OldSize = reader.ReadInt32(); if (OldSize < 0) throw new InvalidDataException("Negative old size encountered."); NewSize = reader.ReadInt32(); if (NewSize < 0) throw new InvalidDataException("Negative new size encountered."); }
public XFRMChunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); BlockSize = reader.ReadInt32(); Type = reader.ReadFourCC(); Contract.Assert(BlockSize >= 0); Contract.Assert(!string.IsNullOrEmpty(Type)); Contract.Assert(Type.Length == 4); }
public PTCHChunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); PatchSize = reader.ReadInt32(); SizeBefore = reader.ReadInt32(); SizeAfter = reader.ReadInt32(); Contract.Assert(PatchSize >= 0); Contract.Assert(SizeBefore >= 0); Contract.Assert(SizeAfter >= 0); }
public MD5Chunk(BinaryReader reader) { Contract.Requires(reader != null); Magic = reader.ReadFourCC(); BlockSize = reader.ReadInt32(); HashBefore = reader.ReadBytes(HashLength); HashAfter = reader.ReadBytes(HashLength); Contract.Assert(BlockSize >= 0); }
public BSDIFF40Chunk(byte[] data) { Contract.Requires(data != null); using (var reader = new BinaryReader(new MemoryStream(data))) { Magic = reader.ReadFourCC() + reader.ReadFourCC(); ControlBlockSize = reader.ReadInt64(); DiffBlockSize = reader.ReadInt64(); SizeAfter = reader.ReadInt64(); ControlBlock = reader.ReadBytes((int)ControlBlockSize); DiffBlock = reader.ReadBytes((int)DiffBlockSize); var stream = reader.BaseStream; ExtraBlock = reader.ReadBytes((int)(stream.Length - stream.Position)); } }
/// <summary> /// Reads collection using binary reader. /// </summary> /// <param name="reader"></param> internal void Read ( BinaryReader reader ) { if (reader.ReadFourCC()!="ATOM") { throw new IOException("Bad FourCC. ATOM is expected."); } // count: int count = reader.ReadInt32(); for ( short i=0; i<count; i++) { short idA = reader.ReadInt16(); short idB = Add( reader.ReadString() ); if (idA!=idB) { throw new IOException("Bad ATOM table."); } } }