2013-11-28 2 views
4

Я следил за кодом пятого издания OpenGL Superbible с помощью Mac OS X и наткнулся на проблему. В моем вершинном шейдере я включил номер версии, являющийся #version 130. Однако он не скомпилирован с ошибкой ERROR: 0:1: '' : version '130' is not supported.GLSL версия 130 на Mac OS X вызывает ошибку

Информация: Я использую Xcode на Mac OS версии 10.8.5 с графикой Intel HD 3000. Он должен поддерживать версию OpenGL 3.0, которая соответствует версии GLSL 1.30.

+0

Вы получите, как минимум, контекст 3.2 (основной профиль) на 10.8 или 3.3 на Маверикс. т.е. GLSL 1,50 или 3,30. –

+0

@BrettHale любая идея, почему это дает мне эту ошибку? – Fitzy

ответ

5

Если вы не выберете формат пиксели, который явно требующие для основного профиля, то вы собираетесь получить 2.1 реализацию OpenGL. См. Мой answer to another question для получения более подробной информации о том, как это сделать; это новое изменение в API CGL/NSOpenGL, которое было введено с OS X 10.7, поэтому некоторые старые книги могут не документировать его.

Существует большая разница между тем, что поддерживает ваш GPU и тем, что вы на самом деле получаете. На многих других платформах, без использования изменений API-интерфейсов окон, которые были представлены вместе с OpenGL 3.2, вы можете получить все возможности реализации OpenGL 3.2+ и унаследованные вещи от OpenGL 2.1 и более ранних версий по умолчанию (это известно как профиль совместимости).

OS X отличается, он не поддерживает профили совместимости. Вы либо получаете устаревшую реализацию OpenGL 2.1, либо версию 3.2 (3.3/4.1 в OS X 10.9), но вы никогда не сможете смешивать и сопоставлять функции обоих. Кроме того, если вы не измените свой код, чтобы задать основной профиль, по умолчанию вы будете ограничены OpenGL 2.1.

+0

А, я не знал об этом. Поскольку я новичок в OpenGL, как бы я решил установить формат пикселей? – Fitzy

+0

@Fitzy: Как вы создаете свой контекст визуализации? Я предполагаю, что, поскольку вы сказали, что вы новичок, вы не используете низкоуровневые API, такие как CGL или NSOpenGL. Если вы используете что-то вроде GLUT, glfw3, SDL и т. Д., Тогда у каждого из них должен быть механизм запроса основного профиля. –

+0

На данный момент я использую GLUT. Кажется, что код в Superbible не прошел надлежащую проверку на всех платформах - очень разочаровывает. – Fitzy