From bc0cd3b2d59659ec1dc5be0fc4399935d0ec46db Mon Sep 17 00:00:00 2001 From: Bill Meltsner Date: Tue, 11 Oct 2011 23:29:10 -0500 Subject: [PATCH] Changing flipping broke Canvas:getImageData - fortunately, it also made it much simpler (fixes issue #311) --- src/modules/graphics/opengl/Canvas.cpp | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/modules/graphics/opengl/Canvas.cpp b/src/modules/graphics/opengl/Canvas.cpp index 88e731ac3..093050dd7 100644 --- a/src/modules/graphics/opengl/Canvas.cpp +++ b/src/modules/graphics/opengl/Canvas.cpp @@ -280,20 +280,14 @@ namespace opengl { static Matrix t; const vertex * v = quad->getVertices(); - + t.setTransformation(x, y, angle, sx, sy, ox, oy, kx, ky); drawv(t, v); } love::image::ImageData * Canvas::getImageData(love::image::Image * image) { - int row = 4 * width; - int size = row * height; - - // see Graphics::newScreenshot. OpenGL reads from lower-left, - // but we need the pixels from upper-left. - GLubyte* pixels = new GLubyte[size]; - GLubyte* screenshot = new GLubyte[size]; + GLubyte pixels[4*width*height]; strategy->bindFBO( fbo ); glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); @@ -302,16 +296,7 @@ namespace opengl else strategy->bindFBO( 0 ); - GLubyte* src = pixels - row; // second line of buffer - GLubyte* dst = screenshot + size; // end of buffer - - for (int i = 0; i < height; ++i) - memcpy(dst -= row, src += row, row); - - love::image::ImageData * img = image->newImageData(width, height, (void*)screenshot); - - delete[] screenshot; - delete[] pixels; + love::image::ImageData * img = image->newImageData(width, height, (void*)pixels); return img; }