gpt4 book ai didi

c++ - Direct2D如何打开共享纹理

转载 作者:搜寻专家 更新时间:2023-10-31 02:01:51 25 4
gpt4 key购买 nike

我有一个代码,它使用 Direct9Ex,例如:

res = Device->CreateTexture(1920, 1080, 1, 1, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &Texture, &texture_shared_handle);

如何使用此 texture_shared_handle 打开该纹理以在 Direct2D 中读取?

我找到函数 ID2D1RenderTarget::CreateSharedBitmap ,但找不到任何可以打开共享 DXGI 资源的工作代码。另外,纹理对共享有效,它只有一层,A8R8G8B8 模式。另外,我被迫使用 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_shared_handle 传递给 Direct2D?

我也尝试获取 IDXGISurface,然后将其传递给 Direct2D,但是,我总是失败:

// Direct9Ex texture
IDXGISurface* pDxgiSurface = NULL;
res = Texture->QueryInterface(__uuidof(IDXGISurface), (void**)&pDxgiSurface);
res is always E_NOINTERFACE!

谢谢

最佳答案

为了获得 IDXGISurface,您需要使用 this function 打开与 DirectX 11 设备(用于初始化 Direct2D 的设备)的共享纹理。 .您可以调用它来获取一个 IDXGIResource,您可以为 IDXGISurface 查询接口(interface)并在 Direct2D 中使用它。您可能还需要实现一些同步,例如 here 中解释的同步。 .

关于c++ - Direct2D如何打开共享纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58349757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com