1

我在 winxp 上运行 C++ 3d 实时应用程序,它本身在 VMWare Workstation 9.0 上运行。我在 VMWare 中禁用了 3d 加速,所以我只能使用 Windows OpenGL 实现。我正在使用隐藏的 win32 窗口从我的应用程序渲染高分辨率屏幕截图。但似乎不可能呈现比 WinXP 桌面更高的分辨率。这是什么原因?在 GDI opengl 中,opengl 上下文是否受限于桌面分辨率?屏幕截图中超出屏幕分辨率的区域只是黑色。

4

1 回答 1

2

我不能告诉你这个实施决定的原因。但请注意,它完全符合OpenGL 1.1 规范

4.1.1 像素所有权测试

第一个测试是确定帧缓冲区中位置 (x_w,y_w) 的像素当前是否由 GL(更准确地说,由此 GL 上下文拥有)所有。如果不是,则窗口系统将决定传入片段的命运。可能的结果是碎片被丢弃了……”

从某种意义上说,隐藏窗口可以工作甚至是“幸运的”,因为从技术上讲,它不拥有像素。(如果我应该推测原因,请注意 OpenGL v1.1 实现至少从 Windows 98 开始就已经存在。而且图形资源曾经非常昂贵......)

也许像Mesa3d这样的 OpenGL 软件实现对您来说是一种选择?据我所知,它们支持帧缓冲区对象,这是当今屏幕外渲染的首选方法。(根据所需的分辨率和 GL 实现的限制,您可能仍会被迫渲染和组装图块。)

于 2013-05-29T19:30:55.480 回答