从纹理中获取字节数组

时间:2013-04-04 12:37:27

标签: c++ directx-11

我可以从D3D11Texture2D获取字节数组(ARGB)吗? DirectX 11没有GetSurfaceLevelLockRect

功能

2 个答案:

答案 0 :(得分: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()将渲染纹理复制到分段纹理

答案 1 :(得分:0)

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

您可能希望了解DirectX 11 framebuffer capture (C++, no Win32 or D3DX)

中的解决方法