【问题标题】:D3D11Texture2D to another texture with different context and deviceD3D11Texture2D 到具有不同上下文和设备的另一个纹理
【发布时间】:2020-03-14 10:43:08
【问题描述】:

我正在尝试将纹理表面从不同的上下文复制到纹理以创建 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);

【问题讨论】:

  • 我想从 secondTexture 复制到 tmpTexture。 tmp 纹理由设备创建,第二个由 m_DeviceContext 创建。怎么做?
  • 你不需要调用 hr = device->CreateTexture2D(&texDesc, 0, &tmpTexture);如果您打算使用 OpenSharedResource 从共享句柄初始化 tmpTexture。
  • 同时检查所有 hr 结果以查看是否出现任何错误。也有一些限制,例如不能共享 MSAA 纹理。在此处查看最后的要求:docs.microsoft.com/en-us/windows/win32/api/d3d11/…

标签: c++ directx-11 dxgi


【解决方案1】:

纹理共享是可能的,但有一些重要的限制。

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

其次,从你的问题来看,这两个设备并不属于同一个DXGI适配器,这很重要。

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

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2016-10-02
    • 2012-11-02
    相关资源
    最近更新 更多