cocos2dx3.2@Live2Dでオフスクリーンレンダリング

キャラクターを画面全体に描画するのではなく部分的に表示したかったので
オフスクリーンレンダリングをやってみた。最初はRenderTextureのbigin()とend()の間に
Live2Dの描画部分を挟めばいいのかなと思ったのだけど、どうも上手くいかないので
OpenGLを直接叩いた。モデル用のクラスにRenderTextureを持たせて、またdraw()を
貰うためにcocos2dのNodeを継承させて、draw()のタイミングでRenderTextureに
紐付いているSpriteをフレームバッファオブジェクトのカラーバッファにアタッチしてる。

win32とandroidでは動作確認できた。iphoneではおそらくglHogehogeOES的な関数を
使わないと動かないと思うので、後々その辺りの処理を作ってから試してみる。

追記:cocos2d-x3.2はOpenGL ES2.0で実装されているのでES1.1拡張のOESサフィックスは不要

速度的には実機でキャラクター二人表示しても30fps以上出てるので大丈夫そう。
実機の解像度の違いでオフスクリーンから取ってきたキャラクターの画像が
貼り付けたテクスチャに収まっていなかったり、テクスチャ内の背景に関して
まだ何もしていなかったりと、未完成な部分は多いけれど、取り合えずの方向性として
自分がやりたいことはやれそうな感触は掴めた。

作ったコードはこれ。
https://gist.github.com/t-takasaka/1f986578ed63e6055d2d
追記:glGetIntegerv()で古いfboを取得して処理後に戻すよう変更。iphoneでも動くことを確認