You are not logged in.
Hi,
After login my screens are garbled / distored.
When I turn off & on my screens, the desktop/screens are working normal.
Help is highly appreciated :-)
OS: Arch Linux x86_64
Host: B550 AORUS ELITE V2
Kernel: Linux 7.0.12-arch1-1
Display (AG241QG4): 2560x1440 in 26", 144 Hz [External]
Display (AG241QG4): 2560x1440 in 26", 144 Hz [External] *
DE: KDE Plasma 6.7.0
WM: KWin (Wayland)
CPU: AMD Ryzen 5 5600X (12) @ 4.65 GHz
GPU: AMD Radeon RX 6700 XT [Discrete]I found in my log
But I dont know what to do with it....
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x2: 0:530(2): error: `fragColor' undeclared
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x3: 0:530(58): error: `fragColor' undeclared
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x4: 0:530(14): error: no matching function for call to `sourceEncodingToNitsInDestinationColorspace(error)'; candidates are:
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x5: 0:530(14): error: vec4 sourceEncodingToNitsInDestinationColorspace(vec4)
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x6: 0:531(2): error: `fragColor' undeclared
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x7: 0:531(40): error: `fragColor' undeclared
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x8: 0:531(14): error: no matching function for call to `nitsToDestinationEncoding(error)'; candidates are:
jun 21 17:23:31 archekpy kwin_wayland[1377]: 0x9: 0:531(14): error: vec4 nitsToDestinationEncoding(vec4)
jun 21 17:23:31 archekpy kwin_wayland[1377]: Failed to compile fragment shader:
0:530(2): error: `fragColor' undeclared
0:530(58): error: `fragColor' undeclared
0:530(14): error: no matching function for call to `sourceEncodingToNitsInDestinationColorspace(error)'; candidates are:
0:530(14): error: vec4 sourceEncodingToNitsInDestinationColorspace(vec4)
0:531(2): error: `fragColor' undeclared
0:531(40): error: `fragColor' undeclared
0:531(14): error: no matching function for call to `nitsToDestinationEncoding(error)'; candidates are:
0:531(14): error: vec4 nitsToDestinationEncoding(vec4)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 1:#version 140
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 2:#define TRAIT_MAP_TEXTURE 1
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 3:#define TRAIT_UNIFORM_COLOR 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 4:#define TRAIT_MODULATE 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 5:#define TRAIT_ADJUST_SATURATION 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 6:#define TRAIT_TRANSFORM_COLORSPACE 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 7:#define TRAIT_MAP_EXTERNAL_TEXTURE 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 8:#define TRAIT_MAP_MULTI_PLANE_TEXTURE 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 9:#define TRAIT_ROUNDED_CORNERS 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 10:#define TRAIT_BORDER 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 11:#define TRAIT_YUV_CONVERSION 0
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 12:#define KWIN_LEGACY
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 13:#define PLASMA6
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 14:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 15:// This file is automatically generated during the build process.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 16:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 17://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 18:// ) ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 19:// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 20:// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 21:// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 22:// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 23:// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 24:// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 25:// |__/ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 26://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 27:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 28:// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 29:// SPDX-License-Identifier: GPL-3.0-or-later
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 30:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 31://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 32:// This file is automatically included in each shader. //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 33://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 34:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 35:// --------------------------------------------------------------------- standard uniforms
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 36:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 37:// Each shader can access these standard input values:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 38:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 39:// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 40:// bool uIsFullscreen: True if the window is maximized or in fullscreen mode.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 41:// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 42:// float uProgress: A value which transitions from 0 to 1 during the animation.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 43:// float uDuration: The duration of the current animation in seconds.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 44:// vec2 uSize: The size of uTexture in pixels.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 45:// float uPadding: The empty area around the actual window (e.g. where the shadow
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 46:// is drawn). For now, this will only be set on GNOME.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 47:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 48:// Furthermore, there are two global methods for reading the window input color and
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 49:// setting the shader output color. Both methods assume straight alpha:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 50:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 51:// vec4 getInputColor(vec2 coords)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 52:// void setOutputColor(vec4 outColor)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 53:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 54:uniform bool uForOpening;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 55:uniform bool uIsFullscreen;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 56:uniform float uProgress;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 57:uniform float uDuration;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 58:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 59:#if defined(KWIN) // --------------------------------------------------------------------
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 60:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 61:#if defined(PLASMA6)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 62:const int sRGB_EOTF = 0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 63:const int linear_EOTF = 1;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 64:const int PQ_EOTF = 2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 65:const int gamma22_EOTF = 3;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 66:const int BT1886_EOTF = 4;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 67:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 68:uniform mat4 colorimetryTransform;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 69:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 70:uniform int sourceNamedTransferFunction;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 71:/**
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 72: * x: min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 73: * y: max luminance - min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 74: */
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 75:uniform vec2 sourceTransferFunctionParams;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 76:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 77:uniform int destinationNamedTransferFunction;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 78:/**
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 79: * x: min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 80: * y: max luminance - min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 81: */
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 82:uniform vec2 destinationTransferFunctionParams;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 83:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 84:// in nits
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 85:uniform float sourceReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 86:uniform float maxTonemappingLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 87:uniform float destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 88:uniform float maxDestinationLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 89:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 90:uniform mat4 destinationToLMS;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 91:uniform mat4 lmsToDestination;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 92:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 93:vec3 linearToPq(vec3 linear) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 94: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 95: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 96: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 97: const float m1 = 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 98: const float m2 = 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 99: vec3 powed = pow(clamp(linear, vec3(0), vec3(1)), vec3(m1));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 100: vec3 num = vec3(c1) + c2 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 101: vec3 denum = vec3(1.0) + c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 102: return pow(num / denum, vec3(m2));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 103:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 104:vec3 pqToLinear(vec3 pq) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 105: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 106: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 107: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 108: const float m1_inv = 1.0 / 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 109: const float m2_inv = 1.0 / 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 110: vec3 powed = pow(clamp(pq, vec3(0.0), vec3(1.0)), vec3(m2_inv));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 111: vec3 num = max(powed - c1, vec3(0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 112: vec3 den = c2 - c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 113: return pow(num / den, vec3(m1_inv));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 114:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 115:float singleLinearToPq(float linear) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 116: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 117: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 118: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 119: const float m1 = 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 120: const float m2 = 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 121: float powed = pow(clamp(linear, 0.0, 1.0), m1);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 122: float num = c1 + c2 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 123: float denum = 1.0 + c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 124: return pow(num / denum, m2);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 125:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 126:float singlePqToLinear(float pq) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 127: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 128: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 129: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 130: const float m1_inv = 1.0 / 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 131: const float m2_inv = 1.0 / 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 132: float powed = pow(clamp(pq, 0.0, 1.0), m2_inv);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 133: float num = max(powed - c1, 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 134: float den = c2 - c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 135: return pow(num / den, m1_inv);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 136:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 137:vec3 srgbToLinear(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 138: bvec3 isLow = lessThanEqual(color, vec3(0.04045));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 139: vec3 loPart = color / 12.92;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 140: vec3 hiPart = pow((color + 0.055) / 1.055, vec3(12.0 / 5.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 141:#if __VERSION__ >= 130
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 142: return mix(hiPart, loPart, isLow);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 143:#else
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 144: return mix(hiPart, loPart, vec3(isLow.r ? 1.0 : 0.0, isLow.g ? 1.0 : 0.0, isLow.b ? 1.0 : 0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 145:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 146:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 147:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 148:vec3 linearToSrgb(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 149: bvec3 isLow = lessThanEqual(color, vec3(0.0031308));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 150: vec3 loPart = color * 12.92;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 151: vec3 hiPart = pow(color, vec3(5.0 / 12.0)) * 1.055 - 0.055;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 152:#if __VERSION__ >= 130
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 153: return mix(hiPart, loPart, isLow);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 154:#else
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 155: return mix(hiPart, loPart, vec3(isLow.r ? 1.0 : 0.0, isLow.g ? 1.0 : 0.0, isLow.b ? 1.0 : 0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 156:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 157:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 158:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 159:const mat3 toICtCp = mat3(
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 160: 0.5, 1.613769531250, 4.378173828125,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 161: 0.5, -3.323486328125, -4.245605468750,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 162: 0.0, 1.709716796875, -0.132568359375
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 163:);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 164:const mat3 fromICtCp = mat3(
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 165: 1.0, 1.0, 1.0,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 166: 0.00860903703793, -0.008609037037, 0.56031335710680,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 167: 0.11102962500303, -0.111029625003, -0.32062717498732
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 168:);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 169:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 170:vec3 doTonemapping(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 171: if (maxTonemappingLuminance < maxDestinationLuminance * 1.01) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 172: // clipping is enough
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 173: return clamp(color.rgb, vec3(0.0), vec3(maxDestinationLuminance));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 174: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 175:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 176: // convert to ICtCp, to properly split luminance and color
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 177: // intensity is PQ-encoded luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 178: vec3 lms = (destinationToLMS * vec4(color, 1.0)).rgb;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 179: vec3 lms_PQ = linearToPq(lms / 10000.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 180: vec3 ICtCp = toICtCp * lms_PQ;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 181: float luminance = singlePqToLinear(ICtCp.r) * 10000.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 182:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 183: // apply tone mapping operation (modified Reinhart)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 184: float relativeLuminance = max(luminance / destinationReferenceLuminance, 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 185: float inputRange = maxTonemappingLuminance / destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 186: float outputRange = maxDestinationLuminance / destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 187: float v = (outputRange * (1.0 + inputRange) - inputRange) / pow(inputRange, 2.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 188: relativeLuminance = relativeLuminance * (1.0 + relativeLuminance * v) / (1.0 + relativeLuminance);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 189: luminance = relativeLuminance * destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 190:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 191: // convert back to rgb
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 192: ICtCp.r = singleLinearToPq(luminance / 10000.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 193: color = (lmsToDestination * vec4(pqToLinear(fromICtCp * ICtCp), 1.0)).rgb * 10000.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 194: // and clip, to ensure out-of-gamut values are clipped to the correct white point
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 195: return clamp(color, vec3(0.0), vec3(maxDestinationLuminance));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 196:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 197:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 198:vec4 encodingToNits(vec4 color, int sourceTransferFunction, float luminanceOffset, float luminanceScale) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 199: if (sourceTransferFunction == sRGB_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 200: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 201: color.rgb = srgbToLinear(color.rgb) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 202: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 203: } else if (sourceTransferFunction == linear_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 204: color.rgb = color.rgb * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 205: } else if (sourceTransferFunction == PQ_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 206: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 207: color.rgb = pqToLinear(color.rgb) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 208: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 209: } else if (sourceTransferFunction == gamma22_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 210: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 211: color.rgb = pow(max(color.rgb, vec3(0.0)), vec3(2.2)) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 212: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 213: } else if (sourceTransferFunction == BT1886_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 214: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 215: // for bt1886, luminanceScale = a, luminanceOffset = b
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 216: color.rgb = luminanceScale * pow(max(color.rgb + vec3(luminanceOffset), vec3(0.0)), vec3(2.4));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 217: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 218: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 219: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 220:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 221:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 222:vec4 sourceEncodingToNitsInDestinationColorspace(vec4 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 223: color = encodingToNits(color, sourceNamedTransferFunction, sourceTransferFunctionParams.x, sourceTransferFunctionParams.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 224: color.rgb = (colorimetryTransform * vec4(color.rgb, 1.0)).rgb;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 225: return vec4(doTonemapping(color.rgb), color.a);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 226:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 227:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 228:vec4 nitsToEncoding(vec4 color, int destinationTransferFunction, float luminanceOffset, float luminanceScale) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 229: if (destinationTransferFunction == sRGB_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 230: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 231: color.rgb = linearToSrgb((color.rgb - vec3(luminanceOffset)) / luminanceScale);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 232: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 233: } else if (destinationTransferFunction == linear_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 234: color.rgb = (color.rgb - vec3(luminanceOffset)) / luminanceScale;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 235: } else if (destinationTransferFunction == PQ_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 236: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 237: color.rgb = linearToPq((color.rgb - vec3(luminanceOffset)) / luminanceScale);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 238: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 239: } else if (destinationTransferFunction == gamma22_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 240: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 241: color.rgb = pow(max((color.rgb - vec3(luminanceOffset)) / luminanceScale, vec3(0.0)), vec3(1.0 / 2.2));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 242: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 243: } else if (destinationTransferFunction == BT1886_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 244: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 245: // for bt1886, luminanceScale = a, luminanceOffset = b
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 246: color.rgb = pow(color.rgb / luminanceScale, vec3(1.0 / 2.4)) - vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 247: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 248: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 249: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 250:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 251:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 252:vec4 nitsToDestinationEncoding(vec4 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 253: return nitsToEncoding(color, destinationNamedTransferFunction, destinationTransferFunctionParams.x, destinationTransferFunctionParams.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 254:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 255:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 256:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 257:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 258:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 259:uniform sampler2D sampler;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 260:uniform int textureWidth;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 261:uniform int textureHeight;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 262:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 263:in vec2 texcoord0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 264:out vec4 fragColor;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 265:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 266:vec2 uSize = vec2(textureWidth, textureHeight);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 267:vec2 iTexCoord = vec2(texcoord0.x, 1.0 - texcoord0.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 268:float uPadding = 0.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 269:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 270:vec4 getInputColor(vec2 coords) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 271: vec4 color = texture2D(sampler, vec2(coords.x, 1.0 - coords.y));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 272:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 273: if (color.a > 0.0) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 274: color.rgb /= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 275: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 276:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 277: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 278:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 279:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 280:void setOutputColor(vec4 outColor) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 281:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 282: // If a uniform is not used, it will be optimized away. This condition is always
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 283: // false, but it will prevent the compiler from optimizing away the uniforms uForOpening
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 284: // and uIsFullscreen. On KWin, we need to do this as we do not have a way to check if a
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 285: // uniform is used in the shader.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 286: if (outColor.a > 1000.0 && uForOpening && uIsFullscreen) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 287: outColor = vec4(0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 288: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 289:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 290: fragColor = vec4(outColor.rgb * outColor.a, outColor.a);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 291:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 292:#if defined(PLASMA6)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 293: fragColor = sourceEncodingToNitsInDestinationColorspace(fragColor);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 294: fragColor = nitsToDestinationEncoding(fragColor);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 295:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 296:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 297:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 298:#elif defined(KWIN_LEGACY) // -----------------------------------------------------------
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 299:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 300:#if defined(PLASMA6)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 301:const int sRGB_EOTF = 0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 302:const int linear_EOTF = 1;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 303:const int PQ_EOTF = 2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 304:const int gamma22_EOTF = 3;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 305:const int BT1886_EOTF = 4;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 306:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 307:uniform mat4 colorimetryTransform;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 308:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 309:uniform int sourceNamedTransferFunction;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 310:/**
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 311: * x: min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 312: * y: max luminance - min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 313: */
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 314:uniform vec2 sourceTransferFunctionParams;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 315:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 316:uniform int destinationNamedTransferFunction;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 317:/**
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 318: * x: min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 319: * y: max luminance - min luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 320: */
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 321:uniform vec2 destinationTransferFunctionParams;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 322:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 323:// in nits
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 324:uniform float sourceReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 325:uniform float maxTonemappingLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 326:uniform float destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 327:uniform float maxDestinationLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 328:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 329:uniform mat4 destinationToLMS;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 330:uniform mat4 lmsToDestination;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 331:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 332:vec3 linearToPq(vec3 linear) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 333: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 334: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 335: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 336: const float m1 = 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 337: const float m2 = 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 338: vec3 powed = pow(clamp(linear, vec3(0), vec3(1)), vec3(m1));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 339: vec3 num = vec3(c1) + c2 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 340: vec3 denum = vec3(1.0) + c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 341: return pow(num / denum, vec3(m2));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 342:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 343:vec3 pqToLinear(vec3 pq) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 344: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 345: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 346: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 347: const float m1_inv = 1.0 / 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 348: const float m2_inv = 1.0 / 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 349: vec3 powed = pow(clamp(pq, vec3(0.0), vec3(1.0)), vec3(m2_inv));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 350: vec3 num = max(powed - c1, vec3(0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 351: vec3 den = c2 - c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 352: return pow(num / den, vec3(m1_inv));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 353:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 354:float singleLinearToPq(float linear) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 355: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 356: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 357: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 358: const float m1 = 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 359: const float m2 = 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 360: float powed = pow(clamp(linear, 0.0, 1.0), m1);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 361: float num = c1 + c2 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 362: float denum = 1.0 + c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 363: return pow(num / denum, m2);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 364:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 365:float singlePqToLinear(float pq) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 366: const float c1 = 0.8359375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 367: const float c2 = 18.8515625;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 368: const float c3 = 18.6875;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 369: const float m1_inv = 1.0 / 0.1593017578125;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 370: const float m2_inv = 1.0 / 78.84375;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 371: float powed = pow(clamp(pq, 0.0, 1.0), m2_inv);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 372: float num = max(powed - c1, 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 373: float den = c2 - c3 * powed;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 374: return pow(num / den, m1_inv);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 375:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 376:vec3 srgbToLinear(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 377: bvec3 isLow = lessThanEqual(color, vec3(0.04045));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 378: vec3 loPart = color / 12.92;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 379: vec3 hiPart = pow((color + 0.055) / 1.055, vec3(12.0 / 5.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 380:#if __VERSION__ >= 130
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 381: return mix(hiPart, loPart, isLow);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 382:#else
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 383: return mix(hiPart, loPart, vec3(isLow.r ? 1.0 : 0.0, isLow.g ? 1.0 : 0.0, isLow.b ? 1.0 : 0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 384:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 385:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 386:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 387:vec3 linearToSrgb(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 388: bvec3 isLow = lessThanEqual(color, vec3(0.0031308));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 389: vec3 loPart = color * 12.92;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 390: vec3 hiPart = pow(color, vec3(5.0 / 12.0)) * 1.055 - 0.055;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 391:#if __VERSION__ >= 130
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 392: return mix(hiPart, loPart, isLow);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 393:#else
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 394: return mix(hiPart, loPart, vec3(isLow.r ? 1.0 : 0.0, isLow.g ? 1.0 : 0.0, isLow.b ? 1.0 : 0.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 395:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 396:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 397:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 398:const mat3 toICtCp = mat3(
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 399: 0.5, 1.613769531250, 4.378173828125,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 400: 0.5, -3.323486328125, -4.245605468750,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 401: 0.0, 1.709716796875, -0.132568359375
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 402:);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 403:const mat3 fromICtCp = mat3(
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 404: 1.0, 1.0, 1.0,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 405: 0.00860903703793, -0.008609037037, 0.56031335710680,
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 406: 0.11102962500303, -0.111029625003, -0.32062717498732
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 407:);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 408:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 409:vec3 doTonemapping(vec3 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 410: if (maxTonemappingLuminance < maxDestinationLuminance * 1.01) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 411: // clipping is enough
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 412: return clamp(color.rgb, vec3(0.0), vec3(maxDestinationLuminance));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 413: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 414:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 415: // convert to ICtCp, to properly split luminance and color
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 416: // intensity is PQ-encoded luminance
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 417: vec3 lms = (destinationToLMS * vec4(color, 1.0)).rgb;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 418: vec3 lms_PQ = linearToPq(lms / 10000.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 419: vec3 ICtCp = toICtCp * lms_PQ;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 420: float luminance = singlePqToLinear(ICtCp.r) * 10000.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 421:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 422: // apply tone mapping operation (modified Reinhart)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 423: float relativeLuminance = max(luminance / destinationReferenceLuminance, 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 424: float inputRange = maxTonemappingLuminance / destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 425: float outputRange = maxDestinationLuminance / destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 426: float v = (outputRange * (1.0 + inputRange) - inputRange) / pow(inputRange, 2.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 427: relativeLuminance = relativeLuminance * (1.0 + relativeLuminance * v) / (1.0 + relativeLuminance);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 428: luminance = relativeLuminance * destinationReferenceLuminance;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 429:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 430: // convert back to rgb
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 431: ICtCp.r = singleLinearToPq(luminance / 10000.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 432: color = (lmsToDestination * vec4(pqToLinear(fromICtCp * ICtCp), 1.0)).rgb * 10000.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 433: // and clip, to ensure out-of-gamut values are clipped to the correct white point
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 434: return clamp(color, vec3(0.0), vec3(maxDestinationLuminance));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 435:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 436:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 437:vec4 encodingToNits(vec4 color, int sourceTransferFunction, float luminanceOffset, float luminanceScale) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 438: if (sourceTransferFunction == sRGB_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 439: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 440: color.rgb = srgbToLinear(color.rgb) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 441: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 442: } else if (sourceTransferFunction == linear_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 443: color.rgb = color.rgb * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 444: } else if (sourceTransferFunction == PQ_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 445: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 446: color.rgb = pqToLinear(color.rgb) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 447: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 448: } else if (sourceTransferFunction == gamma22_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 449: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 450: color.rgb = pow(max(color.rgb, vec3(0.0)), vec3(2.2)) * luminanceScale + vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 451: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 452: } else if (sourceTransferFunction == BT1886_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 453: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 454: // for bt1886, luminanceScale = a, luminanceOffset = b
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 455: color.rgb = luminanceScale * pow(max(color.rgb + vec3(luminanceOffset), vec3(0.0)), vec3(2.4));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 456: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 457: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 458: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 459:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 460:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 461:vec4 sourceEncodingToNitsInDestinationColorspace(vec4 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 462: color = encodingToNits(color, sourceNamedTransferFunction, sourceTransferFunctionParams.x, sourceTransferFunctionParams.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 463: color.rgb = (colorimetryTransform * vec4(color.rgb, 1.0)).rgb;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 464: return vec4(doTonemapping(color.rgb), color.a);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 465:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 466:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 467:vec4 nitsToEncoding(vec4 color, int destinationTransferFunction, float luminanceOffset, float luminanceScale) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 468: if (destinationTransferFunction == sRGB_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 469: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 470: color.rgb = linearToSrgb((color.rgb - vec3(luminanceOffset)) / luminanceScale);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 471: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 472: } else if (destinationTransferFunction == linear_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 473: color.rgb = (color.rgb - vec3(luminanceOffset)) / luminanceScale;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 474: } else if (destinationTransferFunction == PQ_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 475: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 476: color.rgb = linearToPq((color.rgb - vec3(luminanceOffset)) / luminanceScale);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 477: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 478: } else if (destinationTransferFunction == gamma22_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 479: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 480: color.rgb = pow(max((color.rgb - vec3(luminanceOffset)) / luminanceScale, vec3(0.0)), vec3(1.0 / 2.2));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 481: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 482: } else if (destinationTransferFunction == BT1886_EOTF) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 483: color.rgb /= max(color.a, 0.001);
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: The XKEYBOARD keymap compiler (xkbcomp) reports:
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Warning: Multiple symbols for level 1/group 1 on key <FK23>
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Using F23, ignoring XF86TouchpadOff
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Warning: Symbol map for key <FK23> redefined
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Using last definition for conflicting fields
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Warning: Symbol map for key <FK24> redefined
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: > Using last definition for conflicting fields
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1951]: Errors from xkbcomp are not fatal to the X server
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 484: // for bt1886, luminanceScale = a, luminanceOffset = b
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 485: color.rgb = pow(color.rgb / luminanceScale, vec3(1.0 / 2.4)) - vec3(luminanceOffset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 486: color.rgb *= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 487: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 488: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 489:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 490:
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: The XKEYBOARD keymap compiler (xkbcomp) reports:
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > Warning: Unsupported maximum keycode 709, clipping.
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > X11 cannot support keycodes above 255.
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > Warning: Virtual modifier Hyper multiply defined
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > Using 0, ignoring 0
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > Warning: Virtual modifier ScrollLock multiply defined
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: > Using 0, ignoring 0
jun 21 17:23:31 archekpy kwin_wayland_wrapper[1966]: Errors from xkbcomp are not fatal to the X server
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 491:vec4 nitsToDestinationEncoding(vec4 color) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 492: return nitsToEncoding(color, destinationNamedTransferFunction, destinationTransferFunctionParams.x, destinationTransferFunctionParams.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 493:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 494:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 495:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 496:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 497:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 498:uniform sampler2D sampler;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 499:uniform int textureWidth;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 500:uniform int textureHeight;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 501:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 502:varying vec2 texcoord0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 503:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 504:vec2 uSize = vec2(textureWidth, textureHeight);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 505:vec2 iTexCoord = vec2(texcoord0.x, 1.0 - texcoord0.y);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 506:float uPadding = 0.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 507:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 508:vec4 getInputColor(vec2 coords) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 509: vec4 color = texture2D(sampler, vec2(coords.x, 1.0 - coords.y));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 510:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 511: if (color.a > 0.0) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 512: color.rgb /= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 513: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 514:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 515: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 516:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 517:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 518:void setOutputColor(vec4 outColor) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 519: // If a uniform is not used, it will be optimized away. This condition is always
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 520: // false, but it will prevent the compiler from optimizing away the uniforms uForOpening
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 521: // and uIsFullscreen. On KWin, we need to do this as we do not have a way to check if a
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 522: // uniform is used in the shader.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 523: if (outColor.a > 1000.0 && uForOpening && uIsFullscreen) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 524: outColor = vec4(0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 525: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 526:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 527: gl_FragColor = vec4(outColor.rgb * outColor.a, outColor.a);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 528:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 529:#if defined(PLASMA6)
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 530: fragColor = sourceEncodingToNitsInDestinationColorspace(fragColor);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 531: fragColor = nitsToDestinationEncoding(fragColor);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 532:#endif
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 533:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 534:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 535:#else // GNOME --------------------------------------------------------------------------
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 536:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 537:// On GNOME, the uniforms are just normal uniforms.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 538:uniform sampler2D uTexture;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 539:uniform vec2 uSize;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 540:uniform float uPadding;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 541:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 542:// On GNOME, we set iTexCoord to be an alias for the cogl variables.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 543:#define iTexCoord vec2(cogl_tex_coord_in[0])
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 544:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 545:// Shell.GLSLEffect uses straight alpha. So we have to convert from premultiplied.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 546:vec4 getInputColor(vec2 coords) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 547: vec4 color = texture2D(uTexture, coords);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 548:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 549: if (color.a > 0.0) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 550: color.rgb /= color.a;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 551: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 552:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 553: return color;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 554:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 555:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 556:void setOutputColor(vec4 outColor) { cogl_color_out = outColor; }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 557:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 558:#endif // -------------------------------------------------------------------------------
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 559:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 560:// ----------------------------------------------------------------- compositing operators
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 561:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 562:// The Shell.GLSLEffect uses straight alpha blending. This helper method allows
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 563:// compositing color values in the shader in the same way.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 564:vec4 alphaOver(vec4 under, vec4 over) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 565: if (under.a == 0.0 && over.a == 0.0) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 566: return vec4(0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 567: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 568:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 569: float alpha = mix(under.a, 1.0, over.a);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 570: return vec4(mix(under.rgb * under.a, over.rgb, over.a) / alpha, alpha);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 571:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 572:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 573:// ------------------------------------------------------------------------- color helpers
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 574:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 575:// Maps the given value from [0..1] to the given colors.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 576:vec3 tritone(float val, vec3 shadows, vec3 midtones, vec3 highlights) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 577: if (val < 0.5) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 578: return mix(shadows, midtones, smoothstep(0.0, 1.0, val * 2.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 579: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 580:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 581: return mix(midtones, highlights, smoothstep(0.0, 1.0, val * 2.0 - 1.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 582:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 583:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 584:// Darkens the given color. If fac is zero, the color will not change, if fac is one, the
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 585:// color will be black.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 586:vec3 darken(vec3 color, float fac) { return color * (1.0 - fac); }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 587:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 588:// Lightens the given color. If fac is zero, the color will not change, if fac is one, the
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 589:// color will be white.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 590:vec3 lighten(vec3 color, float fac) { return color + (vec3(1.0) - color) * fac; }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 591:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 592:// ---------------------------------------------------------------------- easing functions
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 593:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 594:// Here are some basic easing function. More can be added if required!
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 595:// Taken from here:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 596:// https://gitlab.gnome.org/GNOME/mutter/-/blob/main/clutter/clutter/clutter-easing.c
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 597:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 598:float easeOutQuad(float x) { return -1.0 * x * (x - 2.0); }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 599:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 600:float easeInQuad(float x) { return x * x; }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 601:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 602:float easeInBack(float x, float e) { return x * x * ((e + 1.0) * x - e); }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 603:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 604:float easeOutBack(float x, float e) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 605: float p = x - 1.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 606: return p * p * ((e + 1.0) * p + e) + 1.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 607:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 608:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 609:// --------------------------------------------------------------------- edge mask helpers
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 610:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 611:// This method returns a mask which smoothly transitions towards zero when approaching
jun 21 17:23:32 archekpy pam_kwallet_init[2115]: 2026/06/21 17:23:32 socat[2115] W address is opened in read-write mode but only supports read-only
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 612:// the window's borders. If the window is currently maximized or in fullscreen mode, this
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 613:// will return 1.0 everywhere. There is a variant which takes the transition area width in
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 614:// pixels and one which takes this as a percentage.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 615:float getEdgeMask(vec2 uv, vec2 maxUV, float fadeWidth) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 616: float mask = 1.0;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 617:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 618: if (!uIsFullscreen) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 619: mask *= smoothstep(0.0, 1.0, clamp(uv.x / fadeWidth, 0.0, 1.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 620: mask *= smoothstep(0.0, 1.0, clamp(uv.y / fadeWidth, 0.0, 1.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 621: mask *= smoothstep(0.0, 1.0, clamp((maxUV.x - uv.x) / fadeWidth, 0.0, 1.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 622: mask *= smoothstep(0.0, 1.0, clamp((maxUV.y - uv.y) / fadeWidth, 0.0, 1.0));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 623: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 624:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 625: return mask;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 626:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 627:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 628:// Returns an edge mask which fades to zero at the boundaries of the actor. The width of
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 629:// the fade zone is given in pixels. This uses the standard uniforms uSize and uPadding.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 630:// This means that the fading zone is not actually at the actors boundaries but at the
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 631:// position of the window border in the texture.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 632:// The offset paramter controls whether the fading is placed inside the window borders
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 633:// (offset = 0), ontop the window borders (offset = 0.5) or outside the window borders
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 634:// (offset = 1).
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 635:float getAbsoluteEdgeMask(float fadePixels, float offset) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 636: float padding = max(0.0, uPadding - fadePixels * offset);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 637: vec2 uv = iTexCoord.st * uSize - padding;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 638: return getEdgeMask(uv, uSize - 2.0 * padding, fadePixels);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 639:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 640:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 641:// Returns an edge mask which fades to zero at the boundaries of the actor. The width of
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 642:// the fade zone is given relative to the actor size. This neither uses uSize and
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 643:// uPadding.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 644:float getRelativeEdgeMask(float fadeAmount) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 645: vec2 uv = iTexCoord.st;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 646: return getEdgeMask(uv, vec2(1.0), fadeAmount);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 647:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 648:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 649:// ------------------------------------------------------------------------------- 2D math
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 650:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 651:// The math for the whirling is inspired by this post:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 652:// http://www.geeks3d.com/20110428/shader-library-swirl-post-processing-filter-in-glsl
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 653:vec2 whirl(vec2 coords, float warping, float rotation) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 654: float angle = pow(1.0 - length(coords), 2.0) * warping + rotation;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 655: float s = sin(angle);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 656: float c = cos(angle);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 657: return vec2(dot(coords, vec2(c, -s)), dot(coords, vec2(s, c)));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 658:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 659:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 660:// Returns the shortest distance between the given point and the line defined by "origin"
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 661:// and "direction".
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 662:float distToLine(vec2 origin, vec2 direction, vec2 point) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 663: vec2 perpendicular = vec2(direction.y, -direction.x);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 664: return abs(dot(normalize(perpendicular), origin - point));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 665:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 666:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 667:// Returns a positive number if a -> b forms a clockwise corner, or a negative number if
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 668:// the corner is counter-clockwise.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 669:float getWinding(vec2 a, vec2 b) { return cross(vec3(a, 0.0), vec3(b, 0.0)).z; }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 670:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 671:// Rotates the given 2D vector a clockwise by the angle alpha (given in radians).
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 672:vec2 rotate(vec2 a, float angle) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 673: return vec2(a.x * cos(angle) - a.y * sin(angle), a.x * sin(angle) + a.y * cos(angle));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 674:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 675:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 676:// --------------------------------------------------------------------------------- noise
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 677:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 678:// These noise algorithms are based on implementations by various authors from
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 679:// shadertoy.com, which are all available under the MIT License. See the respective links
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 680:// in the comments below.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 681:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 682:// Hash functions
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 683:// MIT License, https://www.shadertoy.com/view/4djSRW
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 684:// Copyright (c) 2014 David Hoskins.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 685:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 686:// 1 out, 1 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 687:float hash11(float p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 688: p = fract(p * .1031);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 689: p *= p + 33.33;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 690: p *= p + p;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 691: return fract(p);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 692:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 693:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 694:// 1 out, 2 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 695:float hash12(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 696: vec3 p3 = fract(vec3(p.xyx) * .1031);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 697: p3 += dot(p3, p3.yzx + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 698: return fract((p3.x + p3.y) * p3.z);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 699:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 700:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 701:// 1 out, 3 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 702:float hash13(vec3 p3) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 703: p3 = fract(p3 * .1031);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 704: p3 += dot(p3, p3.zyx + 31.32);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 705: return fract((p3.x + p3.y) * p3.z);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 706:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 707:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 708:// 2 out, 1 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 709:vec2 hash21(float p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 710: vec3 p3 = fract(vec3(p) * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 711: p3 += dot(p3, p3.yzx + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 712: return fract((p3.xx + p3.yz) * p3.zy);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 713:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 714:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 715:// 2 out, 2 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 716:vec2 hash22(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 717: vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 718: p3 += dot(p3, p3.yzx + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 719: return fract((p3.xx + p3.yz) * p3.zy);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 720:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 721:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 722:// 2 out, 3 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 723:vec2 hash23(vec3 p3) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 724: p3 = fract(p3 * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 725: p3 += dot(p3, p3.yzx + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 726: return fract((p3.xx + p3.yz) * p3.zy);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 727:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 728:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 729:// 3 out, 1 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 730:vec3 hash31(float p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 731: vec3 p3 = fract(vec3(p) * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 732: p3 += dot(p3, p3.yzx + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 733: return fract((p3.xxy + p3.yzz) * p3.zyx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 734:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 735:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 736:// 3 out, 2 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 737:vec3 hash32(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 738: vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 739: p3 += dot(p3, p3.yxz + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 740: return fract((p3.xxy + p3.yzz) * p3.zyx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 741:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 742:
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: Starting libddcutil. library built Not set at Not set. stdout_stderr_redirected=true
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 743:// 3 out, 3 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 744:vec3 hash33(vec3 p3) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 745: p3 = fract(p3 * vec3(.1031, .1030, .0973));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 746: p3 += dot(p3, p3.yxz + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 747: return fract((p3.xxy + p3.yxx) * p3.zyx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 748:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 749:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 750:// 4 out, 1 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 751:vec4 hash41(float p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 752: vec4 p4 = fract(vec4(p) * vec4(.1031, .1030, .0973, .1099));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 753: p4 += dot(p4, p4.wzxy + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 754: return fract((p4.xxyz + p4.yzzw) * p4.zywx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 755:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 756:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 757:// 4 out, 2 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 758:vec4 hash42(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 759: vec4 p4 = fract(vec4(p.xyxy) * vec4(.1031, .1030, .0973, .1099));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 760: p4 += dot(p4, p4.wzxy + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 761: return fract((p4.xxyz + p4.yzzw) * p4.zywx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 762:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 763:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 764:// 4 out, 3 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 765:vec4 hash43(vec3 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 766: vec4 p4 = fract(vec4(p.xyzx) * vec4(.1031, .1030, .0973, .1099));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 767: p4 += dot(p4, p4.wzxy + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 768: return fract((p4.xxyz + p4.yzzw) * p4.zywx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 769:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 770:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 771:// 4 out, 4 in...
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 772:vec4 hash44(vec4 p4) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 773: p4 = fract(p4 * vec4(.1031, .1030, .0973, .1099));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 774: p4 += dot(p4, p4.wzxy + 33.33);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 775: return fract((p4.xxyz + p4.yzzw) * p4.zywx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 776:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 777:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 778:// 2D Simplex Noise
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 779:// MIT License, https://www.shadertoy.com/view/Msf3WH
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 780:// Copyright © 2013 Inigo Quilez
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 781:float simplex2D(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 782: const float K1 = 0.366025404; // (sqrt(3)-1)/2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 783: const float K2 = 0.211324865; // (3-sqrt(3))/6;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 784:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 785: vec2 i = floor(p + (p.x + p.y) * K1);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 786: vec2 a = p - i + (i.x + i.y) * K2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 787: float m = step(a.y, a.x);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 788: vec2 o = vec2(m, 1.0 - m);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 789: vec2 b = a - o + K2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 790: vec2 c = a - 1.0 + 2.0 * K2;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 791: vec3 h = max(0.5 - vec3(dot(a, a), dot(b, b), dot(c, c)), 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 792: vec3 n = h * h * h * h *
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 793: vec3(dot(a, -1.0 + 2.0 * hash22(i + 0.0)), dot(b, -1.0 + 2.0 * hash22(i + o)),
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: (ddci_init ) Calling ldbus_start_sleep_watch_thread...
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: Starting. library built Not set at Not set, library_initialized=false, libopts=|(null)|
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 794: dot(c, -1.0 + 2.0 * hash22(i + 1.0)));
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: Initializing libddcutil. ddcutil version: 2.2.7, shared library: /usr/lib/libddcutil.so.5.5.1
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 795: return 0.5 + 0.5 * dot(n, vec3(70.0));
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: library built Not set at Not set. stdout_stderr_redirected=true
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 796:}
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: [ 2252] Options passed from client:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 797:
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: [ 2252] Applying combined libddcutil options:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 798:float simplex2DFractal(vec2 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 799: mat2 m = mat2(1.6, 1.2, -1.2, 1.6);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 800: float f = 0.5000 * simplex2D(p);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 801: p = m * p;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 802: f += 0.2500 * simplex2D(p);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 803: p = m * p;
jun 21 17:23:32 archekpy org_kde_powerdevil[2252]: [ 2252][ 0.094639] (ldbus_pause_if_recent_return_from_sleep)Pausing for 483
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 804: f += 0.1250 * simplex2D(p);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 805: p = m * p;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 806: f += 0.0625 * simplex2D(p);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 807: p = m * p;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 808:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 809: return f;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 810:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 811:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 812:// 3D Simplex Noise
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 813:// MIT License, https://www.shadertoy.com/view/XsX3zB
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 814:// Copyright © 2013 Nikita Miropolskiy
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 815:float simplex3D(vec3 p) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 816:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 817: // skew constants for 3D simplex functions
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 818: const float F3 = 0.3333333;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 819: const float G3 = 0.1666667;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 820:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 821: // 1. find current tetrahedron T and it's four vertices
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 822: // s, s+i1, s+i2, s+1.0 - absolute skewed (integer) coordinates of T vertices
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 823: // x, x1, x2, x3 - unskewed coordinates of p relative to each of T vertice
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 824:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 825: // calculate s and x
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 826: vec3 s = floor(p + dot(p, vec3(F3)));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 827: vec3 x = p - s + dot(s, vec3(G3));
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 828:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 829: // calculate i1 and i2
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 830: vec3 e = step(vec3(0.0), x - x.yzx);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 831: vec3 i1 = e * (1.0 - e.zxy);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 832: vec3 i2 = 1.0 - e.zxy * (1.0 - e);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 833:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 834: // x1, x2, x3
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 835: vec3 x1 = x - i1 + G3;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 836: vec3 x2 = x - i2 + 2.0 * G3;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 837: vec3 x3 = x - 1.0 + 3.0 * G3;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 838:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 839: // 2. find four surflets and store them in d
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 840: vec4 w, d;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 841:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 842: // calculate surflet weights
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 843: w.x = dot(x, x);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 844: w.y = dot(x1, x1);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 845: w.z = dot(x2, x2);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 846: w.w = dot(x3, x3);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 847:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 848: // w fades from 0.6 at the center of the surflet to 0.0 at the margin
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 849: w = max(0.6 - w, 0.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 850:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 851: // calculate surflet components
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 852: d.x = dot(-0.5 + hash33(s), x);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 853: d.y = dot(-0.5 + hash33(s + i1), x1);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 854: d.z = dot(-0.5 + hash33(s + i2), x2);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 855: d.w = dot(-0.5 + hash33(s + 1.0), x3);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 856:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 857: // multiply d by w^4
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 858: w *= w;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 859: w *= w;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 860: d *= w;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 861:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 862: // 3. return the sum of the four surflets
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 863: return dot(d, vec4(52.0)) * 0.5 + 0.5;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 864:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 865:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 866:// Directional artifacts can be reduced by rotating each octave
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 867:float simplex3DFractal(vec3 m) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 868:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 869: // const matrices for 3D rotation
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 870: const mat3 rot1 = mat3(-0.37, 0.36, 0.85, -0.14, -0.93, 0.34, 0.92, 0.01, 0.4);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 871: const mat3 rot2 = mat3(-0.55, -0.39, 0.74, 0.33, -0.91, -0.24, 0.77, 0.12, 0.63);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 872: const mat3 rot3 = mat3(-0.71, 0.52, -0.47, -0.08, -0.72, -0.68, -0.7, -0.45, 0.56);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 873:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 874: return 0.5333333 * simplex3D(m * rot1) + 0.2666667 * simplex3D(2.0 * m * rot2) +
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 875: 0.1333333 * simplex3D(4.0 * m * rot3) + 0.0666667 * simplex3D(8.0 * m);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 876:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 877://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 878:// ) ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 879:// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 880:// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 881:// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 882:// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 883:// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 884:// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 885:// |__/ //
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 886://////////////////////////////////////////////////////////////////////////////////////////
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 887:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 888:// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 889:// SPDX-License-Identifier: GPL-3.0-or-later
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 890:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 891:// The content from common.glsl is automatically prepended to each shader effect.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 892:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 893:uniform float uPixelSize;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 894:uniform vec2 uStartPos;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 895:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 896:const float FADE_WIDTH = 1.0; // Width of the transition.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 897:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 898:void main() {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 899:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 900: // Now we compute a 2D gradient in [0..1] which covers the entire window. The dark
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 901: // regions will be burned first, the bright regions in the end. We mix a radial gradient
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 902: // with some noise. The center of the radial gradient is positioned at uStartPos.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 903: float circle = length(iTexCoord - uStartPos);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 904:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 905: float progress = easeOutQuad(uProgress);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 906: progress = ((1.0 - progress) * (1.0 + FADE_WIDTH) - 1.0 + circle) / FADE_WIDTH;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 907: progress = smoothstep(0.0, 1.0, progress);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 908:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 909: progress = uForOpening ? progress : 1.0 - progress;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 910:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 911: // The current level of pixelation increases with the progress.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 912: float pixelSize = ceil(uPixelSize * progress + 1.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 913: vec2 pixelGrid = vec2(pixelSize) / uSize;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 914: vec2 texcoord = iTexCoord.st - mod(iTexCoord.st, pixelGrid) + pixelGrid * 0.5;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 915: vec4 oColor = getInputColor(texcoord);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 916:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 917: // Hide pixels in the transition zone.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 918: float random = simplex2DFractal(texcoord * uSize / 20.0) * 1.5 - 0.25;
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 919: if (progress > random) {
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 920: oColor.a *= max(0.0, 1.0 - (progress - random) * 10.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 921: }
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 922:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 923: // These are pretty useful for understanding how this works.
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 924: // oColor = vec4(progress, 0.0, 0.0, 1.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 925: // oColor = vec4(random, 0.0, 0.0, 1.0);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 926:
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 927: setOutputColor(oColor);
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 928:}
jun 21 17:23:31 archekpy kwin_wayland[1377]: line 929:Offline
The only relevant bit out of this is
jun 21 17:23:31 archekpy kwin_wayland[1377]: Failed to compile fragment shader:and it's not even clear whether that's relevant to what stage of your problem.
* How do you login?
* What's the output of "qdbus6 org.kde.KWin /KWin supportInformation" while the output is "garbled" and after fixing it?
* Can you link a photo to illustrate the situation?
Offline