2017-10-30 23 views
0

定数バッファを部分的に更新しようとしていますが(openglのように)、私はいつも奇妙なエラーを受け取ります。DirectX 11.1で定数バッファを部分的に更新する方法

void DX11UniformBuffer::Update(void * data, unsigned int offset, unsigned int size) 
{ 
    const D3D11_BOX sDstBox = { offset, 0U, 0U, size, 1U, 1U }; 
    DX11Context::GetContext()->UpdateSubresource1(buffer, 0, &sDstBox, data, 0, 0,D3D11_COPY_DISCARD); 
    DX11Context::GetContext()->PSSetConstantBuffers1(0, 1, &buffer, &offset, &size); 
} 

同等定数バッファ部分更新機能(また、私はそれをサポートしてCBOffsetting)...

void GLUniformBuffer::Update(void * data, unsigned int offset, unsigned int size) 
{ 
    glBindBuffer(GL_UNIFORM_BUFFER, buffer); 
    glBufferSubData(GL_UNIFORM_BUFFER, offset, size, data); 
    glBindBuffer(GL_UNIFORM_BUFFER, 0); 
} 

しかし、私はこれらのエラーを取得していますし、何も描画されません(OpenGLで)

D3D11 ERROR: ID3D11DeviceContext::UpdateSubresource1: pDstBox is not a valid box, as the End coordinates must be greater than or equal to the Start. *pDstBox = { left:144, top:0, front:0, right:48, bottom:1, back:1 }. [ RESOURCE_MANIPULATION ERROR #288: UPDATESUBRESOURCE_INVALIDDESTINATIONBOX] 

答えて

0

D3D11_BOXrightの値は、位置、ないあります。 rightの値を取得するには、offsetsizeを一緒に追加する必要があります。 sDstBoxは、次のように初期化する必要があります。

const D3D11_BOX sDstBox = { offset, 0U, 0U, offset + size, 1U, 1U }; 
関連する問題