GetScreenshotBuffer bug fix

This commit is contained in:
Magnus Norddahl 2016-08-12 07:42:49 +02:00 committed by Christoph Oelckers
parent d5b122b092
commit 4ecb77385d

View file

@ -478,7 +478,7 @@ void OpenGLFrameBuffer::GetScreenshotBuffer(const BYTE *&buffer, int &pitch, ESS
// Grab what is in the back buffer. // Grab what is in the back buffer.
// We cannot rely on SCREENWIDTH/HEIGHT here because the output may have been scaled. // We cannot rely on SCREENWIDTH/HEIGHT here because the output may have been scaled.
TArray<uint8_t> pixels; TArray<uint8_t> pixels;
pixels.Resize(viewport.width * viewport.height); pixels.Resize(viewport.width * viewport.height * 3);
glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(viewport.left, viewport.top, viewport.width, viewport.height, GL_RGB, GL_UNSIGNED_BYTE, &pixels[0]); glReadPixels(viewport.left, viewport.top, viewport.width, viewport.height, GL_RGB, GL_UNSIGNED_BYTE, &pixels[0]);
glPixelStorei(GL_PACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ALIGNMENT, 4);
@ -490,8 +490,8 @@ void OpenGLFrameBuffer::GetScreenshotBuffer(const BYTE *&buffer, int &pitch, ESS
ReleaseScreenshotBuffer(); ReleaseScreenshotBuffer();
ScreenshotBuffer = new BYTE[w * h * 3]; ScreenshotBuffer = new BYTE[w * h * 3];
float rcpWidth = 1.0f / viewport.width; float rcpWidth = 1.0f / w;
float rcpHeight = 1.0f / viewport.height; float rcpHeight = 1.0f / h;
for (int y = 0; y < h; y++) for (int y = 0; y < h; y++)
{ {
for (int x = 0; x < w; x++) for (int x = 0; x < w; x++)
@ -500,7 +500,7 @@ void OpenGLFrameBuffer::GetScreenshotBuffer(const BYTE *&buffer, int &pitch, ESS
float v = (y + 0.5f) * rcpHeight; float v = (y + 0.5f) * rcpHeight;
int sx = u * viewport.width; int sx = u * viewport.width;
int sy = v * viewport.height; int sy = v * viewport.height;
int sindex = (sx + sy * w) * 3; int sindex = (sx + sy * viewport.width) * 3;
int dindex = (x + y * w) * 3; int dindex = (x + y * w) * 3;
ScreenshotBuffer[dindex] = pixels[sindex]; ScreenshotBuffer[dindex] = pixels[sindex];
ScreenshotBuffer[dindex + 1] = pixels[sindex + 1]; ScreenshotBuffer[dindex + 1] = pixels[sindex + 1];