diff --git a/libs/renderengine/gl/filters/BlurFilter.cpp b/libs/renderengine/gl/filters/BlurFilter.cpp index 402b5469e3b508ba75141970fe4091440d7752ce..f6660a75cd4c53a6f77b5b5758d46c9199730953 100644 --- a/libs/renderengine/gl/filters/BlurFilter.cpp +++ b/libs/renderengine/gl/filters/BlurFilter.cpp @@ -31,6 +31,9 @@ namespace android { namespace renderengine { namespace gl { +// This needs to be located in .rodata to get a pointer for the OpenGL API. +static const GLenum kInvalidateAttachment = GL_COLOR_ATTACHMENT0; + BlurFilter::BlurFilter(GLESRenderEngine& engine) : mEngine(engine), mCompositionFbo(engine), @@ -122,6 +125,7 @@ status_t BlurFilter::setAsDrawTarget(const DisplaySettings& display, uint32_t ra } mCompositionFbo.bind(); + glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment); glViewport(0, 0, mCompositionFbo.getBufferWidth(), mCompositionFbo.getBufferHeight()); return NO_ERROR; } @@ -152,6 +156,7 @@ status_t BlurFilter::prepare() { GLFramebuffer* draw = &mPingFbo; read->bindAsReadBuffer(); draw->bindAsDrawBuffer(); + glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment); glBlitFramebuffer(0, 0, read->getBufferWidth(), read->getBufferHeight(), 0, 0, @@ -162,6 +167,7 @@ status_t BlurFilter::prepare() { // And now we'll ping pong between our textures, to accumulate the result of various offsets. mBlurProgram.useProgram(); + glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment); glViewport(0, 0, draw->getBufferWidth(), draw->getBufferHeight()); for (auto i = 1; i < passes; i++) { ATRACE_NAME("BlurFilter::renderPass");