我想在我的Direct3D应用程序中的多个线程和对象之间共享一个Direct3D设备。我遇到了Direct3D设备管理器,它看起来像我想要什么,虽然我没有做任何的视频处理和视频加速: http://msdn.microsoft.com/en-us/library/windows/desktop/aa965267(v=vs.85).aspx如何使用Direct3D设备管理器?
在我的代码,我做了以下内容:
// 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接口共享设备管理器吗?