2016-10-17 23 views
2

Мне нужна помощь в программировании OpenGL 3.3 с профилем ядра. Я работаю на ОС Arch Linux с установленными пакетами xf86-video-intel и mesa-libgl. У меня есть Intel HD 4400 встроен в мой процессорOpenGL 3.3 на Arch Linux

Когда я вхожу glxinfo | grep OpenGL в терминал, это показывает, что я могу поддерживать OpenGL 3.3

OpenGL vendor string: Intel Open Source Technology Center 
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 12.0.3 
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.0 Mesa 12.0.3 
OpenGL shading language version string: 1.30 
OpenGL context flags: (none) 
OpenGL extensions: 
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.3 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 
OpenGL ES profile extensions: 

Я использую GLFW3 и GLEW для настройки OpenGL

if(!glfwInit()) { 
    return -1; 
} 
GLFWwindow* window = glfwCreateWindow(800, 600, "Hello Guys", NULL, NULL); 
if(!window) { 
    glfwTerminate(); 
    return -1; 
} 

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

glfwMakeContextCurrent(window); 

if(glewInit() != GLEW_OK) { 
    printf("GLEW did not initialize\n"); 
    glfwTerminate(); 
    return -1; 
} 

Однако, когда я пытаюсь скомпилировать шейдеры, я получаю сообщение об ошибке GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

Кажется, что Mesa или GLFW3 делает мой компьютер, rofile вместо основного профиля. Как я могу это исправить?

+0

Stab в темноте: должны 3 в 'glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3); вместо этого может быть 0? – zwol

+0

Вы пытались поставить 'glewExperimental = GL_TRUE;' перед строкой с 'glewInit()'? – SurvivalMachine

ответ

3

the docs С (курсив):

void glfwWindowHint(int hint, int value)   

Эта функция устанавливает подсказки для следующего вызова glfwCreateWindow. ...

Итак: если вы не хотите the defaults не забудьте установить подсказки перед тем создать окно:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

GLFWwindow* window = glfwCreateWindow(800, 600, "Hello Guys", NULL, NULL); 
if(!window) { 
    glfwTerminate(); 
    return -1; 
} 
+0

Спасибо. Не понимал, что намеки нужно было вызвать до создания окна. – Streak324

+0

@ Streak324: Создание окна подразумевает создание контекста GL. Поскольку Intel явно поддерживает GL 3.1+ при явном запросе основного контекста (они не реализуют «GL_ARB_compatibility» или профиль совместимости), вы должны сказать GLFW, что * до * создания окна. Поведение, которое вы видели, - это реализация Intel, возвращающая его путь совместимости, который тогда достигает только уровня GL 3.0 (и GLSL 1.30). – thokra

 Смежные вопросы

  • Нет связанных вопросов^_^