Exemple #1
0
        public void ApplyChanges(CommandEncoder commandEncoder)
        {
            if (!_isDirty)
            {
                return;
            }

            switch (ResourceBinding.ResourceType)
            {
            case ShaderResourceType.ConstantBuffer:
                switch (ResourceBinding.ShaderType)
                {
                case ShaderType.VertexShader:
                    commandEncoder.SetVertexShaderConstantBuffer(ResourceBinding.Slot, (Buffer)_data);
                    break;

                case ShaderType.PixelShader:
                    commandEncoder.SetPixelShaderConstantBuffer(ResourceBinding.Slot, (Buffer)_data);
                    break;

                default:
                    throw new InvalidOperationException();
                }
                break;

            case ShaderResourceType.StructuredBuffer:
                switch (ResourceBinding.ShaderType)
                {
                case ShaderType.VertexShader:
                    commandEncoder.SetVertexShaderStructuredBuffer(ResourceBinding.Slot, (Buffer)_data);
                    break;

                case ShaderType.PixelShader:
                    commandEncoder.SetPixelShaderStructuredBuffer(ResourceBinding.Slot, (Buffer)_data);
                    break;

                default:
                    throw new InvalidOperationException();
                }
                break;

            case ShaderResourceType.Texture:
                switch (ResourceBinding.ShaderType)
                {
                case ShaderType.VertexShader:
                    commandEncoder.SetVertexShaderTexture(ResourceBinding.Slot, (Texture)_data);
                    break;

                case ShaderType.PixelShader:
                    commandEncoder.SetPixelShaderTexture(ResourceBinding.Slot, (Texture)_data);
                    break;

                default:
                    throw new InvalidOperationException();
                }
                break;

            case ShaderResourceType.Sampler:
                switch (ResourceBinding.ShaderType)
                {
                case ShaderType.VertexShader:
                    commandEncoder.SetVertexShaderSampler(ResourceBinding.Slot, (SamplerState)_data);
                    break;

                case ShaderType.PixelShader:
                    commandEncoder.SetPixelShaderSampler(ResourceBinding.Slot, (SamplerState)_data);
                    break;

                default:
                    throw new InvalidOperationException();
                }
                break;

            default:
                throw new InvalidOperationException();
            }

            _isDirty = false;
        }