5

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(); 

    } 
} 
+0

表面が完全に黒い場合は、テクスチャの負荷よりも基本的な問題だと思います。あなたのレンダーモードは何ですか?どのようにGLコンテキストを設定していますか? –

+0

@ReubenScrattonお返事ありがとうございます!次の行は、GLSurfaceViewから派生したクラスのコンストラクタからコンテキストとレンダリングモードを設定します。 '// OpenGL ES 2.0コンテキストを作成します。 setEGLContextClientVersion(2); // GLSurfaceViewで描画するレンダラーを設定します mCubeSize = 2; mCubeRenderer =新しいCubeRenderer(コンテキスト)。 setRenderer(mCubeRenderer); //図面データに変更があった場合にのみビューをレンダリングします setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); ' – tonyw

+0

ああ、XMLレイアウトを使ってGLSurfaceViewサブクラスのインスタンスを作成してから、findViewById()を使って参照を取得することを忘れてしまいました。 – tonyw

答えて

4

テクスチャのサイズは? 2の累乗でなければなりません。たとえば、16x32 512x512 1024x512などです。

+1

はい、それでした。驚いたことに、いくつかのデバイスはまだ2つのテクスチャの非パワーをサポートしていません。 – tonyw

関連する問題