# librashader

![image](https://user-images.githubusercontent.com/1000503/202840226-68e9d01f-aa0b-4bfa-9bc6-a1363f701b85.png)

A preprocessor, compiler, and runtime for RetroArch 'slang' shaders, rewritten in pure Rust.

Heavily WIP.

## License
**There is not yet a functioning implementation of librashader but this section outlines its licensing goals in contrast to
RetroArch.**

While librashader is an independent reimplementation of the RetroArch shader pipeline, referencing the RetroArch source
code was indispensable to its creation. As it is therefore considered a derivative work, the core parts of librashader
such as the preprocessor, the preset parser, the reflection library, and the runtimes, are all licensed under GPLv3.

The librashader C API, i.e. its headers and definitions, *not its implementation in `librashader_capi`*,
are unique to librashader and are more permissively licensed, and may allow you to use librashader in your permissively 
licensed or proprietary project.

While the code for `librashader_capi` (`librashader.so` and `rashader.dll`) is still under GPLv3, 
you may use librashader in a non-GPL work by linking against the MIT licensed `librashader_ld`, 
which implements the librashader C API, and thunks its calls to any `librashader.so` or `rashader.dll` 
library found in the load path, *provided that `librashader.so` or `rashader.dll` are distributed under the restrictions
of GPLv3*. 

Note that if your project is not compatible with GPLv3, you **can not distribute `librashader.so` or `rashader.dll`**
alongside your project, **only `librashader-ld.so` or `rashader-ld.dll`**, which will do nothing without a librashader
implementation in the load path. The end user must obtain the implementation of librashader themselves.