【发布时间】:2019-06-30 23:28:47
【问题描述】:
我试图将一个 2D 浮点数组传递给一个常量缓冲区:
//In the shader:
cbuffer myBuffer
{
other buffer elements
.
.
float myArray[16][16];
};
//In the CPU:
struct myBuffer_struct
{
other buffer elements
.
.
float myArray[16][16];
};
但是我在处理填充时遇到了很多问题。我尝试使用
float4[大小/4][大小]
在我的 cbuffer 和许多其他类型组合中,但我无法以任何方式通过索引访问我的数组。这样做的正确方法是什么?
谢谢。
【问题讨论】:
-
使用适当的编译器选项摆脱填充。如果您的
struct需要进行字节打包,请使用#pragma或您的编译器使用的任何方式指定它。 -
我很困惑为什么在包含单个成员的结构中会有填充,其对齐要求小于其自身的大小。数组元素之间不能有填充。
-
我的结构中有更多元素,而不仅仅是二维数组
-
对于 cbuffer 填充,所有字段的详细信息(大小和顺序)都很重要,因为它们相互依赖。你能发布你对这两个声明的完整定义吗?
标签: c++ directx-11 hlsl