Yanesdk 改造中(2)

ITexture はスクリーンにしか描画出来ないということは、逆に言えばスクリーンに描画する瞬間までテクスチャを貼り付ける必要はありません。
なので、幅と高さ、描画情報リストを持った仮想イメージを作って、スクリーンに描画する瞬間に幅と高さでクリッピングを行って、描画情報リストにあるイメージを描画すればいいのではないかと考えたわけです。


ただし、仮想イメージそのものに描画するイメージが仮想イメージなので、このイメージリストは再帰的な構造になります。
きっと Compositeパターンで作ったら幸せになれる気がする。



とりあえず、クリッピングしてスクリーンに描画するまでは出来たんですけど、考えてみれば毎フレーム描画される仮想イメージは、描画情報を定期的に空にしないと、下の必要のないイメージまで描画されてしまって速度が低下してしまうのと、リストの最大登録数がメモリの許す限りだから、メモリが大量に消費されてしまいます。
後から(仮想的に)描画した画像が、下にある描画情報で描画した場合のピクセルを全て埋めてしまう場合、下にある描画情報は消しちゃっても構わないわけですが、それを判断するのは変形や透過情報が加わるため、めちゃめちゃ難しそうです。


ただ、もしイメージを大量に貼り付けても速度にほとんど影響が出ない場合、つまり OpenGL の内部で、Zバッファソートみたいな、完全に隠れるピクセルに対しては描画しないような処理を行っていて、なおかつ画像の変形処理に大した時間が掛かっていないのであれば、描画情報リストに入る数が少々増えても全然構わないわけです。
描画情報リストに登録されている数が増えるとメモリの消費がいくらでも大きくなっていく問題は、登録出来る最大数をどこかに持っておいて、それを超えると下の方から消していくようにすれば、メモリが際限なく使われるのを押さえることが出来ます。
無駄な描画をしても速度が遅くならないと仮定すれば、登録出来る数を1000とか2000とかの(これだけ描画すれば下にあるのは埋まっているだろう)十分に大きな数(けどメモリは大して取らない)にしておくことによって、速度とメモリの2つの問題が解決することになります。
大量に無駄な描画をして実際に速度に大きな影響が出るかどうかはまだ実験したわけじゃないから確証が持てないので、ちょっと試してみることにします。。