Example #1
0
        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);
                }
            }
        }
Example #2
0
 public void PrepareBindings(EffectParameterResourceBinding[] bindings)
 {
     for (int i = 0; i < bindings.Length; i++)
     {
         PrepareBinding(ref bindings[i]);
     }
 }
Example #3
0
 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);
     }
 }
Example #4
0
 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;
     }
 }