public virtual bool Init(ID3D11Device device, ShaderInitParams InitParams) { // Attempt to construct pixel shader if (InitParams.PixelShaderFile.IsValid()) { Blob PixelBytecode = ConstructBytecode(InitParams.PixelShaderFile); OurPixelShader = device.CreatePixelShader(PixelBytecode); PixelBytecode.Dispose(); } // Attempt to construct vertex shader if (InitParams.VertexShaderFile.IsValid()) { Blob VertexBytecode = ConstructBytecode(InitParams.VertexShaderFile); OurVertexShader = device.CreateVertexShader(VertexBytecode); Layout = device.CreateInputLayout(InitParams.Elements, VertexBytecode); VertexBytecode.Dispose(); } // Attempt to construct geometry shader if (InitParams.GeometryShaderFile.IsValid()) { Blob GeometryBytecode = ConstructBytecode(InitParams.GeometryShaderFile); OurGeometryShader = device.CreateGeometryShader(GeometryBytecode); GeometryBytecode.Dispose(); } SamplerDescription samplerDesc = new SamplerDescription() { Filter = Filter.Anisotropic, AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, MipLODBias = 0, MaxAnisotropy = 8, ComparisonFunction = ComparisonFunction.Always, BorderColor = new Color4(0, 0, 0, 0), MinLOD = 0, MaxLOD = 0 }; SamplerState = device.CreateSamplerState(samplerDesc); ConstantCameraBuffer = ConstantBufferFactory.ConstructBuffer <DCameraBuffer>(device, "CameraBuffer"); ConstantLightBuffer = ConstantBufferFactory.ConstructBuffer <LightBuffer>(device, "LightBuffer"); ConstantMatrixBuffer = ConstantBufferFactory.ConstructBuffer <MatrixBuffer>(device, "MatrixBuffer"); ConstantEditorParamsBuffer = ConstantBufferFactory.ConstructBuffer <EditorParameterBuffer>(device, "EditorBuffer"); return(true); }
public D3D11Shader(ID3D11Device device, ShaderDescription description) : base(description.Stage, description.EntryPoint) { if (description.ShaderBytes.Length > 4 && description.ShaderBytes[0] == 0x44 && description.ShaderBytes[1] == 0x58 && description.ShaderBytes[2] == 0x42 && description.ShaderBytes[3] == 0x43) { Bytecode = Util.ShallowClone(description.ShaderBytes); } else { Bytecode = CompileCode(description); } switch (description.Stage) { case ShaderStages.Vertex: DeviceShader = device.CreateVertexShader(Bytecode); break; case ShaderStages.Geometry: DeviceShader = device.CreateGeometryShader(Bytecode); break; case ShaderStages.TessellationControl: DeviceShader = device.CreateHullShader(Bytecode); break; case ShaderStages.TessellationEvaluation: DeviceShader = device.CreateDomainShader(Bytecode); break; case ShaderStages.Fragment: DeviceShader = device.CreatePixelShader(Bytecode); break; case ShaderStages.Compute: DeviceShader = device.CreateComputeShader(Bytecode); break; default: throw Illegal.Value <ShaderStages>(); } }