Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Direct2D如何打开共享纹理_C++_Directx_Direct3d_Direct2d_Direct3d9 - Fatal编程技术网

C++ Direct2D如何打开共享纹理

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模式。 此外,我还

我有一个使用Direct9Ex的代码,比如:

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中使用它。 您可能还需要实现一些同步,如前面介绍的同步