Я пытаюсь выяснить мою версию OpenGL. Я использую гостевую версию Fedora 29 на хосте win10. Если я использую программное обеспечение рендеринга (через Mesa), я получаю
$ LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVE=softpipe glxinfo | grep OpenGL
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: llvmpipe (LLVM 7.0, 256 bits)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 18.3.6
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.1 Mesa 18.3.6
OpenGL shading language version string: 1.40
OpenGL context flags: (none)
Почему сообщается о двух версиях: 3.3 (ядро) и 3.1? Это потому, что для 3.3 я могу получить только совместимость ядра, а для 3.1 это может быть ядро или профиль совместимости? Но когда я протестировал его с кодом (используя freeglut), запрашивающим 3.3 (ядро или профиль совместимости), я смог получить только 3.1. Я проверил код с помощью softpipe и llvmpipe. Кроме того, профиль, возвращаемый в приведенном ниже коде, всегда равен 0.
glutInitContextVersion(3, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
std::cout << "OpenGL version: " << glGetString(GL_VERSION) << '\n';
std::cout << "GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION)
<< '\n';
int major = 0;
int minor = 0;
int profile = 0;
glGetIntegerv(GL_MAJOR_VERSION, &major);
glGetIntegerv(GL_MINOR_VERSION, &minor);
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
std::cout << "major:" << major << '\n'
<< "minor:" << minor << '\n'
<< "profile:" << profile << '\n';
Так почему же glxinfo сообщает о ядре 3.3 (кроме 3.1), когда я не могу запросить его? Или я неправильно читаю glxinfo?