【发布时间】:2018-10-08 23:48:32
【问题描述】:
我希望能够在 OpenGL 纹理中渲染 win32 控件。为了能够对其进行3d变换。具体来说,我想嵌入 Internet Explorer 以在 3D 转换窗口中显示网页和视频。
如何以足够快的方式将 win32 窗口渲染到纹理(我需要保持 60 fps)?
【问题讨论】:
我希望能够在 OpenGL 纹理中渲染 win32 控件。为了能够对其进行3d变换。具体来说,我想嵌入 Internet Explorer 以在 3D 转换窗口中显示网页和视频。
如何以足够快的方式将 win32 窗口渲染到纹理(我需要保持 60 fps)?
【问题讨论】:
有几种方法可以解决。在所有情况下,您都需要从目标窗口(@987654321@、GetDCEx)获取设备上下文 (DC)。
然后,您可以直接读取像素(GetPixel);或将内容 blit 到您自己的 DC (BitBlt) 中,然后访问它(例如 GetDIBits)。
既然您想“嵌入”Internet Explorer,那么您可能意味着隐藏其窗口;您将需要考虑如何在不可见、部分可见等的窗口上进行上述工作。还要考虑您的 Windows 版本和/或 DWM 是否可能被禁用(因此窗口的内容可能不可用)。看看PrintWindow强制WM_PAINT/WM_PRINT。
一个可以向您介绍这一切并有完整示例的小型 MSDN 指南是:Capturing an Image。
在任何情况下,您都可以通过将其他浏览器/引擎嵌入为库(例如Chromium Embedded Framework (CEF)、Qt's WebEngine、Electron...)来寻求替代解决方案。
【讨论】: