Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- glsl :: QuasiQuoter
- comp :: QuasiQuoter
- frag :: QuasiQuoter
- geom :: QuasiQuoter
- tesc :: QuasiQuoter
- tese :: QuasiQuoter
- vert :: QuasiQuoter
- type GLSLError = String
- type GLSLWarning = String
- compileShaderQ :: Maybe String -> String -> String -> Q Exp
- compileShader :: MonadIO m => Maybe Loc -> Maybe String -> String -> String -> m ([GLSLWarning], Either [GLSLError] ByteString)
- processValidatorMessages :: ByteString -> ([GLSLWarning], [GLSLError])
Documentation
glsl :: QuasiQuoter Source #
glsl
is a QuasiQuoter which produces GLSL source code with #line
directives inserted so that error locations point to the correct location in
the Haskell source file. It also permits basic string interpolation.
- Interpolated variables are prefixed with
$
- They can optionally be surrounded with braces like
${foo}
- Interpolated variables are converted to strings with
show
- To escape a
$
use\$
It is intended to be used in concert with compileShaderQ
like so
myConstant = 3.141 -- Note that this will have to be in a different module myFragmentShader = $(compileShaderQ "frag" [glsl| #version 450 const float myConstant = ${myConstant}; main (){ } |])
An explicit example (interactive
is from doctest):
>>>
let version = 450 :: Int in [glsl|#version $version|]
"#version 450\n#extension GL_GOOGLE_cpp_style_line_directive : enable\n#line 46 \"<interactive>\"\n"
Note that line number will be thrown off if any of the interpolated variables contain newlines.
comp :: QuasiQuoter Source #
QuasiQuoter for creating a compute shader.
Equivalent to calling $(compileShaderQ "comp" [glsl|...|])
without
interpolation support.
frag :: QuasiQuoter Source #
QuasiQuoter for creating a fragment shader.
Equivalent to calling $(compileShaderQ "frag" [glsl|...|])
without
interpolation support.
geom :: QuasiQuoter Source #
QuasiQuoter for creating a geometry shader.
Equivalent to calling $(compileShaderQ "geom" [glsl|...|])
without
interpolation support.
tesc :: QuasiQuoter Source #
QuasiQuoter for creating a tessellation control shader.
Equivalent to calling $(compileShaderQ "tesc" [glsl|...|])
without
interpolation support.
tese :: QuasiQuoter Source #
QuasiQuoter for creating a tessellation evaluation shader.
Equivalent to calling $(compileShaderQ "tese" [glsl|...|])
without
interpolation support.
vert :: QuasiQuoter Source #
QuasiQuoter for creating a vertex shader.
Equivalent to calling $(compileShaderQ "vert" [glsl|...|])
without
interpolation support.
type GLSLWarning = String Source #
:: Maybe String | Argument to pass to `--target-env` |
-> String | stage |
-> String | glsl code |
-> Q Exp | Spir-V bytecode |
Compile a glsl shader to spir-v using glslangValidator.
Messages are converted to GHC warnings or errors depending on compilation success.
:: MonadIO m | |
=> Maybe Loc | Source location |
-> Maybe String | Argument to pass to `--target-env` |
-> String | stage |
-> String | glsl code |
-> m ([GLSLWarning], Either [GLSLError] ByteString) | Spir-V bytecode with warnings or errors |
Compile a glsl shader to spir-v using glslangValidator
processValidatorMessages :: ByteString -> ([GLSLWarning], [GLSLError]) Source #