Создан на основе великолепной игровой среды raylib: https://www.raylib.com/
ВНИМАНИЕ: rayfork все еще находится на ранней стадии разработки, и на данный момент не рекомендуется использовать его профессионально.
rayfork имеет только один файл .c и зависит только от libc, что означает, что его можно легко скомпилировать как библиотеку из командной строки.
# -c compiles the code as a library
# -EHsc disables exceptions on msvc
gcc -c rayfork.c
clang -c rayfork.c
cl -c -EHsc rayfork.c
rayfork не предоставляет уровень платформы, а это значит, что он не будет создавать окна, загружать OpenGL или захватывать вводимые данные.
Это сделано специально, чтобы вы могли легко использовать rayfork на нескольких платформах (включая игровые консоли), используя тот метод, который вам больше всего подходит. Существуют шаблоны для использования rayfork со слоями GLFW, SDL, sokol-app и пользовательскими платформами.
В настоящее время у средства рендеринга есть серверные части OpenGL33 и OpenGL-ES3 (которые будут добавлены), которые реализованы переносимым способом, что позволяет компилировать rayfork на любой платформе, при этом единственной зависимостью является libc. Процессы OpenGL передаются в rayfork явно, и для этого существует простой макрос.
Благодаря этому вы можете легко скомпилировать rayfork для любой платформы, будь то ПК, мобильные устройства или консоли.
Функции, выполняющие ввод-вывод, часто являются необязательными и явно запрашивают обратные вызовы ввода-вывода. Простая оболочка для функций ввода-вывода libc предоставляется как rf_default_io
.
Функции, которые выделяют явно, запрашивают распределитель, а иногда и распределитель временной памяти (памяти, которая освобождается внутри функции). Простая оболочка для libc malloc/free предоставляется как rf_default_allocator
.
Все зависимости также используются с учетом пользовательских распределителей, библиотека никогда не будет выделять ресурсы без вашего ведома.
Каждая функция, требующая распределителя или обратных вызовов io, имеет версию _ez
, которая оборачивает исходную функцию и вызывает ее с помощью rf_default_allocator
и/или rf_default_io
, это полезно для быстрого тестирования кода.
Библиотека представляет собой только один заголовочный и исходный файл и может быть настроена во время компиляции с использованием определений препроцессора. Никаких дополнительных флагов компиляции не требуется, в зависимости от графического процессора, который вам может понадобиться связать с определенными библиотеками.
raylib изначально создавался для образовательных целей и со временем превратился в очень полезную библиотеку игр, похожую на XNA.
Однако из-за своей природы некоторые варианты дизайна в raylib затрудняют его использование профессиональными разработчиками игр:
Трудно использовать собственный слой платформы (например, использование пользовательского слоя платформы на Android с Android Studio).
Трудно портировать на другие платформы (например: iOS, консоли)
Небольшой контроль над распределением памяти и операциями ввода-вывода.
rayfork предназначен для решения этих проблем и упрощения разработки профессиональных игр с использованием API из raylib.
Я начал этот проект, потому что мне нравятся raylib и C99, и мне очень хотелось разрабатывать свою игру, используя их.
Однако многие библиотеки не следуют принципам, которые я ищу в библиотеках (см. эту статью), что делает их использование в играх трудным/раздражающим, поэтому я хочу создать библиотеку, которую инди-разработчики смогут уверенно и легко использовать для разработки своих проектов. без ущерба для контроля, портативности или качества.
Если вы хотите иметь возможность легко разрабатывать игры с помощью библиотек, которые соблюдают упомянутые выше принципы, рассмотрите возможность внесения вклада в rayfork.
Вы можете проверить вкладку «Проблемы» и найти много вещей, которые вы можете сделать, чтобы внести свой вклад.
Я также ищу помощь в разработке вещей, выходящих за рамки моей компетенции:
Свяжитесь со мной на сервере Discord raylib на канале #rayfork, я @BananyaDev#0001, или в твиттере @SasLuca.
Соблюдайте соглашение об именах в змеином регистре, используйте rf_function_name
для функций интерфейса и _rf_function_name
для частных функций.
Префикс всех функций с помощью rf_public
или RF_INTERNAL
Не включайте в интерфейс дополнительные заголовки, стремитесь к минимизации включений в целом.
Используйте #pragma region #pragma endregion
для свертывания областей кода и рассмотрите возможность использования редактора с поддержкой свертывания этих областей, чтобы облегчить понимание кода.
Попробуйте применить советы из этой статьи в целом. Одними из наиболее важных советов будут: