Version: 2023.2
public void ExecuteCommandBuffer (Rendering.CommandBuffer commandBuffer);

参数

commandBuffer 指定要执行的命令缓冲区。

描述

调度自定义图形命令缓冲区的执行。

ScriptableRenderContext.ExecuteCommandBuffer 调用过程中,ScriptableRenderContext 会将 commandBuffer 参数注册到自己要执行的命令内部列表中。 这些命令(包括存储在自定义 commandBuffer 中的命令)的实际执行发生在 ScriptableRenderContext.Submit 期间。

如果绘制调用取决于在 CommandBuffer 中指定的管线的状态,请确保在其他 ScriptableRenderContext 方法(如 DrawRenderers、DrawShadows)之前调用 ExecuteCommandBuffer。 以下代码示例说明按错误顺序提交命令的情况;接下来说明行为符合预期的情况:

using UnityEngine;
using UnityEngine.Rendering;

internal class ExecuteCommandBufferExample { // TODO: replace with actual settings ScriptableRenderContext scriptableRenderContext; DrawingSettings drawingSettings; CullingResults cullingResults = new CullingResults(); FilteringSettings filteringSettings = new FilteringSettings();

Matrix4x4 myViewMatrix = Matrix4x4.Scale(new Vector3(2f, 2f, 2f));

public void DrawRenderersExampleIncorrect() { CommandBuffer myCommandBuffer = new CommandBuffer();

myCommandBuffer.SetViewMatrix(myViewMatrix);

scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings); // NO! When scriptableRenderContext submits the DrawRenderers command, it will not know about myViewMatrix :(

scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer); myCommandBuffer.Clear(); }

public void DrawRenderersExampleBetter() { CommandBuffer myCommandBuffer = new CommandBuffer();

myCommandBuffer.SetViewMatrix(myViewMatrix);

scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer); myCommandBuffer.Clear();

scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings); // OK! During next scriptableRenderContext.Submit() call, scriptableRenderContext will set myViewMatrix *before* drawing the renderers. } }

另请参阅:CommandBuffer