From 95c6fc5343245001953d7f1aa6450b23c83ab14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sun, 16 Oct 2022 11:05:15 +0200 Subject: [PATCH] Enable sRGB to gamma correct scaling --- imagescrollareagl.cpp | 8 ++++++-- imagescrollareagl.h | 1 + main.cpp | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp index 63328df..d030ba5 100644 --- a/imagescrollareagl.cpp +++ b/imagescrollareagl.cpp @@ -24,8 +24,8 @@ const RawImageType rawImageTypes[] = { {QOpenGLTexture::Red, QOpenGLTexture::R8_UNorm, QOpenGLTexture::UInt8, true}, {QOpenGLTexture::Red, QOpenGLTexture::R16_UNorm, QOpenGLTexture::UInt16, true}, {QOpenGLTexture::Red, QOpenGLTexture::R32F, QOpenGLTexture::Float32, true}, - {QOpenGLTexture::RGB, QOpenGLTexture::RGB8_UNorm, QOpenGLTexture::UInt8, false}, - {QOpenGLTexture::RGBA,QOpenGLTexture::RGB8_UNorm, QOpenGLTexture::UInt8, false}, + {QOpenGLTexture::RGB, QOpenGLTexture::SRGB8, QOpenGLTexture::UInt8, false}, + {QOpenGLTexture::RGBA,QOpenGLTexture::SRGB8_Alpha8, QOpenGLTexture::UInt8, false}, {QOpenGLTexture::RGB, QOpenGLTexture::RGB16_UNorm, QOpenGLTexture::UInt16, false}, {QOpenGLTexture::RGBA, QOpenGLTexture::RGB16_UNorm, QOpenGLTexture::UInt16, false}, {QOpenGLTexture::RGB, QOpenGLTexture::RGB32F, QOpenGLTexture::Float32, false} @@ -79,6 +79,7 @@ ImageWidget::ImageWidget(Database *database, QWidget *parent) : QOpenGLWidget(pa }); setMouseTracking(true); + setTextureFormat(GL_SRGB8_ALPHA8); } ImageWidget::~ImageWidget() @@ -110,6 +111,7 @@ void ImageWidget::setImage(std::shared_ptr image, int index) m_image->setLevelOfDetailRange(m_superpixel ? 1 : 0, m_image->mipMaxLevel()); m_image->generateMipMaps(); m_bwImg = rawImageType.bw; + m_srgb = rawImageType.textureFormat == QOpenGLTexture::SRGB8 || rawImageType.textureFormat == QOpenGLTexture::SRGB8_Alpha8; update(); } @@ -288,6 +290,7 @@ void ImageWidget::paintGL() } else { + if(m_srgb)f->glEnable(GL_FRAMEBUFFER_SRGB); m_vao->bind(); m_image->bind(0); m_program->bind(); @@ -298,6 +301,7 @@ void ImageWidget::paintGL() m_program->setUniformValue("bw", m_bwImg); m_program->setUniformValue("invert", m_invert); f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + if(m_srgb)f->glDisable(GL_FRAMEBUFFER_SRGB); } } diff --git a/imagescrollareagl.h b/imagescrollareagl.h index eada281..b365ade 100644 --- a/imagescrollareagl.h +++ b/imagescrollareagl.h @@ -57,6 +57,7 @@ class ImageWidget : public QOpenGLWidget bool m_showThumbnails; bool m_selecting; bool m_sizesDirty; + bool m_srgb; int m_thumbnailCount; QVector m_thumnails; Database *m_database; diff --git a/main.cpp b/main.cpp index 31ea53d..18a0e3c 100644 --- a/main.cpp +++ b/main.cpp @@ -15,6 +15,7 @@ int main(int argc, char *argv[]) format.setMinorVersion(3); format.setOption(QSurfaceFormat::DebugContext); format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile); + format.setColorSpace(QSurfaceFormat::sRGBColorSpace); QSurfaceFormat::setDefaultFormat(format); QApplication a(argc, argv);