2011年7月28日木曜日

OpenGL ES2.0 シェーダの行列計算

Adreno 200・Tegra 250と、PowerVR SGX540で
行列計算の結果が異なる。
確認したのは4次元の場合。
mat4 m;
vec4 p;
p = p*m;

詳しく調査していないけれど、PowerVRで表示の奥行きが崩れているので、
列か行どちらか4番目の扱い方が違うっぽい。

列ベクトルで、変換は左から行列を掛けるように行列を作っていると、
mat4 m;
vec4 p;
p = p*m;
でよいはず。実際、Adreno 200・Tegra 250では問題ない。
(column majorだから逆から掛けている)
これだとPowerVRで崩れるので、シェーダに渡す前に行列を転置、
p = m*p;
とすると3つのGPUで上手くいく。なんだこれは。

ES2.0で、glUniformMatrix のtranspose引数はG_FALSEじゃないといけないの、
すぐに忘れるな。

2011年7月27日水曜日

PerfHUD ES

NVidia社のPerfHUD ESは、
Tegra2ベースの”開発機”で動作する。
私も最初わからなかったが、ドキュメントや各種プレゼンテーションでも、
profiling and debugging tool for Tegra-based development kits
とある。

フォーラム
http://developer.nvidia.com/tegra/forum/connecting-perfhud-es-motorola-xoom

そして、こんなものが
http://www.enovapp.com/tips/how-to-enable-perfhud-es-on-all-android-tegra-devices/

rootとる必要があるのか、嫌だな。