Девлог LOLEngine 0
Привет, игроделы!
Денёк выдался тяжелый и кодить получилось мало, но, учитывая успешный успех предыдущего поста, пора браться за работу.
На сегодня успелось только собрать базу на гит и вызывать окошко. Обо всем по порядку:
Завел проект на гите и стянул его на машину. Далее создал вот такую структуру папок:
Код движка расположился в папке LOLEngine, и собираться он будет в виде статической библиотеки. Точка входа int main() тоже будет расположена здесь.
Код проекта будет в папке Game, сборка - в исполняемый файл.
Ну и все сторонние библиотеки будут складываться в папку ThirdParty.
Начну с подключения сабмодулей к своему репозиторию. Мне понадобятся: сейчас - glfw, потом - glm (сильно потом сюда будут спиханы все json, imgui и прочее)
Сабмодули подключил, обновил, проверил наличие в папке ThirdParty. Далее - прежде чем открывать папку репозитория в VS Code, следует сразу создать файл .gitignore (чтобы в комит не шло то, что не должно туда идти) и файл CMakeLists.txt в корне репозитория, и по одному CMakeLists.txt в папках LOLEngine и Game
Открываю папку в VS Code и создаю файл main.cpp в LOLEngine/Internal и пустой GameSettings.cpp в Game/Sources (в каждый проект надо добавить как минимум один файл исходного кода, чтобы CMake не ругался)
Далее перехожу в корневой CMakeLists и пишу следующее:
CMAKE_SUPPRESS_REGENERATION добавил, чтобы при сборке в IDE не создавался таргет для теста сборки
Движок и исполняемый проект подключаю через add_subdirectory. CMake найдет файлы CMakeLists в соответствующих папках.
CMakeLists.txt проекта Game выглядит так:
В туториалах часто видел, как все добавляемые файлы прописывают вручную в add_executable или add_library.
Здесь я использую file(GLOB_RECURSE) чтобы рекурсивно пройти по папкам и найти все файлы, сохранить их в переменную GAME_SOURCES и GAME_HEADERS и дальше добавить в проект. Для сборки достаточно добавить только cpp и c файлы, но чтобы hpp, h были видны в IDE если кто-то соберет под Visual Studio или XCode, добавляю и их.
source_group(TREE) сохранит структуру каталогов при сборке под IDE
Далее на очереди CMakeLists движка:
Нахожу OpenGL, аналогично Game, прохожусь рекурсивно по папкам в поисках исходников, подключаю в статическую библиотеку.
Далее папку с внутренними заголовками подключаю как PRIVATE, а папку Include и загаловки glm, glfw - как PUBLIC, чтобы они были видны в Game
Ну и заканчиваю подключением библиотек. Если в папке сабмодуля есть CMakeLists.txt высокая вероятность, что ее можно подключить через add_subdirectory и не париться вообще (Imgui потом придется собирать самим)
С этим закончили. Теперь если в main.cpp написать простой int main(), то все запустится.
Теперь проекту нужно передать размер и название окна в движок (позднее и некоторые другие данные). Для этого в LOLEngine/Include/Engine/Core создаю файл AppSettings.hpp и объявляю простую структурку.
Все внешние функции и методы я сложу в файле LOLEngine/Include/Engine/ExternalSettings.hpp где пока будет объявлена одна extern функция GetApplicationSettings()
В папке Game/Sources/ создаю файл GameSettings.cpp и пишу реализацию функции GetApplicationSettings();
Возвращаюсь в движок - в main.cpp и получаю первые настройки из исполняемого модуля Game.
Запускаю и радуюсь окошку.
На сегодня это все. Успел мало, но надеюсь разогнаться на днях. Спасибо тем, кто подписался и @AABVGD, за идею написать под веб-сборку. В следующем посте постараюсь подключить OpenGL, glad и emscripten для сборки цветного окошка под desktop и web. Ссылка на репо
Ставьте плюсы/минусы, пишите в комментах что я сделал так, а что не так.
PS: Если кто знает как вставлять код с форматированием на Pikabu, расскажите
Лига программистов
2K поста11.8K подписчиков
Правила сообщества
- Будьте взаимовежливы, аргументируйте критику
- Приветствуются любые посты по тематике программирования
- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества