У меня есть код, который использует Direct9Ex, например:
res = Device->CreateTexture(1920, 1080, 1, 1, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &Texture, &texture_shared_handle);
Как я могу открыть эту текстуру для чтения в Direct2D, используя эту texture_shared_handle
?
Я нашел функцию 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!
Спасибо