/// <summary> /// Applies the material to the given render state. /// </summary> /// <param name="renderState">Current render state</param> /// <param name="instancingMode">The instancing mode for which to apply the material.</param> /// <param name="previousMaterial">The previously applied material.</param> /// <exception cref="SeeingSharpGraphicsException">Effect + this.Effect + not supported!</exception> internal override void Apply(RenderState renderState, MaterialApplyInstancingMode instancingMode, MaterialResource previousMaterial) { D3D11.DeviceContext deviceContext = renderState.Device.DeviceImmediateContextD3D11; bool isResourceSameType = (previousMaterial != null) && (previousMaterial.ResourceType == base.ResourceType); if (!isResourceSameType) { deviceContext.PixelShader.SetSampler(0, m_defaultResources.GetSamplerState(TextureSamplerQualityLevel.Low)); } // Set texture resource (if set) if (m_textureResource != null) { deviceContext.PixelShader.SetShaderResource(0, m_textureResource.TextureView); } else { deviceContext.PixelShader.SetShaderResource(0, null); } // Set shader resources deviceContext.VertexShader.Set(m_vertexShader.VertexShader); deviceContext.PixelShader.Set(m_pixelShader.PixelShader); }
/// <summary> /// Applies the material to the given render state. /// </summary> /// <param name="renderState">Current render state</param> /// <param name="instancingMode">The instancing mode for which to apply the material.</param> /// <param name="previousMaterial">The previously applied material.</param> internal override void Apply(RenderState renderState, MaterialApplyInstancingMode instancingMode, MaterialResource previousMaterial) { D3D11.DeviceContext deviceContext = renderState.Device.DeviceImmediateContextD3D11; bool isResourceSameType = (previousMaterial != null) && (previousMaterial.ResourceType == base.ResourceType); // Apply local shader configuration if (m_cbPerMaterialDataChanged) { m_cbPerMaterial.SetData( deviceContext, new CBPerMaterial() { ClipFactor = m_clipFactor, MaxClipDistance = m_maxClipDistance, Texture0Factor = m_textureResource != null ? 1f : 0f, AdjustTextureCoordinates = m_adjustTextureCoordinates ? 1f : 0f, AddToAlpha = m_addToAlpha, MaterialDiffuseColor = m_materialDiffuseColor }); m_cbPerMaterialDataChanged = false; } // Apply sampler and constants if (!isResourceSameType) { deviceContext.PixelShader.SetSampler(0, m_defaultResources.GetSamplerState(TextureSamplerQualityLevel.Low)); } deviceContext.PixelShader.SetConstantBuffer(3, m_cbPerMaterial.ConstantBuffer); deviceContext.VertexShader.SetConstantBuffer(3, m_cbPerMaterial.ConstantBuffer); // Set texture resource (if set) if ((m_textureResource != null) && (renderState.ViewInformation.ViewConfiguration.ShowTexturesInternal)) { deviceContext.PixelShader.SetShaderResource(0, m_textureResource.TextureView); } else { deviceContext.PixelShader.SetShaderResource(0, null); } // Set shader resources if (!isResourceSameType) { deviceContext.VertexShader.Set(m_vertexShader.VertexShader); deviceContext.PixelShader.Set(m_pixelShader.PixelShader); } }