public override ShaderEffectBase CreateShaderEffect(Stream stream, ShaderEffectSamplerAnisotropy anisotropyOverride) { var abstraction = new ShaderEffect(this); if (!abstraction.Init(stream, anisotropyOverride)) { abstraction.Dispose(); throw new Exception("Failed to create ShaderEffect"); } return(abstraction); }
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 override ShaderEffectBase CreateShaderEffect(Stream stream, ShaderEffectSamplerAnisotropy anisotropyOverride) { throw new NotImplementedException(); }
public abstract ShaderEffectBase CreateShaderEffect(Stream stream, ShaderEffectSamplerAnisotropy anisotropyOverride);