In this release, users can now supply their own shaders to create neat effects.
Slop allows for chained post-processing shaders. Shaders are written in a language called GLSL, and have access to the following data from slop:
GLSL Name | Data Type | Bound to |
---|---|---|
mouse | vec2 | The mouse position on the screen. |
desktop | sampler2D | An upside-down snapshot of the desktop, this doesn't update as the screen changes. |
texture | sampler2D | The current pixel values of slop's frame buffer. Usually just contains the selection rectangle. |
screenSize | vec2 | The dimensions of the screen, where the x value is the width. |
position | vec2 attribute | This contains the vertex data for the rectangle. Only contains (0,0), (1,0), (1,1), and (0,1). |
uv | vec2 attribute | Same as the position, this contians the UV information of each vertex. |
The desktop texture is upside-down because flipping it would cost valuable time.
Shaders must be placed in your ${XDG_CONFIG_HOME}/slop
directory, where XDG_CONFIG_HOME is typically ~/.config/
. This folder won't exist unless you make it yourself.
Shaders are loaded from the --shader
flag in slop. They are delimited by commas, and rendered in order from left to right. This way you can combine multiple shaders for interesting effects! For example, slop -rblur1,wiggle
would load ~/.config/slop/blur1{.frag,.vert}
and ~/.config/slop/wiggle{.frag,.vert}
. Then render the selection rectangle twice, each time accumulating the changes from the different shaders.
Enough chatting about it though, here's some example shaders you can copy from shaderexamples to ~/.config/slop
to try out!
The files listed to the right of the |
are the required files for the command to the left to work correctly.
slop -rblur1,blur2 -b100
|~/.config/slop/{blur1,blur2}{.frag,.vert}
slop -rwiggle -b10
|~/.config/slop/wiggle{.frag,.vert}
And all together now...
Finally here's an example of a magnifying glass.
It's fairly easy to adjust how the shaders work by editing them with your favourite text editor. Or even make your own!