私のアプリでは、GLSurfaceViewを使用して、表示される内容に応じて変化する2次元の背景イメージを表示します。画像は、携帯電話の画面と同じアスペクト比の単純な長方形にレンダリングされたテクスチャとして使用されます。背景が変化すると、アルファブレンドのトランジション効果がレンダリングされます。デバイスがOpen GL ES 2.0をサポートしていない場合は、代わりにスタティックイメージが使用されます。Android:OpenGLのテクスチャが一部のデバイスで白くなる
いくつかのデバイス(LG E455など)では、バックグラウンドが白くなってアプリが使用できなくなっているとの報告がありましたが、上に表示されるテキストも白であるためです。私は問題の解決策を探していましたが、何も見つかりませんでした。
私は広告なしで無料でアプリを提供しているため(広告はアプリに適合しないと思う)、外部資金を受けていないため、問題のデバイス(LG E455)を購入することはできませんこれは古いデバイスなので、この1つの問題をデバッグする唯一の目的のためです。
私はテクスチャをロードするには、次のコードを使用しています:
int getTexture(GL10 gl, int index) {
if (BackgroundRenderer.this.textures[index] == 0) {
gl.glGenTextures(1, BackgroundRenderer.this.textures, index);
gl.glBindTexture(GL10.GL_TEXTURE_2D, BackgroundRenderer.this.textures[index]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
Bitmap bitmap = ResourceStore.getBackgroundBitmap(index);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
}
return BackgroundRenderer.this.textures[index];
}
バージョンチェックと初期化:
private static boolean supportsOpenGLES2(Context context) {
ActivityManager activityManager = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo configurationInfo =
activityManager.getDeviceConfigurationInfo();
return configurationInfo.reqGlEsVersion >= 0x20000;
}
public BackgroundManager(Context context, ViewPager eventSource) {
this.context = context;
supportsRendering = BackgroundManager.supportsOpenGLES2(context);
eventSource.setTag(id.TAG_BACKGROUND_MANAGER, this);
if (this.supportsRendering) {
this.backgroundSurfaceView = new GLSurfaceView(context);
this.backgroundSurfaceView.setFocusable(false);
this.backgroundSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
eventSource.addOnPageChangeListener(BackgroundManager.getRenderer());
this.backgroundSurfaceView.setRenderer(BackgroundManager.getRenderer());
this.backgroundSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
} else {
this.backgroundStillView = new View(context);
}
}
をあなたはより多くのコードが必要な場合は、私に教えてください。
私はいくつかの可能な解決策について考えている:
a)は、問題を解決する(方法がわからない...)
b)は、デバイスがそれをサポートしていない場合には派手なエフェクトを無効にします、しかしここでの質問は、レンダリングが先に動作するかどうかをどのように検出できますか?デバイスはOpen GL 2.0のバージョンチェックに合格します。
c)OpenGLではなく、別のレンダリングソリューションに移行します。これは、自分の目的にとって過度の不満を感じているからです。助言がありますか?
注:私は別のAPIを使用して、デバイスがhttp://specdevice.com/showspec.php?id=02c2-cba8-ffff-ffffebe99653ごとに拡張をサポートしていますので、Android 'white box' textures OpenGL ES 1.0 on some devicesに提案された解決策は、適用されません(私は情報が信用できる/正しいかどうかわからないが)
感謝あなたの提案のためにあなた!
本当にありがとう、私の問題を解決しました!このような簡単なソリューションを提供していただきありがとうございます。実装が簡単でした! –