Почти два года в свободное от работы время пишу движок на Си (C99 если точнее) с минимальным количеством внешних зависимостей - на данный момент у движка всего одна зависимость (miniz_tinfl).
Ключевые особенности:
- Не требует сборки - нужно всего лишь добавить пару файлов в свой проект.
- Поддержка моделей в FBX
- Граф сцены
- Автоматическое управление ресурсами
- Рендер основан на OpenGL 3.3 Core
- Софтварный звук (3D + 2D)
- Поддержка TTF шрифтов
- Встроенный сериализатор - полное состояние движка можно сохранить\загрузить за один вызов.
- Продвинутый GUI (вдохновлен WPF) с множеством виджетов
- Встроенный поиск пути
- Position-based физика
- и много другое - подробнее на странице в гитхабе
Страничка на гитхабе - https://github.com/mrDIMAS/DmitrysEngine
mr.DIMAS
> движок на Си
Звучит, как что-то очень ненадёжное. Почему не C++?
Panzerschrek[CN]
Это на Си то не надежно? Прямо смешно, так и хочется написать:"Какие ваши доказательства?"
Но это все оффтоп а то и флейм.
Можно не отвечать.
Должно было быть на Расте. Шутка.
lookid
Видел, но он довольно плохо написан.
Panzerschrek[CN]
> Звучит, как что-то очень ненадёжное
Почему?
TheLightWay
+1
Wobbit
Раст стал раздражать медленной компиляцией - а ведь у меня всего то 4к строк было в проекте а время компиляции было аж 20 сек в дебажной сборке, поэтому пока отложил его (но язык в общем то хороший, от своих слов не отказываюсь). В тоже время 20к строк на Си компилятся за 1,2 сек со всеми оптимизациями.
Помнится, на си без плюсов у меня тексты программ к какой то момент стали на четыре пятых состоять из префиксов. В чужих проектах видел тоже самое.
Так что, надо не создавать себе неудобств и программировать на С++, если только это явно не запрещено.
Zab
> Помнится, на си без плюсов у меня тексты программ к какой то момент стали на
> четыре пятых состоять из префиксов.
что за префиксы? зачем
А теперь смотрим на реакцию зарубежных товарищей
https://www.gamedev.net/forums/topic/702676-modern-game-engine-written-in-c/
Я специально там в первую очередь создал тред, потому как здесь в общем то одни советчики которые знают как надо (тм).
mr.DIMAS
Это круто!) Всегда хотел написать что-то серьезное на Си, но как=то не осиливал.
mr.DIMAS
Мне все понравилось, и все таки кажется странным реализация оконной системы
под две платформы win32.c и x11.c.
Да я понимаю что хочется минимума внешних зависимостей но кажется SDL2 сюда подошел бы отлично. Тем более он тоже на C99. Но это так, просто а сама работа крутая!
TheLightWay
1200 строк вс зависимость размером побольше чем весь движок.
u960
>> четыре пятых состоять из префиксов.
> что за префиксы? зачем
Имена длинные, префиксы имен - классифицирующие. А как иначе, если язык контекстов толком не поддерживает? Имен то многие десятки тысяч, их надо как-то организовывать, чтобы самому себя не запутать.
Когда С++ только появлялся, я переходить то на него не спешил. И уж тем более не переводил на него старые проекты. Программировал на си без плюсов вполне себе объектно-ориентированно, а это определяло довольно громоздкий код.
С ним можно работать, если условия заставят - почему бы и нет. Но когда можно выбирать си или C++, выбор очевиден.
В гораздо более поздние времена делал модификации к интербейзу (его фриверному варианту). Там тоже все на си без плюсов, все объектно-ориентированно. Работать с совершенно чужим, гигантским и практически недокументированным кодом было легко. И тоже большую часть объема кода составляют префиксы имен, хотя я предпочитал использовать более длинные, мой код в результате получался больше чисто по знакам.
Zab
> Имена длинные, префиксы имен - классифицирующие.
Вы имеете ввиду с помощью префиксов обозначать их модульность типа: SV_***** - серверные функции, CL_**** - клиента, RD_**** - рендер и так далее?
Если да, то пишу без префиксов, называя функции тем, что они выполняют, благо игра этому способствует сама (Get_Player_HP, Load_Model_From_File, Load_Model_From_Memory и т.д). Кода не много около 50к, проблем пока нет.
u960
> Вы имеете ввиду с помощью префиксов обозначать их модульность типа: SV_***** -
> серверные функции, CL_**** - клиента, RD_**** - рендер и так далее?
>
> Если да, то пишу без префиксов, называя функции тем, что они выполняют, благо
> игра этому способствует сама (Get_Player_HP, Load_Model_From_File,
> Load_Model_From_Memory и т.д). Кода не много около 50к, проблем пока нет.
У тебя может быть условное перечисление, где одно из имён может спокойно совпадать с именем какой-нибудь структуры и проч.
Тема в архиве.