■
2月半ばまで忙しいのでプログラム書いてる暇が無い。とりあえず構想だけをその間まとめておくことに。
yaneSDK4Dを使ってみる予定。文字フォントのテクスチャのキャッシュなんかがよさげ。
以下、考えてること(タスク周り)。
- タスクシステム内部で使用するオブジェクトは全部を固有のIDを割り振っておいて、実体はIDのManagerが一箇所で管理する。
- ManagerにIDを渡すと参照カウント付きポインタを返す。ただし、このポインタは描写リストに渡した後は保持しないで破棄する。
- 頻繁に使うオブジェクトをプールしておく仕組みを作る
- ManagerにIDを渡すと参照カウント付きポインタを返す。ただし、このポインタは使用した後は保持しない。
- Managerはこの参照カウント付きポインタを持っているのでカウントは基本的に1。Managerにオブジェクトの削除を通知するとManagerからそのポインタは削除される。で、参照カウンタが0になったら、オブジェクトプールにもどす。またはオブジェクトへの参照を0にしてGCに後始末を任せる。
- ↑でそのフレームだけ描写した後オブジェクトを破棄したい場合は先にポインタを描写リストに渡してからManagerから削除する。
以上。頭の中で考えてるだけなんで穴があると思う。GCの動作がまだはっきり理解できてないのでそのへんとか。
とりあえず問題点としては
- 実行順序による有利不利。IDを削除するよりも実行順が後のタスクはそのオブジェクトにアクセスできない。
- 実行側に描写が従属していて、実行側が描写要求を出す形になってる。分離した方がいい?。
- そもそも全部のオブジェクト呼び出しにこんなことやってたら遅くなる。
GCの動作を考慮に入れるとポインタはどっかで1元的に管理しないといけないと思うんだけど…そうするとこれくらいしか思いつかない…