reckfellENGINE

Портирование на новую платформу

Обнаружение платформы, системный слой, драйверы, экспортёр и проверка на устройстве.

На этой странице

Порт платформы добавляет поддержку новой ОС или устройства в нативную сборку Reckfell. Это работа с C++, SDK целевой системы и сборщиком SCons. Для обычной игры на поддерживаемой платформе порт не нужен: используйте экспорт.

Сначала определите результат

Разделяйте три задачи: запуск приложения на устройстве, сборка экспортного шаблона и экспорт из редактора на компьютере разработчика. Наличие первой не обеспечивает две остальные. Поддержка C# также требует рабочего .NET для целевой платформы; один нативный порт её не добавляет.

Собирайте в отдельной копии исходников. Не заменяйте установленный редактор и рабочие шаблоны до проверки нового бинарного файла. Общие требования и известное ограничение локальных помощников SCons описаны в руководстве по сборке.

Как сборщик обнаруживает платформу

Все пути ниже указаны относительно каталога Source. Идентификатор берётся из имени папки: platform/my_platform соответствует platform=my_platform.

Файл или функцияЧто требуется
platform/my_platform/detect.pyБез него каталог не участвует в обнаружении платформ.
can_build()Без аргументов. Возвращает, доступна ли сборка на текущем хосте. Избегайте побочных эффектов: вызывается при обнаружении платформ.
get_opts()Опции SCons этой платформы. Вызывается, если can_build() вернул истину.
get_flags()Значения опций платформы; для нового порта используйте словарь.
configure(env)Настройка выбранной платформы: компилятор, SDK, архитектура, include-пути и линковка.
platform/my_platform/SCsubСписок исходников и создание целевого исполняемого файла или библиотеки.

is_active() текущим циклом обнаружения не вызывается. get_name() есть в штатных портах, но не выбирает идентификатор для platform=…. Не копируйте старый шаблон detect.py без сравнения с текущим SConstruct и ближайшим рабочим портом.

Что реализовать

  1. Жизненный цикл. Точка входа создаёт реализацию OS, вызывает Main::setup, затем Main::start и цикл приложения, после чего Main::cleanup. Обработайте ошибки запуска и код завершения. Образец: platform/linuxbsd/reckfell_linuxbsd.cpp.
  2. Системные службы. Сверьте все чисто виртуальные методы core/os/os.h, а не только инициализацию: нужны время, файловая среда, процессы, энтропия и другие операции. Для UNIX-подобной системы изучите drivers/unix/os_unix.h. Возможность запустить headless-режим ещё не подтверждает вывод изображения.
  3. Окно и ввод. Реализация DisplayServer, события клавиатуры, мыши, сенсорного экрана и контроллеров по возможностям устройства. Эталон контракта: servers/display/display_server.h.
  4. Графика и звук. Подключите поддерживаемый устройством драйвер и создайте контекст или поверхность. В исходниках есть drivers/vulkan, drivers/d3d12, drivers/metal, drivers/gles3; наличие каталога не гарантирует совместимость с вашим SDK. Аудиодрайвер проверяйте отдельно.
  5. Шаблон и упаковка. Подготовьте целевые шаблоны, библиотеки, ресурсы и необходимые устройству метаданные. Пустой проект должен запускаться из готового пакета, а не только из дерева исходников.

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

Экспортёр и API платформы

Экспортёр работает внутри редактора на хосте. SConstruct обнаруживает его по platform/my_platform/export/export.cpp; editor/SCsub добавляет C++-файлы из export/. Сверьте export.h, export.cpp и export_plugin.* рабочего порта. В LinuxBSD регистрация использует register_linuxbsd_exporter_types() и register_linuxbsd_exporter().

Иконки штатного экспортёра находятся в platform/linuxbsd/export/logo.svg и run_icon.svg. platform/SCsub генерирует заголовки из SVG в export/; корневая platform/my_platform/logo.svg сама по себе не подключает иконку. Регистрацию, пути и использование сгенерированных символов должен обеспечить ваш экспортёр.

Необязательные общие API обнаруживаются по platform/my_platform/api/api.cpp. Генератор ожидает api/api.h, register_my_platform_api() и unregister_my_platform_api(). Не добавляйте эти файлы ради пустой заглушки: они нужны, когда порт действительно предоставляет такие API.

Приёмка порта

Проверка на целевом устройствеЧто должно быть подтверждено
Запуск и завершениеОшибки загрузки видны в журнале, код выхода корректен, повторный запуск работает.
ДанныеЧтение ресурсов, запись в пользовательский каталог, повторное чтение после перезапуска.
Окно и вводРазмер и масштаб, фокус, закрытие, ввод и переподключение поддерживаемых устройств.
Графика и звукРеальный кадр и звук на устройстве, пауза и восстановление, корректные драйверы и материалы.
ЭкспортИ debug-, и release-пакет запускаются без редактора и папки исходников.
C#, если заявленСборка и запуск управляемого проекта на устройстве с целевой средой .NET.

Измеряйте память, время запуска и производительность на конкретном устройстве и проекте. Универсального обещания по памяти или уровню графики для нового порта нет.

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

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.