2.2から4.1までのさまざまなAndroidバージョンを実行する端末で動作するOpenGL ES2.0アプリがあります。しかし、Android 4.2を搭載したNexus 7で実行すると、アプリケーションの3Dグラフィックスはすべて黒であると言われています。アクションバーとダイアログはうまく動作します。 Intel Atomプロセッサを搭載したエミュレートされたNexus 7でHAXとGPUを有効にしてみましたが、4.2.2で動作していてOKです。私はARMイメージを実行することを好みましたが、Open GL ES2.0は含まれていないようです。Android 4.2搭載のNexus 7でGLSurfaceViewが黒く表示される
Nexus 7でこの問題の原因となる可能性のある人は誰ですか?
現在のAppバージョンのターゲットAPIレベルは15に設定されていますが、4.2.2はレベル17に設定されている可能性があります。それはエミュレータでOKでも動作します。
以下は、私がレンダラーのテクスチャを設定するために使用するコードです(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();
}
}
表面が完全に黒い場合は、テクスチャの負荷よりも基本的な問題だと思います。あなたのレンダーモードは何ですか?どのようにGLコンテキストを設定していますか? –
@ReubenScrattonお返事ありがとうございます!次の行は、GLSurfaceViewから派生したクラスのコンストラクタからコンテキストとレンダリングモードを設定します。 '// OpenGL ES 2.0コンテキストを作成します。 setEGLContextClientVersion(2); // GLSurfaceViewで描画するレンダラーを設定します mCubeSize = 2; mCubeRenderer =新しいCubeRenderer(コンテキスト)。 setRenderer(mCubeRenderer); //図面データに変更があった場合にのみビューをレンダリングします setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); ' – tonyw
ああ、XMLレイアウトを使ってGLSurfaceViewサブクラスのインスタンスを作成してから、findViewById()を使って参照を取得することを忘れてしまいました。 – tonyw