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

GraphicsBuffer.Target.Structured

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们不能接受所有提交的内容,但我们会阅读用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

GraphicsBuffer 可以用作结构化缓冲区。

在 HLSL 着色器中,这映射到 StructuredBuffer<T>RWStructuredBuffer<T>

当您构建此类型的 GraphicsBuffer 时,stride 的值必须与 HLSL 代码中相应 StructuredBuffer 结构类型一致。

stride 的值也必须是 4 的倍数,且小于 2048。

为了满足某些平台上的要求并避免性能问题,stride 应该为 16 的倍数。使用 float4 和 float4x4 变量创建 16 的倍数,并将较小的变量放在其中。避免使用“填充”变量来创建 16 的倍数,例如使用 float3 变量来填充包含单个 float 的结构体,因为某些数据类型在不同平台上可能具有不同的尺寸。

如果您混合使用不同大小的变量,着色器结构化缓冲区的数据布局可能因图形 API 而异。这意味着 ComputeShader.SetBufferMaterial.SetBuffer 可能会覆盖数据或将变量设置为错误的值。有关更多信息,请参阅 为不同的图形 API 编写着色器

请参阅 Microsoft 的 HLSL 文档,了解有关 StructuredBufferRWStructuredBuffer 的信息。

DirectX 11 不允许 Index 或 ::Vertex 缓冲区也为 Structured。对于使用 DirectX 11 兼容性的计算着色器网格数据访问,最好使用 Raw

其他资源:GraphicsBufferComputeShaderMaterial.SetBuffer