使用D3D11_MAPPED_SUBRESOURCE和Map / Unmap时纹理输出混乱

时间:2019-05-05 14:45:36

标签: c++ directx

我正在尝试使用Map / Unmap更改Texture2D中的数据,并且遇到一个问题,即纹理似乎仅出现在屏幕的顶部5处,其余的只是随机像素。 (screenshot for clarification)

以下是一些代码:

uint32_t* m_colorBuffer; //buffer to fill the texture with random colors
D3D11_SUBRESOURCE_DATA m_textureData;
ID3D11Texture2D* m_texture;

D3D11_MAPPED_SUBRESOURCE mappedResource;
m_deviceContext->Map(m_texture, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);

uint32_t rowSize = 256 * 4;
BYTE* mappedData = reinterpret_cast<BYTE*>(mappedResource.pData);
for (int i = 0; i < 256; i++) {

    memcpy(mappedData, &(m_colorBuffer[i*rowSize]), rowSize);
    mappedData += mappedResource.RowPitch;
}

m_deviceContext->Unmap(m_texture, 0);

有人可以告诉我我在做什么错吗? 如果需要,我很乐意提供更多代码。

1 个答案:

答案 0 :(得分:2)

好像我的rowSize以字节为单位,我正在用它来索引m_colorBuffer。