レンダーシーケンス改訂版

 できれば今夜コミットしたい。こんな感じになっている。


 大して変わってねーじゃねーかとお思いかもしれないが、実行順と描画順が違うシステムに対して出来ることはアセンブリの時代から変わらない!(ホントかいな)

 実行タスクが描画を持つとは限らないし、1タスクが複数の描画ターゲットを持つことを考えると、別途収集というのは結構常套です。既存のものとの大きな違いはコレクターに対して this を突っ込めばいいということに気づいたこと。 PHP5 にはインターフェイスがあるから、それが可能なんでした……

 またドローソートは、タスク更新とは逆に、デフォルトで子タスクの Drawable が必ず先にくる形で収集するようにしたため、階層構造が減ってシンプルになった。併せてレンダーシステム単位でソートするのを読みやすさ重視で "一旦" やめている。

 この影響や、レンダーオペレーションの廃止、レンダーターゲットへの変数アサインをやめてレンダーシステム側へのアサインへ振り替えたことによって、確実に並列処理に弱くなった。元々のレンダーシーケンスの基本処理方針からいって JOIN が多く並列向きではないかもしれないが、向き不向きではなく可不可で考える時代だから是非設計レベルで対応しておきたい。最終的には、プログラムとしては元の構成に戻しつつ、開発者向けには今回のインターフェイスを保つという方法を編み出すしかないかなと考えている。

 なお、最悪うまいこといかなくても、ファイルとDBの非同期読みさえ PHP 側が可能にしてくれれば、キャッシュはレンダーシステムを使わずにロードするので、レンダーシステムがスレッドアンセーフに至る結論を迎えても、それなりの効果は得られるようにします。

 なお描画済みバッファへのアクセスが、それが描画の肝の割にはやり難かったが、仮想のVRAMに置くようにしたので少しは所在がはっきりして待遇が改善された。(^^;;