вторник, 21 июля 2009 г.

Сборка OGRE из исходников под Windows, с помощью MinGW и среды Code::Blocks.

Ogre – это добротный движок рендеринга с открытыми исходниками. Я уже довольно давно посматриваю за его развитием (как и за другими интересными Open Source проектами), периодически собирая его (и вещи на его основе) из исходников, чтобы поиграться с демками. :) Но, к сожалению, до своих проектов, с использованием OGRE, руки пока не доходят.. :(
Однако, рискну поделиться своим скромным опытом в вопросе сборки OGRE с помощью MinGW и черкануть немного об этом, в принципе, достаточно простом процессе. Может кому-то и пригодится (конечно, в первую очередь мне самому).. :)



Для того чтобы собрать OGRE понадобиться:
1.Установленный MinGW (желательно первым способом) и настроенный Code::Blocks.
2.Собственно исходники OGRE. Для начала лучше попробовать архив с последним релизом, т.к.при сборке trunk-версии из репозитория могут быть проблемы требующие вмешательства напильника.. Последний релиз следует искать тут http://www.ogre3d.org/download/source. В моем случае файл OGRE 1.6.2 Source For Windows ( ogre-v1-6-2.zip, 11 April 2009, 46.4Mb ).
3.Архив со сторонними зависимостями (Precompiled Dependencies). Это предварительно скомпилированные сторонние библиотеки. ВНИМАНИЕ, архив зависимостей должен соответствовать вашему компилятору, в нашем случае MinGW (библиотеки для Visual Studio не подойдут). Ищем архив на странице с исходниками http://www.ogre3d.org/download/source. В моем случае Code::Blocks + MingW Precompiled Dependencies (OgreDependencies_CBMinGW_Shoggoth_20090131.zip, 31 January 2009, 21.5Mb ).
4.Если хочется собрать плагин для рендеринга через DirectX (RenderSystem_Direct3D9.dll), то нужно еще установить DirectX SDK (у меня валялся файл DXSDK_Nov08.exe, 507 MB) или просто раздобыть заголовочные файлы от него (библиотечные файлы идут в архиве с зависимостями libd3dx9_30.a, libd3dx9d_30.a, libd3d9.a, а либы для Visual Studio из SDK все равно не подойдут). В принципе можно положить на DirectX болт, так есть еще OpenGL рендер (RenderSystem_GL.dll), который прекрасно собирается без DirectX SDK и позволяет запускать все стандартные демки OGRE. Нужно только пропатчить файл Plugins.cfg в директории с собранными демками перед запуском и закаментить или вообще убрать строчку «Plugin=RenderSystem_Direct3D9».

Прибарахлились. Можно ехать дальше..

Распаковываем архив с исходниками ogre-v1-6-2.zip в какую-нибудь папку. Я буду предполагать, что исходники распакованы в папку «c:\dev».
Распаковываем зависимости OgreDependencies_CBMinGW_Shoggoth_20090131.zip в папку с исходниками OGRE «c:\dev\ogre».
Запускаем Code::Blocks и открываем в нем файл рабочей области «c:\dev\ogre\Ogre.workspace».
Если у вас многоядерная система и есть желание ускорить процесс сборки, проверьте настройки компиятора и укажите сколько процессов использовать для сборки (об этом я писал в конце поста про Code::Blocks). Это делается в меню Code::Blocks «Settings->Compiler and Debugger..->Global compiler settings» на вкладке «Other settings»
Если DirectX SDK установлен пропишите его в путях компилятора. Code::Blocks «Settings->Compiler and Debugger..->Global compiler settings» на вкладке «Search directories» в суб-вкладке «Compiler» добавьте путь к заголовочным файлам DirectX, у меня это «C:\Program Files\Microsoft DirectX SDK (November 2008)\Include».
Если на DirectX Вы забили, то закройте проект RenderSystem_Direct3D9, чтобы не было ругани при попытке его сборки (правой на названии «Close project»).

Все готово к сборке :). Жмем в меню Code::Blocks «Build->Build workspace» и идем пить чай пока идет сборка.

Если во время сборки не было ошибок, то все клево. Идем в папку «c:\dev\ogre\Samples\Common\bin\Release\» и любуемся собранными демками. Если нужно отключаем DirectX в Plugins.cfg.

Если у Вас не пашет пример Demo_BspCollision.exe, то попробуйте добавить строчку «dInitODE();» в начало конструктора OgreRefApp::World::World («c:\dev\ogre\ReferenceApplication\ReferenceAppLayer\src\OgreRefAppWorld.cpp») и пересоберите проект Demo_BspCollision.

Ссылки по теме:
http://www.ogre3d.org
http://www.ogre3d.ru

На сегодня все. Удачной компиляции! :)

P.S. К сожалению, я здесь упустил один момент. В wiki на ogre3d.org есть замечание о том что их тулбокс с mingw использует модифицированную версию библиотеки libstdc++, т.к. при использовании стандартной версии идущей с gcc-g++ при передачи строк между dll возникают проблемы с памятью (из за того что libstdc++ статически линкуется к каждой dll). Насколько я понял это в основном касается OgrePlatform и OgreMain из OGRE 1.4.x. Но по всей видимости в Ogre 1.6.x код из OgrePlatform перекочевал в OgreMain, и возможно проблема уже не актуальна :).. Во избежание неприятных последствий можно перестраховаться и воспользоваться TDM Mingw (где уже сделаны необходимые модификации), либо использовать тулбокс с ogre3d.org обновив пакеты w32api и mingwrt (w32api-3.13-mingw32-dev.tar.gz, mingwrt-3.15.2-mingw32-dev.tar.gz)

Комментариев нет:

Отправить комментарий