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; }