Ризз
@septag
Rizz (ریز)-это крошечная, многоплатформенная и минимальная структура разработки игры/приложений, написанная на языке C. Вдохновленный машиной и либерами Сокола. В настоящее время он находится в стадии разработки, функции и улучшения будут постоянно добавляться к разным платформам.
Выборочная модель - любезность Ferre Poorkazem
Дизайн и базовое использование
Для получения более подробной информации о принципах дизайна, архитектуре и базовом использовании структуры, пожалуйста, прочитайте документ Rizz Architecture и базовое использование, которое также доступно в Docs/Guide
Примечание
Это не игровой двигатель, это относительно низкоуровневая структура для программистов для создания собственного двигателя/рендеринга/физики. Ядро Rizz не является и не будет реализовать какие -либо методы рендеринга/физику или навязывать пользователю какую -либо конкретную систему объектов. Это просто предоставляет основные строительные блоки для разработчиков игр. Другие функции будут реализованы как плагины.
Функции
Основной
- Портативный C-код : C11 (GCC/Clang), C99 (MSVC) Code Code, разработанный с ориентированным на данные мышления.
- Система плагина : двигатель имеет небольшое ядро. Многие функциональные возможности реализованы через плагины.
- Минимальные зависимости : нет внешних/больших зависимостей. Только несколько небольших зависимостей, включенных в источник.
- Горячая загрузка кода C/C ++ : плагины/код игры подлежат горячей загрузке с некоторыми ограничениями и правилами.
- Система работы на основе волокна : простой в использовании системы вакансий на основе волокон.
- Отражение : обеспечивает простую систему отражения для структур , перечислений и функций , а также встроенной сериализации/десериализации JSON .
- Async Asset Manager : гибкий справочный подсчет Asset Manager. Новые типы активов могут быть добавлены сторонним кодом к менеджеру.
- Горячая загрузка активов и шейдеров : все игровые ресурсы и шейдеры могут быть горячими.
- Виртуальная файловая система : Async Read/Write. Кадровые или архивы могут быть установлены в виде виртуальных каталогов.
- Поддержка Coroutines : Coroutines можно приостановить для N рам или N Milliseconds.
- Пользовательская обработка сбоев : пользовательские обратные вызовы для сбоев. Наряду с созданием файлов crash.dmp (только Windows)
Графика
- Несколько графических API Поддержка : металл (iOS, macOS). OpenGL-ES 2/3 (Android). Direct3D11 (Windows), OpenGL 3.3 (Linux)
- Портативные шейдеры : запишите шейдеры один раз в GLSL, набор инструментов автоматически переведет шейдер на другие API.
- Многополосный командный буфер GPU : команды рисования могут быть отправлены несколькими потоками с поэтапным API.
- Вычислительная поддержка шейдеров (экспериментальная) : экспериментальная поддержка вычислителя, в настоящее время только под Direct3D, будет добавлено больше бэкэндов.
Плагины
Многие функции двигателя реализованы в плагинах, посетите каждую ссылку, чтобы прочитать их readme:
- Imgui: плагин дорогой-имгуи с некоторым утилитным API
- 2dtools: 2D рендеринг инструменты: спрайт, анимация спрайта, рисунок шрифта с поддержкой TTF
- Звук: простая звуковая система. Аудио миксер и 2D-звуки.
- Ввод: Система ввода с GamePad и поддержкой сенсорной поддержки
- 3DTOOLS: 3D Инструменты рендеринга: поддержка 3D -моделей GLTF, базовое примитивное создание и рисунок базового отладка.
- ASTAR: плагин реализации A-Star PATH
- Столкновение: 2,5D/Изометрический плагин обнаружения столкновения
- Утилита: функциональность утилиты MISC. В настоящее время сплайн и генератор шума
- BaseUt: Base_universal Format Format Support (Имя типа актива:
"texture_basisu" )
Отладка и профилирование
- Удаленный профилировщик : интегрированная удаленная сеть для удаленного отладчика/командной консоли и просмотра журнала.
- Graphics API Introsection : отладка уровня приложения Графические вызовы и объекты.
- Отладчик памяти : отладка и мониторинг распределения памяти для всех подсистем.
Поддерживаемые платформы
- Окна
- Linux
- MacOS
- Android
- Raspberrypi
- ios
Строить
Rizz предназначен для работы на всех основных платформах мобильных (iOS, Android), ПК (Windows, Linux, MacOS) и Web (Webasm). Но поскольку двигатель находится в раннем возрасте, текущие платформы создаются и протестированы:
- Windows : протестирован на Windows10 с Visual Studio 14 2015 Update 3 (Win64).
- Linux : протестирован на Ubuntu 16 с Clang (6.0.0) и GCC (7.3.0). Требования к упаковке:
- libx11-dev
- libxrandr-dev
- Libxi-Dev
- libasound2-dev (если вы планируете создать
sound плагин) - libglew-dev
- MacOS : протестирован на MacOS High Sierra - Appleclang 9.1.0
- Android : Для Android есть сценарий Python Android.py, который заботится о подготовке структуры проекта Android, создании кода и упаковке окончательного APK. Пожалуйста, прочитайте начало
android.py . - Raspberrypi : протестирован на RPI1 Modelb Ubuntu-Jessie (GCC Raspbian 4.9.2). Требования к упаковке:
- libasound2-dev (если вы планируете создать
sound плагин)
- iOS : Для iOS есть сценарий Python ios.py, который заботится об инициализации проекта iOS
Параметры Cmake
Пакет (по умолчанию = 0, Android/ios = 1):
-
BUNDLE=0 указывает, что Rizz создан как исполняемый хост, который запускает игру rizz --run game.dll (на Linux, это rizz --run ./game.so ). Рекомендуется для разработки, где вам нужны уменьшенные двоичные размеры и живая загрузка игрового кода и плагинов. -
BUNDLE=1 строит Rizz в качестве статической библиотеки. Чтобы связать и объединить Rizz и другие плагины с одним автономным исполняемым файлом, так что будет только один исполняемый файл и пачки Rizz и все указанные вами плагины. Чтобы правильно построить пакет, вы должны установить эти аргументы Cmake на Configure:- Bundle_target : целевое имя исполняемого, которое вы пытаетесь построить (первый пример:
-DBUNDLE_TARGET=01-hello ) - Bundle_target_name : если цель Cmake и фактическое имя вашего приложения отличаются, используйте аргумент для решения этого. (Первый пример:
-DBUNDLE_TARGET_NAME=hello ) - Bundle_plugins : перечислите плагины, которые требуются вашим приложением, разделенным Semicolon. (Первый пример:
-DBUNDLE_PLUGINS=imgui )
ENABLE_HOT_LOADING (DEFAULT = 1, Android/IOS = 0) обеспечивает горячую перезагрузку активов и мониторинг каталогов активов. Не работает на мобильных OSES.
Enable_profiler (default = 0/debug, default = 1/release)
Build_examples (по умолчанию = 1, Android /IOS = 0) Примеры Build Projects в каталоге /examples .
MSVC_STATIC_RUNTIME (по умолчанию = 0): MSVC SPECIVILE. Скомпилируют конфигурацию выпуска с флагом «/MT» вместо «/MD»
Msvc_multithreaded_compile (default = 1): MSVC -специфический. Включите многопоточную компиляцию (выключает его с ниндзя)
Clang_enable_profiler (default = 0): clang конкретно. Включите флаг -ftime-trace . Поддерживается только в Clang-9 и выше
Примеры
Примеры Основные примеры включены в этот репо, в каталог примеров:

Comse Invaders Clone - ссылка на проект GitHub

Изменения
v0.5
Пари
v0.4
- Перерыв: JSON PARSER, замените SJSON на CJ5
- Перерыв: переименован в плагин Sprite до 2DTOOLS
- Разрыв: Внешние макросовые API (Rizz_log_xxxx) теперь такие же, как внутренние (переменная API определяется в заголовке)
- Разрыв: отражение теперь имеет контексты в его API
- Новое: окно журнала imgui
- Новое: шрифт True-Type (FontStash) поддержка через API Rizz_API_FONT '
- Новое: базисная поддержка текстуры
- Новое: плагин с подключением пути ASTAR, спасибо @Aminv
- Новое: плагин обнаружения гибридных столкновений
- Новое: тип актива "json" (см. Rizz/json.h)
- Новое: плагин утилиты (сплайн, шум, будет добавлено больше вещей), благодаря @Aminv
- Обновленная отдаленная
- Imgui до 1,79-до хода филиала
- SX IO API и бэкэнд для Native вместо STD.Fopen
- Async vfs api tgget отдельные файлы
- IFF LOAD/SAVE API в SX/IO.H
-
shader_get / texture_get и другие активы для всех типов активов - Много улучшений и рефакторов по математике
- TMP_ALLOC
- Исправления в DDS-KTX Parserer
- MSVC Компилятор C11 Поддержка
- Лучшая совместимость с C-API с C ++ и некоторые простые обертки для C ++ (массив, хэш-таблица, математические операторы, ..)
- Улучшения системы отражения, две новые функции Serialize/Deserialize для написания пользовательской сериализации
- Система отражения встроенная сериализация JSON
- Новая тема Imgui (спасибо @aminv)
Используются библиотеки с открытым исходным кодом
В основном разработан для Rizz
- SX: портативная базовая библиотека
- GLSLCC: GLSL Cross-Compiler (внешний двоичный инструмент)
- dds-ktx: один заголовок ktx/dds Reader
- CJ5: Очень минимальный одиночный заголовок JSON5 PARSER в C99, полученный из JSMN
- Atlasc: инструмент командной строки, который создает текстуру Atlas из кучи входных изображений. (Внешний двоичный инструмент)
- DMON: Один заголовок C99 Portable Library для мониторинга изменений каталога.
- Stackwalkerc: Windows Single Header Stack Walker.
3 -й частицы
- Сокол: минимальные кроссплатформенные автономные заголовки C
- CR: Simple C Hot Reload Library только
- Cimgui: C-API для iMgui (используется в плагине imgui)
- Imgui: дорогой imgui: без раздутого графический интерфейс пользователя для C ++ с минимальными зависимостями (используется в плагине imgui)
- Remotorery: Single C File, CPU/Profiler CPU/GPU с удаленным веб -просмотром
- LZ4: чрезвычайно быстрый алгоритм сжатия
- http: базовая реализация протокола HTTP над розетками
- STB: библиотеки общедоступных доменов STB STB для C/C ++
- Сортировка: Сортировка рутинных реализаций в «шаблоне» c
- Imguizmo: 3D Gizmo для imgui (используется в плагине imgui)
- Gainput: библиотека ввода для игр (используется в плагине ввода)
- Base_universal: базис универсальный кодек текстуры графического процессора
- FontStash: Light-Weight Online Font Texture Atlas Builder (используется в плагине 2DTools)
- CGLTF: однолетный погрузчик GLTF 2.0 и писатель, написанный в C99 (используется в плагине 3DTools)
- Cute_headers: Libs Randy Gault's Libs (cute_c2.h используется в плагине столкновения)
Лицензия (BSD 2-rack)
Copyright 2021 Sepehr Taghdisian. All rights reserved.
https://github.com/septag/rizz
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.