From 00845c0ad0635679c07b4371d6500223f17837f8 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Wed, 16 Sep 2015 19:04:57 -0300 Subject: [PATCH] Added love.graphics.intersectScissor(x, y, w, h). Resolves issue #1071. It sets the active scissor rectangle to the intersection of the existing scissor (if any) and the specified rectangle. --- .../AppIcon.appiconset/Contents.json | 6 --- .../AppIcon.appiconset/pig-120pt@1x.png | Bin 15599 -> 0 bytes src/modules/graphics/Graphics.h | 11 +++++ src/modules/graphics/opengl/Graphics.cpp | 41 +++++++++++++----- src/modules/graphics/opengl/Graphics.h | 4 +- src/modules/graphics/opengl/wrap_Graphics.cpp | 15 +++++++ src/modules/graphics/opengl/wrap_Graphics.h | 1 + 7 files changed, 61 insertions(+), 17 deletions(-) delete mode 100644 platform/xcode/ios/Images.xcassets/AppIcon.appiconset/pig-120pt@1x.png diff --git a/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json b/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json index 80f200222..164ff34d6 100644 --- a/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json @@ -113,12 +113,6 @@ "idiom" : "ipad", "filename" : "pig-76pt@2x.png", "scale" : "2x" - }, - { - "size" : "120x120", - "idiom" : "car", - "filename" : "pig-120pt@1x.png", - "scale" : "1x" } ], "info" : { diff --git a/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/pig-120pt@1x.png b/platform/xcode/ios/Images.xcassets/AppIcon.appiconset/pig-120pt@1x.png deleted file mode 100644 index de29613e96e498e8400e87a210de2e3dec800734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15599 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 diff --git a/src/modules/graphics/Graphics.h b/src/modules/graphics/Graphics.h index 0e5877321..60ec7d514 100644 --- a/src/modules/graphics/Graphics.h +++ b/src/modules/graphics/Graphics.h @@ -178,6 +178,17 @@ public: } }; + struct ScissorRect + { + int x, y; + int w, h; + + bool operator == (const ScissorRect &rhs) const + { + return x == rhs.x && y == rhs.y && w == rhs.w && h == rhs.h; + } + }; + virtual ~Graphics(); // Implements Module. diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index c3d423a80..ca9427a7d 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -110,7 +110,7 @@ void Graphics::restoreState(const DisplayState &s) setPointSize(s.pointSize); if (s.scissor) - setScissor(s.scissorBox.x, s.scissorBox.y, s.scissorBox.w, s.scissorBox.h); + setScissor(s.scissorRect.x, s.scissorRect.y, s.scissorRect.w, s.scissorRect.h); else setScissor(); @@ -147,10 +147,10 @@ void Graphics::restoreStateChecked(const DisplayState &s) if (s.pointSize != cur.pointSize) setPointSize(s.pointSize); - if (s.scissor != cur.scissor || (s.scissor && !(s.scissorBox == cur.scissorBox))) + if (s.scissor != cur.scissor || (s.scissor && !(s.scissorRect == cur.scissorRect))) { if (s.scissor) - setScissor(s.scissorBox.x, s.scissorBox.y, s.scissorBox.w, s.scissorBox.h); + setScissor(s.scissorRect.x, s.scissorRect.y, s.scissorRect.w, s.scissorRect.h); else setScissor(); } @@ -580,14 +580,35 @@ bool Graphics::isCreated() const void Graphics::setScissor(int x, int y, int width, int height) { - OpenGL::Viewport box = {x, y, width, height}; + ScissorRect rect = {x, y, width, height}; glEnable(GL_SCISSOR_TEST); // OpenGL's reversed y-coordinate is compensated for in OpenGL::setScissor. - gl.setScissor(box); + gl.setScissor({rect.x, rect.y, rect.w, rect.h}); states.back().scissor = true; - states.back().scissorBox = box; + states.back().scissorRect = rect; +} + +void Graphics::intersectScissor(int x, int y, int width, int height) +{ + ScissorRect rect = states.back().scissorRect; + + if (!states.back().scissor) + { + rect.x = 0; + rect.y = 0; + rect.w = std::numeric_limits::max(); + rect.h = std::numeric_limits::max(); + } + + int x1 = std::max(rect.x, x); + int y1 = std::max(rect.y, y); + + int x2 = std::min(rect.x + rect.w, x + width); + int y2 = std::min(rect.y + rect.h, y + height); + + setScissor(x1, y1, std::max(0, x2 - x1), std::max(0, y2 - y1)); } void Graphics::setScissor() @@ -600,10 +621,10 @@ bool Graphics::getScissor(int &x, int &y, int &width, int &height) const { const DisplayState &state = states.back(); - x = state.scissorBox.x; - y = state.scissorBox.y; - width = state.scissorBox.w; - height = state.scissorBox.h; + x = state.scissorRect.x; + y = state.scissorRect.y; + width = state.scissorRect.w; + height = state.scissorRect.h; return state.scissor; } diff --git a/src/modules/graphics/opengl/Graphics.h b/src/modules/graphics/opengl/Graphics.h index cda952424..c7e593401 100644 --- a/src/modules/graphics/opengl/Graphics.h +++ b/src/modules/graphics/opengl/Graphics.h @@ -126,6 +126,8 @@ public: **/ void setScissor(int x, int y, int width, int height); + void intersectScissor(int x, int y, int width, int height); + /** * Clears any scissor that has been created. **/ @@ -478,7 +480,7 @@ private: float pointSize = 1.0f; bool scissor = false; - OpenGL::Viewport scissorBox = OpenGL::Viewport(); + ScissorRect scissorRect = ScissorRect(); // Stencil. bool stencilTest = false; diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 4a445b7e5..e19ca2e21 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -184,6 +184,20 @@ int w_setScissor(lua_State *L) return 0; } +int w_intersectScissor(lua_State *L) +{ + int x = (int) luaL_checknumber(L, 1); + int y = (int) luaL_checknumber(L, 2); + int w = (int) luaL_checknumber(L, 3); + int h = (int) luaL_checknumber(L, 4); + + if (w < 0 || h < 0) + return luaL_error(L, "Can't set scissor with negative width and/or height."); + + instance()->intersectScissor(x, y, w, h); + return 0; +} + int w_getScissor(lua_State *L) { int x, y, w, h; @@ -1899,6 +1913,7 @@ static const luaL_Reg functions[] = { "getDimensions", w_getDimensions }, { "setScissor", w_setScissor }, + { "intersectScissor", w_intersectScissor }, { "getScissor", w_getScissor }, { "stencil", w_stencil }, diff --git a/src/modules/graphics/opengl/wrap_Graphics.h b/src/modules/graphics/opengl/wrap_Graphics.h index 478375999..c6e802ca0 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.h +++ b/src/modules/graphics/opengl/wrap_Graphics.h @@ -52,6 +52,7 @@ int w_getWidth(lua_State *L); int w_getHeight(lua_State *L); int w_getDimensions(lua_State *L); int w_setScissor(lua_State *L); +int w_intersectScissor(lua_State *L); int w_getScissor(lua_State *L); int w_stencil(lua_State *L); int w_setStencilTest(lua_State *L);