Rosakasa
Elixir

Rosakasa

Мінімальний 3D-ігровий рушій для Lys Entertainment System. (Невелика гальюцинаторна, оскільки реальність визначається на сервері)

GitHub|

Скелетний C-двигатель framebuffer з демо-кастом та ПК-хостом SDL2.

Цей проект призначений для запуску на апаратному забезпеченні ESP32 у майбутньому. Поточний ПК-хост існує як нативна ціль розробки для тестування двигуна framebuffer і демо-касту перед вбудованою інтеграцією.

rosakasa_core також пов'язаний із проектом Lys Entertainment System, який розміщується у окремому репозиторії.

Layout

include/rosakasa/display/   Public framebuffer/display API
demo/                       Demo cartridge setup/update entrypoint
demo/src/                   Demo cartridge rendering helpers and sources
host/pc/                    PC executable that wires engine to demo cartridge
src/engine/                 Engine lifecycle, HTTP/WebSocket packages, and SDL display backend

Коди демо-касту під demo/src/ автоматично підбираються CMake.

Native PC

make build
make run

Якщо SDL2 не встановлено локально, CMake за замовчуванням завантажує SDL2 за допомогою FetchContent.

Engine Configuration

rosakasa_engine керує конфігурацією пакету через RosakasaEngineConfig. Пакети HTTP і WebSocket присутні, але за замовчуванням вимкнені, доки не буде підключено вбудований або ПК-бекенд:

RosakasaEngineConfig config = rosakasa_engine_default_config();

config.websocket.enabled = true;
config.websocket.host = "192.168.1.10";
config.websocket.path = "/socket";
config.websocket.port = 80;
config.websocket.use_tls = false;
config.websocket.send = platform_websocket_send;
config.websocket.user_data = platform_websocket;

rosakasa_engine_create_with_config(&config, &engine);

API надсилання, орієнтоване на двигун, нейтральне щодо бекенду:

RosakasaWebSocket *websocket = rosakasa_engine_websocket(engine);

rosakasa_websocket_send_text(websocket, "{\"type\":\"ping\"}");

Налаштований колбек send відповідає за фактичний транспорт платформи та запис кадрів WebSocket. На ПК це може бути підтримано нативною бібліотекою WebSocket; на ESP32 – клієнтом WebSocket ESP-IDF.

ПК-хост включає базовий бекенд ws://. Увімкніть його за допомогою змінних середовища перед запуском:

ROSAKASA_WS_HOST=127.0.0.1 ROSAKASA_WS_PORT=4000 ROSAKASA_WS_PATH=/socket make run

ROSAKASA_WS_TLS=1 зарезервовано для wss://, але бекенд ПК ще не підтримує TLS.

Demo Drawing

Демо має локальну абстракцію framebuffer:

typedef struct {
    uint8_t *pixels;
    int width;
    int height;
    int pitch_bytes;
} Framebuffer;

Допоміжні функції малювання приймають Framebuffer *, тому виклики не потребують повторного вказування розмірів екрана:

draw_line(&demo_framebuffer, (Point){20, 20}, (Point){220, 220}, 220);
draw_square(&demo_framebuffer, center, length, 255);

Координати екрана починаються з верхнього лівого кута:

(0, 0)              x increases ->
  |
  v
y increases

Для стандартного 240x240 framebuffer центр екрана:

Point screen_center = {
    demo_framebuffer.width / 2,
    demo_framebuffer.height / 2,
};

draw_square розглядає свій аргумент `