Add love.graphics.transformPoint and love.graphics.inverseTransformPoint.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2016-10-20 18:13:20 -03:00
parent be1a59fb18
commit 4c122e6581
5 changed files with 218 additions and 33 deletions
+16
View File
@@ -1789,6 +1789,22 @@ void Graphics::origin()
pixelSizeStack.back() = 1;
}
Vector Graphics::transformPoint(Vector point)
{
Vector p;
gl.getTransform().transform(&p, &point, 1);
return p;
}
Vector Graphics::inverseTransformPoint(Vector point)
{
Vector p;
// TODO: We should probably cache the inverse transform so we don't have to
// re-calculate it every time this is called.
gl.getTransform().inverse().transform(&p, &point, 1);
return p;
}
} // opengl
} // graphics
} // love
+2
View File
@@ -459,6 +459,8 @@ public:
void translate(float x, float y);
void shear(float kx, float ky);
void origin();
Vector transformPoint(Vector point);
Vector inverseTransformPoint(Vector point);
private:
@@ -1960,6 +1960,28 @@ int w_origin(lua_State * /*L*/)
return 0;
}
int w_transformPoint(lua_State *L)
{
Vector p;
p.x = (float) luaL_checknumber(L, 1);
p.y = (float) luaL_checknumber(L, 2);
p = instance()->transformPoint(p);
lua_pushnumber(L, p.x);
lua_pushnumber(L, p.y);
return 2;
}
int w_inverseTransformPoint(lua_State *L)
{
Vector p;
p.x = (float) luaL_checknumber(L, 1);
p.y = (float) luaL_checknumber(L, 2);
p = instance()->inverseTransformPoint(p);
lua_pushnumber(L, p.x);
lua_pushnumber(L, p.y);
return 2;
}
// List of functions to wrap.
static const luaL_Reg functions[] =
@@ -2060,6 +2082,8 @@ static const luaL_Reg functions[] =
{ "translate", w_translate },
{ "shear", w_shear },
{ "origin", w_origin },
{ "transformPoint", w_transformPoint },
{ "inverseTransformPoint", w_inverseTransformPoint },
{ 0, 0 }
};