ID3D11DeviceContext :: CopyResource似乎没有复制像素

问题描述 投票:0回答:1

我正在尝试将像素从源ID3D11Texture2D复制到共享目标纹理中。我的目标是创建一个共享句柄并将其导出到另一个应用程序。对于复制过程,我使用ID3D11DeviceContext::CopyResource,但似乎无法正常工作。当我打开共享手柄(使用ID3D11Device1::OpenSharedResource1OpenSharedResourceByName)时,图像全为黑色,但是尺寸正确。有谁知道我该如何调试?我相信源纹理和目标纹理都是用相似的描述创建的,唯一的区别是目标的CPUAccessFlags为0,其MiscFlagsD3D11_RESOURCE_MISC_SHARED_NTHANDLE | D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX

非常感谢,尼古拉斯

directx-11
1个回答
0
投票

好,我的一位同事想出了一个解决方案。 CopyResource行应在调用之前锁定,并在调用后解锁,例如:

ComPtr<IDXGIKeyedMutex> mutexA;
hr = dxgiResource.As(&mutexA);

// GPU Copy the original 
mutexA->AcquireSync(0, ...);
dxContext->CopyResource(dxSharedTexture.Get(), dxTexture.Get());
mutexA->ReleaseSync(1);

并且在获取纹理时,请执行相同的操作。

ComPtr<IDXGIKeyedMutex> mutexB;
hr = pTexture2D.As(&mutexB);
hr = mutexB->AcquireSync(1, ...);
// Retrieve the image
// ....
mutexB->ReleaseSync(0);

请注意,mutexAmutexB具有相反的键。您用键0锁定第一个纹理,然后用1解锁。对于第二个纹理,反之亦然。

进一步阅读:[link]

© www.soinside.com 2019 - 2024. All rights reserved.