2017-08-09 7 views
2

私はアンドロイドエミュレータMacOsXに奇妙なエラーがあります。このアンドロイドアプリは実際の端末でうまく動作しています。私はそれをたくさん見つけてきましたが、スレッドに関する議論はほとんどありません。私はちょうど基本的な相対レイアウトを使って断片を開発しました。私はそれを実行すると、私はGL 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

これらのエラーを取得し、よりエラーの詳細を表示するか、このエラーを修正するためにそれをデバッグするためにとにかくはありますか?このエラーは、アプリをクラッシュさせます。

答えて

1

これはかなりの回答(まだ)ではありませんが、私はそれが1になるのを助けることを期待して投稿しています。

だから、私はちょうどChromeで私のピクセルXLでこれを押すと、元に探して、我々は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; 

}私たちがしている

GL_CHECKPOINT(LOW)ブロックに当たった。 、実際に作業を行う

#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 

DEBUG_OPENGLDEBUG_LEVEL_LOWをデフォルトのようです)

機能dumpGLErrorsとして、defined in GLUtils.cppです:

マクロはdefined in GLUtils.hとしてある

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 
} 

ここで、私の問題は変だ。あなたのログにGL error: 0x506行がありますが、私はそうではありません。

エラーはan GL_INVALID_FRAMEBUFFER_OPERATIONです。エラーはyou need to look into thatのようです。

しかし、詳細を知りたい場合は、DEBUG_LEVEL_HIGH、おそらくother optionsのようなものでAndroid hwui libを再コンパイルする必要があります。

私の側では、クロムのクラッシュがlogcatに "GLエラー"を残さなかったので、私は手がかりがありません。 Grr。