Получить ошибки о переопределении (Поваренная книга языка шейдинга OpenGL 4.0)

Я только что протестировал код из главы 1 (Пособие по языку шейдинга OpenGL 4.0).

Я установил Qt5, qmake -tp vc Chapter01.pro, затем открыл его в vs2010.

Построен и получил много ошибок, таких как:

1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(38): error C2371: 'GLintptr' : redefinition; different basic types
1>          D:\OpenGL\glew-1.5.4\include\GL/glew.h(1615) : see declaration of 'GLintptr'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(39): error C2371: 'GLsizeiptr' : redefinition; different basic types
1>          D:\OpenGL\glew-1.5.4\include\GL/glew.h(1614) : see declaration of 'GLsizeiptr'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(96): warning C4005: 'GL_BLEND_EQUATION_RGB' : macro redefinition
1>          D:\OpenGL\glew-1.5.4\include\GL/glew.h(1666) : see previous definition of 'GL_BLEND_EQUATION_RGB'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(474): error C2365: '__glewActiveTexture' : redefinition; previous definition was 'data variable'
1>          D:\OpenGL\glew-1.5.4\include\GL/glew.h(12027) : see declaration of '__glewActiveTexture'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(475): error C2365: '__glewAttachShader' : redefinition; previous definition was 'data variable'

Как решить эти проблемы? (Ссылка на код находится здесь)


person lightrek    schedule 06.02.2013    source источник


Ответы (2)


Не лучший ответ точно, но я только что проверил книгу.

Кажется, что книга устарела, когда вы доберетесь до версии Qt:

Например, в последних версиях Qt (по крайней мере, версия 4.7)

Таким образом, для облегчения чтения книги вы можете рассмотреть возможность понижения версии вашего семейства Qt до 4.x (например, 4.8), так как может быть много изменений в требованиях OpenGl, особенно если вы используете сборку Qt. построен с использованием различных библиотек OpenGl.

Другое решение — использовать обновленный исходный код, который вообще не требует Qt:

Это примеры программ из «Поваренной книги языка шейдинга OpenGL 4.0» Дэвида Вольфа. Исходный код был обновлен для работы с MS Visual Studio и больше не требует Qt.

person Nemanja Boric    schedule 07.02.2013

Краткий ответ: включите только заголовочный файл GLEW и не включайте заголовки OpenGL.

Объяснение: заголовочный файл GLEW фактически включает в себя все файлы заголовков OpenGL (я никогда не пробовал с GLES, но подозреваю, что это то же самое), переопределяя все точки входа OpenGL через макросы препроцессора C. Вот почему вы видите многократно определенные символы и типы. Дополнительную информацию можно найти здесь.

person radical7    schedule 06.02.2013
comment
Спасибо за вашу помощь. Однако я явно не включал gl2.h в этот проект. Во-вторых, я закомментировал все заголовки OpenGL, и эти ошибки все еще существуют. Почему? - person lightrek; 06.02.2013
comment
Судя по вашему сообщению, Qt включает для вас gl2.h. Если вы еще не пробовали это: попробуйте включить glew.h перед любым из ваших других заголовков. Судя по этому сообщению, это может помочь. - person radical7; 06.02.2013
comment
Этот код взят из книги, и я ничего не менял. Да, glew.h уже находится перед другими заголовками. Спасибо - person lightrek; 06.02.2013