opengl:glsl
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
opengl:glsl [2014/03/17 19:17] – [注意すべきこと] oga | opengl:glsl [2015/09/17 01:40] (現在) – [Tegra2 だけ Fragment Shader が動かない] oga | ||
---|---|---|---|
行 89: | 行 89: | ||
ところが Mobile の世界では簡単には行きません。まず Desktop よりも GPU core の種類が多くなっています。代表的なものでも | ところが Mobile の世界では簡単には行きません。まず Desktop よりも GPU core の種類が多くなっています。代表的なものでも | ||
- | * Qualcomm Adreno 200 シリーズ | + | |
- | * Imagination PowerVR SGX シリーズ | + | |
- | * NVIDIA | + | * Imagination PowerVR SGX シリーズ |
- | * ARM Mali 200/400 シリーズ | + | * NVIDIA |
- | * Vivante GC シリーズ | + | * ARM Mali-200/400 シリーズ |
+ | * Vivante GC シリーズ | ||
+ | * GLES 3.0 | ||
+ | * Qualcomm Adreno 300 シリーズ | ||
+ | * Imagination PowerVR G6000 シリーズ | ||
+ | * ARM Mali-T600 シリーズ | ||
など | など | ||
- | 同じ GPU core であったとしても SoC が違えば本当に同一機能かどうかもわかりません。 | + | 同じ GPU core であったとしても SoC が違えば異なる構成になっている可能性があります。 |
- | 特に | + | PowerVR や Mali、Vivante |
スマートフォンやタブレットなど、SoC を採用するメーカーもまたばらばらです。 | スマートフォンやタブレットなど、SoC を採用するメーカーもまたばらばらです。 | ||
行 129: | 行 135: | ||
内部構成を見てできるだけバリエーション違いのハードを手に入れるようにします。 | 内部構成を見てできるだけバリエーション違いのハードを手に入れるようにします。 | ||
- | 例えば 2010 年の日本メーカー製端末はほとんど全部が Qualcomm QSD8250/ | + | 例えば 2010 年の日本メーカー製端末はほとんど全部が Qualcomm QSD8250/ |
- | GLSL プログラマ的には複数手に入れてもあまり意味がありません。 | + | OpenGL ES / GLSL プログラマ的には同じ構成の端末を複数手に入れてもあまり意味がありません。 |
その中で唯一 Galaxy S は PowerVR SGX540 なので、もし選ぶならこのように GPU の違いを意識しておきます。 | その中で唯一 Galaxy S は PowerVR SGX540 なので、もし選ぶならこのように GPU の違いを意識しておきます。 | ||
行 138: | 行 144: | ||
==== GPU Emulator を活用する ==== | ==== GPU Emulator を活用する ==== | ||
- | 各 GPU メーカーは PC 上で動作する GPU Emulator (OpenGL ES 2.0 Emulator) をツールとして提供しています。 | + | 各 GPU メーカーは PC 上で動作する GPU Emulator (OpenGL ES 2.0 / 3.0 Emulator) をツールとして提供しています。 |
できるだけ多くの GPU の GLSL をパスするためにはこれを活用しない手はありません。 | できるだけ多くの GPU の GLSL をパスするためにはこれを活用しない手はありません。 | ||
実端末の入手は難しいですが、 | 実端末の入手は難しいですが、 | ||
これなら PC 上である程度の互換性テストができるようになります。 | これなら PC 上である程度の互換性テストができるようになります。 | ||
- | | + | |
+ | | ||
ただし問題もあります。 | ただし問題もあります。 | ||
- | HOST PC の GPU の種類や OpenGL のドライバにかなり依存します。 | + | これらの Emulator は HOST PC の GPU の種類や OpenGL のドライバにかなり依存します。 |
- | NVIDIA / AMD でそれぞれ正しく動かない場合があるので注意が必要です。 | + | NVIDIA / AMD / Intel でそれぞれ正しく動かない場合があるので注意が必要です。 |
+ | また Mobile と同じシェーダーを走らせられるよう、PC (Windows/ | ||
====== GLSL ES の問題情報共有用 ====== | ====== GLSL ES の問題情報共有用 ====== | ||
行 166: | 行 173: | ||
- | + | (追記) Android 4.4 では修正されており、正しく動作するようになりました。 | |
+ | ただし世の中には Android 4.3 のまま更新されていないデバイスも多いので、 | ||
+ | なんらかの対策は必要です。 | ||
===== OpenGL ES 2.0 GLSL 構文 ===== | ===== OpenGL ES 2.0 GLSL 構文 ===== | ||
行 257: | 行 265: | ||
</ | </ | ||
- | ==== GLSL ES 1.1 を返す ==== | + | ==== Tegra Emulator が GLSL ES 1.1 を返す ==== |
PC の Tegra Emulator が GLSL の version 1.1 を返します。 | PC の Tegra Emulator が GLSL の version 1.1 を返します。 | ||
行 577: | 行 585: | ||
==== Android PowerVR SGX GLSL ES 2.0 関数パラメータ inout が無効になる (2014/03/16 追加) ==== | ==== Android PowerVR SGX GLSL ES 2.0 関数パラメータ inout が無効になる (2014/03/16 追加) ==== | ||
- | * PowerVR | + | * PowerVR |
+ | * PowerVR SGX543MP3 + iOS7.1 + OpenGL ES 2.0 では問題ない | ||
Android PowerVR SGX GLSL で、inout を使って関数から値を返すことができない。 | Android PowerVR SGX GLSL で、inout を使って関数から値を返すことができない。 | ||
+ | 2つ以上 inout 宣言を行った場合に発生。 | ||
<code glsl> | <code glsl> | ||
行 610: | 行 620: | ||
PowerVR 以外の Adreno, Vivante, GeForce (desktop) などでは問題なく動作しています。 | PowerVR 以外の Adreno, Vivante, GeForce (desktop) などでは問題なく動作しています。 | ||
+ | また iOS の PowerVR では他の GPU と同じように正しく動いています。 | ||
対策方法としては、hlsl でよく用いられるように構造体を使う方法があります。 | 対策方法としては、hlsl でよく用いられるように構造体を使う方法があります。 | ||
行 801: | 行 812: | ||
Android OS 2.2 の Tegra2 では動作することが判明しました。 | Android OS 2.2 の Tegra2 では動作することが判明しました。 | ||
ハードウエアではなく、ドライバなど他に原因が有りそうです。 | ハードウエアではなく、ドライバなど他に原因が有りそうです。 | ||
+ | |||
+ | |||
+ | ==== Tegra3 で OffScreen へのレンダリング時に Blend が有効にならない (2015/ | ||
+ | |||
+ | Android 4.0 の古いドライバで発生します。 | ||
+ | OS 更新で新しいドライバが適用されると直ります。 | ||
+ | |||
+ | |||
+ | ==== Vivante GC4000 (K3V2) で動的に生成した Mipmap が有効にならない (2015/ | ||
+ | |||
+ | 詳細は未確認です。使い方に問題がある可能性があります。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
opengl/glsl.1395051457.txt.gz · 最終更新: 2014/03/17 19:17 by oga