C++ Direct2D如何打开共享纹理
我有一个使用Direct9Ex的代码,比如:C++ Direct2D如何打开共享纹理,c++,directx,direct3d,direct2d,direct3d9,C++,Directx,Direct3d,Direct2d,Direct3d9,我有一个使用Direct9Ex的代码,比如: res = Device->CreateTexture(1920, 1080, 1, 1, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &Texture, &texture_shared_handle); 如何使用此纹理\u共享\u句柄打开该纹理以在Direct2D中读取 我找到了函数,但找不到任何可以打开共享DXGI资源的工作代码。此外,纹理对共享有效,它只有一个级别和8R8G8B8模式。 此外,我还
res = Device->CreateTexture(1920, 1080, 1, 1, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &Texture, &texture_shared_handle);
如何使用此纹理\u共享\u句柄打开该纹理以在Direct2D中读取
我找到了函数,但找不到任何可以打开共享DXGI资源的工作代码。此外,纹理对共享有效,它只有一个级别和8R8G8B8模式。
此外,我还强制使用direct9ex创建纹理
我想到的另一个解决方案是在与上面相同的设备上创建Direct9Ex曲面(创建纹理),并使用共享句柄,如下所示:
res = Device->CreateOffscreenPlainSurface(1920, 1080, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &MagSurface2, &Surface2_shared_handle);
res = Texture->GetSurfaceLevel(0, &MagSurface1);
...
// copying data from texture level surface to shared surface
res = Device->GetRenderTargetData(MagSurface1, MagSurface2);
但是,如何将这个Surface2\u共享\u句柄
传递给Direct2D
我还尝试让IDXGISurface将其传递给Direct2D,但总是失败:
// Direct9Ex texture
IDXGISurface* pDxgiSurface = NULL;
res = Texture->QueryInterface(__uuidof(IDXGISurface), (void**)&pDxgiSurface);
res is always E_NOINTERFACE!
谢谢为了获得IDXGISurface,您需要使用DirectX 11设备(用于初始化Direct2D的设备)打开共享纹理。您可以调用它来获取IDXGIResource,您可以查询IDXGISurface的接口并在Direct2D中使用它。
您可能还需要实现一些同步,如前面介绍的同步