Инструкция по сборке примеров

Общая информация

Примеры ко всем семинарам находятся в репозитории Mercurial по адресу: http://bitbucket.org/AlexBobkov/graphicssamples. Можно скачать архив с исходниками, но лучше клонировать себе репозиторий и регулярно его обновлять.

Для запуска примеров необходима более-менее новая видеокарта с поддержкой OpenGL 3.х или выше. Подойдут видеокарты NVIDIA и AMD 3-4х летней давности. Встроенные видеокарты Intel могут не поддерживать некоторые возможности OpenGL.

В этом году система сборки примеров изменилась в сторону упрощения для конечных пользователей. Но внутри система сборки усложнилась, и пока она ещё не оттестирована, могут возникать ошибки при сборке. Пишите о возникающих ошибках на alexander.e.bobkov@gmail.com. Я постараюсь оперативно отвечать.

Библиотеки

Примеры используют сторонние библиотеки:

  • GLFW - библиотека для создания графического контекста и взаимодействия с операционной системой.
  • GLEW - библиотека для инициализации функций OpenGL.
  • GLM - математическая библиотека.
  • Assimp - библиотека для загрузки 3д-моделей в разных форматах.
  • SOIL - библиотека для загрузки растровых изображений.
  • imgui - библиотека для создания простейшего графического интерфейса пользователя

Собирать эти библиотеки самостоятельно не обязательно - можно использовать автоматическую сборку (см. ниже инструкцию).

Требования к программному обеспечению

Windows:

  • Свежие драйвера для видеокарты
  • Visual Studio 2015 или новее
  • CMake 3.0 или новее
  • TortoiseHg

Linux:

  • Свежие проприетарные драйвера для видеокарты (опенсорс-драйвера не подойдут)
  • gcc (версия с поддержкой C++11)
  • CMake 3.0 или новее
  • Mercurial, Git, 7zip, wget
  • Возможно понадобятся дополнительные пакеты для разработки из репозитория вроде X11, Xrandr, Xxf86vm, Xi, Xcursor, Xinerama с суффиксами devel или dev. Под Ubuntu 16.04 понадобились пакеты:

    • libgl1-mesa-dev
    • libglu1-mesa-dev
    • libxrandr-dev
    • libxinerama-dev
    • libxcursor-dev

    Под Fedora 23 понадобились пакеты:

    • mesa-libGL-devel
    • mesa-libGLU-devel
    • libXrandr-devel
    • libXinerama-devel
    • libXcursor-devel

Инструкция по сборке под OS X

Официальной инструкции под OS X нет. Вы можете попробовать взять за основу одну из нижеприведенных инструкций для Windows или Linux.

Инструкция по сборке под Linux

Создайте папку для примеров, например, /home/username/graphics и перейдите туда в терминале. Выполните следующие команды:

mkdir build
mkdir install
mkdir dependencies-build
mkdir dependencies-install
hg clone http://bitbucket.org/AlexBobkov/graphicssamples repo
cd dependencies-build
cmake ../repo/dependencies -DCMAKE_INSTALL_PREFIX=../dependencies-install -DCMAKE_BUILD_TYPE=Debug
make

На этом этапе могут возникнуть ошибки сборки из-за того, что зависимости для примеров требуют наличия своих собственных зависимостей в системе. Изучите сообщения об ошибках. Скорее всего необходимо будет доустановить некоторые пакеты из репозитория.

cmake ../repo/dependencies -DCMAKE_INSTALL_PREFIX=../dependencies-install -DCMAKE_BUILD_TYPE=Release
make
cd ../build
cmake ../repo -DCMAKE_INSTALL_PREFIX=../install -DDEPENDENCIES_ROOT=../dependencies-install -DCMAKE_BUILD_TYPE=Release
make
make install
cd ../install
curl https://alexander-bobkov.ru/data/opengl/graphics-models.7z > graphics-models.7z
7z x graphics-models.7z

Скомпилированные примеры, шейдеры, текстуры и модели будут скопированы в папку install.

Инструкция по сборке под Windows

  1. Создайте папку для примеров, например, D:\Graphics, и в ней 5 подпапок dependencies-build, dependencies-install, build, install, repo.

    Скриншот (шаг 1)

  2. С помощью TortoiseHg клонируйте репозиторий с примерами в папку repo. В папке должен лежать файл CMakeLists.txt.

    Скриншот (шаг 2)

  3. Запустите программу cmake-gui. В верхней строчке укажите путь D:\Graphics\repo\dependencies, во второй строчке - путь D:\Graphics\dependencies-build. Нажмите Configure и далее Finish.

    Скриншот (шаг 3)

  4. Укажите в переменной CMAKE_INSTALL_PREFIX путь D:\Graphics\dependencies-install. Нажмите Configure и далее Generate. Выйдите из программы.

    Скриншот (шаг 4)

  5. Откройте проект Visual Studio D:\Graphics\dependencies-build\GraphicsDependencies.sln. Нажмите правой кнопкой мыши на проекте ALL_BUILD и выберите пункт Собрать.

    Скриншот (шаг 5)

  6. Когда сборка закончится (это может занять около 10 минут), выберите вверху окна конфигурацию Release и снова соберите проект ALL_BUILD.

  7. Когда сборка закончится (это может занять ещё около 10 минут), запустите программу cmake-gui. В верхней строчке укажите путь D:\Graphics\repo, во второй строчке - путь D:\Graphics\build. Нажмите Configure и далее Finish.

    Скриншот (шаг 6)

  8. Укажите в переменной CMAKE_INSTALL_PREFIX путь D:\Graphics\install, в переменной DEPENDENCIES_ROOT - путь D:\Graphics\dependencies-install. Нажмите Configure и далее Generate. Выйдите из программы.

    Скриншот (шаг 7)

  9. Откройте проект Visual Studio D:\Graphics\build\GraphicsSample.sln. Выберите вверху окна желаемую конфигурацию Debug или Release. Нажмите правой кнопкой мыши на проекте INSTALL и выберите пункт Собрать.

    Скриншот (шаг 8)

Скомпилированные примеры, шейдеры и текстуры будут скопированы в папку D:\Graphics\install.

Скриншот (шаг 9)

Для работы примеров также понадобятся несколько 3д-моделей. Скачайте архив и распакуйте в папку D:\Graphics\install.

Часто задаваемые вопросы

В конце сборки выскакивает ошибка

error MSB3073: The command "setlocal
"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -DBUILD_TYPE=Debug -P cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 1. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets 134 5 INSTALL

Это связано с тем, что не получается скопировать готовый exe-файл в папку, которая указана в CMake в переменной CMAKE_INSTALL_PREFIX. Основных причин 2:

  • Вы явно не указали путь в переменной CMAKE_INSTALL_PREFIX. По умолчанию эта переменная содержит путь в C:\Program Files, который защищен от записи. Укажите другой путь в переменной CMAKE_INSTALL_PREFIX и перегенирируйте проект.

  • Ваше приложение уже запущено. Просто закройте его и повторите сборку в Visual Studio

Все собралось, но отсутствует exe-файл

Нажмите правой кнопкой на проекте INSTALL и выберите пункт Собрать. Ваш exe-файл будет скопирован в папку, которая была указана в CMake в переменной CMAKE_INSTALL_PREFIX

При запуске exe-файла появляется окно и тут же закрывается

Это происходит потому, что программа выдает сообщение об ошибке в терминал и закрывается по exit(1). Чтобы прочитать сообщение об ошибке, запустите интерпретатор cmd.exe, перейдите в папку с программой, и запустите программу из командной строки. По сообщению об ошибке в терминале вы поймете, в чем проблема.

Программа пишет, что не сможет скомпилировать шейдер: Failed to compile the shader

  • Проверьте версию OpenGL. Она должна быть больше либо равна 3.3.

  • Если вы пробуете запустить свой проект со своими собственными шейдерами, то ищите ошибку по номеру строки, которая указана в сообщении об ошибке.

  • Если вы пробуете запустить демонстрационные примеры, то срочно напишите об этом мне, пришлите текст ошибки и сообщите названиен вашей видеокарты.

Версия OpenGL меньше 3.3

  • Попробуйте обновить драйвер видекарты

  • Как вариант, попробуйте использовать язык шейдеров GLSL более ранней версии (например, 130).

  • Как вариант, попробуйте использовать OpenGL ES 2.0/3.0 или WebGL, если ваш компьютер их поддерживает.

  • Если не поможет, то попросите соседа одолжить компьютер для выполнения задания.

Ноутбук с 2мя видеокартами: Intel и NVidia. Приложение всё время запускается на видеокарте Intel

Где-то в настройках видеокарты можно переключить, чтобы приложение запускалась на видеокарте NVidia