We'd always check shaders each time we were building, even if the
shaders didn't change. This is caused by the check not producing
any file, so ninja can't check whether the output file is up-to-date.
Fix this by capturing the output and write to a file.
TODO: error messages are no longer visible.
Instead of having a C file with strings for each shader, move each
shader into its own file. Use a small POSIX shell script to convert
the files into C strings (can't wait for C23 #embed...).
The benefits from this are:
- Improved readability and syntax highlighting.
- Line numbers in shader compiler errors are easier to make sense of.
- Consistency with the Vulkan renderer.
- Shaders will become more complicated as we add color management
features.