← ソースコード説明書

packages/native-engine - ネイティブエンジン

作成日: 2026-03-06 / 更新日: 2026-06-10

概要

Nintendo Switch / Android 向けの C++ ネイティブエンジン。SDL2 + OpenGL でレンダリングし、Op 命令の実行、テクスチャ/オーディオ/フォント管理、セーブ/ロード機能を備える。Web エンジン (packages/web) と同等の機能をネイティブで実装し、同じ Kaede Script(KS / KSC)が両方で動作する。スクリプト実行(KSC の VM)は packages/ksc-vm-cpp に委譲し、native-engine は Op の実行・描画・入力・音声・ストレージなどのホスト機能を担当する。

ディレクトリ構成

packages/native-engine/
├── src/
│   ├── main.cpp                    # エントリポイント (846行)
│   └── engine/                     # エンジンモジュール
│       ├── SDL2Engine.hpp/cpp     # SDL2 レンダリングループ (673行)
│       ├── OpRunner.hpp/cpp       # Op 命令の実行
│       ├── Op.hpp                 # Op 型定義
│       ├── GameHost ほか HostBinding 群  # KSC VM ↔ エンジンのブリッジ
│       ├── TextureManager.hpp/cpp # テクスチャ読込・キャッシュ
│       ├── AudioManager.hpp/cpp   # BGM/SE/Voice 再生
│       ├── FontManager.hpp/cpp    # テキスト描画
│       ├── FileStorage.hpp/cpp    # セーブ/ロード
│       ├── HistoryManager.hpp/cpp # 選択履歴
│       ├── AssetProvider.hpp/cpp  # アセットレジストリ
│       ├── IStorage.hpp           # ストレージ抽象化
│       ├── FilterShaders.hpp      # GLSL フィルターシェーダー
│       └── UniqueSDL.hpp          # SDL RAII ラッパー
├── tests/                          # C++ ユニットテスト (23ファイル, 約6,470行)
│   ├── GameHostTest.cpp           # GameHost 検証
│   ├── OpRunnerTest.cpp           # Op 実行テスト
│   ├── BillingHostBindingTest.cpp # 課金ブリッジテスト
│   ├── CameraHostBindingTest.cpp  # カメラブリッジテスト
│   ├── EntityHostBindingTest.cpp  # エンティティブリッジテスト
│   ├── AssetProviderTest.cpp      # アセットレジストリテスト
│   └── ScreenshotTest.cpp        # スクリーンショットキャプチャ
├── external/
│   ├── SDL2-2.30.12/              # SDL2 本体ソース
│   ├── SDL2_image-2.8.4/          # SDL_image ソース
│   ├── SDL2_mixer-2.8.1/          # SDL_mixer ソース
│   ├── SDL2_ttf-2.22.0/           # SDL_ttf ソース
│   └── nlohmann/json.hpp          # JSON パーシング
├── android/                       # Android NDK サポート
│   ├── app/build.gradle
│   └── settings.gradle
├── build/                         # ビルド成果物
├── CMakeLists.txt                 # CMake ビルド設定 (386行)
└── test-cli.sh                    # CLI テストヘルパー / テストランナー

主要ファイル

ファイル行数役割
main.cpp846エンジン初期化、イベントループ、入力ハンドリング
SDL2Engine.cpp673SDL2 ウィンドウ作成、レンダリングループ、フレームレート制御
OpRunner.cppOp 命令の dispatch・実行
CMakeLists.txt386ビルド設定(SDL2, SDL_image, SDL_mixer, SDL_ttf リンク)

アーキテクチャ

[main.cpp] → イベントループ
    ↓
[SDL2Engine]
    ├── [TextureManager] → 背景/キャラクタースプライト描画
    ├── [FontManager] → テキスト描画
    ├── [AudioManager] → BGM/SE/Voice 再生
    ├── [FilterShaders] → GLSL フィルター
    └── [OpRunner] → Op 命令の実行
        ├── [ksc-vm-cpp] → KSC スクリプトの VM 実行(別パッケージ)
        ├── [HostBinding 群] → VM ↔ エンジン機能のブリッジ
        └── [FileStorage] → JSON セーブ/ロード

スクリプト実行

native-engine 自体にスクリプトインタプリタは存在しない。KSC スクリプトのコンパイル・VM 実行は packages/ksc-vm-cpp に委譲する。native-engine は VM が発行した Op 命令を OpRunner で受け、各 HostBinding(Camera / Entity / Billing 等)を通じてエンジン機能に接続する。Web エンジンと同じ IR を実行するため、同一の KSC スクリプトが両プラットフォームで動作する。

エンジンモジュール

コンポーネント役割
SDL2Engineウィンドウ管理、レンダリングループ
TextureManager画像読込、キャッシュ (LRU)
AudioManagerSDL_mixer で BGM/SE/Voice 再生
FontManagerSDL_ttf でテキストレンダリング
FileStorageJSON 形式でセーブ/ロード
HistoryManager選択肢の履歴管理
AssetProviderアセット ID → ファイルパス解決
FilterShadersGLSL フィルターシェーダーのコンパイル・適用
UniqueSDLSDL リソースの RAII ラッパー

Web エンジンとの対応

機能Web (packages/web)Native (native-engine)
レンダリングPixiJS (WebGL)SDL2 + OpenGL
テクスチャPIXI.TextureSDL_Texture / SDL_image
オーディオWeb Audio APISDL_mixer
フォントPIXI.TextSDL_ttf
セーブIndexedDBファイルシステム (JSON)
入力ポインター/キーボードSDL_Event
スクリプトKscRunner + VM (TS)ksc-vm-cpp + OpRunner (C++)

ビルド

# SDL2 ソースダウンロード(external/SDL2-* に取得。ビルドは CMake が担当)
bash scripts/build/download-sdl2-sources.sh

# ネイティブエンジンビルド
mkdir -p build && cd build
cmake .. && make

# テスト実行
./test-cli.sh

CMake 依存

  • SDL2, SDL2_image, SDL2_mixer, SDL2_ttf
  • OpenGL / OpenGL ES
  • nlohmann/json (ヘッダーオンリー)

Android サポート

  • android/ ディレクトリに Gradle ビルド設定
  • Android NDK 経由で SDL2 をビルド
  • JNI で Java ↔ C++ ブリッジ

SDL2 ソース

SDL2 とその衛星ライブラリのソースは packages/native-engine/external/SDL2-*(SDL2-2.30.12, SDL2_image-2.8.4, SDL2_mixer-2.8.1, SDL2_ttf-2.22.0)に配置される。packages/sdl というパッケージは存在しない。取得は bash scripts/build/download-sdl2-sources.sh、ビルドは CMake が担当する。

テスト

テスト内容
GameHostTest.cppGameHost(ゲームホスト)検証
OpRunnerTest.cppOp 命令の実行テスト
BillingHostBindingTest.cpp課金ブリッジテスト
CameraHostBindingTest.cppカメラブリッジテスト
EntityHostBindingTest.cppエンティティブリッジテスト
TweenHostBindingTest.cppTween ブリッジテスト
MomijiTest.cpp / UiSnapshotTest.cppUI(MomijiUI)レンダリング/スナップショット
AssetProviderTest.cppアセットレジストリテスト
ScreenshotTest.cppスクリーンショットキャプチャ

合計: 23 テストファイル, 約 6,470 行

Ad: stickyBottom (728x90)
kaedevn - ノベルゲームを作れるプラットフォーム