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。