Fixed love.graphics.newScreenshot to always read from the main framebuffer, even when a canvas is bound

This commit is contained in:
Alex Szpakowski
2013-05-22 19:18:11 -03:00
parent 0b71fa1483
commit ac094f9437
+16 -2
View File
@@ -1173,8 +1173,14 @@ void Graphics::polygon(DrawMode mode, const float *coords, size_t count)
love::image::ImageData *Graphics::newScreenshot(love::image::Image *image, bool copyAlpha)
{
int w = getRenderWidth();
int h = getRenderHeight();
// Temporarily unbind the currently active canvas (glReadPixels reads the
// active framebuffer, not the main one.)
Canvas *curcanvas = Canvas::current;
if (curcanvas)
Canvas::bindDefaultCanvas();
int w = getWidth();
int h = getHeight();
int row = 4*w;
@@ -1192,6 +1198,8 @@ love::image::ImageData *Graphics::newScreenshot(love::image::Image *image, bool
{
delete[] pixels;
delete[] screenshot;
if (curcanvas)
curcanvas->startGrab(curcanvas->getAttachedCanvases());
throw love::Exception("Out of memory.");
}
@@ -1221,11 +1229,17 @@ love::image::ImageData *Graphics::newScreenshot(love::image::Image *image, bool
catch (love::Exception &)
{
delete[] screenshot;
if (curcanvas)
curcanvas->startGrab(curcanvas->getAttachedCanvases());
throw;
}
delete[] screenshot;
// Re-bind the active canvas, if necessary.
if (curcanvas)
curcanvas->startGrab(curcanvas->getAttachedCanvases());
return img;
}