-
Notifications
You must be signed in to change notification settings - Fork 0
Home
github-actions[bot] edited this page Jul 13, 2026
·
18 revisions
FloatSoda は、SteamVR Overlay を Flutter のような宣言的な書き心地で作成できる .NET 10 / C# 14 向け UI フレームワークです。SkiaSharp → OpenGL (GLFW/OpenTK) → OpenVR という経路でレンダリングします。
このページはドキュメント全体の入り口です。各ページは相互リンクでつながっています。
| ページ | 内容 | 対象読者 |
|---|---|---|
| TargetUsers | FloatSoda が想定する3タイプの作り手と読み進め方 | 利用者 |
| GettingStarted | 環境構築・サンプル実行・最初のアプリ作成 | 利用者 |
| Architecture | アセンブリ構成・ツリー構造・スレッドモデル | 利用者 / コントリビュータ |
| WidgetSystem | Widget / Element システムと組み込みウィジェット一覧 | 利用者 |
| UILayering | UI層の3層パッケージ構成(ヘッドレス / デザインシステム) | 利用者 / コントリビュータ |
| Animation | AnimationController・Ticker・Curves によるアニメーション | 利用者 / コントリビュータ |
| BuildPipeline | BuildOwner による差分ビルドとフレームパイプラインの詳細 | コントリビュータ |
| RenderObjects | RenderObject ツリーのリファレンス(レイアウト・描画) | コントリビュータ |
| OVRIntegration | OpenVR ラッパー・オーバーレイ種別・イベント処理 | 利用者 / コントリビュータ |
| APIDesign | API 設計規約(コンポーネント設計・命名・イミュータビリティ) | コントリビュータ |
自分がどのタイプの作り手かを TargetUsers で確認すると、最短の読み進め方がわかります。
- FloatSoda でオーバーレイを作りたい → GettingStarted → WidgetSystem → OVRIntegration
- フレームワークの内部を理解したい / コントリビュートしたい → Architecture → BuildPipeline → RenderObjects → APIDesign
FloatSoda は Flutter の三ツリーモデルを踏襲しています。宣言的な Widget ツリーが Element ツリーを介して RenderObject ツリーを構築・更新し、RenderObject の描画結果がレイヤーツリーとしてレンダースレッドに渡ります。
graph LR
subgraph "Widget / Element ツリー"
W["Widget<br/>(immutable record)"]
E["Element<br/>(mutable / BuildOwner が差分ビルド)"]
W -->|CreateElement| E
end
subgraph "RenderObject ツリー"
RV["RenderView (ルート)"]
RB["RenderBox サブクラス群"]
RV --> RB
end
subgraph "レイヤーツリー"
CL["ContainerLayer"]
PL["PictureLayer (SKPicture)"]
CL --> PL
end
E -->|"CreateRenderObject /<br/>UpdateRenderObject"| RV
RB -->|"Paint → PaintingContext"| CL
-
Widget — UI の設計図。
abstract recordで不変。フレームごとに再生成しても等値比較で差分検知できます。→ WidgetSystem -
Element — Widget と RenderObject を橋渡しする永続ノード。
BuildOwnerが dirty な Element だけを再ビルドします。→ BuildPipeline -
RenderObject — レイアウト(
PerformLayout)と描画(Paint)を担い、dirty フラグで差分レイアウト・差分ペイントを行います。→ RenderObjects -
Layer — 描画結果の合成ツリー。
Clone()してレンダースレッドへ渡します。→ Architecture
現在 Alpha 段階です。主要コンポーネントの実装状況は以下のとおりです。詳細は各ページの実装状況欄を参照してください。
| 領域 | 状況 |
|---|---|
| RenderObject ツリー(レイアウト・描画・クリップ・差分更新) | ✓ 実装済み |
| レイヤーツリーとレンダースレッド分離 | ✓ 実装済み |
| 複数オーバーレイ(ダッシュボード / ワールド座標 / デバイス追従) | ✓ 実装済み |
StatelessWidget / StatelessElement
|
✓ 実装済み |
BuildOwner による差分ビルド(dirty list / BuildScope) |
✓ 実装済み |
SingleChildRenderObjectWidget 系の更新(UpdateRenderObject) |
✓ 実装済み(一部ウィジェットは未対応) |
MultiChildRenderObjectElement の再ビルド(子リストの差分) |
✓ 実装済み(Key 対応の両端差分) |
StatefulWidget / StatefulElement(SetState 再ビルド) |
✓ 実装済み |
InheritedWidget / InheritedElement(依存追跡・通知) |
✓ 実装済み |
Key による Element 再利用(Widget.CanUpdate = 型 + Key) |
✓ 実装済み |
アニメーション(AnimationController / Ticker / Curve・Curves / FadeTransition) |
✓ 実装済み |
一部の便利ウィジェット(Padding / Container / ListView など) |
✗ スタブ(NotImplementedException) |
UI3層構成(FloatSoda.UI ヘッドレス / Cream / FizzyPop) |
△ スケルトン(ButtonBase / Button、ジェスチャ配線待ち) |
Hooks(FloatSoda.Hooks / R3 ベースの UseState) |
△ WIP(フレームワーク未統合) |
| ジェスチャ・ヒットテスト | ✗ 未実装 |
| プロジェクト | 役割 |
|---|---|
src/FloatSoda.Common |
ジオメトリ型(Offset など)とレイヤーツリー |
src/FloatSoda.Engine |
GLFW/OpenGL・レンダースレッド・フレームリミッタ |
src/FloatSoda.OVR |
OpenVR ラッパー・オーバーレイ型・イベントディスパッチャ |
src/FloatSoda |
フレームワーク本体(Widget / Element / RenderObject / パイプライン) |
src/FloatSoda.UI |
ヘッドレスUI層(振る舞いのみ、見た目なし)→ UILayering |
src/FloatSoda.UI.Cream |
デザインシステム①(レトロ・クリーミー・フラット) |
src/FloatSoda.UI.FizzyPop |
デザインシステム②(透明感・グラスモーフィズム) |
src/FloatSoda.Hooks |
R3 ベースのフックAPI(WIP) |
samples/ |
サンプルアプリ(SteamVR 必須) |
tests/ |
xunit テスト |