Date Редакция Категория comp Теги CodeBlocks / OpenGL / GLUT

В 5-ом издании OpenGL Superbible описана настройка проектов Visual Studio для работы с примерами. Мы же покажем, как запустить примеры из указанного издания в среде разработки Code::Blocks с использованием компилятора MinGW.

Нам понадобится установить библиотеки freeglut и GLTools. В состав последней входит GLEW, математические библиотеки и всякие полезные утилиты.

GLTools разработана авторами книги и, в принципе, ее можно не устанавливать. Но: GLEW и математическая библиотека все равно понадобятся (в качестве последней можно использовать GLM), поэтому новичкам проще установить GLTools и сразу приступить к работе.

Предполагаем, что freeglut уже установлен, тогда как библиотеку GLTools нам предстоит сначала скомпилировать.

  1. Качаем архив с примерами из 5-го издания OpenGL Superbible.
  2. Копируем содержимое папки SB5/Src/GLtools/include архива в папку c:\Program Files (x86)\CodeBlocks\MinGW\include, где хранятся заголовочные файлы библиотек, используемых MinGW.
  3. Создаем проект с именем GLTools как Static Library, добавляем в него все исходные файлы из папки архива SB5/Src/GLtools/src и компилируем проект (естественно, как Release). Полученный в результате файл библиотеки libGLTools.aкопируем в папку c:\Program Files (x86)\CodeBlocks\MinGW\lib, где находятся статические библиотеки MinGW.

Теперь, когда GLTools скомпилирована, создадим пустой проект для файлов какого-либо из примеров. Добавим в проект исходные файлы и пропишем в настройках компоновщика (меню Project/Build Options, вкладка Linker Settings, в поле Other Linker Options):

-lopengl32 -lfreeglut -lGLtools

В преамбуле исходного файла, содержащего main(), после подключения необходимых библиотек

#include <GLTools.h>            // OpenGL toolkit
#include <GLShaderManager.h>    // Shader Manager Class

значится

#ifdef __APPLE__
#include <glut/glut.h>          // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>            // Windows FreeGlut equivalent
#endif

Удалим или закомментируем строку #define FREEGLUT_STATIC, и напишем вместо нее #define GLAPI extern. В результате должно получится:

#ifdef __APPLE__
#include <glut/glut.h>          // OS X version of GLUT
#else
#define GLAPI extern
#include <GL/glut.h>            // Windows FreeGlut equivalent
#endif

Зачем нужна эта строка, описано здесь:

GLTools doesn't say anything about GLAPI, but includes <windows.h> and <GL/glew.h> before <GL/gl.h>. glew.h defines GLAPI a couple of times, but because there's no identation in the code it's kind of confusing to tell if the code is being entered or not. What is clear, though, is that for our purposes GLAPI has to be defined as extern. So we're going to do a quick hack in our test.cpp and define GLAPI as extern right ahead of the command to include.

Все, теперь примеры будут работать.



Комментарии

comments powered by Disqus