我正在尝试使用可编程管道(特别是使用OpenGL 4.2+)开发简单的OpenGL应用程序,但是我的程序似乎被OpenGL 3.0和GLSL 1.30所卡住。
在我的Ubuntu 18.04计算机上glxinfo |grep "OpenGL"
的输出如下:
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.5
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 18.0.5
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 18.0.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
我创建了一个简单的程序,我相信它应该初始化OpenGL 4.2上下文:
#include <iostream>
#include <string>
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
using namespace std;
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 600);
glutCreateWindow("OpenGL Test");
glutInitContextVersion (4, 2);
glutInitContextProfile (GLUT_CORE_PROFILE);
if(glewInit() == GLEW_OK)
{
cout << "GLEW initialization successful! " << endl;
cout << "Using GLEW version " << glewGetString(GLEW_VERSION) <<
endl;
}
else
{
cerr << "Unable to initialize GLEW ...exiting." << endl;
exit(EXIT_FAILURE);
}
cout << glGetString(GL_VERSION) << endl;
cout << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl;
}
但是,当我运行该程序时,会将以下输出打印到控制台,显示使用的OpenGL版本是3.0,使用的GLSL版本是1.3。
GLEW initialization successful!
Using GLEW version 2.0.0
3.0 Mesa 18.0.5 # OpenGL version
1.30 # GLSL Version
我正在如下编译并运行程序:
g++ OpenGLTest.cpp -o OpenGLTest -lglut -lGLU -lGL -lGLEW
./OpenGLTest
我做错了什么,或者我还能尝试解决什么?
答案 0 :(得分:3)
glutInitContextVersion
并设置了用于下一个上下文创建的参数;已经创建的所有上下文都不会受到影响。这对许多库来说都是正确的,而不仅仅是freeglut(例如SDL的行为方式相同)。据我所知,没有在GLUT中创建上下文的专用功能-上下文是在窗口创建过程中创建的,因此您需要在调用glutCreateWindow
之前设置参数。