c++ - D3D11Texture2D到具有不同上下文和设备的另一个纹理

标签 c++ directx-11 dxgi

我试图将纹理表面从其他上下文复制到纹理以创建sharedBitmap,但结果是黑色图片。怎么了?

hr = device->CreateTexture2D(&texDesc, 0, &tmpTexture);

IDXGIResource1* pOtherResource(NULL);
hr = secondTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&pOtherResource);
HANDLE sharedHandle;
hr = pOtherResource->GetSharedHandle(&sharedHandle);

hr = device->OpenSharedResource(sharedHandle, __uuidof(ID3D11Texture2D), (void**)&tmpTexture);

m_DeviceContext->CopyResource(tmpTexture, secondTexture);

最佳答案

纹理共享是可能的,但存在重要限制。

首先,您需要启用调试层并检查调试SDK层可能发出的调试输出。

其次,不能从您的问题中得出问题的两个设备属于同一个DXGI适配器,这一点很重要。

第三,可能涉及同步,忽略同步会导致黑色:Surface Sharing Between Windows Graphics APIs -- DXGI 1.1 Synchronized Shared Surfaces

关于c++ - D3D11Texture2D到具有不同上下文和设备的另一个纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60681882/

相关文章:

c++ - 无法打开包含文件 : 'dxgi1_2.h' : No such file or directory

c++ - 获取显存量

c++ - 优先规则

使用 GNU gettext、libunistring 的 C++ l10n、i18n 解决方案

c++ - 如何让 C 或 C++ 程序每 X 秒执行一次特定任务,但仍然在其间执行其他任务?

c++ - 循环输出多个变量到一个ASCII文件

c++ - DirectX 11 append 缓冲区字节宽度

c++ - 延迟的上下文未填充D3D11_MAPPED_SUBRESOURCE大小

c++ - 了解 ID3D11Device 和 ID3D11DeviceContext