我希望分享如何在Direct3D应用程序中多个线程和对象之间共享一个Direct3D设备。我发现了Direct3D设备管理器,看起来像是我想要的,尽管我没有进行任何视频处理或视频加速:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa965267(v=vs.85).aspx
在我的代码中,我正在执行以下操作:
我的问题是,一旦我创建了Direct3D设备管理器,如何在不传递设备管理器指针的情况下与其他对象共享direct3d设备管理器?微软已经明确表示要执行以下操作,但我不知道以下内容真正意味着什么:
设备所有者必须提供一种方法,使其他对象可以获得IDirect3DDeviceManager9接口的指针。标准机制是实现IMFGetService接口。服务GUID是MR_VIDEO_ACCELERATION_SERVICE。
有没有人能向我展示如何使用IMFGetService接口共享设备管理器?
// 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接口共享设备管理器?