2017-08-09 5 views
2

Ich habe seltsame Fehler auf einem Android-Emulator MacOsX. Diese Android-App läuft gut auf einem echten Gerät. Ich habe viel gegoogelt, aber es gibt nur wenige Diskussionen darüber. Ich habe gerade ein Fragment mit einem einfachen relativen Layout entwickelt. Wenn ich es laufen lasse, erhalte ich diese FehlerGL Fehler auf BakedOpRenderer

08-09 10:07:00.973 4271-4466/com.xxx.xxx E/OpenGLRenderer: GL error: 0x506

08-09 10:07:00.973 4271-4466/com.xxx.xxx A/OpenGLRenderer: GL errors! frameworks/base/libs/hwui/BakedOpRenderer.cpp:98

08-09 10:07:00.973 4271-4466/com.xxx.xxx A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 4466 (RenderThread)

[ 08-09 10:07:00.974 1261: 1261 W/] debuggerd: handling request: pid=4271 uid=10085 gid=10085 tid=4466

Gibt es, es trotzdem zu debuggen mehr Fehlerdetails zeigen oder den Fehler beheben? Dieser Fehler führt zum Absturz der App.

Antwort

1

Dies ist (noch) keine richtige Antwort, aber ich poste in der Hoffnung, dass es helfen wird, eins zu bekommen.

Also, ich traf dies nur auf meinem Pixel XL in Chrom und in die Quelle suchen, wir schlagen eine "assert" in BakedOpRenderer.cpp:

void BakedOpRenderer::endLayer() { 
    if (mRenderTarget.stencil) { 
     // if stencil was used for clipping, detach it and return it to pool 
     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); 
     GL_CHECKPOINT(MODERATE); 
     mCaches.renderBufferCache.put(mRenderTarget.stencil); 
     mRenderTarget.stencil = nullptr; 
    } 
    mRenderTarget.lastStencilClip = nullptr; 
    mRenderTarget.offscreenBuffer->updateMeshFromRegion(); 
    mRenderTarget.offscreenBuffer = nullptr; // It's in drawLayerOp's hands now. 
    // Detach the texture from the FBO 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); 
    GL_CHECKPOINT(LOW); 
    mRenderState.deleteFramebuffer(mRenderTarget.frameBufferId); 
    mRenderTarget.frameBufferId = 0; 

}

Wo wir sind trifft den GL_CHECKPOINT(LOW) Block.

Das Makro ist defined in GLUtils.h wie:

#if DEBUG_OPENGL 
#define GL_CHECKPOINT(LEVEL) \ 
    do { if (DEBUG_OPENGL >= DEBUG_LEVEL_##LEVEL) {\ 
    LOG_ALWAYS_FATAL_IF(android::uirenderer::GLUtils::dumpGLErrors(),\ 
     "GL errors! %s:%d", __FILE__, __LINE__);\ 
} } while (0) 
#else 
#define GL_CHECKPOINT(LEVEL) 
#endif 

Die Funktion, die tatsächlich macht die Arbeit, dumpGLErrors ist defined in GLUtils.cpp, as (DEBUG_OPENGL zu DEBUG_LEVEL_LOW auf Standard scheint):

bool GLUtils::dumpGLErrors() { 
#if DEBUG_OPENGL >= DEBUG_LEVEL_HIGH 
    // If DEBUG_LEVEL_HIGH is set then every GLES call is already wrapped 
    // and asserts that there was no error. So this can just return success. 
    return false; 
#else 
    bool errorObserved = false; 
    GLenum status = GL_NO_ERROR; 
    while ((status = glGetError()) != GL_NO_ERROR) { 
     errorObserved = true; 
     switch (status) { 
     case GL_INVALID_ENUM: 
      ALOGE("GL error: GL_INVALID_ENUM"); 
      break; 
     case GL_INVALID_VALUE: 
      ALOGE("GL error: GL_INVALID_VALUE"); 
      break; 
     case GL_INVALID_OPERATION: 
      ALOGE("GL error: GL_INVALID_OPERATION"); 
      break; 
     case GL_OUT_OF_MEMORY: 
      ALOGE("GL error: Out of memory!"); 
      break; 
     default: 
      ALOGE("GL error: 0x%x", status); 
     } 
    } 
    return errorObserved; 
#endif 
} 

Hier wird mein Problem komisch. Sie haben die GL error: 0x506 Zeile in Ihrem Protokoll, aber ich nicht.

Ihr Fehler ist an GL_INVALID_FRAMEBUFFER_OPERATION Fehler, und es sieht aus wie you need to look into that.

Wenn Sie jedoch weitere Informationen erhalten möchten, müssen Sie die Android-hwui-Bibliothek mit etwas wie DEBUG_LEVEL_HIGH und vielleicht einem other options neu kompilieren.

Auf meiner Seite habe ich keine Ahnung, da der Absturz in Chrom nicht den "GL-Fehler" in logcat verlassen. Gr.