如何将win32窗口渲染到OpenGL纹理上?

4
我希望能够在OpenGL纹理中呈现Win32控件,以便可以进行3D变换。具体来说,我想嵌入Internet Explorer以显示网页和视频在一个3D变换的窗口内。
如何以足够快的速度(需要保持60 fps)将Win32窗口渲染到纹理中?
1个回答

5
有几种方法可供选择。在所有情况下,您都需要从目标窗口获取设备上下文(DC)(GetDCGetDCEx)。
然后,您可以直接读取像素(使用GetPixel);或通过blit将内容复制到自己的DC (BitBlt),然后访问它(例如GetDIBits)。
由于您想要“嵌入”Internet Explorer,而这可能意味着保持其窗口隐藏; 您需要考虑如何使上述操作在不可见、部分可见等窗口中正常工作。还要考虑您的Windows版本和/或DWM是否已禁用(因此窗口的内容可能无法使用)。请查看PrintWindow以强制执行WM_PAINT/WM_PRINT
一个小的MSDN指南可以带您了解所有这些,并提供完整的示例:捕获图像
在任何情况下,您都可以选择嵌入其他浏览器/引擎作为库(例如Chromium嵌入式框架(CEF)Qt的WebEngineElectron ...)。

PrintWindow是缺失的部分。我更喜欢使用已在Windows 10中运行的资源管理器。除非绝对必要,否则我想避免添加另一个800磅大猩猩。 - rxantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接