diff --git a/src/modules/event/Event.cpp b/src/modules/event/Event.cpp index af5e1dd8a..7903a33af 100644 --- a/src/modules/event/Event.cpp +++ b/src/modules/event/Event.cpp @@ -28,7 +28,7 @@ namespace love namespace event { -Message::Message(std::string name, Variant *a, Variant *b, Variant *c, Variant *d) +Message::Message(const std::string &name, Variant *a, Variant *b, Variant *c, Variant *d) : name(name) , nargs(0) { diff --git a/src/modules/event/Event.h b/src/modules/event/Event.h index 916d86ecf..387bf00cf 100644 --- a/src/modules/event/Event.h +++ b/src/modules/event/Event.h @@ -45,7 +45,7 @@ private: int nargs; public: - Message(std::string name, Variant *a = NULL, Variant *b = NULL, Variant *c = NULL, Variant *d = NULL); + Message(const std::string &name, Variant *a = NULL, Variant *b = NULL, Variant *c = NULL, Variant *d = NULL); ~Message(); int toLua(lua_State *L); diff --git a/src/modules/filesystem/physfs/File.cpp b/src/modules/filesystem/physfs/File.cpp index 5ceb97680..019e12960 100644 --- a/src/modules/filesystem/physfs/File.cpp +++ b/src/modules/filesystem/physfs/File.cpp @@ -36,7 +36,7 @@ namespace physfs extern bool hack_setupWriteDirectory(); -File::File(std::string filename) +File::File(const std::string &filename) : filename(filename) , file(0) , mode(filesystem::File::CLOSED) diff --git a/src/modules/filesystem/physfs/File.h b/src/modules/filesystem/physfs/File.h index 29ea243c2..f4a0f6d1c 100644 --- a/src/modules/filesystem/physfs/File.h +++ b/src/modules/filesystem/physfs/File.h @@ -61,7 +61,7 @@ public: * @param source The source from which to load the file. (Archive or directory) * @param filename The relative filepath of the file to load from the source. **/ - File(std::string filename); + File(const std::string &filename); virtual ~File(); diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index b4af9d0b5..70c6e97e9 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -343,28 +343,17 @@ void Filesystem::append(const char *filename, const void *data, int64 size) cons int Filesystem::enumerate(lua_State *L) { - int n = lua_gettop(L); + const char *dir = luaL_checkstring(L, 1); - if (n != 1) - return luaL_error(L, "Function requires a single parameter."); - - int type = lua_type(L, 1); - - if (type != LUA_TSTRING) - return luaL_error(L, "Function requires parameter of type string."); - - const char *dir = lua_tostring(L, 1); char **rc = PHYSFS_enumerateFiles(dir); - char **i; int index = 1; lua_newtable(L); - for (i = rc; *i != 0; i++) + for (char **i = rc; *i != 0; i++) { - lua_pushinteger(L, index); lua_pushstring(L, *i); - lua_settable(L, -3); + lua_rawseti(L, -2, index); index++; } diff --git a/src/modules/graphics/opengl/Canvas.cpp b/src/modules/graphics/opengl/Canvas.cpp index 04361ff74..16ae2bcf6 100644 --- a/src/modules/graphics/opengl/Canvas.cpp +++ b/src/modules/graphics/opengl/Canvas.cpp @@ -507,7 +507,7 @@ void Canvas::startGrab(const std::vector &canvases) for (size_t i = 0; i < canvases.size(); i++) canvases[i]->retain(); - // release previously attached canvases + // release any old canvases for (size_t i = 0; i < attachedCanvases.size(); i++) attachedCanvases[i]->release(); @@ -687,7 +687,6 @@ void Canvas::unloadVolatile() settings.wrap = getWrap(); strategy->deleteFBO(fbo, depth_stencil, img); - // release attached canvases for (size_t i = 0; i < attachedCanvases.size(); i++) attachedCanvases[i]->release(); diff --git a/src/modules/graphics/opengl/Font.cpp b/src/modules/graphics/opengl/Font.cpp index 5fb04fab6..b8eb78f09 100644 --- a/src/modules/graphics/opengl/Font.cpp +++ b/src/modules/graphics/opengl/Font.cpp @@ -51,20 +51,20 @@ Font::Font(love::font::Rasterizer *r, const Image::Filter &filter) { // try to find the best texture size match for the font size // default to the largest texture size if no rough match is found - texture_size_index = NUM_TEXTURE_SIZES - 1; + textureSizeIndex = NUM_TEXTURE_SIZES - 1; for (int i = 0; i < NUM_TEXTURE_SIZES; i++) { // base our chosen texture width/height on a very rough guess of the total size taken up by the font's used glyphs // the estimate is likely larger than the actual total size taken up, which is good since texture changes are expensive if ((height * 0.8) * height * 95 <= TEXTURE_WIDTHS[i] * TEXTURE_HEIGHTS[i]) { - texture_size_index = i; + textureSizeIndex = i; break; } } - texture_width = TEXTURE_WIDTHS[texture_size_index]; - texture_height = TEXTURE_HEIGHTS[texture_size_index]; + textureWidth = TEXTURE_WIDTHS[textureSizeIndex]; + textureHeight = TEXTURE_HEIGHTS[textureSizeIndex]; love::font::GlyphData *gd = 0; @@ -102,8 +102,8 @@ bool Font::initializeTexture(GLint format) glTexImage2D(GL_TEXTURE_2D, 0, internalformat, - (GLsizei)texture_width, - (GLsizei)texture_height, + (GLsizei)textureWidth, + (GLsizei)textureHeight, 0, format, GL_UNSIGNED_BYTE, @@ -114,7 +114,7 @@ bool Font::initializeTexture(GLint format) void Font::createTexture() { - texture_x = texture_y = rowHeight = TEXTURE_PADDING; + textureX = textureY = rowHeight = TEXTURE_PADDING; GLuint t; glGenTextures(1, &t); @@ -132,17 +132,17 @@ void Font::createTexture() // try to initialize the texture, attempting smaller sizes if initialization fails bool initialized = false; - while (texture_size_index >= 0) + while (textureSizeIndex >= 0) { - texture_width = TEXTURE_WIDTHS[texture_size_index]; - texture_height = TEXTURE_HEIGHTS[texture_size_index]; + textureWidth = TEXTURE_WIDTHS[textureSizeIndex]; + textureHeight = TEXTURE_HEIGHTS[textureSizeIndex]; initialized = initializeTexture(format); - if (initialized || texture_size_index <= 0) + if (initialized || textureSizeIndex <= 0) break; - --texture_size_index; + --textureSizeIndex; } if (!initialized) @@ -156,12 +156,12 @@ void Font::createTexture() } // Fill the texture with transparent black - std::vector emptyData(texture_width * texture_height * (type == FONT_TRUETYPE ? 2 : 4), 0); + std::vector emptyData(textureWidth * textureHeight * (type == FONT_TRUETYPE ? 2 : 4), 0); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, - (GLsizei)texture_width, - (GLsizei)texture_height, + (GLsizei)textureWidth, + (GLsizei)textureHeight, format, GL_UNSIGNED_BYTE, &emptyData[0]); @@ -175,14 +175,14 @@ Font::Glyph *Font::addGlyph(unsigned int glyph) int w = gd->getWidth(); int h = gd->getHeight(); - if (texture_x + w + TEXTURE_PADDING > texture_width) + if (textureX + w + TEXTURE_PADDING > textureWidth) { // out of space - new row! - texture_x = TEXTURE_PADDING; - texture_y += rowHeight; + textureX = TEXTURE_PADDING; + textureY += rowHeight; rowHeight = TEXTURE_PADDING; } - if (texture_y + h + TEXTURE_PADDING > texture_height) + if (textureY + h + TEXTURE_PADDING > textureHeight) { // totally out of space - new texture! createTexture(); @@ -203,8 +203,8 @@ Font::Glyph *Font::addGlyph(unsigned int glyph) bindTexture(t); glTexSubImage2D(GL_TEXTURE_2D, 0, - texture_x, - texture_y, + textureX, + textureY, w, h, (type == FONT_TRUETYPE ? GL_LUMINANCE_ALPHA : GL_RGBA), GL_UNSIGNED_BYTE, @@ -213,12 +213,12 @@ Font::Glyph *Font::addGlyph(unsigned int glyph) g->texture = t; Quad::Viewport v; - v.x = (float) texture_x; - v.y = (float) texture_y; + v.x = (float) textureX; + v.y = (float) textureY; v.w = (float) w; v.h = (float) h; - Quad q = Quad(v, (const float) texture_width, (const float) texture_height); + Quad q = Quad(v, (const float) textureWidth, (const float) textureHeight); const vertex *verts = q.getVertices(); // copy vertex data to the glyph and set proper bearing @@ -231,7 +231,7 @@ Font::Glyph *Font::addGlyph(unsigned int glyph) } if (w > 0) - texture_x += (w + TEXTURE_PADDING); + textureX += (w + TEXTURE_PADDING); if (h > 0) rowHeight = std::max(rowHeight, h + TEXTURE_PADDING); diff --git a/src/modules/graphics/opengl/Font.h b/src/modules/graphics/opengl/Font.h index 9a157e551..f070e4b8e 100644 --- a/src/modules/graphics/opengl/Font.h +++ b/src/modules/graphics/opengl/Font.h @@ -183,12 +183,16 @@ private: float lineHeight; float mSpacing; // modifies the spacing by multiplying it with this value - int texture_size_index; - int texture_width; - int texture_height; + int textureSizeIndex; + int textureWidth; + int textureHeight; + + // vector of packed textures + std::vector textures; + + // maps glyphs to glyph texture information + std::map glyphs; - std::vector textures; // vector of packed textures - std::map glyphs; // maps glyphs to quad information FontType type; Image::Filter filter; @@ -198,7 +202,7 @@ private: static const int TEXTURE_PADDING = 1; - int texture_x, texture_y; + int textureX, textureY; int rowHeight; bool initializeTexture(GLint format); diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index 8bcdf0404..d5e50e31c 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -272,33 +272,29 @@ bool Graphics::isCreated() const int Graphics::getModes(lua_State *L) const { int n; - love::window::Window::WindowSize **modes = currentWindow->getFullscreenSizes(n); + love::window::Window::WindowSize *modes = currentWindow->getFullscreenSizes(n); if (modes == 0) return 0; - lua_newtable(L); + lua_createtable(L, n, 0); for (int i = 0; i < n ; i++) { lua_pushinteger(L, i+1); - lua_newtable(L); + lua_createtable(L, 0, 2); // Inner table attribs. - lua_pushstring(L, "width"); - lua_pushinteger(L, modes[i]->width); - lua_settable(L, -3); + lua_pushinteger(L, modes[i].width); + lua_setfield(L, -2, "width"); - lua_pushstring(L, "height"); - lua_pushinteger(L, modes[i]->height); - lua_settable(L, -3); + lua_pushinteger(L, modes[i].height); + lua_setfield(L, -2, "height"); // Inner table attribs end. lua_settable(L, -3); - - delete modes[i]; } delete[] modes; diff --git a/src/modules/graphics/opengl/Shader.cpp b/src/modules/graphics/opengl/Shader.cpp index 4a9d37e6b..4453433bc 100644 --- a/src/modules/graphics/opengl/Shader.cpp +++ b/src/modules/graphics/opengl/Shader.cpp @@ -71,9 +71,12 @@ Shader::Shader(const ShaderSources &sources) if (shaderSources.empty()) throw love::Exception("Cannot create shader: no source code!"); - GLint maxtexunits; - glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxtexunits); - maxTextureUnits = std::max(maxtexunits - 1, 0); + if (maxTextureUnits <= 0) + { + GLint maxtexunits; + glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxtexunits); + maxTextureUnits = std::max(maxtexunits - 1, 0); + } // initialize global texture id counters if needed if (textureCounters.size() < (size_t) maxTextureUnits) @@ -174,7 +177,7 @@ void Shader::createProgram(const std::vector &shaderids) if (status == GL_FALSE) { - const std::string warnings = getWarnings(); + std::string warnings = getWarnings(); glDeleteProgram(program); throw love::Exception("Cannot link shader program object:\n%s", warnings.c_str()); diff --git a/src/modules/graphics/opengl/wrap_Canvas.cpp b/src/modules/graphics/opengl/wrap_Canvas.cpp index b32d38173..bf6a9b3da 100644 --- a/src/modules/graphics/opengl/wrap_Canvas.cpp +++ b/src/modules/graphics/opengl/wrap_Canvas.cpp @@ -179,14 +179,14 @@ int w_Canvas_clear(lua_State *L) } else if (lua_istable(L, 2)) { - lua_rawgeti(L, 2, 1); - c.r = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 2, 2); - c.g = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 2, 3); - c.b = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 2, 4); + for (int i = 1; i <= 4; i++) + lua_rawgeti(L, 2, i); + + c.r = (unsigned char)luaL_checkint(L, -4); + c.g = (unsigned char)luaL_checkint(L, -3); + c.b = (unsigned char)luaL_checkint(L, -2); c.g = (unsigned char)luaL_optint(L, -1, 255); + lua_pop(L, 4); } else diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 2a7700592..d384c0d69 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -601,14 +601,14 @@ int w_setColor(lua_State *L) Color c; if (lua_istable(L, 1)) { - lua_rawgeti(L, 1, 1); - c.r = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 2); - c.g = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 3); - c.b = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 4); + for (int i = 1; i <= 4; i++) + lua_rawgeti(L, 1, i); + + c.r = (unsigned char)luaL_checkint(L, -4); + c.g = (unsigned char)luaL_checkint(L, -3); + c.b = (unsigned char)luaL_checkint(L, -2); c.a = (unsigned char)luaL_optint(L, -1, 255); + lua_pop(L, 4); } else @@ -637,14 +637,14 @@ int w_setBackgroundColor(lua_State *L) Color c; if (lua_istable(L, 1)) { - lua_rawgeti(L, 1, 1); - c.r = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 2); - c.g = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 3); - c.b = (unsigned char)luaL_checkint(L, -1); - lua_rawgeti(L, 1, 4); + for (int i = 1; i <= 4; i++) + lua_rawgeti(L, 1, i); + + c.r = (unsigned char)luaL_checkint(L, -4); + c.g = (unsigned char)luaL_checkint(L, -3); + c.b = (unsigned char)luaL_checkint(L, -2); c.a = (unsigned char)luaL_optint(L, -1, 255); + lua_pop(L, 4); } else @@ -985,6 +985,7 @@ int w_setCanvases(lua_State *L) if (is_table) { + // grab the first canvas in the array and attach the rest lua_rawgeti(L, 1, 1); canvas = luax_checkcanvas(L, -1); lua_pop(L, 1); diff --git a/src/modules/graphics/opengl/wrap_SpriteBatch.cpp b/src/modules/graphics/opengl/wrap_SpriteBatch.cpp index e31c865b9..e6b081c6f 100644 --- a/src/modules/graphics/opengl/wrap_SpriteBatch.cpp +++ b/src/modules/graphics/opengl/wrap_SpriteBatch.cpp @@ -158,18 +158,15 @@ int w_SpriteBatch_setColor(lua_State *L) } else if (lua_istable(L, 2)) { - lua_rawgeti(L, 2, 1); - c.r = (unsigned char) luaL_checkint(L, -1); - lua_pop(L, 1); - lua_rawgeti(L, 2, 2); - c.g = (unsigned char) luaL_checkint(L, -1); - lua_pop(L, 1); - lua_rawgeti(L, 2, 3); - c.b = (unsigned char) luaL_checkint(L, -1); - lua_pop(L, 1); - lua_rawgeti(L, 2, 4); + for (int i = 1; i <= 4; i++) + lua_rawgeti(L, 2, i); + + c.r = (unsigned char) luaL_checkint(L, -4); + c.g = (unsigned char) luaL_checkint(L, -3); + c.b = (unsigned char) luaL_checkint(L, -2); c.a = (unsigned char) luaL_optint(L, -1, 255); - lua_pop(L, 1); + + lua_pop(L, 4); } else { diff --git a/src/modules/image/devil/ImageData.cpp b/src/modules/image/devil/ImageData.cpp index ccf9ce04f..76b11a5ad 100644 --- a/src/modules/image/devil/ImageData.cpp +++ b/src/modules/image/devil/ImageData.cpp @@ -131,13 +131,9 @@ void ImageData::load(Data *data) create(width, height, ilGetData()); } - catch (love::Exception &) - { - ilDeleteImage(image); - throw; - } catch (std::exception &e) { + // catches love and std exceptions ilDeleteImage(image); throw love::Exception("%s", e.what()); } @@ -225,14 +221,9 @@ void ImageData::encode(love::filesystem::File *f, ImageData::Format format) f->write(encoded_data, size); f->close(); } - catch (love::Exception &) - { - ilDeleteImage(tempimage); - delete[] encoded_data; - throw; - } catch (std::exception &e) { + // catches love and std exceptions ilDeleteImage(tempimage); delete[] encoded_data; throw love::Exception("%s", e.what()); diff --git a/src/modules/image/wrap_ImageData.cpp b/src/modules/image/wrap_ImageData.cpp index 72f0b0b29..e08500339 100644 --- a/src/modules/image/wrap_ImageData.cpp +++ b/src/modules/image/wrap_ImageData.cpp @@ -167,13 +167,14 @@ int w_ImageData_encode(lua_State *L) { ext = file->getExtension(); fmt = ext.c_str(); - ImageData::getConstant(fmt, format); + if (!ImageData::getConstant(fmt, format)) + return luaL_error(L, "Invalid image format '%s'.", fmt); } else { fmt = luaL_checkstring(L, 3); if (!ImageData::getConstant(fmt, format)) - luaL_error(L, "Invalid image format."); + return luaL_error(L, "Invalid image format '%s'.", fmt); } try @@ -189,7 +190,6 @@ int w_ImageData_encode(lua_State *L) static const luaL_Reg functions[] = { - // Data { "getPointer", w_Data_getPointer }, { "getSize", w_Data_getSize }, diff --git a/src/modules/timer/sdl/Timer.cpp b/src/modules/timer/sdl/Timer.cpp index 221a2e16c..d308c87af 100644 --- a/src/modules/timer/sdl/Timer.cpp +++ b/src/modules/timer/sdl/Timer.cpp @@ -38,8 +38,8 @@ namespace sdl { Timer::Timer() - : currTime(getMicroTime()) - , prevFpsUpdate(currTime) + : currTime(0) + , prevFpsUpdate(0) , fps(0) , averageDelta(0) , fpsUpdateFrequency(1) @@ -49,6 +49,8 @@ Timer::Timer() // Init the SDL timer system. if (SDL_InitSubSystem(SDL_INIT_TIMER) < 0) throw Exception(SDL_GetError()); + + prevFpsUpdate = currTime = getMicroTime(); } Timer::~Timer() diff --git a/src/modules/window/Window.h b/src/modules/window/Window.h index d4d6aacc2..9c1d551ee 100644 --- a/src/modules/window/Window.h +++ b/src/modules/window/Window.h @@ -59,14 +59,14 @@ public: virtual void getWindow(int &width, int &height, WindowFlags &flags) const = 0; virtual bool checkWindowSize(int width, int height, bool fullscreen) const = 0; - virtual WindowSize **getFullscreenSizes(int &n) const = 0; + virtual WindowSize *getFullscreenSizes(int &n) const = 0; virtual int getWidth() const = 0; virtual int getHeight() const = 0; virtual bool isCreated() const = 0; - virtual void setWindowTitle(std::string &title) = 0; + virtual void setWindowTitle(const std::string &title) = 0; virtual std::string getWindowTitle() const = 0; virtual bool setIcon(love::image::ImageData *imgd) = 0; diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index db97721c3..4910e88b1 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -211,7 +211,7 @@ bool Window::checkWindowSize(int width, int height, bool fullscreen) const typedef Window::WindowSize WindowSize; -WindowSize **Window::getFullscreenSizes(int &n) const +WindowSize *Window::getFullscreenSizes(int &n) const { SDL_Rect **modes = SDL_ListModes(0, SDL_OPENGL | SDL_FULLSCREEN); @@ -225,13 +225,12 @@ WindowSize **Window::getFullscreenSizes(int &n) const for (int i = 0; modes[i]; i++) n++; - WindowSize **sizes = new WindowSize*[n]; + WindowSize *sizes = new WindowSize[n]; for (int i = 0; i < n; i++) { - sizes[i] = new WindowSize; - sizes[i]->width = modes[i]->w; - sizes[i]->height = modes[i]->h; + WindowSize w = {modes[i]->w, modes[i]->h}; + sizes[i] = w; } return sizes; } @@ -251,7 +250,7 @@ bool Window::isCreated() const return created; } -void Window::setWindowTitle(std::string &title) +void Window::setWindowTitle(const std::string &title) { windowTitle = title; SDL_WM_SetCaption(windowTitle.c_str(), 0); diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index 656a57111..6269db2ac 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -41,14 +41,14 @@ public: void getWindow(int &width, int &height, WindowFlags &flags) const; bool checkWindowSize(int width, int height, bool fullscreen) const; - WindowSize **getFullscreenSizes(int &n) const; + WindowSize *getFullscreenSizes(int &n) const; int getWidth() const; int getHeight() const; bool isCreated() const; - void setWindowTitle(std::string &title); + void setWindowTitle(const std::string &title); std::string getWindowTitle() const; bool setIcon(love::image::ImageData *imgd);