Root Engine / Basement
Собрал весь рабочий код для фундамента движка в виде одного репозитория
Куски кода были взяты с:
- Старых наработок Root Engine
- RootShadeBox
- Shoko (Compile-time UI Framework)
- Advanced AVR Templates
- MicroBuild
- RootSAI (Simple Assembler Interptere)
- Из личного OneIdiotOneVulkan
- И ASAI
Постепенно буду пополнять репозиторий по мере наработок, которые мне понадобятся в движке
Настроения нет, поэтому ничего добавлять не хочу - Просто изучайте, критикуйте, берите на заметку и используйте (лицензия MIT)
И да - хороший фундамент для движка стоит дороже, чем эфемерная иллюзия о том, что все закончено
Собрал весь рабочий код для фундамента движка в виде одного репозитория
Куски кода были взяты с:
- Старых наработок Root Engine
- RootShadeBox
- Shoko (Compile-time UI Framework)
- Advanced AVR Templates
- MicroBuild
- RootSAI (Simple Assembler Interptere)
- Из личного OneIdiotOneVulkan
- И ASAI
Постепенно буду пополнять репозиторий по мере наработок, которые мне понадобятся в движке
Настроения нет, поэтому ничего добавлять не хочу - Просто изучайте, критикуйте, берите на заметку и используйте (лицензия MIT)
И да - хороший фундамент для движка стоит дороже, чем эфемерная иллюзия о том, что все закончено
GitHub
GitHub - The-Root-Engine/Basement: Basement of Engine: Aliases, Structures, Containers, Templates, Allocators, and etc.
Basement of Engine: Aliases, Structures, Containers, Templates, Allocators, and etc. - The-Root-Engine/Basement
🔥2
Root Engine / Basement
1) Динамический массив
2) Платформо-независимый слой (HAL): Создание диалоговых окон
3) Бинарная двухсторонняя сериализация данных
1) Динамический массив
TArray, стандартный сишный аллокатор FAnsiAllocator, аллокатор с локальным буффером TInlineAllocator2) Платформо-независимый слой (HAL): Создание диалоговых окон
FPlatformDialogs, создание-открытие-взаимодействие с файлами FPlatformIO + FPlatformFile3) Бинарная двухсторонняя сериализация данных
FArchive. Метафорично выбран оператор xor ^ вместо потоковых << - кто понял тот понял❤🔥2💯1
Вот насколько надо просто чувствовать С++
Решил значит отладить цикл, добавил после строки GWires.Emplace(...) вызов остановки отладчика __debugbreak(), чтобы посмотреть на локальные переменные
Открываю - А у меня просто нет этих переменных!
И первые мысли: Проблема в отладчике? Нет. Проблема в IDE? Нет. В чем-то еще? А может...Деструкторы, бл!
Кароче: С++ скрытно под собой, после создания обьектов кабеля (Cable) и провода (Wire) вызывает их конструкторы (FCable::FCable() и FWire::FWire())
Мы работаем с этими обьектами
Но уже после - наоборот. Сразу вызывает их деструкторы (FCable::~FCable() и FWire::~FWire())
И затем я вызывается отладчик, когда обьекты уже как бы удалены
Решение? Ну, я ничего лучшего не придумал, кроме как после вызова отладчика вызвать консоль и написать что-то наподобие printf("123") и все :)
Зачем? Чтобы отложить вызов деструкторов ПОСЛЕ моего вызова отладчика
Решил значит отладить цикл, добавил после строки GWires.Emplace(...) вызов остановки отладчика __debugbreak(), чтобы посмотреть на локальные переменные
Открываю - А у меня просто нет этих переменных!
И первые мысли: Проблема в отладчике? Нет. Проблема в IDE? Нет. В чем-то еще? А может...
Кароче: С++ скрытно под собой, после создания обьектов кабеля (Cable) и провода (Wire) вызывает их конструкторы (FCable::FCable() и FWire::FWire())
Мы работаем с этими обьектами
Но уже после - наоборот. Сразу вызывает их деструкторы (FCable::~FCable() и FWire::~FWire())
И затем я вызывается отладчик, когда обьекты уже как бы удалены
Решение? Ну, я ничего лучшего не придумал, кроме как после вызова отладчика вызвать консоль и написать что-то наподобие printf("123") и все :)
Зачем? Чтобы отложить вызов деструкторов ПОСЛЕ моего вызова отладчика
🔥2
WebAssembly? WebAssembly!
Что могу сказать
Не зря. Вот не зря сука я говорил, и не однократно говорил, что STL эта ваша - фигня полная! Я, лично, не доверяю STL/std
И не зря....
Начал значит я грызть гранит науки под названием WASM, добавил еще один слой абстракции (HAL) для платформы Web
И тут вскрылось... что стандартная std::map (которую я временно использовал) у MSVC и Clang настолько разные - что на втором у меня тупо компилятор отказывался работать, ломаясь где-то очень глубоко внутри STL
Ну, не долго думая, быстренько написал еще один собственный контейнер TMap и... все! Проект запустился с пол пинка
А вот теперь представьте - если бы я изначально не писал своивелосипеды контейнеры, а сидел бы на готовеньких STL? Хо-хо-хо
Что могу сказать
Не зря. Вот не зря сука я говорил, и не однократно говорил, что STL эта ваша - фигня полная! Я, лично, не доверяю STL/std
И не зря....
Начал значит я грызть гранит науки под названием WASM, добавил еще один слой абстракции (HAL) для платформы Web
И тут вскрылось... что стандартная std::map (которую я временно использовал) у MSVC и Clang настолько разные - что на втором у меня тупо компилятор отказывался работать, ломаясь где-то очень глубоко внутри STL
Ну, не долго думая, быстренько написал еще один собственный контейнер TMap и... все! Проект запустился с пол пинка
А вот теперь представьте - если бы я изначально не писал свои
❤3❤🔥1🎉1
Root Engine / Crash Handler
Ну все, дорогие друзья
Теперь после бесячего UnrealCrashHandler.exe, вас будет еще и бесить RootEngineCrashHandler.exe
Мои поздравления!! 🎉🎉🎉
Ну а если серьезно - Да, теперь у меня есть собственный Crash Handler, прямо как во всех взрослых движках
И да, как оказалось делать их - не так уж и сложно. Зато при вылете - я могу не труситься отладчиком, а тупо открыть .dmp файл и увидеть что-да-как
Все, официально это имба сегодняшнего вечера
Ну все, дорогие друзья
Теперь после бесячего UnrealCrashHandler.exe, вас будет еще и бесить RootEngineCrashHandler.exe
Мои поздравления!! 🎉🎉🎉
Ну а если серьезно - Да, теперь у меня есть собственный Crash Handler, прямо как во всех взрослых движках
И да, как оказалось делать их - не так уж и сложно. Зато при вылете - я могу не труситься отладчиком, а тупо открыть .dmp файл и увидеть что-да-как
Все, официально это имба сегодняшнего вечера
🎉3
Но кстати говоря, от двиглодела к двиглоделам
Сегодня в тг канале Грокаем C++ / std::source_location обсуждался std::source_location
Полезная штука однако. Например для логирования. Чтобы получить имя функции и ее строку с типизацией компилятора, вместо использования тупого препроцессорного __FILE__ и написания макросов по типу UE_LOG
Но, std::source_location - это только фича только у C++20? Формально да....
Но если копнуть - нет! Она вся основана на интринсиках компилятора, которые существовали задолго до С++20. А это значит...
Что возьму я велосипед, и соберу собственную FSourceLocation прямо на C++17! Благо пишется быстро, зато логировать без макросов станет легче и чище
Сегодня в тг канале Грокаем C++ / std::source_location обсуждался std::source_location
Полезная штука однако. Например для логирования. Чтобы получить имя функции и ее строку с типизацией компилятора, вместо использования тупого препроцессорного __FILE__ и написания макросов по типу UE_LOG
Но, std::source_location - это только фича только у C++20? Формально да....
Но если копнуть - нет! Она вся основана на интринсиках компилятора, которые существовали задолго до С++20. А это значит...
Что возьму я велосипед, и соберу собственную FSourceLocation прямо на C++17! Благо пишется быстро, зато логировать без макросов станет легче и чище
🔥2
Id Tech 8 GI.pdf
2.7 MB
Специально для вас скачал украл пару докладов с SIGGRAPH
Что ж, будет прочесывать, изучать, да писать
А что думали? Мы тут в шутки играем? Качаем готовый Raylib 3D и ImGui? Ага...
Включаем расслабленную электронную музыку и проходимся по базе:
- FrameGraph от Frostbite - База по RDG, без которой управлять Vulkan'ом или DX12 в принципе не возможно. Вот ее штрудируем до посинения
- Clustered Deferred and Forward Shading - Любимый мною кластерный шейдинг, от чего я и буду отталкиваться
- VPL based GI - Ну и как же не попробовать использовать халявные динамические источники света для генерации Эммисива как у GI?
- ID TECH 666 и Id Tech 8 GI - ну, у этих безумцев все стабильно. Первое что они считают: Это количество занятых регистров на варпе видеокарты
Что ж, будет прочесывать, изучать, да писать
А что думали? Мы тут в шутки играем? Качаем готовый Raylib 3D и ImGui? Ага...
Включаем расслабленную электронную музыку и проходимся по базе:
- FrameGraph от Frostbite - База по RDG, без которой управлять Vulkan'ом или DX12 в принципе не возможно. Вот ее штрудируем до посинения
- Clustered Deferred and Forward Shading - Любимый мною кластерный шейдинг, от чего я и буду отталкиваться
- VPL based GI - Ну и как же не попробовать использовать халявные динамические источники света для генерации Эммисива как у GI?
- ID TECH 666 и Id Tech 8 GI - ну, у этих безумцев все стабильно. Первое что они считают: Это количество занятых регистров на варпе видеокарты
❤🔥3❤1💯1