diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index 1cdf061ab..68b94f52a 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -224,11 +224,10 @@ void Graphics::present() void Graphics::setIcon(Image *image) { - love::image::ImageData *data = image->getData(); - if (data) - currentWindow->setIcon(data); - else + if (image->isCompressed()) throw love::Exception("Cannot use compressed image data to set an icon."); + + currentWindow->setIcon(image->getData()); } void Graphics::setCaption(const char *caption) @@ -334,9 +333,11 @@ int Graphics::getScissor(lua_State *L) const void Graphics::defineStencil() { + // Disable color writes but don't save the mask values. glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glEnable(GL_STENCIL_TEST); + glClear(GL_STENCIL_BUFFER_BIT); + glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); } diff --git a/src/modules/graphics/opengl/Image.cpp b/src/modules/graphics/opengl/Image.cpp index 53bba53a7..7a7143447 100644 --- a/src/modules/graphics/opengl/Image.cpp +++ b/src/modules/graphics/opengl/Image.cpp @@ -93,40 +93,6 @@ love::image::ImageData *Image::getData() const return data; } -void Image::getRectangleVertices(int x, int y, int w, int h, vertex *vertices) const -{ - // Check upper. - x = (x+w > (int)width) ? (int)width-w : x; - y = (y+h > (int)height) ? (int)height-h : y; - - // Check lower. - x = (x < 0) ? 0 : x; - y = (y < 0) ? 0 : y; - - vertices[0].x = 0; - vertices[0].y = 0; - vertices[1].x = 0; - vertices[1].y = (float)h; - vertices[2].x = (float)w; - vertices[2].y = (float)h; - vertices[3].x = (float)w; - vertices[3].y = 0; - - float tx = (float)x/width; - float ty = (float)y/height; - float tw = (float)w/width; - float th = (float)h/height; - - vertices[0].s = tx; - vertices[0].t = ty; - vertices[1].s = tx; - vertices[1].t = ty+th; - vertices[2].s = tx+tw; - vertices[2].t = ty+th; - vertices[3].s = tx+tw; - vertices[3].t = ty; -} - 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 b10f530e0..6b3d5543f 100644 --- a/src/modules/graphics/opengl/Image.h +++ b/src/modules/graphics/opengl/Image.h @@ -76,20 +76,6 @@ public: love::image::ImageData *getData() const; - /** - * Generate vertices according to a subimage. - * - * Note: out-of-range values will be clamped. - * Note: the vertex colors will not be changed. - * - * @param x The top-left corner of the subimage along the x-axis. - * @param y The top-left corner of the subimage along the y-axis. - * @param w The width of the subimage. - * @param h The height of the subimage. - * @param vertices A vertex array of size four. - **/ - void getRectangleVertices(int x, int y, int w, int h, vertex *vertices) const; - /** * @copydoc Drawable::draw() **/ diff --git a/src/modules/image/CompressedData.h b/src/modules/image/CompressedData.h index 604e9dafd..9740f30e9 100644 --- a/src/modules/image/CompressedData.h +++ b/src/modules/image/CompressedData.h @@ -81,22 +81,22 @@ public: int getNumMipmaps() const; /** - * Gets the size in bytes of the sub-image at the specified mipmap level. + * Gets the size in bytes of a sub-image at the specified mipmap level. **/ int getSize(int miplevel) const; /** - * Gets the byte data of the sub-image at the specified mipmap level. + * Gets the byte data of a sub-image at the specified mipmap level. **/ void *getData(int miplevel) const; /** - * Gets the width of the sub-image at the specified mipmap level. + * Gets the width of a sub-image at the specified mipmap level. **/ int getWidth(int miplevel) const; /** - * Gets the height of the sub-image at the specified mipmap level. + * Gets the height of a sub-image at the specified mipmap level. **/ int getHeight(int miplevel) const; diff --git a/src/modules/image/magpie/CompressedData.cpp b/src/modules/image/magpie/CompressedData.cpp index eccfb0323..5334112eb 100644 --- a/src/modules/image/magpie/CompressedData.cpp +++ b/src/modules/image/magpie/CompressedData.cpp @@ -40,16 +40,20 @@ CompressedData::~CompressedData() void CompressedData::load(love::filesystem::FileData *data) { - std::vector parsedImages; + // SubImage vector will be populated by a parser. + std::vector parsedimages; TextureType textype = TYPE_UNKNOWN; if (ddsHandler::canParse(data)) - textype = ddsHandler::parse(data, parsedImages); + textype = ddsHandler::parse(data, parsedimages); if (textype == TYPE_UNKNOWN) - throw (love::Exception("Could not parse compressed data: Unknown format.")); + throw love::Exception("Could not parse compressed data: Unknown format."); - dataImages = parsedImages; + if (parsedimages.size() == 0) + throw love::Exception("Could not parse compressed data: No valid data?"); + + dataImages = parsedimages; type = textype; } diff --git a/src/modules/image/magpie/CompressedData.h b/src/modules/image/magpie/CompressedData.h index 2da786509..56caffb86 100644 --- a/src/modules/image/magpie/CompressedData.h +++ b/src/modules/image/magpie/CompressedData.h @@ -22,7 +22,7 @@ #define LOVE_IMAGE_MAGPIE_COMPRESSED_DATA_H // LOVE -#include "filesystem/File.h" +#include "filesystem/FileData.h" #include "image/CompressedData.h" namespace love diff --git a/src/modules/image/magpie/DevilHandler.cpp b/src/modules/image/magpie/DevilHandler.cpp index b666e1cfa..06425f1b3 100644 --- a/src/modules/image/magpie/DevilHandler.cpp +++ b/src/modules/image/magpie/DevilHandler.cpp @@ -23,7 +23,6 @@ // LOVE #include "common/Exception.h" #include "common/math.h" -#include "filesystem/File.h" #include "thread/threads.h" // DevIL diff --git a/src/modules/image/magpie/DevilHandler.h b/src/modules/image/magpie/DevilHandler.h index d9da062ce..5e73c87ac 100644 --- a/src/modules/image/magpie/DevilHandler.h +++ b/src/modules/image/magpie/DevilHandler.h @@ -22,7 +22,7 @@ #define LOVE_IMAGE_MAGPIE_DEVIL_HANDLER_H // LOVE -#include "filesystem/File.h" +#include "filesystem/FileData.h" #include "FormatHandler.h" namespace love diff --git a/src/modules/image/magpie/FormatHandler.h b/src/modules/image/magpie/FormatHandler.h index e5412bd0e..5b4080829 100644 --- a/src/modules/image/magpie/FormatHandler.h +++ b/src/modules/image/magpie/FormatHandler.h @@ -23,7 +23,7 @@ // LOVE #include "image/ImageData.h" -#include "filesystem/File.h" +#include "filesystem/FileData.h" namespace love { diff --git a/src/modules/image/magpie/ddsHandler.h b/src/modules/image/magpie/ddsHandler.h index 3e41670fe..4e4544c9b 100644 --- a/src/modules/image/magpie/ddsHandler.h +++ b/src/modules/image/magpie/ddsHandler.h @@ -22,7 +22,7 @@ #define LOVE_IMAGE_MAGPIE_DDS_HANDLER_H // LOVE -#include "filesystem/File.h" +#include "filesystem/FileData.h" #include "image/CompressedData.h" // dds parser @@ -55,8 +55,8 @@ public: /** * Parses Compressed image data into a list of sub-images. * @param[in] data The data to parse. - * @param[out] images The list of sub-images (including byte data for each), - * created by the parser. + * @param[out] images The list of sub-images (including byte data for each) + * parsed from the file data. * @return The type of CompressedData. **/ static CompressedData::TextureType parse(filesystem::FileData *data, std::vector &images);