cocos2dx3.2@lerp blurでhdr


lerp blurhdrしてみた。シェーダでミップマップを加算しただけ。
白飛びしてるけどトーンマッッピングまでやる余力はなかった。
速度的にもiphoneで16fps、androidで10fpsとこれ以上処理入れられる余裕がない。
あとミップマップを使ってはいるのだけど、補間がかかるのは元サイズに引き伸ばした
タイミング(ブラーがかかったデータが取れるのは元サイズになった後)なので、
fake hdrでいうところの縮小バッファ的なメリットはない。
ここら辺は、折角、縮小済みのデータがあるんだから上手く使えないかと思って、
http://www.sunsetlakesoftware.com/forum/glgeneratemipmap-and-raw-pixel-buffer
↑を参考にglFramebufferTexture2D()の第五引数にミップマップのレベルを指定して
テクスチャを取って来れないか(取ってきた後で線形補間よりましなブラーを軽くかけて
またミップマップに突っ込めないか)というのを目論んではいたのだけど、
glFramebufferTexture2D()の後のglReadPixels()が重いという話を聞いて、
優先順位を下げたのでやってない。
処理の流れ的にはRenderTextureのnewImage()と似ているので、
newImage()でデータが取れるんだからこっちでも行けるだろ、
というような感じはしている。ただ作った後で、あ、やっぱりglReadPixels()が
重くて使い物にならないじゃん、ということになると大変悲しいので、
あとでやることにする。たぶん。
ちなみにリアルタイムの処理にこだわった関係でlerp blurを使ったけど、
特に動かない静止画なら普通にgaussian blurとかの方が綺麗なhdrになる。
LabelのenableGlow()があんまりグローな感じじゃないので、
こっちにhdrするやつをそのうちやってみたい。

今回作ったやつ。
https://gist.github.com/t-takasaka/a4b4df96d47b4b1b50bc