Shader Dev Guide
ShaderCompiler.py and ShaderProcessor.py are from the KDE Shader Wallpaper project
Automated Shader Import
Prerequisite
To compile shaders, you must use QT6's qsb, by default it isn't in your PATH.
qsb can be found in /usr/lib/qt6/bin
add it to your path like this: export PATH:$PATH:/usr/lib/qt6/bin and now we can call it from anywhere
Processing & Compiling
Currently, kde-shader-wallpaper doesn't support shaders that uses buffers
Place the .frag shaders you want to convert here: package/contents/ui/Shaders/ConvertMe
Run:
python ShaderProcessor.pyto add the required code to the shader files and process it (!!! it's probably a good idea to manually verify as it's not perfect!!! )python ShaderCompiler.pyto compile it to theShaders6folder
Install the package
-
kpackagetool6 -t Plasma/Wallpaper -i package( You may need to remove the previously installed package first, which can be found here:
~/.local/share/plasma/wallpapers/online.knowmad.shaderwallpaper)
Manual Shader Import
Processing
Add this to your shader .frag file:
// add this at the top of the file
#version 450
layout(location = 0) in vec2 qt_TexCoord0;
layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
float qt_Opacity;
float iTime;
float iTimeDelta;
float iFrameRate;
float iSampleRate;
int iFrame;
vec4 iDate;
vec4 iMouse;
vec3 iResolution;
float iChannelTime[4];
vec3 iChannelResolution[4];
} ubuf;
layout(binding = 1) uniform sampler2D iChannel0;
layout(binding = 2) uniform sampler2D iChannel1;
layout(binding = 3) uniform sampler2D iChannel2;
layout(binding = 4) uniform sampler2D iChannel3;
vec2 fragCoord = vec2(qt_TexCoord0.x, 1.0 - qt_TexCoord0.y) * ubuf.iResolution.xy;
// either rename them in the frag or add this (probably costs some performance)
// int iFrame = ubuf.iFrame;
// float iTime = ubuf.iTime;
// float iTimeDelta = ubuf.iTimeDelta;
// vec3 iResolution = ubuf.iResolution;
// vec4 iMouse = ubuf.iMouse;
// etc...
// these must be modified as you cant do that with arrays afaik:
// float iChannelTime[4];
// vec3 iChannelResolution[4];
// add this at the end
void main() {
vec4 color = vec4(0.0);
mainImage(color, fragCoord);
fragColor = color;
}
Compile
qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -o MYSHADER.frag.qsb MYSHADER.frag
Install the package
You may need to remove the previously installed package in your ~/.local/share/plasma/wallpapers/online.knowmad.shaderwallpaper
kpackagetool6 -t Plasma/Wallpaper -i package