Files
komplex/tools/README.md
Digital Artifex f65399ec53 Initial Commit
2025-08-03 18:41:56 -04:00

97 lines
2.7 KiB
Markdown

# 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.py` to 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.py` to compile it to the `Shaders6` folder
### 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:
```hlsl
// 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`
## Reference
- https://doc.qt.io/qt-6/qtshadertools-qsb.html
- https://invent.kde.org/plasma/libplasma