mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Fixed love.graphics.newScreenshot to always read from the main framebuffer, even when a canvas is bound
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user