我在winxp上运行C ++ 3d实时应用程序,它本身在VMWare Workstation 9.0上运行。我在VMWare中禁用了3d加速,所以我只使用windows OpenGL实现。 我使用隐藏的win32窗口从我的应用程序渲染高分辨率截图。但似乎不可能提供比WinXP桌面更高的分辨率。这是什么原因?在GDI opengl中,opengl上下文是否受限于桌面分辨率?屏幕截图外的屏幕分辨率区域仅为黑色。
答案 0 :(得分:2)
我无法告诉你这个实施决定的原因。但请注意,它完全符合OpenGL 1.1 specification:
4.1.1像素所有权测试
第一个测试是确定帧缓冲区中位置(x_w,y_w)处的像素当前是否由GL拥有(更准确地说,通过此GL上下文)。如果不是,则窗口系统决定传入片段的命运。可能的结果是片段被丢弃......“
从某种意义上说,隐藏窗口的工作原理甚至是“幸运的”,因为从技术上讲它并不拥有像素。 (如果我应该推测原因,请注意OpenGL v1.1实现至少从Windows 98开始。而且图形资源过去非常昂贵......)
也许像Mesa3d这样的OpenGL软件实现是你的选择吗?据我所知,它们支持帧缓冲对象,这是目前离屏渲染的首选方法。 (根据所需的分辨率和GL实现的限制,您可能仍然需要渲染和组合切片。)