opengl/shaders
compile-shader
(compile-shader [stage :cstr source :cstr] :int)
compile a single GLSL shader stage.
| stage | shader stage keyword: :vertex | :fragment | :geometry | :compute | |
| source | GLSL source string (e.g. from compile-glsl in tur-glsl) |
Opaque :int shader handle. Prints the driver error log and calls exit(1) if compilation fails.
(compile-shader ":vertex" vert-src) ; => :int shader handle
Since: v0.1.0
shader-program
(shader-program [& shaders] :int)
link compiled shader objects into a GL program.
| shaders | variadic list of :int shader handles from compile-shader |
Opaque :int program handle. Individual shaders are deleted after linking. Prints the driver error log and calls exit(1) if linking fails.
(shader-program vs fs) ; vertex + fragment (shader-program vs gs fs) ; + geometry stage
Since: v0.1.0
use-program
(use-program [prog :int] :void)
install a shader program as the current program.
| prog | program handle from shader-program, or 0 to uninstall |
(use-program prog) ... (use-program 0)
Since: v0.1.0
with-program
(with-program [prog & body])
install a program for the duration of body, then uninstall it.
| prog | program handle from shader-program | |
| body | one or more expressions executed with the program active |
(with-program prog
(set-uniform-mat4 prog "model" (mat4-ptr model))
(draw-arrays ":triangles" 0 3))
Since: v0.1.0
set-uniform-int
(set-uniform-int [prog :int name :cstr v :int] :void)
set an integer uniform in a shader program.
| prog | program handle | |
| name | uniform variable name string | |
| v | integer value |
(set-uniform-int prog "texture1" 0)
Since: v0.1.0
set-uniform-float
(set-uniform-float [prog :int name :cstr v :float] :void)
set a float uniform in a shader program.
| prog | program handle | |
| name | uniform variable name string | |
| v | float value |
Since: v0.1.0
set-uniform-vec2
(set-uniform-vec2 [prog :int name :cstr x :float y :float] :void)
set a vec2 uniform in a shader program.
| prog | program handle | |
| name | uniform variable name string | |
| x y -- vector components |
Since: v0.1.0
set-uniform-vec3
(set-uniform-vec3 [prog :int name :cstr x :float y :float z :float] :void)
set a vec3 uniform in a shader program.
| prog | program handle | |
| name | uniform variable name string | |
| x y z -- vector components |
(set-uniform-vec3 prog "light-pos" 1.5 1.5 1.5)
Since: v0.1.0
set-uniform-vec4
(set-uniform-vec4 [prog :int name :cstr x :float y :float z :float w :float] :void)
set a vec4 uniform in a shader program.
| prog | program handle | |
| name | uniform variable name string | |
| x y z w -- vector components |
Since: v0.1.0
set-uniform-mat4
(set-uniform-mat4 [prog :int name :cstr mat :int] :void)
upload a 4x4 column-major float matrix to a uniform.
| prog | program handle | |
| name | uniform variable name string | |
| mat | pointer to 16 floats in column-major order (from mat4-ptr) |
(set-uniform-mat4 prog "model" (mat4-ptr model-mat))
Since: v0.1.0