【发布时间】:2018-06-30 16:49:41
【问题描述】:
我的笔记本电脑中有一块 Intel HD4400 显卡。当我运行 glxinfo | grep "OpenGL",我明白了
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.0-rc5
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.0-rc5
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 18.0.0-rc5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:
这应该说明我的显卡可以支持GLSL 4.30版本了吧?但是,我的着色器编译失败并显示以下消息
error: GLSL 4.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, and 3.10 ES
在我的代码中,我确实使用以下语句将上下文配置文件设置为核心
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE)
之后,我将上下文主要和次要版本分别设置为 4 和 3。
有什么想法吗?我在 Ubuntu 18.04 上。我认为可能是显卡驱动程序不是最新的,但如果它们不是最新的,那么 glxinfo 还会告诉我支持 4.50 版本吗?似乎 Ubuntu 已经安装了最新的 Intel 图形驱动程序,我不想冒险安装可能会破坏我的显示的图形驱动程序。
其他信息:
我在另一台机器上运行了这个确切的代码,它运行良好(我很确定那台机器不支持 GL 4.3 兼容)。因此,我不相信这是我创建上下文的方式。这是我设置个人资料上下文版本的代码:
void set_gl_attribs()
{
if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE))
{
cout << "Could not set core profile" << endl;
}
if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4))
{
cout << "Could not set GL major version" << endl;
}
if (SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3))
{
cout << "Could not set GL minor version" << endl;
}
}
这是 在哪里我调用代码(之前我调用任何其他 SDL 或 OpenGL 函数):
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("Sphere", 100, 100, width, height, SDL_WINDOW_OPENGL);
gl_context = SDL_GL_CreateContext(window);
//SDL_HideWindow(window);
set_gl_attribs(); // where I set the context, as shown above
SDL_GL_SetSwapInterval(1);
glewExperimental = GL_TRUE;
GLuint glew_return = glewInit();
【问题讨论】:
-
您没有正确创建核心配置文件上下文。由于您没有粘贴相关代码,因此无法说明为什么会出现这种情况。
-
@derhass 请查看我添加的附加信息
-
问题是:什么时候你会调用这些函数。另外:“我在另一台机器上运行了这个确切的代码,它运行良好。因此我不相信这是我创建上下文的方式。”这根本不符合。如果你在一些支持 GL 4.3 compat 的实现上运行它,它无论如何都会运行。
-
@derhass 我几乎可以肯定另一台机器不支持 GL 4.3 兼容,因为我记得我必须先将上下文设置为核心,然后才能在该机器上运行(它给出了同样的错误实际上:只有 GL 版本 1.1、1.2 等可用)。 (另外,请参阅我对上面代码所做的补充)
标签: opengl graphics versioning