晚上好,
我正在尝试将 XMFLOAT3X3 发送到常量缓冲区(请参见下面的代码)。
ZeroMemory(&constDesc, sizeof(constDesc));
constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
constDesc.ByteWidth = sizeof(XMFLOAT3X3);
constDesc.Usage = D3D11_USAGE_DEFAULT;
result = m_pDevice->CreateBuffer(&constDesc,0,&m_pTexTransformCB);
if (FAILED(result)) {
MessageBoxA(NULL,"Error creating constant buffer m_pTexTransformCB", "Error", MB_OK);
return false;
}
但是编译器告诉我 XMFLOAT3X3 是常量缓冲区字节宽度的无效维度:
D3D11: ERROR: ID3D11Device::CreateBuffer: The Dimensions are invalid. For ConstantBuffers, marked with the D3D11_BIND_CONSTANT_BUFFER BindFlag, the ByteWidth (value = 36) must be a multiple of 16 and be less than or equal to 65536. [ STATE_CREATION ERROR #66: CREATEBUFFER_INVALIDDIMENSIONS ]
但是,我对 HLSL 有点陌生,所以我不确定是否将 bytewidth 设置为 48,着色器的 cbuffer 中的 float3x3 是否会正确注册。我应该如何最好地处理这个?
如果您需要更多信息,请发表评论,我将编辑问题。我希望它足够清楚。