Rosakasa
लाइस एंटरटेनमेंट सिस्टम के लिए न्यूनतम 3D गेम इंजन। (एक तरह से भ्रामक, क्योंकि वास्तविकता सर्वर-साइड पर परिभाषित होती है)
डेमो कार्ट्रिज और पीसी एसडीएल2 होस्ट के साथ एक स्केलेटन सी फ्रेमबफ़र इंजन।
इस प्रोजेक्ट का उद्देश्य भविष्य में ESP32 हार्डवेयर पर चलना है। वर्तमान पीसी होस्ट एम्बेडेड इंटीग्रेशन से पहले फ्रेमबफ़र इंजन और डेमो कार्ट्रिज का परीक्षण करने के लिए एक नेटिव डेवलपमेंट टारगेट के रूप में मौजूद है।
rosakasa_core को लाइस एंटरटेनमेंट सिस्टम प्रोजेक्ट से भी जोड़ा गया है, जो एक अलग रिपॉजिटरी में है।
लेआउट
include/rosakasa/display/ सार्वजनिक फ़्रेमबफ़र/डिस्प्ले एपीआई
demo/ डेमो कार्ट्रिज सेटअप/अपडेट एंट्रीपॉइंट
demo/src/ डेमो कार्ट्रिज रेंडरिंग हेल्पर और स्रोत
host/pc/ पीसी एक्ज़ीक्यूटेबल जो इंजन को डेमो कार्ट्रिज से जोड़ता है
src/engine/ इंजन जीवनचक्र, HTTP/WebSocket पैकेज, और SDL डिस्प्ले बैकएंड
demo/src/ के अंतर्गत डेमो कार्ट्रिज स्रोत CMake द्वारा स्वचालित रूप से लिए जाते हैं।
नेटिव पीसी
make build
make run
यदि SDL2 स्थानीय रूप से स्थापित नहीं है, तो CMake डिफ़ॉल्ट रूप से FetchContent के साथ SDL2 डाउनलोड करता है।
इंजन कॉन्फ़िगरेशन
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);
इंजन-फेसिंग send API बैकएंड-न्यूट्रल है:
RosakasaWebSocket *websocket = rosakasa_engine_websocket(engine);
rosakasa_websocket_send_text(websocket, "{\"type\":\"ping\"}");
कॉन्फ़िगर किया गया send कॉलबैक वास्तविक प्लेटफ़ॉर्म ट्रांसपोर्ट और WebSocket फ़्रेम लेखन के लिए ज़िम्मेदार है। पीसी पर इसे एक नेटिव WebSocket लाइब्रेरी द्वारा समर्थित किया जा सकता है; ESP32 पर इसे ESP-IDF WebSocket क्लाइंट द्वारा समर्थित किया जा सकता है।
पीसी होस्ट में एक बुनियादी ws:// बैकएंड शामिल है। इसे चलाने से पहले पर्यावरण चर (environment variables) के साथ सक्षम करें:
ROSAKASA_WS_HOST=127.0.0.1 ROSAKASA_WS_PORT=4000 ROSAKASA_WS_PATH=/socket make run
ROSAKASA_WS_TLS=1 wss:// के लिए आरक्षित है, लेकिन पीसी बैकएंड अभी तक TLS का समर्थन नहीं करता है।
डेमो ड्रॉइंग
डेमो में एक स्थानीय फ्रेमबफ़र एब्स्ट्रैक्शन है:
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 बढ़ता है ->
|
v
y बढ़ता है
डिफ़ॉल्ट 240x240 फ्रेमबफ़र के लिए, स्क्रीन का केंद्र है:
Point screen_center = {
demo_framebuffer.width / 2,
demo_framebuffer.height / 2,
};
draw_square अपने Point तर्क को वर्ग के केंद्र के रूप में मानता है।
