如何将win32窗口渲染为opengl纹理?

rxa*_*tos 4 c++ opengl winapi

我希望能够在OpenGL纹理内渲染win32控件.为了能够对其进行三维变换.具体来说,我想嵌入Internet Explorer以在3D转换窗口内显示网页和视频.

如何以足够快的速度向纹理渲染win32窗口(我需要保持60 fps)?

Aco*_*orn 5

有几种方法可以解决它.在所有情况下,您都需要从目标窗口(GetDC,GetDCEx)获取设备上下文(DC ).

然后,你可以直接读取像素(GetPixel); 或将内容blit到您自己的DC(BitBlt)中然后访问它(例如GetDIBits).

既然你想"嵌入"Internet Explorer,那么你可能意味着隐藏它的窗口; 您将需要考虑如何在不可见,部分可见等的窗口上进行上述工作.同时考虑您的Windows版本和/或是否可能禁用DWM(因此窗口的内容可能不可用) ).看看PrintWindow强制一个WM_PAINT/ WM_PRINT.

一个小的MSDN指南,可以向您介绍所有这些,并有一个完整的例子是:捕获图像.

在任何情况下,您都可以通过将其他浏览器/引擎作为库嵌入(例如Chromium Embedded Framework(CEF),Qt的WebEngine,Electron ......)来寻求替代解决方案.