public void Apply(GraphicsDevice graphicsDevice, EffectParameterResourceBinding[] bindings, EffectParameterCollectionGroup parameterCollectionGroup, ref EffectStateBindings effectStateBindings, bool applyEffectStates) { // Apply shader parameters for (int i = 0; i < bindings.Length; i++) { bindings[i].ApplyParameterWithUpdater(graphicsDevice, ref bindings[i].Description, parameterCollectionGroup); } if (applyEffectStates) { // Apply graphics states var rasterizerState = parameterCollectionGroup.GetValue<RasterizerState>(effectStateBindings.RasterizerStateKeyIndex); if (rasterizerState != null) { graphicsDevice.SetRasterizerState(rasterizerState); } var depthStencilState = parameterCollectionGroup.GetValue<DepthStencilState>(effectStateBindings.DepthStencilStateKeyIndex); if (depthStencilState != null) { graphicsDevice.SetDepthStencilState(depthStencilState); } var blendState = parameterCollectionGroup.GetValue<BlendState>(effectStateBindings.BlendStateKeyIndex); if (blendState != null) { graphicsDevice.SetBlendState(blendState); } } }
public void PrepareBindings(EffectParameterResourceBinding[] bindings) { for (int i = 0; i < bindings.Length; i++) { PrepareBinding(ref bindings[i]); } }
public void UnbindResources(GraphicsDevice graphicsDevice, EffectParameterResourceBinding[] bindings) { // look for shader resource and unbind for (int i = 0; i < bindings.Length; i++) { var binding = bindings[i]; if (binding.Description.Param.Class == EffectParameterClass.ShaderResourceView) graphicsDevice.SetShaderResourceView(binding.Description.Stage, binding.Description.SlotStart, null); else if (binding.Description.Param.Class == EffectParameterClass.UnorderedAccessView) graphicsDevice.SetUnorderedAccessView(binding.Description.Stage, binding.Description.SlotStart, null); } }
private void PrepareBinding(ref EffectParameterResourceBinding binding) { switch (binding.Description.Param.Class) { case EffectParameterClass.ConstantBuffer: // Constant buffer binding.ApplyParameterWithUpdater = UpdateConstantBufferFromUpdater; binding.ApplyParameterDirect = UpdateConstantBufferDirect; break; case EffectParameterClass.Sampler: // Sampler state binding.ApplyParameterWithUpdater = UpdateSamplerFromUpdater; binding.ApplyParameterDirect = UpdateSamplerDirect; break; case EffectParameterClass.ShaderResourceView: // Texture & StructuredBuffer (using ShaderResourceView) binding.ApplyParameterWithUpdater = UpdateShaderResourceViewFromUpdater; binding.ApplyParameterDirect = UpdateShaderResourceViewDirect; break; case EffectParameterClass.UnorderedAccessView: // RWTexture, RWStructuredBuffer only valid for Compute shaders. binding.ApplyParameterWithUpdater = UpdateUnorderedAccessViewFromUpdater; binding.ApplyParameterDirect = UpdateUnorderedAccessViewDirect; break; } }