From f43954cc29059600023b2fbb2d0a25776ae7edd1 Mon Sep 17 00:00:00 2001 From: whitequark Date: Mon, 20 May 2019 19:09:28 +0000 Subject: [PATCH] Adjust GL1 and GL3 ReadFrame to take pixel ratio into account. Currently, on HiDPI screens the Export Image command would return a cropped screenshot. --- src/render/rendergl1.cpp | 7 +++++-- src/render/rendergl3.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/render/rendergl1.cpp b/src/render/rendergl1.cpp index de48644..a555228 100644 --- a/src/render/rendergl1.cpp +++ b/src/render/rendergl1.cpp @@ -814,9 +814,12 @@ void OpenGl1Renderer::FlushFrame() { } std::shared_ptr OpenGl1Renderer::ReadFrame() { + int width = camera.width * camera.pixelRatio; + int height = camera.height * camera.pixelRatio; std::shared_ptr pixmap = - Pixmap::Create(Pixmap::Format::RGB, (size_t)camera.width, (size_t)camera.height); - glReadPixels(0, 0, camera.width, camera.height, GL_RGB, GL_UNSIGNED_BYTE, &pixmap->data[0]); + Pixmap::Create(Pixmap::Format::RGB, (size_t)width, (size_t)height); + glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, &pixmap->data[0]); + ssassert(glGetError() == GL_NO_ERROR, "Unexpected glReadPixels error"); return pixmap; } diff --git a/src/render/rendergl3.cpp b/src/render/rendergl3.cpp index ce201ac..3ccf623 100644 --- a/src/render/rendergl3.cpp +++ b/src/render/rendergl3.cpp @@ -679,10 +679,11 @@ void OpenGl3Renderer::Clear() { } std::shared_ptr OpenGl3Renderer::ReadFrame() { + int width = camera.width * camera.pixelRatio; + int height = camera.height * camera.pixelRatio; std::shared_ptr pixmap = - Pixmap::Create(Pixmap::Format::RGBA, (size_t)camera.width, (size_t)camera.height); - glReadPixels(0, 0, (int)camera.width, (int)camera.height, - GL_RGBA, GL_UNSIGNED_BYTE, &pixmap->data[0]); + Pixmap::Create(Pixmap::Format::RGBA, (size_t)width, (size_t)height); + glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, &pixmap->data[0]); ssassert(glGetError() == GL_NO_ERROR, "Unexpected glReadPixels error"); return pixmap; }