【问题标题】:Access every window's rendering area访问每个窗口的渲染区域
【发布时间】:2014-09-14 14:09:46
【问题描述】:
访问 Microsoft Windows 中每个窗口的渲染区域的最佳方法是什么,以便我可以自己以 3D 形式渲染它们?我知道桌面窗口管理器 (dwm) 为每个窗口提供了一个渲染目标,并将它们一起呈现在屏幕上。
那里有大量的 3D 窗口管理器,但对我来说很难找到一些代码或其他信息,所以我问你。
我想在 OpenGL 中做,但我可以想象它在 DirectX 中是可能的,但这也很好。
提前致谢!
【问题讨论】:
标签:
windows
opengl
directx
render
target
【解决方案1】:
您必须使用专用于该任务的操作系统/图形系统特定 API。 OpenGL 与操作和图形系统无关,没有“窗口”的概念。
在 Windows 中,您必须使用的 API 是 DWM API。对于早于 DWM API(XP 和更早版本)的 Windows 版本,必须使用一些“肮脏”的技巧来获取窗口的内容(主要是挂钩 WM_PAINT 和 WM_ERASEBACKGROUND 消息,以及 GDI 的 BeginPaint 和 EndPaint 函数来复制窗口' 将内容放入可用于更新纹理的 DIBSECTION 中)。
在 X11 中使用的 API 是 XComposite + GLX_ARB_texture_from_pixmap 扩展