これはかなりの回答(まだ)ではありませんが、私はそれが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_OPENGL
がDEBUG_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。