5

2.2에서 4.1까지 다양한 Android 버전을 실행하는 기기에서 작동하는 OpenGL ES2.0 앱이 있습니다. 그러나 Android 4.2가 탑재 된 Nexus 7에서 실행하면 앱의 3D 그래픽이 모두 검게 표시됩니다. 액션 바 (Action Bar)와 대화 상자는 잘 작동합니다. Intel Atom 프로세서를 탑재 한 에뮬레이션 된 Nexus 7에서 HAX 및 GPU를 실행하여 4.2.2를 실행할 수 있었지만 정상적으로 작동합니다. ARM 이미지를 실행하는 것이 좋겠지 만 Open GL ES2.0을 포함하지 않는 것 같습니다.Android 4.2가 설치된 Nexus 7에서 GLSurfaceView가 검은 색으로 표시됩니다.

Nexus 7에서이 문제를 일으키는 원인과 해결 방법에 대한 통찰력이있는 사람이 있습니까?

현재 App 버전의 타겟 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(); 

    } 
} 
+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

예, 그게 전부입니다. 놀랍게도 일부 장치는 여전히 두 가지 텍스처의 비 - 출력을 지원하지 않습니다. – tonyw