我想在我的 Direct3D 应用程序中的多个线程和对象之间共享一个 Direct3D 设备。我遇到了 Direct3D 设备管理器,它看起来像我想要的,虽然我没有做任何视频处理或视频加速:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa965267( v=vs.85).aspx
在我的代码中,我正在执行以下操作:
// Create the device manager
UINT resetToken = 0;
IDirect3DDeviceManager9* deviceManager = NULL;
if (FAILED(DXVA2CreateDirect3DDeviceManager9(&resetToken, &deviceManager)))
return false;
// Add the device to the device manager
if (FAILED(deviceManager->ResetDevice(device, resetToken)))
return false;
deviceManager->AddRef();
我的问题是,一旦我创建了 Direct3D 设备管理器,如何在不传递指向设备管理器的指针的情况下与其他对象共享 direct3d 设备管理器?微软明确表示要执行以下操作,但我不知道以下内容的真正含义是什么:
设备所有者必须为其他对象提供一种方法来获取指向 IDirect3DDeviceManager9 接口的指针。标准机制是实现 IMFGetService 接口。服务 GUID 是 MR_VIDEO_ACCELERATION_SERVICE。
有人可以告诉我如何使用 IMFGetService 接口共享设备管理器吗?