C++ 从纹理获取字节数组

C++ 从纹理获取字节数组,c++,directx-11,C++,Directx 11,我可以从D3D11Texture2D获取字节数组(ARGB)吗? DirectX 11没有函数GetSurfaceLevel和LockRect为什么要读回纹理的数据?您将数据保存在RAM中,然后将其上载到VRAM。您应该仍将其保存在RAM或磁盘上。我错过什么了吗 您可能想看看它是如何在中解决的,为什么要读回纹理的数据?您将数据保存在RAM中,然后将其上载到VRAM。您应该仍将其保存在RAM或磁盘上。我错过什么了吗 您可能想看看它是如何在设备Context上使用映射/取消映射功能解决的。这仅适用于

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

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


您可能想看看它是如何在

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


您可能想看看它是如何在设备Context上使用映射/取消映射功能解决的。这仅适用于支持读取的纹理类型

乙二醇


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

在DeviceContext上使用映射/取消映射功能。这仅适用于支持读取的纹理类型

乙二醇


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

可能纹理是由着色器创建的。我必须以ARGB格式在RAM中拥有现有纹理的数据。谢谢,我会看看你的例子。对,因为用着色器创建纹理并读回是一种非常有效的方法。如果你会说,它是通过帧缓冲区创建的,然后。。。好的,但在这种情况下,您可以通过帧缓冲区API访问它。如果我使用着色器,它将不起作用。我能解决这个问题吗?我在哪里可以找到帧缓冲区API的示例?此问答可能会有所帮助:可能纹理是由着色器创建的。我必须以ARGB格式在RAM中拥有现有纹理的数据。谢谢,我会看看你的例子。对,因为用着色器创建纹理并读回是一种非常有效的方法。如果你会说,它是通过帧缓冲区创建的,然后。。。好的,但在这种情况下,您可以通过帧缓冲区API访问它。如果我使用着色器,它将不起作用。我能解决这个问题吗?在哪里可以找到帧缓冲区API的示例?此问答可能有助于:
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);