我可以从中获取字节数组(ARGB)D3D11Texture2D
吗?DirectX 11 没有这些功能GetSurfaceLevel
和LockRect
.
问问题
3425 次
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 回答