2.2 から 4.1 までのさまざまな Android バージョンを実行しているデバイスで動作する OpenGL ES2.0 アプリがあります。ただし、Android 4.2 を搭載した Nexus 7 で実行すると、アプリの 3D グラフィックがすべて黒くなると言われました。ただし、アクション バーとダイアログは問題なく動作します。Intel Atom プロセッサ、HAX、および GPU が有効な 4.2.2 を実行するエミュレートされた Nexus 7 で試してみましたが、問題なく動作します。ARM イメージを実行したかったのですが、Open GL ES2.0 が含まれていないようです。
Nexus 7 でこの問題を引き起こしている原因とその回避方法について、誰か洞察を持っている人はいますか?
1 つの可能性は、現在のアプリ バージョンのターゲット API レベルが 15 に設定されているのに対し、4.2.2 はレベル 17 であるということです。これは問題になる可能性がありますか? ただし、エミュレータでは問題なく動作します。
以下は、レンダラー onSurfaceCreated() でテクスチャを設定するために使用するコードです。
/**
* Sets up texturing for the object
*/
private void setupTextures(String[] texFiles) {
// create new texture ids if object has them
// number of textures
mTextureIDs = new int[texFiles.length];
GLES20.glGenTextures(texFiles.length, mTextureIDs, 0);
for(int i = 0; i < texFiles.length; i++) {
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIDs[i]);
// parameters
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
GLES20.GL_TEXTURE_MAG_FILTER,
GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
GLES20.GL_REPEAT);
int ID = mContext.getResources().getIdentifier( texFiles[i], "raw", "com.antonymsoft.slidixcube" );
InputStream is = mContext.getResources().openRawResource(ID);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch(IOException e) {
// Ignore.
}
}
// create it
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
}