ID3D11Device :: CreateBuffer返回无效参数错误

时间:2017-12-12 18:55:18

标签: c++ directx-11

我编写了这个函数,以便在一个函数调用中执行所有必要的步骤来创建一个常量缓冲区。

template <typename T> 
ID3D11Buffer* Engine::CreateCBuffer(T &src,ENGINE_DATA &data, int registerV)
{
D3D11_BUFFER_DESC bd;

ZeroMemory(&bd, sizeof(bd));
bd.Usage = D3D11_USAGE_DYNAMIC;
bd.ByteWidth = sizeof(T);
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
bd.StructureByteStride = 0;
bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
bd.MiscFlags = 0;


// Fill in the subresource data.        
D3D11_SUBRESOURCE_DATA subrsrc;         
subrsrc.pSysMem = &src;                 
subrsrc.SysMemPitch = 0;                
subrsrc.SysMemSlicePitch = 0;                                                               

ID3D11Buffer* pBuffer;

data.device->CreateBuffer(&bd, &subrsrc, &pBuffer);
data.devContext->VSSetConstantBuffers(registerV, 1, &pBuffer);

return pBuffer;
}

我已经用它将trnsformation / view / projection矩阵传递给顶点缓冲区。 现在我试图在另一个常量缓冲区中传递一个亮位置。

//code for matrices buffer
renderer.getObject(0)->setTMBuffer(
        CeateCBuffer(renderer.getObject(0)->getTransformationMatrix()->transformationMatrix, data, 1));


//code for light position buffer
lBuffer = CreateCBuffer(light.direction, data, 0);

在这两种情况下,所有变量都被正确声明并初始化。

这是相对于这些缓冲区的着色器代码部分。

cbuffer LIGHT : register (b0)
{
    float3 light_direction;

};

cbuffer TRANSFORMATION_MATRIX : register (b1)
{
    float4x4 transformationMatrix;
};

我不明白为什么当我尝试创建灯光位置缓冲区时,函数CreateBuffer会返回错误87(无效参数)。

0 个答案:

没有答案