【发布时间】:2018-12-31 21:10:32
【问题描述】:
我正在尝试使用可编程管道开发简单的 OpenGL 应用程序,特别是使用 OpenGL 4.2+,但我的程序似乎无法使用 OpenGL 3.0 和 GLSL 1.30。
glxinfo |grep "OpenGL" 在我的 Ubuntu 18.04 机器上的输出如下:
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
我做错了什么或者我还能尝试解决什么问题?
【问题讨论】:
-
尝试在
glewInit()前面添加glewExperimental = true;,此外,我不会混合使用glew和glut来创建上下文。 -
我很确定您必须在创建上下文之前设置配置文件标志和版本 - 或者,在这种情况下,窗口。
-
@HannesHauptmann GLEW 从不创建上下文。
-
@keltar 将两个 glutInitContext 行移动到 glutCreateWindow 调用上方为我解决了这个问题!太感谢了。请添加您的解决方案作为答案,以便我给您信用:)