ron*_*nag 7 c++ directx direct-composition
我想将directcomposition渲染到纹理.这可能吗?
这样做的原因是我希望能够将gpu加速无窗口透明flash播放器activex控件渲染到纹理.通常不可能的东西,但我希望用DirectComposition实现.
引用MSDN(强调我的),这是不可能的
DirectComposition 不提供任何光栅化服务。应用程序必须使用其他一些基于软件或硬件加速的光栅化库(例如 Direct2D 或 Direct3D)来填充要组合的位图。合成后,DirectComposition 将合成的位图内容传递到桌面窗口管理器 (DWM) 以渲染到屏幕上。
据我所知,只有官方 API 可以与 DWM 共享屏幕外表面,但没有 API 允许您对 DWM 表面进行读取访问。
DWM允许您重定向 HWND 表面,因此您可以在窗口上显示其他 HWND 的表面。这可以通过 DirectComposition (通过CreateSurfaceFromHwnd)或DWM API(通过DwmRegisterThumbnail )来完成。有关后者的示例,请参见此处。
如果您想走评论中指出的“黑客路线”,有一些未记录的 API看起来可以让您访问 DWM 表面,特别是DwmpDxGetWindowSharedSurface听起来很有希望。其他人已经做了一些逆向工程并找出了签名,但无法使其工作(纹理可以工作但呈现黑色)。这家伙似乎运气比较好,能够以 3D 方式渲染窗口纹理。我不懂他的语言,但你似乎必须使用DwmpDxUpdateWindowSharedSurface(也未记录)。
然而,您应该意识到,使用未记录的函数不是一个好主意,微软可以随时更改它们(即使在服务包版本中)或完全删除它们,因为它们仅由微软自己使用,因此没有理由保持兼容性。此外,您很有可能会错误地使用它们(例如,您可能会错过必要的同步并导致随机崩溃,或更糟)。
然而,由于该功能实际上已经可用,因此微软有望在未来的 Windows 版本中将其开放以供公众使用。
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |