| Index: src/gpu/gl/GrGpuGL.cpp
|
| diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
|
| index 3c22d17b64a4be858eaeffb20eb5dd6c7fe821ea..90789db3061f41e7cae048a8cea434d23329a21e 100644
|
| --- a/src/gpu/gl/GrGpuGL.cpp
|
| +++ b/src/gpu/gl/GrGpuGL.cpp
|
| @@ -13,6 +13,8 @@
|
| #include "SkStrokeRec.h"
|
| #include "SkTemplates.h"
|
|
|
| +int gBindFrameBufferCount = 0;
|
| +
|
| #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X)
|
| #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glInterface(), RET, X)
|
|
|
| @@ -869,6 +871,7 @@ bool GrGpuGL::createRenderTargetObjects(int width, int height,
|
| width, height)) {
|
| goto FAILED;
|
| }
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fRTFBOID));
|
| GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER,
|
| GR_GL_COLOR_ATTACHMENT0,
|
| @@ -883,6 +886,7 @@ bool GrGpuGL::createRenderTargetObjects(int width, int height,
|
| fGLContext.caps()->markConfigAsValidColorAttachment(desc->fConfig);
|
| }
|
| }
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fTexFBOID));
|
|
|
| if (this->glCaps().usesImplicitMSAAResolve() && desc->fSampleCnt > 0) {
|
| @@ -1244,6 +1248,7 @@ bool GrGpuGL::attachStencilBufferToRenderTarget(GrStencilBuffer* sb, GrRenderTar
|
| GrGLuint rb = glsb->renderbufferID();
|
|
|
| fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, fbo));
|
| GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER,
|
| GR_GL_STENCIL_ATTACHMENT,
|
| @@ -1446,6 +1451,7 @@ void GrGpuGL::discard(GrRenderTarget* renderTarget) {
|
| GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(renderTarget);
|
| if (renderTarget->getUniqueID() != fHWBoundRenderTargetUniqueID) {
|
| fHWBoundRenderTargetUniqueID = SK_InvalidUniqueID;
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, glRT->renderFBOID()));
|
| }
|
| switch (this->glCaps().invalidateFBType()) {
|
| @@ -1611,6 +1617,7 @@ bool GrGpuGL::onReadPixels(GrRenderTarget* target,
|
| case GrGLRenderTarget::kCanResolve_ResolveType:
|
| this->onResolveRenderTarget(tgt);
|
| // we don't track the state of the READ FBO ID.
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER,
|
| tgt->textureFBOID()));
|
| break;
|
| @@ -1710,6 +1717,7 @@ void GrGpuGL::flushRenderTarget(const SkIRect* bound) {
|
|
|
| uint32_t rtID = rt->getUniqueID();
|
| if (fHWBoundRenderTargetUniqueID != rtID) {
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, rt->renderFBOID()));
|
| #ifdef SK_DEBUG
|
| // don't do this check in Chromium -- this is causing
|
| @@ -1812,7 +1820,9 @@ void GrGpuGL::onResolveRenderTarget(GrRenderTarget* target) {
|
| // Some extensions automatically resolves the texture when it is read.
|
| if (this->glCaps().usesMSAARenderBuffers()) {
|
| SkASSERT(rt->textureFBOID() != rt->renderFBOID());
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, rt->renderFBOID()));
|
| + gBindFrameBufferCount++;
|
| GL_CALL(BindFramebuffer(GR_GL_DRAW_FRAMEBUFFER, rt->textureFBOID()));
|
| // make sure we go through flushRenderTarget() since we've modified
|
| // the bound DRAW FBO ID.
|
| @@ -2388,6 +2398,7 @@ inline GrGLuint bind_surface_as_fbo(const GrGLInterface* gl,
|
| SkASSERT(NULL != surface->asTexture());
|
| GrGLuint texID = static_cast<GrGLTexture*>(surface->asTexture())->textureID();
|
| GR_GL_CALL(gl, GenFramebuffers(1, &tempFBOID));
|
| + gBindFrameBufferCount++;
|
| GR_GL_CALL(gl, BindFramebuffer(fboTarget, tempFBOID));
|
| GR_GL_CALL(gl, FramebufferTexture2D(fboTarget,
|
| GR_GL_COLOR_ATTACHMENT0,
|
| @@ -2400,6 +2411,7 @@ inline GrGLuint bind_surface_as_fbo(const GrGLInterface* gl,
|
| viewport->fHeight = surface->height();
|
| } else {
|
| tempFBOID = 0;
|
| + gBindFrameBufferCount++;
|
| GR_GL_CALL(gl, BindFramebuffer(fboTarget, rt->renderFBOID()));
|
| *viewport = rt->getViewport();
|
| }
|
|
|