* detachbug : シェーダデタッチ動作検証 [#a5640a44]

ICONIA TAB A500で発生する「シェーダデタッチ動作バグ」の検証を行うためのサンプル。

#contents




** 配布 [#ra08155b]

-- [[detachbug.apk>http://gorry.haun.org/android/detachbug/dist/detachbug.apk]]
-- [[usage.txt>http://gorry.haun.org/android/detachbug/dist/usage.txt]]
-- [[readme.txt>http://gorry.haun.org/android/detachbug/dist/readme.txt]]
-- [[パッケージ>http://gorry.haun.org/android/detachbug/dist/old/]]

- 2012.1029.1
-- 最初のバージョン。

** コメント [#bc44b9bd]
-○(正常動作):IS05, xPeria PLAY, P76Ti, S42HW, Galaxy TAB, Nexus S, Galaxy Nexus, Nexus 7 -- [[GORRY]] &new{2012-10-29 20:35:59 (月)};
-×(異常動作):Acer A500 -- [[GORRY]] &new{2012-10-29 20:36:11 (月)};
-×(異常動作):Motorola PHOTON(KDDI:ISW11M) Tegra2 1GHzで Acer A500と同じ挙動です -- [[PHPtvOPPAI]] &new{2012-10-29 21:00:29 (月)};
-○(正常動作):lenovo ThinkpadTablet(183827J)/AndroidVersion4.0.3 正常に表示されております -- [[k_heckel]] &new{2012-10-29 21:15:08 (月)};
-Sony Tablet S(Tegra2)ICS 4.0.3でICONIA TAB A500と同じ挙動でした。 -- [[Tnk]] &new{2012-10-29 21:39:13 (月)};
-×(異常動作):Motorola XOOMもA500と同じでした。 -- [[FIRST]] &new{2012-10-29 21:49:51 (月)};
-×(異常動作):SONY NW-Z1070 (Walkman AndroidVer2.3.4) Tegra2 1GHzで Acer A500と同じ挙動です -- [[ume]] &new{2012-10-29 22:41:33 (月)};
-○(正常動作):LG L-01E -- [[FIRST]] &new{2012-10-29 22:47:02 (月)};
-×(異常動作):ASUS EeePad Transformer TF101 Tegra2 1GHz搭載機です。 Acer A500と同じ挙動でした。 -- [[Noboruhi]] &new{2012-10-30 00:56:02 (火)};

#comment




** 概要 [#caeac2eb]

OpenGL ESでシェーダプログラムのリンクを行うときは、以下のようにします。

 programId = glCreateProgram();
 glAttachShader(programId, vertexShaderId);
 glAttachShader(programId, fragmentShaderId);
 glLinkProgram(programId);

Khronosのドキュメントによると、「glLinkProgram()の後、アタッチしたシェーダオブジェクトはデタッチしてもよい」と記されています(*1)。デタッチする場合、コードは以下のようになります。

  programId = glCreateProgram();
  glAttachShader(programId, vertexShaderId);
  glAttachShader(programId, fragmentShaderId);
  glLinkProgram(programId);
  glDetachShader(programId, fragmentShaderId);
  glDetachShader(programId, vertexShaderId);

しかし、ICONIA TAB A500ではデタッチを実行してしまうと、対象のシェーダプログラムは動作が保証されません。正常なレンダリングが行われなかったり、プログラムの異常終了の原因にもなります。このプログラムは、この現象を再現するためのサンプルです。

 *1: http://www.khronos.org/opengles/sdk/docs/man/xhtml/glLinkProgram.xml
 The program object's information log is updated and the
 program is generated at the time of the link operation. After
 the link operation, applications are free to modify attached
 shader objects, compile attached shader objects, detach shader
 objects, delete shader objects, and attach additional shader
 objects. None of these operations affects the information log or
 the program that is part of the program object.




** 使用方法 [#yc7888da]

detachbugをインストールし、起動します。プログラムが正常に動いているときは、以下のような表示が行われます。

-黒い背景に、丸・四角・星型3つの図形が回転表示される。

メニューボタンを押すと、以下のメニューが表示されます。

- [No Detach]。シェーダのデタッチを行わない。
- [Detach Vertex Shader]。頂点シェーダのデタッチを行う。
- [Detach Fragment Shader]。ピクセルシェーダのデタッチを行う。
- [Detach both Shader]。両方のシェーダのデタッチを行う。

OpenGL ESが仕様通りに動いている場合は、どのモードで実行しても動作は変化しません。

ICONIA TAB A500(*2)では、以下のような動作になります。

- [No Detach]。正常動作する。
- [Detach Vertex Shader]。正常動作する。
- [Detach Fragment Shader]。プログラムが異常終了する。
- [Detach both Shader]。各図形の外側に黒い四角の領域が残った状態で描画が行われる(透明ピクセルの抜きが行われない)。

 *2: A500, Android 3.2.1, Kermel 2.6.36.3+, Acer_A500_7.015.05_AAP_CUS6JP

| &ref(detachbug_ok.png); | &ref(detachbug_ng.png); |
| 正常な表示              | ICONIA TAB A500での表示 |




** 余談 [#q30798e1]

- ICONIA TAB A500は、NVIDIA Tegra2プロセッサが搭載されています。同じプロセッサを搭載している端末では、再現するかもしれません。




** ライセンス [#m65f06fd]

ライセンスについては、パッケージ同梱のAPACHE-LICENSE-2.0.txtをご覧ください。


** 参考 [#k6402163]


RIGHT:counter: today=&counter(today);, yesterday=&counter(yesterday);, total=&counter;


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS