Версия моей системы по умолчанию для OpenGL и GLSL с использованием freeglut - 4.1, также с использованием glew нет проблем с его инициализацией, компиляцией и компоновкой шейдеров и выполнением.
Эта версия по умолчанию происходит, когда я неукажите glutInitContextVersion, glutInitContextFlags или glutInitContextProfile, тогда мои шейдеры будут работать правильно.
Несмотря на то, что у меня есть поддержка этой версии, я хотел бы предоставить альтернативу 3.3.Когда я использую контекст перенасыщения, указывающий версию 3.3, приложение запускается без ошибок, glew не жалуется.Предполагается, что мои шейдеры используют версию GLSL 3.3, затем я устанавливаю строку
#version 330
Но когда мои шейдеры компилируются, OpenGL выдает недопустимое сообщение перечислителя.Я попытался удалить эту строку или установить другую версию, но все равно получаю ту же ошибку.После того, как вся инициализация была выполнена правильно, я спрашиваю версию OpenGL, и я получаю правильную версию 3.3, но для версии GLSL я все еще получаю версию по умолчанию 4.1.
glGetString(GL_SHADING_LANGUAGE_VERSION);
Пожалуйста, исправьте меня, если я прав, я думаю, эта версия перезаписывается строкой версии в коде шейдеров.Интересно, есть ли шанс инициализировать контекст, определяющий версию GLSL?
Редактировать: я наконец решил это.Если я установлю профиль ядра вместе с режимом совместимости
glutInitContextProfile(GLUT_CORE_PROFILE | GLUT_COMPATIBILITY_PROFILE);
Команды OpenGL версии 2.1 не будут распознаваться.Это идет вразрез с информацией, представленной в учебниках.В любом случае, только установив GLUT_COMPATIBILITY_PROFILE, он работает, используя версию 3.3 или выше.