From 1e18f760d71e7bd3d3f1730cab09914021a591d1 Mon Sep 17 00:00:00 2001 From: Almamu Date: Tue, 1 Apr 2025 21:57:51 +0200 Subject: [PATCH] chore: fix glReadPixels for older opengl versions --- .../Application/CWallpaperApplication.cpp | 11 +++++++++-- .../Render/Drivers/CGLFWOpenGLDriver.cpp | 10 ++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/WallpaperEngine/Application/CWallpaperApplication.cpp b/src/WallpaperEngine/Application/CWallpaperApplication.cpp index 9f43f89..ade1f2c 100644 --- a/src/WallpaperEngine/Application/CWallpaperApplication.cpp +++ b/src/WallpaperEngine/Application/CWallpaperApplication.cpp @@ -246,8 +246,15 @@ void CWallpaperApplication::takeScreenshot (const std::filesystem::path& filenam // read the viewport data into the pixel buffer glPixelStorei (GL_PACK_ALIGNMENT, 1); - glReadnPixels (viewport->viewport.x, viewport->viewport.y, viewport->viewport.z, viewport->viewport.w, GL_RGB, - GL_UNSIGNED_BYTE, bufferSize, buffer); + // 4.5 supports glReadnPixels, anything older doesn't... + if (GLEW_VERSION_4_5) { + glReadnPixels (viewport->viewport.x, viewport->viewport.y, viewport->viewport.z, viewport->viewport.w, + GL_RGB, GL_UNSIGNED_BYTE, bufferSize, buffer); + } else { + // fallback to old version + glReadPixels (viewport->viewport.x, viewport->viewport.y, viewport->viewport.z, viewport->viewport.w, + GL_RGB, GL_UNSIGNED_BYTE, buffer); + } GLenum error = glGetError(); diff --git a/src/WallpaperEngine/Render/Drivers/CGLFWOpenGLDriver.cpp b/src/WallpaperEngine/Render/Drivers/CGLFWOpenGLDriver.cpp index 48fffb1..f5f2680 100644 --- a/src/WallpaperEngine/Render/Drivers/CGLFWOpenGLDriver.cpp +++ b/src/WallpaperEngine/Render/Drivers/CGLFWOpenGLDriver.cpp @@ -133,8 +133,14 @@ void CGLFWOpenGLDriver::dispatchEventQueue () { // read the full texture into the image if (this->m_output->haveImageBuffer ()) { - glReadnPixels (0, 0, this->m_output->getFullWidth (), this->m_output->getFullHeight (), GL_BGRA, - GL_UNSIGNED_BYTE, this->m_output->getImageBufferSize(), this->m_output->getImageBuffer ()); + // 4.5 supports glReadnPixels, anything older doesn't... + if (GLEW_VERSION_4_5) { + glReadnPixels (0, 0, this->m_output->getFullWidth (), this->m_output->getFullHeight (), GL_BGRA, + GL_UNSIGNED_BYTE, this->m_output->getImageBufferSize (), this->m_output->getImageBuffer ()); + } else { + // fallback to old version + glReadPixels (0, 0, this->m_output->getFullWidth (), this->m_output->getFullHeight (), GL_BGRA, GL_UNSIGNED_BYTE, this->m_output->getImageBuffer ()); + } GLenum error = glGetError();