Настраиваем Windows для программирования OpenGL
Пост ориентирован на новичков. В нем не рассматривается настройка Visual Studio. Он научит вас настраивать некоторые текстовые редакторы на компиляцию OpenGL приложений, либо выполнять это из консоли вручную.
Недавно, наконец, вышло 8-е издание книги OpenGL programming guide, которую я ждал уже более чем 2 года. Чуть раньше я познакомился с замечательным текстовым редактором Sublime Text 2 и решил настроить его вместо установки тяжелой Visual Studio.
Итак, для начала нам нужен компилятор — я остановился на G++. Он является частью GCC, а его порт под Windows называется MinGW. С него и начнем:
MinGWКачаем с официального сайта инсталлятор и запускаем его. Можно выбрать выкачивание свежих пакетов сразу при установке, либо обновить их вручную позже. Компиляторы Fortran, Ada и ObjC нам не понадобятся, их можно не ставить. MSYS Basic System может пригодится, его ставим. В качестве адреса я указал " C:\MinGW ", но если вас это смущает — можете выбрать другой, например, " C:\Program Files\Common Files\MinGW ".
После установки следует добавить к системной переменной PATH две новые папки: " MinGW\bin " и " MinGW\msys\1.0\bin ". Для этого заходим в Пуск -> Панель управления -> Система -> Дополнительные параметры системы; Во вкладке Дополнительно тыкаем внизу кнопку Переменные среды. Из списка системных переменных выбираем Path, и через точку с запятой дописываем полные адреса к папкам " MinGW\bin " и " MinGW\msys\1.0\bin ".
Если вы не выбирали выкачивание свежих пакетов при установке, следует обновить нужные пакеты вручную. Для этого открываем консоль (Win+R -> cmd ), и пишем следующие команды: Обновит информацию о доступных пакетах, Отобразит полные имена пакетов gcc и g++, Обновит эти пакеты до последних доступных для MinGW версий.
Теперь, когда у нас есть компилятор, мы можем приступить к установке необходимых OpenGL библиотек.
FreeglutПоскольку OpenGL это API, которое относится исключительно к графике — в него не входят функции по созданию окон или обработки устройств ввода. Тем более, решение этой задачи зависит от операционной системы. По-этому ее вынесли в отдельную библиотеку и назвали GLUT — OpenGL Utility Toolkit. Однако, последний релиз этой библиотеки был очень давно и сейчас ее подменила freeglut.
Качаем с официального сайта бинарники под MinGW. Распаковываем, freeglut.dll из папки bin кидаем в " C:\Windows\System32 " (для х86) или " C:\Windows\SysWOW64 " (для х64), или любую другую папку, которая указана в PATH. Содержимое папок include и lib можно скопировать либо в " MinGW\include " и " MinGW\lib " (так будет проще), либо в отдельные созданые папки " MinGW\freeglut\include " и " MinGW\freeglut\lib ".
На этом с freeglut все. Для его подключения нужно добавить #include <GL/freeglut.h>
Библиотека glew позволяет определять что видеокарта поддерживает, а что — нет. Ее установка немного сложнее для нашего случая. Качаем с официального сайта исходники, поскольку бинарники заточены под Visual Studio и нам не подойдут. Теперь эти исходники нужно скомпилировать. Я в этом практически ничего не понимаю, по-этому обратился к гуглу и нашел помощь здесь: Распаковываем скачанный архив, открываем консоль, заходим в полученную папку и пишем следующие команды: В результате в папке lib появилось 3 файла: glew32.dll , glew32.dll.a и glew32.a . glew32.dll копируем туда же, куда ранее скопировали freeglut.dll , остальные 2 — в папку " MinGW\lib " либо " MinGW\glew\lib ". Из папки include копируем содерижмое в " MinGW\include " или " MinGW\glew\include ".
На этом с glew все. Для его подключения нужно добавить #include <GL/glew.h> , но сделать это необходимо перед подключением других gl библиотек.
Проверяем работоспособностьСоздаем минимальный test.cpp:
Обратите внимание на функцию glutInitContextVersion — она завершит выполнение программы если ей не удалось создать контекст для указаной версии OpenGL. Чтобы узнать версию OpenGL, которую поддерживает ваша видеокарта, можно заглянуть в ее спецификацию либо скачать бинарники glew с официального сайта и запустить glewinfo.exe из папки bin . Он сгенерирует файл glewinfo.txt , в котором будет детально расписано что ваша видеокарта поддерживает, а что — нет. Иногда функционал можно расширить установкой более свежего видеодрайвера.
Открываем консоль, заходим в папку с test.cpp и пишем следующую команду: В случае, если вы создавали отдельные папки freeglut и glew , здесь необходимо дополнительно указать соответствующие дополнительные папки include и lib . Тогда пример команды выглядит так:
Флаг -Wl,--subsystem,windows указывает компилятору что он должен создать графическое приложение, а не консольное. Если все получилось, должен получится файл test.exe , который при запуске создает белое окно 512х512.
Когда вы захотите поделится своим приложением, убедитесь что вместе с исполняемым файлом передаете используемые библиотеки — freeglut.dll и glew32.dll .
Sublime Text 2Ну и напоследок, приведу пример настройки Sublime. Скачать его можно отсюда, вводные видео-уроки на английском языке можно глянуть здесь. После установки открываем файл настройки билда С++: " C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\C++\C++.sublime-build " Сохраняем его копию как " C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\User\C++\С++ OpenGL.sublime-build "
Строчку дополняем подключением библиотек:
Аналогично, строчку дополняем до Если вы создавали отдельные папки под freeglut и glew, эти команды следует дополнить указанием адресов дополнительных папок include и lib .
Для того чтобы Sublime не отказывался выводить кириллицу в свою консоль, после добавляем
Теперь, когда у нас открыт test.cpp , выбираем Tools -> Build system -> C++ OpenGL. Нажимаем Ctrl+B для компиляции, Ctrl+Shift+B для компиляции и запуска.
UPD: Когда дело дошло до кода с gl-функциями из последних версий, выяснилось, что подключение заголовочного файла GL/gl.h недостаточно. В нем содержится устаревшая версия 1.1, и этот файл больше не обновляется. В дополнение к нему необходимо подключить GL/glext.h (последнюю версию которого надо скачать отсюда) и GL/wglext.h (отсюда). Для линукса последний файл заменяется GL/glxext.h (ссылка). Скачанными файлами нужно заменить их устаревшие версии по адресу " MinGW/include/GL/ ".