背景:これは私の最初のOpenGL ES 2プログラムなので、経験が浅いです。私は、カラーインデックス付きテクスチャを表示するためのシェーダーに取り組んできました。1つのテクスチャからポイントをサンプリングし、256.0を掛けて、8ビット整数範囲にスケールアップし、パレットテクスチャのそのオフセットから対応するRGBA値をサンプリングし、gl_FragColorを設定します。
サムスンギャラクシーS2で1か月間完全に動作しましたが、ギャラクシーS1では動作せず、黒いテクスチャしか表示されませんでした。コードのすべての部分で試行錯誤しながら問題を見つけようとして壁に頭をぶつけようと何度も試みた後、最終的に次のように効果的に減らすことができるシェーダーコードに絞り込みました。
precision highp float;
varying vec2 v_texCoord;
uniform sampler2D texture;
void main()
{
float multiplied = texture2D(texture, v_texCoord).s * 256.0;
float divided = multiplied / 256.0;
gl_FragColor = vec4(divided, divided, divided, 1.0);
}
その例でtexture
は、すべての値が0xFFに設定された256x256ピクセルのテクスチャです。Galaxy S2でそのコードを実行すると、正常に動作します。完全に白い画面、正確に0xFFFFFFが表示されます。オリジナルのGalaxyS1で実行すると、画面は正確に0x000000になります。
ここで、その256.0の値を減らして実行すると、GalaxyS1の出力がすべて黒からさまざまなグレーの色合いに増加し始めることがわかりました。たとえば、8.0では0x424142が得られ、4.0では0x848284が得られました。2.0で乗算/除算するまでに、Galaxy S2と同じように0xFFFFFFの出力が開始されます!
このような問題を引き起こす可能性のあるアイデアはありますか?私はこの時点で絶対に敗北しているので、私はあなたの最もワイルドな推測をします。これを引き起こしている可能性のあるものは何も見当たりません。