【发布时间】:2013-04-05 11:29:35
【问题描述】:
我可以从D3D11Texture2D 获取字节数组 (ARGB) 吗?
DirectX 11 没有GetSurfaceLevel 和LockRect 的功能。
【问题讨论】:
标签: c++ directx-11
我可以从D3D11Texture2D 获取字节数组 (ARGB) 吗?
DirectX 11 没有GetSurfaceLevel 和LockRect 的功能。
【问题讨论】:
标签: c++ directx-11
在您的 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() 将渲染纹理复制到暂存纹理。
【讨论】:
为什么要读回纹理的数据?您将数据保存在 RAM 中,然后将其上传到 VRAM。您仍应将其保存在 RAM 或磁盘中。我错过了什么吗?
您可能想看看它是如何在DirectX 11 framebuffer capture (C++, no Win32 or D3DX) 中解决的
【讨论】: