mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-10 00:51:58 -07:00
toplevelexport: fix transformed origin for shm buffers (#9343)
* toplevelexport: fix transformed origin for shm buffers * toplevelexport: fix style nits
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
#include "../render/Renderer.hpp"
|
#include "../render/Renderer.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <hyprutils/math/Vector2D.hpp>
|
||||||
|
|
||||||
CToplevelExportClient::CToplevelExportClient(SP<CHyprlandToplevelExportManagerV1> resource_) : resource(resource_) {
|
CToplevelExportClient::CToplevelExportClient(SP<CHyprlandToplevelExportManagerV1> resource_) : resource(resource_) {
|
||||||
if UNLIKELY (!good())
|
if UNLIKELY (!good())
|
||||||
@@ -289,7 +290,29 @@ bool CToplevelExportFrame::copyShm(timespec* now) {
|
|||||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
auto glFormat = PFORMAT->flipRB ? GL_BGRA_EXT : GL_RGBA;
|
auto glFormat = PFORMAT->flipRB ? GL_BGRA_EXT : GL_RGBA;
|
||||||
glReadPixels(0, 0, box.width, box.height, glFormat, PFORMAT->glType, pixelData);
|
|
||||||
|
auto origin = Vector2D(0, 0);
|
||||||
|
switch (PMONITOR->transform) {
|
||||||
|
case WL_OUTPUT_TRANSFORM_FLIPPED_180:
|
||||||
|
case WL_OUTPUT_TRANSFORM_90: {
|
||||||
|
origin.y = PMONITOR->vecPixelSize.y - box.height;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WL_OUTPUT_TRANSFORM_FLIPPED_270:
|
||||||
|
case WL_OUTPUT_TRANSFORM_180: {
|
||||||
|
origin.x = PMONITOR->vecPixelSize.x - box.width;
|
||||||
|
origin.y = PMONITOR->vecPixelSize.y - box.height;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WL_OUTPUT_TRANSFORM_FLIPPED:
|
||||||
|
case WL_OUTPUT_TRANSFORM_270: {
|
||||||
|
origin.x = PMONITOR->vecPixelSize.x - box.width;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
glReadPixels(origin.x, origin.y, box.width, box.height, glFormat, PFORMAT->glType, pixelData);
|
||||||
|
|
||||||
if (overlayCursor) {
|
if (overlayCursor) {
|
||||||
g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->self.lock());
|
g_pPointerManager->unlockSoftwareForMonitor(PMONITOR->self.lock());
|
||||||
|
Reference in New Issue
Block a user