- PVSM.RU - https://www.pvsm.ru -
Пост ориентирован на новичков. В нем не рассматривается настройка Visual Studio. Он научит вас настраивать некоторые текстовые редакторы на компиляцию OpenGL приложений, либо выполнять это из консоли вручную.
Недавно, наконец, вышло 8-е издание книги OpenGL programming guide [1], которую я ждал уже более чем 2 года. Чуть раньше я познакомился с замечательным текстовым редактором Sublime Text 2 и решил настроить его вместо установки тяжелой Visual Studio.
Итак, для начала нам нужен компилятор [2] — я остановился на G++ [3]. Он является частью GCC [4], а его порт под Windows называется MinGW [5]. С него и начнем:
Качаем с официального сайта [6] инсталлятор [7] и запускаем его. Можно выбрать выкачивание свежих пакетов сразу при установке, либо обновить их вручную позже. Компиляторы Fortran, Ada и ObjC нам не понадобятся, их можно не ставить. MSYS Basic System может пригодится, его ставим. В качестве адреса я указал "C:MinGW
", но если вас это смущает — можете выбрать другой, например, "C:Program FilesCommon FilesMinGW
".
После установки следует добавить к системной переменной [8] PATH две новые папки: "MinGWbin
" и "MinGWmsys1.0bin
". Для этого заходим в Пуск -> Панель управления -> Система -> Дополнительные параметры системы; Во вкладке Дополнительно тыкаем внизу кнопку Переменные среды. Из списка системных переменных выбираем Path, и через точку с запятой дописываем полные адреса к папкам "MinGWbin
" и "MinGWmsys1.0bin
".
Если вы не выбирали выкачивание свежих пакетов при установке, следует обновить нужные пакеты вручную. Для этого открываем консоль (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 библиотек.
Поскольку OpenGL это API, которое относится исключительно к графике — в него не входят функции по созданию окон или обработки устройств ввода. Тем более, решение этой задачи зависит от операционной системы. По-этому ее вынесли в отдельную библиотеку и назвали GLUT [9] — OpenGL Utility Toolkit. Однако, последний релиз этой библиотеки был очень давно и сейчас ее подменила freeglut [10].
Качаем с официального сайта [11] бинарники под MinGW [12]. Распаковываем, freeglut.dll
из папки bin
кидаем в "C:WindowsSystem32
" (для х86) или "C:WindowsSysWOW64
" (для х64), или любую другую папку, которая указана в PATH. Содержимое папок include
и lib
можно скопировать либо в "MinGWinclude
" и "MinGWlib
" (так будет проще), либо в отдельные созданые папки "MinGWfreeglutinclude
" и "MinGWfreeglutlib
".
На этом с freeglut все. Для его подключения нужно добавить #include <GL/freeglut.h>
Библиотека glew [13] позволяетт определять что видеокарта поддерживает, а что — нет. Ее установка немного сложнее для нашего случая.
Качаем с официального сайта [14] исходники [15], поскольку бинарники заточены под Visual Studio и нам не подойдут. Теперь эти исходники нужно скомпилировать. Я в этом практически ничего не понимаю, по-этому обратился к гуглу и нашел помощь здесь [16]:
Распаковываем скачанный архив, открываем консоль, заходим в полученную папку и пишем следующие команды:
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 — в папку "MinGWlib
" либо "MinGWglewlib
".
Из папки include
копируем содерижмое в "MinGWinclude
" или "MinGWglewinclude
".
На этом с 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 ... exitingn";
exit(EXIT_FAILURE);
}
glutMainLoop();
}
Обратите внимание на функцию glutInitContextVersion — она завершит выполнение программы если ей не удалось создать контекст для указаной версии OpenGL. Чтобы узнать версию OpenGL, которую поддерживает ваша видеокарта, можно заглянуть в ее спецификацию либо скачать бинарники glew с официального сайта [14] и запустить 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:MinGWfreeglutinclude" -L"C:MinGWfreeglutlib" -I"C:MinGWglewinclude" -L"C:MinGWglewlib"
Флаг -Wl,--subsystem,windows
указывает компилятору что он должен создать графическое приложение, а не консольное.
Если все получилось, должен получится файл test.exe
, который при запуске создает белое окно 512х512.
Когда вы захотите поделится своим приложением, убедитесь что вместе с исполняемым файлом передаете используемые библиотеки — freeglut.dll
и glew32.dll
.
Ну и на последок, приведу пример настройки Sublime. Скачать его можно отсюда [17], вводные видео-уроки на английском языке можно глянуть здесь [18].
После установки открываем файл настройки билда С++:
"C:Users%Username%AppDataRoamingSublime Text 2PackagesC++C++.sublime-build
"
Сохраняем его копию как
"C:Users%Username%AppDataRoamingSublime Text 2PackagesUserC++С++ 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 для компиляции и запуска.
На этом все!
Автор: AlexXsWx
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/opengl/32985
Ссылки в тексте:
[1] вышло 8-е издание книги OpenGL programming guide: http://habrahabr.ru/post/174819/
[2] компилятор: https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D1%8B_C%2B%2B
[3] G++: https://ru.wikipedia.org/wiki/G%2B%2B
[4] GCC: https://ru.wikipedia.org/wiki/Gcc
[5] MinGW: https://ru.wikipedia.org/wiki/MinGW
[6] официального сайта: http://www.mingw.org/
[7] инсталлятор: http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20120426/
[8] системной переменной: http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D1%8B_Windows
[9] GLUT: http://ru.wikipedia.org/wiki/GLUT
[10] freeglut: http://ru.wikipedia.org/wiki/Freeglut
[11] официального сайта: http://freeglut.sourceforge.net/
[12] бинарники под MinGW: http://files.transmissionzero.co.uk/software/development/GLUT/freeglut-MinGW.zip
[13] glew: http://en.wikipedia.org/wiki/OpenGL_Extension_Wrangler_Library
[14] официального сайта: http://glew.sourceforge.net/
[15] исходники: https://sourceforge.net/projects/glew/files/glew/1.9.0/glew-1.9.0.zip/download
[16] здесь: http://stackoverflow.com/questions/6005076/building-glew-on-windows-with-mingw
[17] отсюда: http://www.sublimetext.com/2
[18] здесь: https://tutsplus.com/course/improve-workflow-in-sublime-text-2/
[19] Источник: http://habrahabr.ru/post/177885/
Нажмите здесь для печати.