diff --git a/ui/gl/gl_image.cpp b/ui/gl/gl_image.cpp index 1d5a7fe..633d108 100644 --- a/ui/gl/gl_image.cpp +++ b/ui/gl/gl_image.cpp @@ -91,11 +91,11 @@ void Image::bind(QOpenGLFunctions &f) { f.glTexImage2D( GL_TEXTURE_2D, 0, - GL_RGBA, + kFormatRGBA, _subimage.width(), _subimage.height(), 0, - GL_RGBA, + kFormatRGBA, GL_UNSIGNED_BYTE, _image.constBits()); } else { @@ -106,7 +106,7 @@ void Image::bind(QOpenGLFunctions &f) { 0, _subimage.width(), _subimage.height(), - GL_RGBA, + kFormatRGBA, GL_UNSIGNED_BYTE, _image.constBits()); } diff --git a/ui/gl/gl_image.h b/ui/gl/gl_image.h index a54ec9e..fe8fd3e 100644 --- a/ui/gl/gl_image.h +++ b/ui/gl/gl_image.h @@ -136,4 +136,12 @@ private: [[nodiscard]] GLint CurrentSingleComponentFormat(); +#ifdef Q_OS_WIN +inline constexpr auto kFormatRGBA = GL_BGRA_EXT; +inline constexpr auto kSwizzleRedBlue = false; +#else // Q_OS_WIN +inline constexpr auto kFormatRGBA = GL_RGBA; +inline constexpr auto kSwizzleRedBlue = true; +#endif // Q_OS_WIN + } // namespace Ui::GL diff --git a/ui/gl/gl_primitives.h b/ui/gl/gl_primitives.h index bfd13bc..1988ffe 100644 --- a/ui/gl/gl_primitives.h +++ b/ui/gl/gl_primitives.h @@ -25,7 +25,6 @@ void FillTriangles( const QColor &color, Fn additional = nullptr); - void FillRectangle( QOpenGLFunctions &f, not_null program, diff --git a/ui/gl/gl_shader.cpp b/ui/gl/gl_shader.cpp index bf51d05..3079a52 100644 --- a/ui/gl/gl_shader.cpp +++ b/ui/gl/gl_shader.cpp @@ -6,6 +6,7 @@ // #include "ui/gl/gl_shader.h" +#include "ui/gl/gl_image.h" #include "base/debug_log.h" #include @@ -72,8 +73,10 @@ uniform sampler2D s_texture; )", .body = R"( result = texture2D(s_texture, v_texcoord); +)" + (kSwizzleRedBlue + ? R"( result = vec4(result.b, result.g, result.r, result.a); -)", +)" : QString()), }; }