Настраиваем 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), и пишем следующие команды:

mingw-get update

Обновит информацию о доступных пакетах,

mingw-get show gсс mingw-get show g++

Отобразит полные имена пакетов gcc и g++,

mingw-get upgrade mingw32-gcc mingw-get upgrade mingw32-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

Библиотека glew позволяетт определять что видеокарта поддерживает, а что — нет. Ее установка немного сложнее для нашего случая.
Качаем с официального сайта исходники, поскольку бинарники заточены под Visual Studio и нам не подойдут. Теперь эти исходники нужно скомпилировать. Я в этом практически ничего не понимаю, по-этому обратился к гуглу и нашел помощь здесь:
Распаковываем скачанный архив, открываем консоль, заходим в полученную папку и пишем следующие команды:

gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32 ar cr lib/libglew32.a src/glew.o

В результате в папке 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:

#include <iostream> #include <GL/glew.h> #include <GL/freeglut.h> #include <GL/gl.h>  int main(int argc, char** argv) {  	glutInit(&argc, argv); 	glutInitDisplayMode(GLUT_RGBA); 	glutInitWindowSize(512, 512); 	glutInitContextVersion(4, 1); // Версия OpenGL, которую вы хотите использовать 	glutInitContextProfile(GLUT_CORE_PROFILE); 	glutCreateWindow(argv[0]);  	if (glewInit()) { 		std::cerr << "Unable to initialize GLEW ... exiting\n"; 		exit(EXIT_FAILURE); 	}  	glutMainLoop();  }

Обратите внимание на функцию glutInitContextVersion — она завершит выполнение программы если ей не удалось создать контекст для указаной версии OpenGL. Чтобы узнать версию OpenGL, которую поддерживает ваша видеокарта, можно заглянуть в ее спецификацию либо скачать бинарники glew с официального сайта и запустить glewinfo.exe из папки bin. Он сгенерирует файл glewinfo.txt, в котором будет детально расписано что ваша видеокарта поддерживает, а что — нет. Иногда функционал можно расширить установкой более свежего видеодрайвера.

Открываем консоль, заходим в папку с test.cpp и пишем следующую команду:

gcc -o test.exe test.cpp -lglew32 -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows

В случае, если вы создавали отдельные папки freeglut и glew, здесь необходимо дополнительно указать эти папки. Тогда пример команды выглядит так:

gcc -o test.exe test.cpp -lglew32 -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows -I"C:\MinGW\freeglut\include" -L"C:\MinGW\freeglut\lib" -I"C:\MinGW\glew\include" -L"C:\MinGW\glew\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"

Строчку

"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}"],

дополняем подключением библиотек:

"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "-lfreeglut -lopengl32 -lglew32 -Wl,--subsystem,windows"],

Аналогично, строчку

"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]

дополняем до

"cmd": ["bash", "-c", "g++ '${file}' -o '${file_path}/${file_base_name}' -lglew32 -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows && '${file_path}/${file_base_name}'"]

Если вы создавали отдельные папки под freeglut и glew, эти команды следует дополнить указанием адресов дополнительных папок include и lib.

Для того чтобы Sublime не отказывался выводить кириллицу в свою консоль, после

"selector": "source.c, source.c++",

добавляем

"encoding": "cp1251",

Теперь, когда у нас открыт test.cpp, выбираем Tools -> Build system -> C++ OpenGL.
Нажимаем Ctrl+B для компиляции, Ctrl+Shift+B для компиляции и запуска.

На этом все!

ссылка на оригинал статьи http://habrahabr.ru/post/177885/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *