2 (asdf:oos
'asdf
:load-op
'#:cl-glfw
)
3 (asdf:oos
'asdf
:load-op
'#:cl-glfw-opengl
)
4 (asdf:oos
'asdf
:load-op
'#:cl-glfw-glu
)
5 (asdf:oos
'asdf
:load-op
'#:cl-glfw-opengl-version_1_1
)
7 (declaim (optimize (debug 3)))
9 ;; This example uses the gl:synchronizing-program-arb mechanism to reload+recompile+relink shader files on-file-change
11 (glfw:do-window
("An ARB Synchronized Shader Example")
12 ((gl:with-setup-projection
13 (glu:perspective
45 4/3 0.1 50))
14 (unless (and (gl-ext:load-extension
"ARB_shader_objects")
15 (gl-ext:load-extension
"ARB_vertex_shader")
16 (gl-ext:load-extension
"ARB_fragment_shader"))
17 (error "I need ARB_vertex_shader and ARB_fragment_shader for this example. Sorry :(")))
18 (gl:clear gl
:+color-buffer-bit
+)
20 (gl:translate-f
0 0 -
5)
21 (gl:rotate-d
(* 10 (glfw:get-time
)) 1 1 0)
22 (gl:rotate-d
(* 90 (glfw:get-time
)) 0 0 1)
23 (let ((program (gl:synchronizing-program-arb
'synchronized-shader
24 (list gl
:+vertex-shader-arb
+ (merge-pathnames "synchronized-shader.vert" *load-truename
*))
25 (list gl
:+fragment-shader-arb
+ (merge-pathnames "synchronized-shader.frag" *load-truename
*)))))
26 (gl:with-use-program-arb program
27 (gl:uniform-1f-arb
(gl:get-uniform-location-arb program
"time") (glfw:get-time
))
28 (gl:with-begin gl
:+triangles
+
29 (gl:color-3f
1 0 0) (gl:vertex-3f
1 0 0)
30 (gl:color-3f
0 1 0) (gl:vertex-3f -
1 1 0)
31 (gl:color-3f
0 0 1) (gl:vertex-3f -
1 -
1 0)))))