Skip to content

Promete v2#80

Draft
EbiseLutica wants to merge 71 commits into
masterfrom
v2
Draft

Promete v2#80
EbiseLutica wants to merge 71 commits into
masterfrom
v2

Conversation

@EbiseLutica
Copy link
Copy Markdown
Collaborator

@EbiseLutica EbiseLutica commented Mar 18, 2026

  • Texture2D: UV座標を持てるように
  • OpenGLTextureFactory: LoadSpriteSheetで、同じハンドルのUV違いのTexture2Dを生成するように
  • グラフィック描画の仕組みとして、コマンドキューシステムを追加
    • テクスチャ描画、プリミティブ描画、マスクモード有効化など、GPUへの命令を「コマンド」としてカプセル化し、そのコマンドを毎フレーム実行するという低レイヤー層を新たに導入
    • NodeからRendererを廃止し、コマンドを発行するように
  • .NET 8 から .NET 10へ移行

EbiseLutica and others added 3 commits March 18, 2026 03:15
* feat(Renderer): Step 1 - レンダリングコマンド型を定義

IRenderCommand マーカーインターフェースと各コマンド型を追加。
型マッチングで処理するため RenderCommandKind enum は不要と判断し採用しない。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 2 - ScissorStateTrackerを実装

コレクトフェーズでGL呼び出しなしにシザー矩形をCPUスタックで管理する
ScissorStateTrackerを追加。Push()が計算済みの BeginScissorCommand /
EndScissorCommand ペアを返す。あわせて BeginScissorCommand から
不要なParent系フィールドを削除し簡素化した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 3 - RenderCommandQueue / CommandRunner を実装、FlushBarrierCommand を削除

- RenderCommandQueue をバックエンド非依存で実装。CommandRunner<T> の登録により
  コマンド実行ロジックを外部から差し替え・拡張可能にした
- Enqueue() 時に DrawTextureCommand を DrawTextureBatchedCommand へ自動集約する
  ことで ProcessAndFlush() での特別扱いを不要にした
- FlushBarrierCommand を削除: Enqueue時バッチ集約により任意のコマンドが
  自動的にバッチを区切るため不要と判断
- CommandRunner<T> 基底クラスを追加

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 4 - GL CommandRunner 群を実装

各コマンドに対応するGLランナーを Promete.Nodes.Renderer.GL.Runners に追加。
ランナー間でステンシル有効状態を共有するための GLRenderState も追加。
GLDrawTextureBatchedCommandRunner は Step 5 の GLBatchTextureRenderer に依存するため
現時点ではビルド未完。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 5/6 - GLBatchTextureRenderer とインスタンシングシェーダーを実装

- DrawTextureCommand に Pivot フィールドを追加(NineSliceSprite等のオフセット描画に対応)
- texture_instanced.vert/frag を追加(per-instance mat4 + vec4 tintColor)
- GLBatchTextureRenderer を実装。DrawInstanced() で件数を問わずインスタンシング統一。
  EnsureInstanceBufferCapacity() で初期512・倍増リサイズ
- GLDrawTextureBatchedCommandRunner を internal に変更(DrawTextureBatchedCommand が internal のため)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 7 - NodeRendererBase に Collect() を追加

Collect() を virtual メソッドとして追加。デフォルト実装は旧 Render() を
LegacyRenderCommand にラップしてキューに積む。
Render() を [Obsolete] に変更し後方互換を維持。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 8/9 - 各レンダラーを Collect() に移行、PrometeApp を更新

- GLSpriteRenderer/GLTextRenderer/GLShapeRenderer/GLTilemapRenderer/
  GLNineSliceSpriteRenderer を Collect() に移行
- GLPieSpriteRenderer は専用シェーダーのため LegacyRenderCommand フォールバックを維持
- GLContainbleNodeRenderer/GLMaskedContainerRenderer を Collect() に移行し
  ScissorStateTracker を導入
- PrometeApp に CollectNode() を追加し、OnRender() をコマンドキュー方式に変更
- RenderCommandQueue/ScissorStateTracker を OnStart でキャッシュし
  毎フレームの DI 解決コストを除去

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(Renderer): Step 10 - DI登録・ランナー紐付け、RegisterRunnerRange を追加

- OpenGLDesktopAppExtension に GLBatchTextureRenderer / ScissorStateTracker /
  RenderCommandQueue / GL Runners を登録
- Build() 後に RegisterRunnerRange() でランナーをキューへ一括紐付け
- CommandRunner に CommandType プロパティを追加
- RenderCommandQueue に RegisterRunnerRange() を追加

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(Renderer): 全Helperクラスをコンストラクタ遅延初期化に変更

DI解決時点ではウィンドウが未オープンのため window.GL にアクセスできず
クラッシュしていた問題を修正。GLBatchTextureRenderer に加え、
GLPrimitiveRendererHelper / GLTextureRendererHelper /
GLPieSpriteRendererHelper / GLMaskedContainerHelper の全ヘルパーも
EnsureInitialized() パターンで初回描画時まで GL 初期化を遅延させた。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ConsoleLayer): 新レンダリングエンジンでも動作するよう修正

* 最適化

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor

* Texture2DにuvStart、uvEndを追加し、UV座標を明示的にレンダリング時に指定できるように

* LoadSpriteSheetで、同じハンドルを用いるように

* 1.0.1-exp.1

* テクスチャの一部が見切れる問題を修正

* テクスチャのマッピングがおかしかった問題を修正

* BatchTextureRendererに、TextureのUV対応を追加
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Mar 18, 2026

Deploying promete with  Cloudflare Pages  Cloudflare Pages

Latest commit: 4e66bb3
Status:🚫  Build failed.

View logs

EbiseLutica and others added 26 commits March 18, 2026 16:39
- Node.Collect(queue, ctx) を追加し、各Nodeが直接コマンドをキューに積むように変更
- NodeRendererBase, 全GLRenderer (8ファイル), ScissorStateTracker を削除
- LegacyRenderCommand, ScissorCommands を削除
- BeginTrimCommand/EndTrimCommand に置き換え、RenderCommandQueueにTrimスタック管理を統合
- DrawPieTextureCommand + GLDrawPieTextureCommandRunner を新設
- RenderContext を導入し、ウィンドウ情報をCollectに渡す
- PrometeApp から UseRenderer, _renderers, ResolveRenderer を削除

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: NodeRenderer廃止、Nodeが直接コマンドを生成する方式に移行
feat: ShaderProgram/Material APIとエフェクトデモの追加
…ctory に分割

TextureFactory を基底クラス TextureFactoryBase と OpenGL固有実装 GLTextureFactory に分離した。
OpenGLTextureFactory は GLTextureFactory に統合して削除した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
IWindow の複合責務を分解するため、以下を追加した:
- BackendBase: バックエンド実装の抽象基底クラス
- IGameView: 画面表示に関するインターフェース
- ITimeProvider: 時間情報に関するインターフェース

OpenGLDesktopBackend と HeadlessBackend を BackendBase ベースで実装した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
IWindow に [Obsolete] を付与し、後方互換のための CompatibleWindow アダプタを追加した。
新規コードでは IGameView / ITimeProvider を直接使用することを推奨する。
不要になった OpenGLDesktopWindow を削除した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PrometeApp に Start/PreUpdate/Update/PostUpdate/PreRender/Render/PostRender/Destroy
イベントを追加し、BackendBase を通じてバックエンドを初期化する設計に変更した。
Scene も IWindow 依存を除去し、IGameView / ITimeProvider を参照するよう更新した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Keyboard / Mouse / Gamepad / Gamepads が IWindow ではなく
PrometeApp のイベントと SilkNetCommonInputProvider を通じて動作するよう変更した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CoroutineManager が IWindow ではなく PrometeApp イベントを購読するよう変更した。
WaitForSeconds が IWindow.TotalTime の代わりに ITimeProvider.TotalTime を参照するよう更新した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
OpenGLDesktopAppExtension を Build<OpenGLDesktopBackend>() 経由のビルダーに変更した。
GLScreenBlitter の IWindow 参照を IGameView に置き換えた。
HeadlessAppExtension も新バックエンドアーキテクチャに対応した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
EbiseLutica and others added 30 commits March 24, 2026 02:06
プラグインがシーン遷移の種類(Load/Push/Pop)に応じて適切な処理を
選択できるよう、SceneTransitionType と SceneTransitionEventArgs を導入。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SceneWillChangeイベントに遷移種類情報を追加
- StyleCop.Analyzers を Directory.Build.props で全プロジェクトに適用
  - SA1401 (public フィールド禁止) → error
  - SA1400 (アクセス修飾子省略禁止) → error
  - SA1201 (メンバー順序) → error(StyleCop 標準に統一)
- .editorconfig に命名規則・StyleCop 診断設定を追加
  - private フィールドの _camelCase プレフィックス強制
  - file-scoped namespace の強制
- CSharpier を dotnet local tool として登録 (.config/dotnet-tools.json)
- CONTRIBUTING.md のメンバー順序規約を StyleCop SA1201 標準に更新
- GitHub Actions lint ワークフローを追加 (.github/workflows/lint.yml)
  - CSharpier フォーマットチェック
  - StyleCop アナライザーによるビルドチェック

https://claude.ai/code/session_017NQxLFbtXNm8ktmUoydMad
StyleCop SA1201 の標準順序(Fields → Constructors → Properties → Methods)に
合わせて以下のファイルのメンバー順序を修正:
- Promete/Angle.cs
- Promete/Rect.cs
- Promete/RectInt.cs
- Promete/Graphics/FrameBuffer.cs
- Promete/Graphics/FrameBufferManager.cs

https://claude.ai/code/session_017NQxLFbtXNm8ktmUoydMad
- オールマンスタイルから K&R スタイル(開き括弧を同一行)へ移行
- CSharpier によるフォーマット自動化の手順を CONTRIBUTING.md に記載
- 既存コードは `dotnet csharpier .` で一括整形が必要

https://claude.ai/code/session_017NQxLFbtXNm8ktmUoydMad
StyleCop SA1201 の標準順序(Fields → Constructors → Properties → Methods)に
合わせて以下のファイルのメンバー順序を修正:
- Promete/Coroutines/Coroutine.cs
- Promete/Graphics/Fonts/Font.cs
- Promete/Input/KeyEventArgs.cs
- Promete/Input/KeyPressEventArgs.cs
- Promete/Nodes/MaskedContainer.cs
- Promete/Windowing/CompatibleWindow.cs
- Promete/Windowing/Headless/DummyInputContext.cs
- Promete/Windowing/Headless/HeadlessWindow.cs
- Promete/Backends/GL/OpenGLDesktopGameView.cs
- Promete/Backends/Headless/HeadlessGameView.cs
- Promete/Backends/SilkNetCommon/SilkNetCommonTimeProvider.cs
- Promete.ImGui/ImGuiPlugin.cs
- Promete.MeltySynth/MeltySynthAudioSource.cs

https://claude.ai/code/session_017NQxLFbtXNm8ktmUoydMad
…tter-V1iNk

feat: C# linter/formatter 環境を構築
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants