版本:Unity 6 (6000.0)
语言英语
  • C#

Graphics.SetRandomWriteTarget

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交,但我们会阅读每个用户建议的更改,并在适用情况下进行更新。

关闭

提交失败

出于某种原因,您的建议更改无法提交。请在几分钟后重试。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void SetRandomWriteTarget(int index, ComputeBuffer uav, bool preserveCounterValue = false);

声明

public static void SetRandomWriteTarget(int index, GraphicsBuffer uav, bool preserveCounterValue = false);

声明

public static void SetRandomWriteTarget(int index, RenderTexture uav);

参数

index 随机写入目标的索引。
uav 设置为写入目标的缓冲或纹理。
preserveCounterValue 是否保持追加/消耗计数器值不变。

说明

Shader Model 4.5 级别像素着色器设置随机写入目标。

Shader Model 4.5 及更高级别的像素着色器可以写入某些纹理和缓冲的任意位置,这些位置在 UsingDX11GL3Features 中称为“无序访问视图”(UAV)。这些“随机写入”目标的设置方式类似于设置多个渲染目标的方式。你可以使用带有 enableRandomWrite 标志的 RenderTexture 或使用 ComputeBuffer 作为目标。

通过添加已使用的渲染目标的数量来偏移传给 SetRandomWriteTarget 的索引值。该值可能与着色器中设置的固定寄存器索引不太一致,因为 UAV 索引值在不同的平台之间可能有所不同。有关这些差异的详情,请参阅特定平台的文档。在 DX11 上,第一个有效的 UAV 索引是活动渲染目标的数量,因此在只有一个渲染目标的常见情况下,UAV 索引将从 1 开始。使用自动转换的 HLSL 着色器的平台将匹配此行为,但是,使用手工编写的 GLSL 着色器时,索引将匹配绑定。

设置 ComputeBuffer 时,preserveCounterValue 参数表示是否保持计数器值不变或将其重置为 0(默认行为)。

目标保持设置,直到您手动使用 ClearRandomWriteTargets 清除它们。最佳做法是在渲染完成后调用 ClearRandomWriteTargets。如果您不这样做,可能会出现渲染问题,并且一些 Unity 内置渲染通道可能会崩溃。

其他资源:RenderTexture.enableRandomWriteComputeBufferComputeBuffer.SetCounterValueUsingDX11GL3Features