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.