From cd97e9ec05dc393c571d77e3e329252ea3089762 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Mon, 17 Jun 2013 13:43:40 -0300 Subject: [PATCH] Added Image:getData, returns the original ImageData (or CompressedData) used to create the image --- src/modules/graphics/opengl/Image.cpp | 7 ++++- src/modules/graphics/opengl/Image.h | 3 +- src/modules/graphics/opengl/wrap_Graphics.cpp | 2 +- src/modules/graphics/opengl/wrap_Image.cpp | 31 +++++++++++++++++++ src/modules/graphics/opengl/wrap_Image.h | 1 + 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/modules/graphics/opengl/Image.cpp b/src/modules/graphics/opengl/Image.cpp index fd19b1df8..ddbecb164 100644 --- a/src/modules/graphics/opengl/Image.cpp +++ b/src/modules/graphics/opengl/Image.cpp @@ -88,11 +88,16 @@ const vertex *Image::getVertices() const return vertices; } -love::image::ImageData *Image::getData() const +love::image::ImageData *Image::getImageData() const { return data; } +love::image::CompressedData *Image::getCompressedData() const +{ + return cdata; +} + void Image::draw(float x, float y, float angle, float sx, float sy, float ox, float oy, float kx, float ky) const { static Matrix t; diff --git a/src/modules/graphics/opengl/Image.h b/src/modules/graphics/opengl/Image.h index 35913362a..c56d35e0e 100644 --- a/src/modules/graphics/opengl/Image.h +++ b/src/modules/graphics/opengl/Image.h @@ -74,7 +74,8 @@ public: const vertex *getVertices() const; - love::image::ImageData *getData() const; + love::image::ImageData *getImageData() const; + love::image::CompressedData *getCompressedData() const; /** * @copydoc Drawable::draw() diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 85484ccf1..5f54a900f 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -354,7 +354,7 @@ int w_newImageFont(lua_State *L) { Image *i = luax_checktype(L, 1, "Image", GRAPHICS_IMAGE_T); filter = i->getFilter(); - love::image::ImageData *id = i->getData(); + love::image::ImageData *id = i->getImageData(); if (!id) return luaL_argerror(L, 1, "Image cannot be compressed."); luax_newtype(L, "ImageData", IMAGE_IMAGE_DATA_T, (void *)id, false); diff --git a/src/modules/graphics/opengl/wrap_Image.cpp b/src/modules/graphics/opengl/wrap_Image.cpp index 2f1788c17..7b62c6cdb 100644 --- a/src/modules/graphics/opengl/wrap_Image.cpp +++ b/src/modules/graphics/opengl/wrap_Image.cpp @@ -196,6 +196,36 @@ int w_Image_refresh(lua_State *L) return 0; } +int w_Image_getData(lua_State *L) +{ + Image *i = luax_checkimage(L, 1); + + if (i->isCompressed()) + { + love::image::CompressedData *t = i->getCompressedData(); + if (t) + { + t->retain(); + luax_newtype(L, "CompressedData", IMAGE_COMPRESSED_DATA_T, (void *) t); + } + else + lua_pushnil(L); + } + else + { + love::image::ImageData *t = i->getImageData(); + if (t) + { + t->retain(); + luax_newtype(L, "ImageData", IMAGE_IMAGE_DATA_T, (void *) t); + } + else + lua_pushnil(L); + } + + return 1; +} + static const luaL_Reg functions[] = { { "getWidth", w_Image_getWidth }, @@ -209,6 +239,7 @@ static const luaL_Reg functions[] = { "getMipmapFilter", w_Image_getMipmapFilter }, { "isCompressed", w_Image_isCompressed }, { "refresh", w_Image_refresh }, + { "getData", w_Image_getData }, { 0, 0 } }; diff --git a/src/modules/graphics/opengl/wrap_Image.h b/src/modules/graphics/opengl/wrap_Image.h index 44ba00fe6..2735a31bc 100644 --- a/src/modules/graphics/opengl/wrap_Image.h +++ b/src/modules/graphics/opengl/wrap_Image.h @@ -44,6 +44,7 @@ int w_Image_setWrap(lua_State *L); int w_Image_getWrap(lua_State *L); int w_Image_isCompressed(lua_State *L); int w_Image_refresh(lua_State *L); +int w_Image_getData(lua_State *L); extern "C" int luaopen_image(lua_State *L); } // opengl