From 18faf22c85f003b0dafc5fa873da87f7fb1e5776 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Tue, 7 Jan 2014 15:02:19 -0500 Subject: [PATCH] Bug 956401 - 9/9 - Optimization: cache the scissor rect in GLContext - r=vladv --- gfx/gl/GLContext.cpp | 1 + gfx/gl/GLContext.h | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gfx/gl/GLContext.cpp b/gfx/gl/GLContext.cpp index 0401d0a9e0e0..905339fc37eb 100644 --- a/gfx/gl/GLContext.cpp +++ b/gfx/gl/GLContext.cpp @@ -1024,6 +1024,7 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl) if (mInitialized) { raw_fGetIntegerv(LOCAL_GL_VIEWPORT, mViewportRect); + raw_fGetIntegerv(LOCAL_GL_SCISSOR_BOX, mScissorRect); raw_fGetIntegerv(LOCAL_GL_MAX_TEXTURE_SIZE, &mMaxTextureSize); raw_fGetIntegerv(LOCAL_GL_MAX_CUBE_MAP_TEXTURE_SIZE, &mMaxCubeMapTextureSize); raw_fGetIntegerv(LOCAL_GL_MAX_RENDERBUFFER_SIZE, &mMaxRenderbufferSize); diff --git a/gfx/gl/GLContext.h b/gfx/gl/GLContext.h index 10a063013bf6..aea3d39859f2 100644 --- a/gfx/gl/GLContext.h +++ b/gfx/gl/GLContext.h @@ -1103,6 +1103,12 @@ class GLContext } break; + case LOCAL_GL_SCISSOR_BOX: + for (size_t i = 0; i < 4; i++) { + params[i] = mScissorRect[i]; + } + break; + default: raw_fGetIntegerv(pname, params); break; @@ -1403,6 +1409,17 @@ class GLContext } void fScissor(GLint x, GLint y, GLsizei width, GLsizei height) { + if (mScissorRect[0] == x && + mScissorRect[1] == y && + mScissorRect[2] == width && + mScissorRect[3] == height) + { + return; + } + mScissorRect[0] = x; + mScissorRect[1] = y; + mScissorRect[2] = width; + mScissorRect[3] = height; BEFORE_GL_CALL; mSymbols.fScissor(x, y, width, height); AFTER_GL_CALL; @@ -2789,6 +2806,7 @@ class GLContext void InitExtensions(); GLint mViewportRect[4]; + GLint mScissorRect[4]; GLint mMaxTextureSize; GLint mMaxCubeMapTextureSize;