diff options
author | Vaxry <[email protected]> | 2024-07-22 13:01:55 +0200 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-07-22 13:01:55 +0200 |
commit | 1797319a0785cf9ae4f406d40bc27b032c6f5fb2 (patch) | |
tree | 95c5f204e9abbc5e5828ebb81d9f64e64e7861ed /src/render | |
parent | 5979ceb56b165ee35809a0eeda5f4be1aedbb7b6 (diff) | |
download | Hyprland-1797319a0785cf9ae4f406d40bc27b032c6f5fb2.tar.gz Hyprland-1797319a0785cf9ae4f406d40bc27b032c6f5fb2.zip |
renderer: untransform textures matching display transform
fixes #6754
This will break if the client uses a transform that is not equal to the display, reverting to old behavior. Combining transforms is left as a todo for the future.
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/OpenGL.cpp | 10 | ||||
-rw-r--r-- | src/render/Texture.hpp | 13 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index b2b046ce..fef69f7c 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1277,9 +1277,13 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP<CTexture> tex, CBox* pB static auto PDIMINACTIVE = CConfigValue<Hyprlang::INT>("decoration:dim_inactive"); static auto PDT = CConfigValue<Hyprlang::INT>("debug:damage_tracking"); - // get transform - const auto TRANSFORM = wlTransformToHyprutils(invertTransform(!m_bEndFrame ? WL_OUTPUT_TRANSFORM_NORMAL : m_RenderData.pMonitor->transform)); - float matrix[9]; + // get the needed transform for this texture + const bool TRANSFORMS_MATCH = wlTransformToHyprutils(m_RenderData.pMonitor->transform) == tex->m_eTransform; // FIXME: combine them properly!!! + eTransform TRANSFORM = HYPRUTILS_TRANSFORM_NORMAL; + if (m_bEndFrame || TRANSFORMS_MATCH) + TRANSFORM = wlTransformToHyprutils(invertTransform(m_RenderData.pMonitor->transform)); + + float matrix[9]; projectBox(matrix, newBox, TRANSFORM, newBox.rot, m_RenderData.monitorProjection.data()); float glMatrix[9]; diff --git a/src/render/Texture.hpp b/src/render/Texture.hpp index 0da95300..a54be8c5 100644 --- a/src/render/Texture.hpp +++ b/src/render/Texture.hpp @@ -2,9 +2,11 @@ #include "../defines.hpp" #include <aquamarine/buffer/Buffer.hpp> +#include <hyprutils/math/Misc.hpp> class IHLBuffer; HYPRUTILS_FORWARD(Math, CRegion); +using namespace Hyprutils::Math; enum TEXTURETYPE { TEXTURE_INVALID, // Invalid @@ -33,11 +35,12 @@ class CTexture { void allocate(); void update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const CRegion& damage); - TEXTURETYPE m_iType = TEXTURE_RGBA; - GLenum m_iTarget = GL_TEXTURE_2D; - GLuint m_iTexID = 0; - Vector2D m_vSize; - void* m_pEglImage = nullptr; + TEXTURETYPE m_iType = TEXTURE_RGBA; + GLenum m_iTarget = GL_TEXTURE_2D; + GLuint m_iTexID = 0; + Vector2D m_vSize = {}; + void* m_pEglImage = nullptr; + eTransform m_eTransform = HYPRUTILS_TRANSFORM_NORMAL; private: void createFromShm(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size); |