OpenGLES2.0 のあれこれメモ

iOS6のiPhone4で確認しているので、iPhone4をミニマムスペックとしている人用のメモです。

iPhone4より性能がいい端末は、ここまで気を遣わなくてもいいはず‥。

・InstrumentsでOpenGL解析を使用して毎フレーム警告がでる部分は
解消すればそれなりに処理時間も改善されている模様。

・Mipmapは1.1同様、2の累乗サイズでしか作成できない。
必要ないならデフォルトで有効になっているので、テクスチャフィルタの設定で無効にする。
Mipmapを使わなければ、OpenGLES2からテクスチャサイズの2の累乗制限を受けないで自由度が増す。

・サイズの大きい画像は圧縮テクスチャにしてから使った方が何かといいみたい。

・でもベタ絵は苦手で圧縮テクスチャにすると劣化がわかりやすくなる事が多かった。写真系はOK。

・作成できる最大テクスチャサイズは、GL_MAX_TEXTURE_SIZEで取得できるがそのまま使用しない事。
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);のように関数経由で取得してから
その変数を使用する。

・glGet系はできるだけ呼ばないように心がける。
例えば、上記の最大テクスチャサイズを毎フレーム調べるような処理はせず初期化時一回で済ませる。

・頂点シェーダもフラグメントシェーダも最終的に変数はfloatで扱う。
色情報をGL_UNSIGNED_BYTEで転送した場合は、
そのattribute変数の各種RGBAを255.0で割った値を最終的にシェーダに渡す。

・フラグメントシェーダはいるのか?ってくらいシンプルなものを心がける。
iPhone4 では、条件分岐だけでも使い方を工夫しないと重くなりやすい模様。
頂点シェーダで計算できるものは全部頂点シェーダで計算し、
varying経由で結果をフラグメントシェーダに渡して参照させるだけにした方が良い。

・attributeは頂点シェーダのみに渡せる変数
varyingは頂点シェーダからフラグメントシェーダに渡せる変数と覚える。
uniformは頂点シェーダ、フラグメントシェーダ両方に渡せる変数

・80ピクセル平方のスプライトをFPS60を切るまで画面中に散乱させたら
250枚前後しか出せず落胆。が、32ピクセルだと1200枚を超えたのでタイルサイズの考慮が大事?

[追記]
ブレンディングをしないと80ピクセルも1200近く出た。

円の描画も円のテクスチャではなく、円型ポリゴンをブレンドかけずに出したほうが早いかも?

OpenGLES2.0は、1.1より気難しくて意外と苦労しますね…。

ヤマトヌマエビが底に横たわって動かない…そんな時に試したい事

たまにはアクアリウムネタでも書いてみる。


先日ヤマトヌマエビが3匹抱卵したので、

ペットボトルに普段生活していた水槽の水とウィローモス、

エアレーションをしてそこに移した。

1匹は抱卵してから20日後くらいに移したので無事放卵し、水槽に戻せたのだが

他の二匹は数日後、底の方で横になって動かず瀕死の状態になってしまった。

卵をまだ抱えていて、触ると驚いてビクッ!っと動くのだが

ほぼ停止状態で歩けも立てもせず、辛うじて手がぴくぴく動く程度。

しかし、当てずっぽうながら行った処置が悪くはなかったようで、

今では元気に水槽を走ったり泳ぎ回っています。

今回は同じ症状をかかえてしまった方の為にその方法をご紹介。
(※私自身の1回しか確認できていないので確証はありません)

1. プラケースなど狭めの小さい入れ物に
横たわったエビちゃんが水面からほんのちょっと出るくらい(ほぼ水面と体高が同じくらいで浸かる)まで
元々暮らしていたメイン水槽の水を入れる。(あまりに水温差があるなら水合わせ)

2. 横たわったエビちゃんの口元に、棒かなにかでそーっと小さくしたエビタブまたはエビ用餌を
水中をスライドするようにして当ててあげる。
少しでも早くスライドしたり、変な箇所に当てるとびっくりして跳ねるので注意

3. 1時間くらい付きっきりで様子を見てやる。
数十分に一回口元のエビタブをもしょもしょし始め
口に運ぶのを何回かするようになったら成功と思われる。

4. エビタブが離れてしまったらまた口元へ持って行ってあげる。

この方法で2時間近くずーっと面倒みたのち、寝て起きたら

すっかり起き上がって動き回れるようになっていました。

あとはそのプラケースで2日ほどリハビリして水槽に戻せば復活です。

…って、お腹が空いていただけ?

[追記:2013/10/30]

上記は体が白濁していないエビちゃんによる結果。その後、2回成功してます。

しかし、体が白濁したエビちゃんはこの手は通用しないっぽいです。