[cocos2dx] RenderTextureで画面キャプチャすると微妙に描画が崩れる

 画面のスクリーンショットを撮ったり、いっぺんにシェーダをかけたりしたい時に使う(Grabber使ってやったほうが重くならずに済みますが)RenderTextureですが、手元の環境だと微妙に描画が崩れる不具合がありました。以前はこんなことなかったのにな―、と思いながら直すのに数日費やしたのでメモっときます。環境はcocos2dx 3.0です。

描画が崩れる

 以下のスクリーンショットは、1pxごとに線を引いたものを、普通に描画したものとRenderTextureに一度描画してから表示したものを並べた画像です。

 どちらもY座標が同じ場所に描画していますが、ご覧のとおり、描画がずれていることがわかると思います。このズレは縦方向だけだったり縦横両方に現れたりと、端末によって微妙に差はあるもののどの端末でも再現しました。

直し方

 原因はRenderTextureで使用するテクスチャのエイリアシングの問題のようです。CCRenderTexture.cppのsetAliasTexParametersを呼んでいる部分をコメントアウトすると直りました。

おまけ

 ちなみに、glScissorを利用していると、対象領域が透明になってしまうようです。この場合、RenderTextureのピクセルフォーマットを、デフォルトのRGBA8888からRGB888に変更してアルファを無効化するとうまくいきます。スクリーンショットを撮る場合はアルファは関係ないのでお試しください。

 以上メモでした。

0 件のコメント :

コメントを投稿