When glfw is not compiled as a framework, load the dynlib
[cl-glfw.git] / examples / shader-arb.lisp
blobce697e57551f3e19bbabe3011c8321587ce79480
1 (require '#:asdf)
2 (asdf:oos 'asdf:load-op '#:cl-glfw)
3 (asdf:oos 'asdf:load-op '#:cl-glfw-opengl-version_1_1)
4 (asdf:oos 'asdf:load-op '#:cl-glfw-glu)
6 (defparameter *shader-program* nil)
7 (defparameter *uniform-time* nil)
9 (glfw:do-window (:title "An ARB Extension Shader Example")
10 ((gl:with-setup-projection
11 (glu:perspective 45 4/3 0.1 50))
12 (when (and (gl-ext:load-extension "ARB_shader_objects")
13 (gl-ext:load-extension "ARB_vertex_shader")
14 (gl-ext:load-extension "ARB_fragment_shader"))
15 (setf *shader-program*
16 (gl:make-program-arb
17 (gl:make-shader-arb gl:+vertex-shader-arb+ "
18 varying vec3 colour;
19 void main()
21 colour = gl_Color.rgb;
22 gl_Position = ftransform();
25 (gl:make-shader-arb gl:+fragment-shader-arb+ "
26 uniform float time;
27 varying vec3 colour;
28 const float pi2=2.0*3.14159265;
29 void main()
31 gl_FragColor = vec4(pow(sin(colour.r*pi2*4.0+mod(time*8.0,pi2)),2.0),
32 pow(sin(colour.g*pi2*4.0+mod(time*8.0,pi2)),2.0),
33 pow(sin(colour.b*pi2*4.0+mod(time*8.0,pi2)),2.0),
34 1.0);
36 "))))
37 (gl:use-program-object-arb *shader-program*)
38 (setf *uniform-time* (gl:get-uniform-location-arb *shader-program* "time")))
39 (gl:clear gl:+color-buffer-bit+)
40 (gl:load-identity)
41 (gl:translate-f 0 0 -5)
42 (gl:rotate-d (* 10 (glfw:get-time)) 1 1 0)
43 (gl:rotate-d (* 90 (glfw:get-time)) 0 0 1)
44 (gl:uniform-1f-arb *uniform-time* (glfw:get-time))
45 (gl:with-begin gl:+triangles+
46 (gl:color-3f 1 0 0) (gl:vertex-3f 1 0 0)
47 (gl:color-3f 0 1 0) (gl:vertex-3f -1 1 0)
48 (gl:color-3f 0 0 1) (gl:vertex-3f -1 -1 0)))