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