DirectShow IVideoWindow和Fullscreen - 我可以写入我的D3D主曲面吗?

Tre*_*rsW 6 delphi directx directshow

写一个游戏,我想在中间的一些过场动画.在窗口模式下,DirectShow类可以完美地工作并且易于使用.但是当游戏全屏时,我无法让DirectShow显示全屏过场动画.

基本上,当我初始化D3D设备时,即使使用IVideoWindow.put_Fullscreen(true),也无法显示视频.我猜测DirectShow不能用D3D设备做全屏.

所以,我尝试释放我的D3D设备,而过场动画播放后再重新初始化它.这似乎工作得很好,但是当DirectShow播放全屏时,它似乎从我的应用程序的主窗口窃取焦点而不是在它完成时将其恢复.然后导致DirectInput无法再次获取设备(给我一个"拒绝访问"错误代码).我在获取之前尝试过SetForegroundWindow(),但这并没有解决它,所以这可能不是问题.

无论如何,长话短说,我想要的只是在我的D3D应用程序中间的全屏过场动画.有没有一种首选的方法来实现这一目标?我可以通过将DirectShow输出到D3D主表面来实现吗?我认为这样可以解决我遇到的问题.

Jer*_*ill 2

您想要为 Video Mixing Renderer 9 创建自定义分配器。这比制作您自己的渲染器过滤器要容易得多,而且它是专为 D3D 互操作而设计的。

Windows SDK 中有一个示例。我的安装在这里:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\directshow\vmr9\vmr9allocator