public bool Init(Stream stream, ShaderEffectSamplerAnisotropy anisotropyOverride) { // read shader effect desc var desc = new ShaderEffectDesc(); // TODO: read/create ShaderEffectDesc. if (anisotropyOverride != ShaderEffectSamplerAnisotropy.Default && desc.samplers != null) { for (int i = 0; i != desc.samplers.Length; ++i) { desc.samplers[i].anisotropy = anisotropyOverride; } } // read shaders var reader = new StreamBinaryReader(stream); int shaderCount = stream.ReadByte(); for (int i = 0; i != shaderCount; ++i) { // read shader type var type = (ShaderType)stream.ReadByte(); // read shader data int shaderSize = reader.ReadInt32(); var shaderData = new byte[shaderSize]; int read = stream.Read(shaderData, 0, shaderSize); if (read < shaderSize) { throw new Exception("End of file reached"); } // create shader if (!CreateShader(shaderData, type)) { return(false); } } return(InitFinish(ref desc)); }
public abstract ShaderEffectBase CreateShaderEffect(ShaderBase vs, ShaderBase ps, ShaderBase hs, ShaderBase ds, ShaderBase gs, ShaderEffectDesc desc, bool disposeShaders);
protected abstract bool InitFinish(ref ShaderEffectDesc desc);