如何在Cygwin中使用当前版本的OpenGL?

7
我已经使用cygwin和OpenGL编写了一些3D应用程序几个月了。现在我想尝试使用像顶点缓冲对象这样的一些稍微高级的技术。但是,我注意到遇到了一个障碍:当我在程序中使用glGetString(GL_VERSION)时,它输出1.4。
我使用以下标志编译程序:-lGL -lglut -lGLU -lGLEW,并包含以下头文件:freeglut.h glew.h。我选择链接X11库而不是Windows库,如这里所解释的那样。我的当前OpenGL程序可以构建并运行(因为直到现在,我一直使用旧功能——OpenGL 1.4之前的功能)。
我有一台新的桌面电脑,配备了ATI FirePro V4800(FireGL)显卡,可以支持OpenGL 4.1。我安装了最新的驱动程序,并通过程序提供的测试(OpenGL扩展查看器)测试通过。此外,该程序显示,所有扩展都可用于我的图形卡,包括4.1。
这里的最后一个答案下简要提到,cygwin可能希望使用旧的dll(不支持着色器等)。这是cygwin的问题吗?cygwin是否只能识别我的最新驱动程序并为我提供OpenGL 4.1中的酷炫功能?还是我没有链接到正确的库?
更新:
了解了Cygwin的X Server工作方式后,我想我应该切换到freeglut的本地Windows库。我获取了在这里找到的预编译二进制文件,并将文件放置在适当的目录中以链接它们。重新编译后,我能够使用我的图形卡允许的所有OpenGL选项(4.1)。

3
你是怎么认为这与Cygwin有关系的呢?它只不过是一个 shell 而已。更有可能是你的代码出了问题,而不是 Cygwin 的原因。 - Nicol Bolas
好的。也许我不理解cygwin与我的系统驱动程序的交互方式。我尝试了这个网站上找到的一个示例程序,但是收到了一个错误,指出“glXCreateContextAttribsARB未找到”。 - chembrad
5
他正在通过Cygwin X服务器使用OpenGL。该服务器的GLX实现仅支持OpenGL-1.4版本。 - datenwolf
啊,谢谢……这就是我在寻找的信息。 - chembrad
1
@chembrad,你为什么不回答自己的问题呢?你知道这样会被标记为已解决... - rioki
1个回答

3

当使用Cygwin的X服务器时,请使用-wgl选项启动它(当前版本会自动执行),然后

export LIBGL_USE_WGL=1

我正在使用的机器上,我得到的结果是:

$ glxinfo | grep OpenGL
OpenGL vendor string: Intel
OpenGL renderer string: Intel(R) HD Graphics 2500
OpenGL version string: 4.0.0 - Build 9.17.10.3062
OpenGL shading language version string: 4.00 - Build 9.17.10.3062
[...]

取消设置环境变量:
$ glxinfo | grep OpenGL
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.4, 256 bits)
OpenGL version string: 3.0 Mesa 10.3.5
OpenGL shading language version string: 1.30
[...]

我按照这些指示(X -wgl,export LIBGL_USE_WGL=1)进行操作,但是 glxinfo 仍然报告 VMWare / Gallium 作为后端。 - Johan Boulé
在阅读完RTFM(http://x.cygwin.com/docs/ug/using-aiglx.html)后,我通过运行X -wgl -multiwindow使其正常工作。出于某些原因,这里不支持间接渲染(+iglx)。 - Johan Boulé

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