我正在使用SDL + OpenGL开发一个引擎项目。它在同一台计算机的窗口下工作(所以相同的图形硬件)没有问题,但安装Debian后我没有任何熟悉,当我尝试编译项目时(与包含文件相关的小变化(“/” - “\”问))在Debian / Linux下使用gcc,它说“不支持GLSL 3.30。支持的版本是:1.00 ES,1.10,1.20”。我试了一下它只是运行一些旧版本的功能,例如glClear,当版本设置不好时,之前只出现一个青色窗口,所以我认为我应该首先安装驱动程序。从包管理器安装fglrx-driver(apt-get install fglrx-driver
) ,通过命令aticonfig --initial
配置它作为在安装的某个地方建议的终端上弹出的消息。配置后,我试图重新编译的应用程序给出了一个错误,如“Segmentation Fault”,我认识到像glGenBuffer这样的函数, glBindBuffer导致错误,新版本的一些功能在离开“固定管道系统”之后单独弃用。现在,问题仍然与版本/上下文绑定有关,如果是这样,我该怎么做才能够在Debian的任何c ++应用程序中正确调用OpenGL 3.3+函数。(编译的参数是g++ -o program source.cpp `sdl2-config --cflags --libs` -lGLEW -lGL
),如果没有,问题是什么,你建议如何解决这个问题?
额外信息:
要检查fglrx的版本,ls /var/lib/dkms/fglrx/ outputs
:
12-6+point kernel-3.2.0-4-amd64-x86_64
。
fglrx输出:
display: :0 screen: 0
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD TURKS
OpenGL version string: 1.4 (2.1 Mesa 8.0.5)
尽管here显示如下:
display: :0 screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: ATI Radeon HD 4300/4500 Series
(只看一下网站的第二项)
OpenGL version string: 3.3.11399 Compatibility Profile Context
如果问题是关于版本指明这些错误:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,3);
(我也试过1-4,2-3,1-3作为次要专业)
注意,我没有使用源自Debian 7(wheezy)的Ubuntu,操作系统是Debian,显卡是:
01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Thames XT/GL [Radeon HD 7600M Series]
(lspci | grep VGA
)的输出
目前,我知道Mesa是昨天一项旧研究的OpenGL规范的开源实现。因此,如果问题是与OpenGL的抽象规范如何与硬件进行通信相关的配置,我如何才能从mesa切换到fglrx以实现OpenGL 3.3及更高版本?最后,您建议使用哪种免费或非免费的驱动器?