В моем ноутбуке установлена видеокарта 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();