cocos2d-x 3.0 betaの描画関連ソースを読んだ感想

cocos2d-x 3.x系はバージョンごとに大きな変更が入り、互換性保証が無理無理な状態になってますが、
betaで、ものすごく大きなジャンプが入ったようです。

これまでのcocos2d-xの描画は、
①毎フレーム、DisplayLinkDirectorのmainLoop呼び出し

②現在のシーンのdrawScene呼び出し

③Nodeツリーをvisitメソッドでトラバースしていく(=木構造をたどっていくという意味です)。トラバースしながらdrawメソッドを呼んで各ノードを描画。

という形でした。
http://www.cocos2d-x.org/news/172
こちらに、auto batchingというキーワードがありますね。

これどういう意味かわからなかったのですが、
ソースを読む限り、VBO(VertexBufferObject)を利用して描画するノードの矩形情報を、複数ノード分をまとめて
GPUに送ることで高速化をしているようです。

つまり、複数ノード分の描画をまとめて処理している(auto batching)なわけです。
どうやっているかというと、③の処理が分割され、mainLoop内で④の処理が呼ばれるようになりました。

③Nodeツリーをvisitメソッドでトラバースしていく。各ノードのdrawでは、描画コマンドを作成してキューに蓄積する。

④Rendererクラスがキューの中の描画コマンドを順番に処理する。その際、いくつかの描画コマンドをVBOにまとめて、まとめて処理する。

VBOを使うというのはOpenGLの高速化手法の一つなので、どの程度かはわかりませんが高速化されたものと思います。


ただ、このbetaの変更で、cocos2d-x外部ツールのいくつかが非対応になったものと思われます。
僕が一番気になるのがSuperAnimationConverterですね。
まあもともと3系向けの対応は入ってませんでしたが、alpha0までは動いていることは確認していました。
しかし、全てのノードが描画コマンドを発行するbetaでは、もはやvisit内で描画をしているSuperAnimNodeV2.cpp
では非対応となります。

まあ、betaはまだまだ不安定バージョンなので様子を見ましょう。
やはり3系は本格的に採用を検討するのは3.1くらいになってからが妥当のようです。