private void ReadEffect (BinaryReader reader)
{
// TODO: Maybe we should be reading in a string
// table here to save some bytes in the file.
// Read in all the constant buffers.
var buffers = (int)reader.ReadByte ();
ConstantBuffers = new ConstantBuffer[buffers];
for (var c = 0; c < buffers; c++)
{
#if OPENGL
string name = reader.ReadString ();
#else
string name = null;
#endif
// Create the backing system memory buffer.
var sizeInBytes = (int)reader.ReadInt16 ();
// Read the parameter index values.
var parameters = new int[reader.ReadByte ()];
var offsets = new int[parameters.Length];
for (var i = 0; i < parameters.Length; i++)
{
parameters [i] = (int)reader.ReadByte ();
offsets [i] = (int)reader.ReadUInt16 ();
}
var buffer = new ConstantBuffer(GraphicsDevice,
sizeInBytes,
parameters,
offsets,
name);
ConstantBuffers[c] = buffer;
}
// Read in all the shader objects.
var shaders = (int)reader.ReadByte();
_shaders = new Shader[shaders];
for (var s = 0; s < shaders; s++)
_shaders[s] = new Shader(GraphicsDevice, reader);
// Read in the parameters.
Parameters = ReadParameters(reader);
// Read the techniques.
var techniqueCount = (int)reader.ReadByte();
var techniques = new EffectTechnique[techniqueCount];
for (var t = 0; t < techniqueCount; t++)
{
var name = reader.ReadString();
var annotations = ReadAnnotations(reader);
var passes = ReadPasses(reader, this, _shaders);
techniques[t] = new EffectTechnique(this, name, passes, annotations);
}
Techniques = new EffectTechniqueCollection(techniques);
CurrentTechnique = Techniques[0];
}