Unity 用于覆盖 GPU 渲染状态的一组值。
当您调用 ScriptableRenderContext.DrawRenderers 时,您可以使用它来覆盖部分或全部几何体的渲染状态。
注意:您必须设置 mask 以告知 Unity 要覆盖渲染状态的哪些部分。例如,要应用 blendState 中的值,mask 必须包含 RenderStateMask.Blend。
using UnityEngine; using UnityEngine.Rendering;
public class OverrideRenderStateExample { ScriptableRenderContext scriptableRenderContext;
// Placeholder data DrawingSettings exampleDrawingSettings; CullingResults exampleCullingResults = new CullingResults(); FilteringSettings exampleFilteringSettings = new FilteringSettings();
public void OverrideRenderState() { // Tell Unity how to override the render state when it draws the geometry. var stateBlock = new RenderStateBlock(RenderStateMask.Depth); stateBlock.depthState = new DepthState(true, CompareFunction.LessEqual);
// Schedule the drawing operation. scriptableRenderContext.DrawRenderers(exampleCullingResults, ref exampleDrawingSettings, ref exampleFilteringSettings, ref stateBlock);
// Perform all scheduled tasks, in the order that they were scheduled. scriptableRenderContext.Submit(); } }
其他资源:ScriptableRenderContext.DrawRenderers、RenderStateMask。
blendState | 指定新的混合状态。 |
depthState | 指定新的深度状态。 |
mask | 指定要覆盖 GPU 渲染状态的哪些部分。 |
rasterState | 指定新的光栅化状态。 |
stencilReference | 根据模板状态,要与之比较的值和/或要写入缓冲区的值。 |
stencilState | 指定新的模板状态。 |
RenderStateBlock | 使用指定的遮罩创建一个新的渲染状态块。 |