2

我可以从中获取字节数组(ARGB)D3D11Texture2D吗?DirectX 11 没有这些功能GetSurfaceLevelLockRect.

4

2 回答 2

3

在您的 DeviceContext 上使用 Map/Unmap 函数。这仅适用于支持读取的纹理类型。

例如

D3D11_MAP eMapType = D3D11_MAP_READ;
D3D11_MAPPED_SUBRESOURCE mappedResource;

pDeviceContext->Map(m_pTexture, 0, eMapType, NULL, &mappedResource);

BYTE* pYourBytes = (BYTE*)mappedResource.pData;
unsigned int uiPitch = mappedResource.RowPitch;

// Do stuff here

pDevice->GetDeviceContext()->Unmap(m_pTexture, 0);

如果要读取渲染纹理的内容,则需要首先创建与渲染纹理格式相同的暂存纹理,然后使用 DeviceContext->CopyResource() 将渲染纹理复制到暂存纹理。

于 2013-04-04T23:42:42.737 回答
1

为什么要读回纹理的数据?您将数据保存在 RAM 中,然后将其上传到 VRAM。您仍应将其保存在 RAM 或磁盘中。我错过了什么吗?

您可能想看看它是如何在DirectX 11 帧缓冲区捕获中解决的(C++,没有 Win32 或 D3DX)

于 2013-04-04T13:23:55.703 回答