在创建了一些常量缓冲区之后,其中一些开始无法正确初始化。
使用名为 MiscStream 的结构创建一个常量缓冲区,该结构定义为:
struct MiscStream {
int rw,rh;
float shine_factor;
float dist_factor;
int random_number;
};
并初始化为:
D3D11_BUFFER_DESC dx_misc_buffer_desc;
ID3D11Buffer* dx_misc_buffer;
ZeroMemory(&dx_misc_buffer_desc,sizeof dx_misc_buffer_desc);
dx_misc_buffer_desc.BindFlags=D3D11_BIND_CONSTANT_BUFFER;
dx_misc_buffer_desc.Usage=D3D11_USAGE_DYNAMIC;
dx_misc_buffer_desc.ByteWidth=sizeof(MiscStream);
dx_misc_buffer_desc.StructureByteStride=0;
dx_misc_buffer_desc.CPUAccessFlags=D3D11_CPU_ACCESS_WRITE;
dx_misc_buffer_desc.MiscFlags=0;
hr=dx_device->CreateBuffer(&dx_misc_buffer_desc,NULL,&dx_misc_buffer);
hr 将作为 E_INVALIDARG 返回,程序将失败。
许多其他常量缓冲区都是以这种方式设置的,但它们的结构中都有向量和矩阵。
我将 MiscStruct 更改为
struct MiscStream {
D3DXVECTOR3 __r;
int rw,rh;
float shine_factor;
float dist_factor;
int random_number;
};
它没有错误地工作。
有最小结构尺寸吗?怎么了?