diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp index e9d3f92..98d8104 100644 --- a/imagescrollareagl.cpp +++ b/imagescrollareagl.cpp @@ -87,9 +87,6 @@ ImageWidget::ImageWidget(Database *database, QWidget *parent) : QOpenGLWidget(pa }); setMouseTracking(true); -#ifdef COLOR_MANAGMENT - setTextureFormat(GL_SRGB8_ALPHA8); -#endif } ImageWidget::~ImageWidget() @@ -335,9 +332,6 @@ void ImageWidget::paintGL() } else { -#ifdef COLOR_MANAGMENT - if(m_srgb)f->glEnable(GL_FRAMEBUFFER_SRGB); -#endif m_vao->bind(); m_image->bind(0); m_program->bind(); @@ -347,10 +341,10 @@ void ImageWidget::paintGL() m_program->setUniformValue("zoom", 1.0f/m_scale); m_program->setUniformValue("bw", m_bwImg); m_program->setUniformValue("invert", m_invert); - f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); #ifdef COLOR_MANAGMENT - if(m_srgb)f->glDisable(GL_FRAMEBUFFER_SRGB); + m_program->setUniformValue("srgb", m_srgb); #endif + f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } } diff --git a/loadrunable.cpp b/loadrunable.cpp index c5cde07..2fdeebd 100644 --- a/loadrunable.cpp +++ b/loadrunable.cpp @@ -406,7 +406,7 @@ void LoadRunable::run() { QImage img(m_file); #ifdef COLOR_MANAGMENT - if(img.colorSpace().isValid()) + if(img.colorSpace().isValid() && img.colorSpace() != QColorSpace::SRgb) img.convertToColorSpace(QColorSpace::SRgb); #endif diff --git a/main.cpp b/main.cpp index 7aadfca..1327bb9 100644 --- a/main.cpp +++ b/main.cpp @@ -15,9 +15,6 @@ int main(int argc, char *argv[]) format.setMinorVersion(3); format.setOption(QSurfaceFormat::DebugContext); format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile); -#ifdef COLOR_MANAGMENT - format.setColorSpace(QSurfaceFormat::sRGBColorSpace); -#endif QSurfaceFormat::setDefaultFormat(format); QApplication a(argc, argv); diff --git a/shaders/image.frag b/shaders/image.frag index d7f4f1b..72f0a80 100644 --- a/shaders/image.frag +++ b/shaders/image.frag @@ -4,9 +4,17 @@ uniform sampler2D qt_Texture0; uniform vec3 mtf_param; uniform bool bw; uniform bool invert; +uniform bool srgb; in vec2 qt_TexCoord0; out vec4 color; +vec3 Linear2sRGB(vec3 color) +{ + return mix(12.92 * color.rgb, + 1.055 * pow(color, vec3(1.0 / 2.4)) - 0.055, + greaterThan(color, vec3(0.0031308))); +} + vec4 MTF(vec4 x, vec3 m) { x = (x - m.x) / (m.z - m.x); @@ -22,6 +30,8 @@ void main(void) if(invert)color = vec4(1.0) - color; + if(srgb)color.rgb = Linear2sRGB(color.rgb); + if(any(lessThan(qt_TexCoord0, vec2(0.0))) || any(greaterThan(qt_TexCoord0, vec2(1.0)))) color = vec4(0.0, 0.0, 0.0, 1.0);