iPhoneでGL_TEXTURE_MAG_FILTERが効かない?

iPhoneのOpenGLにて、小さいテクスチャを拡大して描画する時の話です。テクスチャの描画にはglDrawTexiOESを使っていて、線形補完はナシ、つまりGL_NEARESTで描画したかったのです。

GL_TEXTURE_MIN_FILTERおよびGL_TEXTURE_MAG_FILTERはこのように指定しました。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

つまり、縮小時は線形補完、拡大時は最近傍描画というわけです。これで3*5の小さいテクスチャを100倍くらいで描画した結果がこれ。

iPhone シミュレーター
iPhone シミュレーター
iPod touch
iPod touch

ご覧の通りiPhone シミュレーターは補完なしで希望通り描画されていますが、iPod touchではバリ線形補完かかっちゃってます。カコワルイ( ・∀・)

そこで今度は両方にGL_NEARESTを指定してみました。つまりこんな感じ。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

するとあら不思議、iPod touch上でもちゃんと希望通り描画されました。実機ではGL_TEXTURE_MIN_FILTERが拡大もかねてるんですかね?

iPod touch
iPod touch

よくわかりませんがうまく出来たのでよしとします。iPod touchしか持ってないのでiPhoneでどうなるかわかりませんが、そんな細かいところに違いがあるとも思えないのできっと同じでしょう。さすがにiPhone 3GSでは挙動が違うでしょうけども。

それにしてもOpenGLで描画してみると、iPhoneが意外と非力なのにびっくりします。すごいグラフィックのゲームがいっぱいあるのでパワーがあるのかと思いきや、みんなちゃんとプログラムで最適化がんがんかけてるんですねーきっと。GL_BLENDを極力使わないとか、glBindTextureを最小限にするとかは基本ですかね。シミュレーターで作ってから実機に転送したら遅くて使い物にならなかったり、あー苦手苦手。そういうのまとめた本ないかな……

コメントを残す

メールアドレスが公開されることはありませんし、空欄で大丈夫です。っていうかコメント以外空欄で良いです。気軽にコメントして下さい。
Email won't be published. Or you can leave it blank. I mean you can leave everything blank but comment. Feel free to leave a comment, thanks.