Создать основной контекст с помощью GLUT / FreeGLUT?

Я работаю над проектом, в котором используются freeglut и GLEW. Чтобы использовать вершинные и фрагментные шейдеры в моей программе, мне нужно использовать минимальную версию OpenGL 3.3. Я проверил версию OpenGL и версию GLSL, и это результат:

[cyclonite@localhost ~]$ glxinfo | grep OpenGL 
OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel (R) HD Graphics 620 (Kaby Lake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.3.3 
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 17.3.3 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions : 
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 17.3.3 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 
OpenGL ES profile extensions:

Строка версии OpenGL и строка версии GLSL для основного профиля - это 4.5. Однако он также показывает, что строка версии OpenGL - 3.0, а строка версии GLSL - 1.3.. Чтобы использовать мои собственные шейдеры, версия должна быть не менее 3.3. Я попытался использовать #version 330 core в начале своего шейдера, но когда я запустил свою программу, появилось следующее сообщение об ошибке появилось:

Cannot compile vertex shader. 
ERROR: Cannot compile shader. 
OpenGL Version: 3.0 Mesa 17.3.3 
0:4(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES 

Похоже, что программа использует OpenGL 3.0 вместо 4.5, я поискал в Интернете, и кто-то сказал, что OpenGL 4.5 is only available if requested at context creation because compatibility contexts are not supported был в примечании к выпуску Mesa, согласно этот пост.

Как я могу создать основной профиль или запрос при создании контекста, чтобы я мог использовать OpenGL 4.5 в своей программе?

Я использую Eclipse в качестве среды разработки на C ++ в операционной системе Linux (этот конкретный дистрибутив, который я использую, - это PCLinuxOS).


person Cyclonite    schedule 27.01.2018    source источник


Ответы (1)


С помощью glutInitContextVersion() и glutInitContextProfile() выберите нужную версию контекста и профиль контекста:

...
glutInit( ... );
glutInitContextVersion( 3, 3 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutInitDisplayMode( ... );
glutCreateWindow( ... );
...

Документация? Какая документация?

person genpfault    schedule 27.01.2018
comment
Это сразу устранило проблему. Большое спасибо! - person Cyclonite; 27.01.2018