7

Девлог LOLEngine 0

Привет, игроделы!

Денёк выдался тяжелый и кодить получилось мало, но, учитывая успешный успех предыдущего поста, пора браться за работу.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

На сегодня успелось только собрать базу на гит и вызывать окошко. Обо всем по порядку:

Завел проект на гите и стянул его на машину. Далее создал вот такую структуру папок:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Код движка расположился в папке LOLEngine, и собираться он будет в виде статической библиотеки. Точка входа int main() тоже будет расположена здесь.

Код проекта будет в папке Game, сборка - в исполняемый файл.

Ну и все сторонние библиотеки будут складываться в папку ThirdParty.

Начну с подключения сабмодулей к своему репозиторию. Мне понадобятся: сейчас - glfw, потом - glm (сильно потом сюда будут спиханы все json, imgui и прочее)

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Сабмодули подключил, обновил, проверил наличие в папке ThirdParty. Далее - прежде чем открывать папку репозитория в VS Code, следует сразу создать файл .gitignore (чтобы в комит не шло то, что не должно туда идти) и файл CMakeLists.txt в корне репозитория, и по одному CMakeLists.txt в папках LOLEngine и Game

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Открываю папку в VS Code и создаю файл main.cpp в LOLEngine/Internal и пустой GameSettings.cpp в Game/Sources (в каждый проект надо добавить как минимум один файл исходного кода, чтобы CMake не ругался)

Далее перехожу в корневой CMakeLists и пишу следующее:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

CMAKE_SUPPRESS_REGENERATION добавил, чтобы при сборке в IDE не создавался таргет для теста сборки

Движок и исполняемый проект подключаю через add_subdirectory. CMake найдет файлы CMakeLists в соответствующих папках.

CMakeLists.txt проекта Game выглядит так:

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

В туториалах часто видел, как все добавляемые файлы прописывают вручную в 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, прохожусь рекурсивно по папкам в поисках исходников, подключаю в статическую библиотеку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Далее папку с внутренними заголовками подключаю как PRIVATE, а папку Include и загаловки glm, glfw - как PUBLIC, чтобы они были видны в Game

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Ну и заканчиваю подключением библиотек. Если в папке сабмодуля есть CMakeLists.txt высокая вероятность, что ее можно подключить через add_subdirectory и не париться вообще (Imgui потом придется собирать самим)

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

С этим закончили. Теперь если в main.cpp написать простой int main(), то все запустится.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост
Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Заработало

Теперь проекту нужно передать размер и название окна в движок (позднее и некоторые другие данные). Для этого в LOLEngine/Include/Engine/Core создаю файл AppSettings.hpp и объявляю простую структурку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Pikabu! Сделай форматирование кода в тексте! задолбался все картинками ставить!

Все внешние функции и методы я сложу в файле LOLEngine/Include/Engine/ExternalSettings.hpp где пока будет объявлена одна extern функция GetApplicationSettings()

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

В папке Game/Sources/ создаю файл GameSettings.cpp и пишу реализацию функции GetApplicationSettings();

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Возвращаюсь в движок - в main.cpp и получаю первые настройки из исполняемого модуля Game.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост
Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

Запускаю и радуюсь окошку.

Девлог LOLEngine 0 Разработка, Программирование, Gamedev, Инди, Длиннопост

На сегодня это все. Успел мало, но надеюсь разогнаться на днях. Спасибо тем, кто подписался и @AABVGD, за идею написать под веб-сборку. В следующем посте постараюсь подключить OpenGL, glad и emscripten для сборки цветного окошка под desktop и web. Ссылка на репо

Ставьте плюсы/минусы, пишите в комментах что я сделал так, а что не так.

PS: Если кто знает как вставлять код с форматированием на Pikabu, расскажите

Лига программистов

2K постов11.8K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества