Commit graph

303 commits

Author SHA1 Message Date
Xaver Hugl
4cb4be2e64 libkwineffects/kwingltexture: clarify ownership and remove immutability 2023-05-25 19:21:26 +02:00
Xaver Hugl
20b4f26045 libkwineffects: simplify gltexture
Instead of using custom private classes for taking care of backend specific
stuff, store that directly in the GLTexture subclasses
2023-05-25 19:16:02 +02:00
Xaver Hugl
16fb2848ed libkwineffects: handle GLTexture upload failures
This is required for properly dealing with GPU resets
2023-05-25 19:13:52 +02:00
Xaver Hugl
572bc75de4 libkwineffects: handle GLTexture allocation failures
This is required for properly dealing with GPU resets
2023-05-25 18:46:45 +02:00
Xaver Hugl
bfc8bcb24a libkwineffects: use std::unique_ptr in GLTexture
The implicit internal sharing stuff wasn't used in KWin, and the way the
d pointer was initialized was horrible
2023-05-25 16:51:57 +02:00
Xaver Hugl
3eb5f18861 libkwineffects: make GLVertexBuffer::map safer
This ensures that in the event of a GPU reset, failure to map the vbo is
always handled without crashing
2023-05-25 16:51:57 +02:00
Xaver Hugl
f1536973d4 introduce ColorDescription and fix screen casting with color management 2023-05-23 22:49:12 +00:00
Aleix Pol
d87f270539 EffectTogglableState: Improve the documentation
Explains the use and life-cycle of the gesture objects
2023-05-22 17:44:04 +00:00
Aleix Pol
33c3a60aa7 Rename TogglableState -> EffectTogglableState 2023-05-22 17:44:04 +00:00
Aleix Pol
4eeadb6a9f fix ci 2023-05-22 17:44:04 +00:00
Aleix Pol
1b7a48de40 effects: Move the TogglableState class into a reusable space 2023-05-22 17:44:04 +00:00
Vlad Zahorodnii
d3c82fa103 plugins/magiclamp: Make it look good with hidden panels
If the panel is hidden, the animation can be clipped some distance away
from the screen edge. To fix that, move the icon offscreen.
2023-05-18 06:53:57 +00:00
Aleix Pol
d6b07b313f libkwineffects: Stop including xcb/xcb.h everywhere
Provide a kwinxcb.h header file instead that offers the xcb-specific bits
from that API. It helps keep kwin effects disconnected from XCB.
2023-05-15 18:59:46 +00:00
Aleix Pol
43291d971a effects: Do not spread the XCB dependency to every effect 2023-05-15 18:59:46 +00:00
Xaver Hugl
afc5567651 Implement initial support for color management and HDR
This is done by converting from the sRGB + gamma 2.2 input from clients
to linear with the color space of the output (BT.709 or BT2020 atm) in
a shadow buffer, and then convert from the shadow buffer to the transfer
function the output needs (sRGB or PQ).
2023-05-15 17:01:03 +00:00
Kai Uwe Broulik
48fe3f633e kwineffects: Initialize m_reason
It is not initialized in the default constructor.
2023-05-02 19:53:25 +02:00
Andreas Cord-Landwehr
258e9d8426 Extend GLX switch to check if QtGui was being built with GLX plugin
Even though epoxy with GLX may be present, Qt's native interface only
exposes GLX API when it was being built with GLX support.
2023-04-27 18:29:51 +00:00
Vlad Zahorodnii
64dca07d48 Remove Messages.sh in libkwineffects
It's unused.
2023-04-19 07:10:14 +00:00
Xaver Hugl
b14f7959eb backends/drm: add another multi gpu fallback
With the dmabuf multi-gpu path, a buffer is imported to the secondary GPU
and presented directly, but importing a buffer that's usable for scanout
is not possible that way on most hardware. To prevent CPU copy from being
needed in those cases, this commit introduces a fallback where the buffer
is imported for rendering only, and then copied to a local buffer that's
presented on the screen.

CCBUG: 452219
CCBUG: 465809
2023-04-12 15:28:35 +02:00
Xaver Hugl
57c7eccb32 libkwineffects: extract most useful kwinglplatform bits to a separate class 2023-04-12 15:16:33 +02:00
Xaver Hugl
48fb07b367 platformsupport/scenes: move egldisplay code into a helper class 2023-04-12 14:57:49 +02:00
David Edmundson
f03af5eff5 libkwineffects: Set format on the main OffscreenQuickView
When showing the window RHI will realise the window has no underlying
platform window and create a temporary offscreen surface, different from
the offscreen surface we'll eventually be rendering into. This will use
the format of the main window.

If this offscreen surface format does not match the format of the
context we can fail in makeCurrent calls.
2023-04-05 14:36:33 +00:00
Vlad Zahorodnii
8c87cd913e libkwineffects: Add interface include dirs
libkwineffects has been moved in a subdirectory to avoid including the
"toplevel" include dir in interface include dirs.
2023-04-03 07:07:43 +00:00
Xaver Hugl
86a9796a5a kwinglutils: bind texture in GLTexture::render
... instead of doing it everywhere that the method is used
2023-04-02 12:32:10 +02:00
Vlad Zahorodnii
9e4ed75e8e Remove kwinoffscreenquickview.moc include
It's not needed anymore.
2023-03-27 12:05:18 +00:00
Vlad Zahorodnii
f20cf30693 Fix populating CMAKE_AUTOMOC_MACRO_NAMES with kwineffects macros
Apparently CMAKE_AUTOMOC_MACRO_NAMES modifications are not visible in
sibling directories. To work around that, populate
CMAKE_AUTOMOC_MACRO_NAMES with libkwineffects plugin macros in the
top level CMakeLists.txt file.
2023-03-27 12:05:18 +00:00
Vlad Zahorodnii
cbd50a1e08 libkwineffects: Install headers in libkwineffects/
This improves the scoping of libkwineffects header files and it helps to
make `#include "libkwineffects/foobar.h"` code work in user code.
2023-03-25 21:05:12 +00:00
Vlad Zahorodnii
1211d8e3d6 Prefix more kwineffects includes with libkwineffects/ 2023-03-25 21:05:12 +00:00
Vlad Zahorodnii
4a1e7df599 tabbox: Drop desktop switching
Tabbox supports two operation modes: switching between windows and
desktops. Switching between windows is more commonly used. Desktop
switching is not exposed in user settings and it requires some advanced
knowledge of kwin's internals to enable it.

On the other hand, over the past years, we've double downed on effects
like desktop grid and overview to provide graphical means to switch
between virtual desktops.

This change drops desktop switching because it's effectively unused to
simplify the tabbox code, which can be very handy for the future
refactorings of window switching.
2023-03-24 22:01:12 +00:00
Vlad Zahorodnii
e88a4e34a3 Remove some include_directories()
It seems we've settled on dir/dir/header.h includes, so let's use them
consistently.
2023-03-23 14:37:48 +02:00
David Edmundson
6f30a33033 Add a runtime guard that offscreen windows do not generate platform windows
It's come up before, and it's very very difficult to debug without a
backtrace even when you know what's going wrong.
2023-03-21 16:09:56 +00:00
Xaver Hugl
a60d8941b6 port more stuff to standard smart pointers 2023-03-20 14:16:37 +01:00
Vlad Zahorodnii
af4397581a Fix warning about comparing different enums
QEventPoint::state() returns a QEventPoint::State value, not
a Qt::TouchPointState value.
2023-03-14 14:32:27 +00:00
Vlad Zahorodnii
301d749e74 Remove unused RenderTarget::m_texture field 2023-03-14 10:42:20 +02:00
Vlad Zahorodnii
995d509e45 Allow destroying Deleted immediately
Currently Deleted are destroyed with a delay to avoid dangling pointers
within the middle of painting.

On the other hand, it's reasonable to require not to delete windows when
kwin starts painting the screen.

Over the years, we refactored how deleted windows. They are always
unreferenced after finishing the current frame. So it should be fine to
destroy Deleted immediately now.
2023-03-13 14:41:41 +02:00
Vlad Zahorodnii
0fd4d821ca libkwineffects: Forward declare RenderTarget and RenderViewport in kwineffects.h
kwineffects.h is included in many files and not everyone needs the
RenderTarget and RenderViewport, so forward declare them to reduce the
amount of parsing work for the compiler.
2023-03-10 07:19:33 +00:00
Xaver Hugl
ba85512f21 effects: remove rendertarget scale from WindowPaintData
If an effect needs to override the rendertarget scale, it should use RenderViewport
to do that
2023-03-09 13:22:53 +00:00
Xaver Hugl
125c141b7d effects: remove ScreenPaintData
The only purpose ScreenPaintData had was to pass around a copy of the viewport
projection matrix and the effectscreen, which can be handled in a simpler
way separately.
2023-03-09 13:22:53 +00:00
Xaver Hugl
e4938297e6 scene: fix texture inversion with the drm backend
Specify the render target to buffer transformation and take that into
account in effects and when calculating the projection matrix.
2023-03-09 13:22:53 +00:00
Xaver Hugl
d737ed6687 effects: introduce RenderTarget and RenderViewport
Instead of calling effects->renderTargetRect() and effects->renderTargetScale(),
pass the actually used render target and viewport in all the necessary methods.
This ensures that if an effect renders a screen with a modified scale or
projection matrix, the modified values get used instead of the "global" ones
2023-03-09 13:22:53 +00:00
Vlad Zahorodnii
e38807b282 effects: Use scripting QML engine
Qt would need to allocate fewer "tainted" data objects, and using the
same engine both in effects and in kwin is vital for features such as
QML based effects.
2023-03-09 08:10:42 +00:00
Vlad Zahorodnii
f4a35ed619 libkwineffects: Remove window tabbing leftovers 2023-03-07 14:46:45 +00:00
Vlad Zahorodnii
3aa16bd1ca libkwineffects: Drop QtQuick dummy window hack
The dummy window hack was needed to ensure hidpi rendering on Wayland.
We introduced QQuickRenderTarget::setDevicePixelRatio() in Qt 6.3, so
the hack can be removed now.
2023-03-01 16:59:00 +00:00
Hannah Kiekens
0543949df7 Enable GLSL for Mali (Lima) / PinePhone devices
Commit 88cf8355 changed the behaviour of Mali (Lima) / PinePhone devices by disabling GLSL
88cf8355 got backported in 5.27.1 and broke PinePhone devices (White rectangle on topright quarter of a black screen)

This patch restores the behaviour of 5.27.0
2023-02-28 21:04:37 +00:00
Vlad Zahorodnii
1ea2338917 effects: Prevent OffscreenQuickView crashing on teardown
QQuickRenderControl::sceneChanged can emitted when shutting down, which
will cause a crash.
2023-02-28 20:21:39 +02:00
Vlad Zahorodnii
10df3b0eb0 Remove Qt 5 specific code 2023-02-28 18:30:26 +02:00
Vlad Zahorodnii
d9f5d432be Port to KF6 2023-02-28 18:30:26 +02:00
Vlad Zahorodnii
9ea839eb03 libkwineffects: Add missing QQuickRenderControl::{beginFrame,endFrame} calls
As QQuickRenderControl docs state, beginFrame() and endFrame() must
enclose sync() and render() calls.
2023-02-25 19:25:03 +00:00
Vlad Zahorodnii
b53621136d Drop Window::desktopPresenceChanged()
This signal exists as a convenience helper, but it's not always emitted
as it's advertised to work. Instead of fixing it, let's drop the signal
to simplify virtual desktop code. Its effects can be accomplished by
monitoring Window::desktopChanged() and VirtualDesktopManager::currentChanged()
signals in effects and scripts where needed.
2023-02-23 22:10:37 +00:00
Vlad Zahorodnii
e0062f675d Port away from QRectF::contains()
QRectF::contains() considers right and bottom edges inside the
rectangle, but the relevant code has the opposite expectations.
2023-02-21 19:45:51 +00:00