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](https://github.com/naelstrof/slop/tree/master/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 blur](https://my.mixtape.moe/bvsrzr.png)
- `slop -rwiggle -b10` | `~/.config/slop/wiggle{.frag,.vert}`
![slop animation](http://i.giphy.com/12vjSbFZ0CWDW8.gif)
And all together now...
- `slop -rblur1,blur2,wiggle -b50 -c1,1,1` | `~/.config/slop/{blur1,blur2,wiggle}{.frag,.vert}`
![slop animation](http://i.giphy.com/kfBLafeJfLs2Y.gif)
Finally here's an example of a magnifying glass.
- `slop -rcrosshair` | `~/.config/slop/crosshair{.frag,.vert}`
![slop animation](http://i.giphy.com/2xy0fC2LOFQfm.gif)
It's fairly easy to adjust how the shaders work by editing them with your favourite text editor. Or even make your own!