GLSurfaceView zeigt Schwarz auf Nexus 7 mit Android 4.2 an

Ich habe eine OpenGL ES2.0-App, die auf Geräten mit verschiedenen Android-Versionen von 2.2 bis 4.1 funktioniert. Allerdings wurde mir gesagt, dass die 3D-Grafiken in der App bei der Ausführung auf einem Nexus 7 mit Android 4.2 alle schwarz sind. Die Aktionsleiste und die Dialogfelder funktionieren jedoch einwandfrei. Ich habe es auf einem emulierten Nexus 7 mit Intel Atom-Prozessor versucht, HAX und GPU aktiviert, 4.2.2 ausgeführt und das funktioniert OK. Ich hätte es vorgezogen, das ARM-Image auszuführen, aber dies scheint Open GL ES2.0 nicht zu enthalten

Hat jemand einen Einblick, was dieses Problem auf dem Nexus 7 verursachen könnte und wie man es umgehen kann?

Eine Möglichkeit besteht darin, dass für die aktuelle App-Version die Ziel-API-Stufe auf 15 festgelegt ist, während für 4.2.2 Stufe 17 festgelegt ist. Kann dies ein Problem sein? Auf dem Emulator funktioniert es jedoch einwandfrei.

Unten ist der Code, mit dem ich die Texturen im Renderer onSurfaceCreated () festlegen kann, falls dies hilfreich ist.

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

    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage