我可以从D3D11Texture2D
获取字节数组(ARGB)吗?
DirectX 11没有GetSurfaceLevel
和LockRect
。
答案 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)
中的解决方法