2010-05-06 26 views
1

我这个问题挣扎了一个星期。我希望我能陈述 问题很清楚:VMR9 Renderless模式设备复位问题

所以,我安装我的自定义分配器/主持人和InitializeDevice() I 创建VMR9的纹理

然后,VMR9每次有新的 帧时调用我的PresentImage()函数。

我显示渲染这个纹理到四边形和Present()它。如果 Present()返回D3DERR_DEVICELOST,那么我将PostMessage()发送到我的 WndProc()以发出设备重置信号。

然后我的WndProc()调用我的自定义对象上的ResetDevice()。 ResetDevice()释放所有DEFAULT_POOL资源并调用 设备上的Reset()。现在,让我们暂停片刻


此时的Direct3D给我一个错误,告诉我,我仍然坚持 引用一些DEFAULT_POOL面......这一点我敢肯定我做 不是因为我释放我分配的唯一纹理。这个问题是 一个谜,据我知道......有许多悬而未决论坛 关于这个问题可以追溯到2003甚至职位..


,让我们改变车道。在这个论坛发布

http://www.eggheadcafe.com/software/aspnet/29909616/i-did-some-more-e ...

有人说,你应该停止图形,断开 的VMR9的所有引脚,重置设备,然后再重新连接并运行图。

当我这样做,我得到另一Direct3D的投诉: 的Direct3D9:(ERROR):失败尝试创建一个纹理 的Direct3D9:(ERROR):质地宽度比什么设备 支持的更大。 CreateTexture失败。

我追踪的问题到某个时候,我看到,在一些功能 深VMR9计算的宽度的2下一个功率 之前创造了一些纹理(除了那些我成功地创建 我的A/P )。虽然跟踪我意识到了这一点:

我的视频宽度为640的640 2下的功率是1024年,我看到 此值不知何故变成10240虽然我甚至不设置 分配宽度1024.我只是通过640,因为我的显卡不需要 需要pow2纹理尺寸。

这是我坚持..

是否有任何人谁知道一些关于重置/刷新与VMR9的 设备?请帮忙。

在此先感谢。

法提赫

回答

0

既然你有一个自定义分配器/演示我假设你正在使用IVMRSurfaceAllocatorNotify9 :: AllocateSurfaceHelper();并且这种方法可以有效地分配多个表面,你确定所有的表面在设备重置之前都被释放了吗?