Windows DirectX 9将视频帧显示(渲染)到HWND的特定位置,保持现有窗口内容不变

Windows DirectX 9将视频帧显示(渲染)到HWND的特定位置,保持现有窗口内容不变,windows,directx,rendering,direct3d,Windows,Directx,Rendering,Direct3d,我正在尝试在我的应用程序中使用DirectX 9 API做一些特定的事情 当我安装directx设备时,它需要一个窗口句柄HWND,最终图形驱动程序会知道并使用它。我试图做的是在给定的窗口句柄中,让图形驱动程序只渲染窗口的一个特定部分,而保持窗口的其余部分不变。例如假设我的窗口大小为1280x720,我只希望视频帧渲染并呈现到窗口内的某个位置,例如300x200。使用directx 9 API执行此操作的最佳方法是什么。我已经设置好了所有设备,并且我已经可以将视频渲染到整个窗口,但是我现在尝试渲

我正在尝试在我的应用程序中使用DirectX 9 API做一些特定的事情

当我安装directx设备时,它需要一个窗口句柄HWND,最终图形驱动程序会知道并使用它。我试图做的是在给定的窗口句柄中,让图形驱动程序只渲染窗口的一个特定部分,而保持窗口的其余部分不变。例如假设我的窗口大小为1280x720,我只希望视频帧渲染并呈现到窗口内的某个位置,例如300x200。使用directx 9 API执行此操作的最佳方法是什么。我已经设置好了所有设备,并且我已经可以将视频渲染到整个窗口,但是我现在尝试渲染到一个已经包含内容的窗口句柄,并向我指定在同一窗口上渲染视频帧的位置。我注意到,如果我指定显示到那个位置,当我调用PresentEx时,它会在显示我的帧的同时使整个窗口变黑

我想知道是否有办法告诉图形驱动程序不要遮住窗口中的所有其他内容?最初,这个窗口创建了一些HTML元素,我试图不让驱动程序破坏窗口的其余部分


我考虑过如何将整个后缓冲区显示在窗口中,但如何将缓冲区的一部分绘制为透明,但我也不知道如何实现这一点。谢谢你的帮助

我发现这是在Windows桌面Windows管理器上调用DwmSetPresentParameters的副作用。这是在Windows 8中,因为Windows 8.1不赞成调用此函数。因此,在调用DwmSetPresentParameters函数后,DirectX使用DWM会导致整个窗口变黑

与其乱搞视口,不如为DX内容创建一个子窗口,让它拥有整个内容,假设您打算将其限制为矩形区域。为什么您认为最好不要乱搞视口?我不熟悉视口,但这可能是一个选项吗?在我看来,我会选择一个简单的选项-在主内容窗口的固定位置创建一个子窗口,并将其专用于DirectX。混合从不同库输出的图形是可能的,但会很混乱,并不可避免地以眼泪告终。如果您真的想了解视口,并了解您的想法。不幸的是,在我的解决方案中不可能使用子窗口。我不确定视口是否能解决我的问题,因为它们似乎限制了在backbuffer中显示?实际上,我可以强制backbuffer只渲染到窗口中的某个位置。我通过着色backbuffer验证了这一点,我遇到的问题是第一次调用PresentEx,可能DX运行时会将整个窗口表面涂成黑色。