Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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>();
            }
        }