私は OpenGL についてほとんど知らないので、優しくしてください。
アプリは (リソースから) ビットマップを読み込み、サイズを変更し、OpenGL テクスチャで使用する必要があります。動作する実装がありますが、Wildfire S にバンディングの問題がありました。そのため、実装を変更し、バンディングの問題を修正しました (ARGB_8888 に切り替えることで) が、Galaxy Nexus と Nexus One の機能が壊れました。
次の 3 つのビジュアル プレゼンテーションが表示されます。
ビットマップ (滑らかな 24 ビット グラデーション) は、バンディングなしで正しく表示されます。
グラデーションが表示されますが、明らかなバンディングがあります
テクスチャがフラット ホワイトとして表示され、ビットマップが表示されない (または logcat の問題)
ビットマップをロードする方法の 2 つのバージョンと、それぞれの結果に関するメモを次に示します。
// White on Galaxy Nexus. White on Nexus One. Renders correct image (no banding) on Wildfire S
private Bitmap getBitmap1() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.outWidth = getTextureSize();
options.outHeight = getTextureSize();
final Bitmap bmp;
bmp = BitmapFactory.decodeResource(getResources(), bitmapResourceId, options);
return bmp;
}
// Renders correctly (no banding) on Galaxy Nexus. Renders on Nexus One and Wildfire S but with obvious banding.
private Bitmap getBitmap2() {
int textureSize = getTextureSize();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.outWidth = getTextureSize();
options.outHeight = getTextureSize();
final Bitmap bmp;
bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), bitmapResourceId, options), textureSize, textureSize, true);
return bmp;
}
getTextureSize() は 1024 を返します。
すべてのデバイスでバンディングなしでビットマップを表示し、どのデバイスも大きな白いボックスを表示しない単一のメソッドを構築するにはどうすればよいですか?