Rikoでパーティクルをやってたというか、XNAでパーティクルを作っててツールでも作るかってんでRikoでパーティクルを描画しようとしたら面倒だったという。
全部VertexBufferとIndexBufferに入れなきゃ描画できない状態だったんだけど、けっこうめんどいんだよね。
でまあ、glVertexのような比較的使い易いインターフェースを用意してたりした。glVertexとか使うと面倒なんで、実際には自前で配列作ってDrawArraysだけど。
もうちょいで出来るんだが、VertexBuffer前提だから普通の配列渡せるようになってないんで困った。改造めんど。
あ、VertexBuffer作って渡せばいいだけか。
おー、これが出来ると面倒だった描画が普通に便利になる予感。
なんかwxPaintDCが使えねーな。
evt_paint中ではwxPaintDCをたとえ使わないとしても作らなきゃならんのだけど、作るとなぜかWM_PAINTがいっぱい飛びまくってevt_paintが呼ばれまくる。この現象はバグトラックにも上がってるな。
なんでじゃろ? と思って調べたんだが、wxPaintDCはevt_paint内で作られて破棄されることを想定されてるらしい。C++では普通スタック上に作るのね。
まあつまりはwxPaintDCはコンストラクタでBeginPaint呼んでデストラクタでEndPaint呼んでるんだが。
でもRubyでは使われなくなったwxPaintDCオブジェクトが破棄されるのはGCのタイミング。でもGCっていつ実行されんのよよよ。
一応、evt_paint内でGC.startとかやってもみたんだが、なんか上手くいかんな。
仕方ないのでwxPaintDCだけ明示的にdeleteする関数作って入れてみて動かしたけど、ちょっとひどいよなぁ。
swigもGC付きの言語が主なターゲットなんだから明示的な解放とかデフォで出来るようにしてくれてもいいんじゃね? もちろんインターフェース書けば作れるんだけど、明示的に書かなくてもってことで。
いい解決方法も思いつかないしバグトラックには上がってるんでほっといてもいいかな。たぶんGLCanvasではevt_paint使わんだろ。