]> git.sesse.net Git - nageru/commitdiff
Fix ImageInput sRGB behavior.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 19 May 2019 08:37:18 +0000 (10:37 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 19 May 2019 08:37:18 +0000 (10:37 +0200)
After we made the different ImageInput instances share OpenGL textures,
some of them would assume they could output sRGB. Fix by the same way
we've done video textures, ie., use sRGBSwitchingInput.

nageru/image_input.cpp
nageru/image_input.h

index 779f7ec0c77745367e974135d9a19b7639a77789..c8b10371b4d381eec9535246f1e216ba6b6f3bb6 100644 (file)
@@ -42,8 +42,8 @@ struct SwsContext;
 using namespace std;
 
 ImageInput::ImageInput(const string &filename)
-       : movit::FlatInput({movit::COLORSPACE_sRGB, movit::GAMMA_sRGB}, movit::FORMAT_RGBA_POSTMULTIPLIED_ALPHA,
-                          GL_UNSIGNED_BYTE, 1280, 720),  // Resolution will be overwritten.
+       : sRGBSwitchingFlatInput({movit::COLORSPACE_sRGB, movit::GAMMA_sRGB}, movit::FORMAT_RGBA_POSTMULTIPLIED_ALPHA,
+                                GL_UNSIGNED_BYTE, 1280, 720),  // Resolution will be overwritten.
          pathname(search_for_file_or_die(filename)),
          current_image(load_image(filename, pathname))
 {
@@ -71,7 +71,7 @@ void ImageInput::set_gl_state(GLuint glsl_program_num, const string& prefix, uns
                        set_texture_num(*current_image->tex);
                }
        }
-       movit::FlatInput::set_gl_state(glsl_program_num, prefix, sampler_num);
+       sRGBSwitchingFlatInput::set_gl_state(glsl_program_num, prefix, sampler_num);
 }
 
 shared_ptr<const ImageInput::Image> ImageInput::load_image(const string &filename, const string &pathname)
@@ -212,7 +212,7 @@ shared_ptr<const ImageInput::Image> ImageInput::load_image_raw(const string &pat
        check_error();
        glPixelStorei(GL_UNPACK_ROW_LENGTH, linesizes[0] / 4);
        check_error();
-       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, frame->width, frame->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data.get());
+       glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8_ALPHA8, frame->width, frame->height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, image_data.get());
        check_error();
        glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
        check_error();
index f7289f3164e647358722ad5c021d75fa7f881c3e..32fd52913a6cf2b930e6866772c0592ab004e89f 100644 (file)
 #include <thread>
 
 #include "ref_counted_texture.h"
+#include "tweaked_inputs.h"
 
 class QSurface;
 
 // An output that takes its input from a static image, loaded with ffmpeg.
 // comes from a single 2D array with chunky pixels. The image is refreshed
 // from disk about every second.
-class ImageInput : public movit::FlatInput {
+class ImageInput : public sRGBSwitchingFlatInput {
 public:
        // NOTE: You will need to call start_update_thread() yourself, once per program.
        ImageInput(const std::string &filename);