Fixed examples for new includes pattern.
[cl-glfw.git] / examples / synchronized-shader-arb.lisp
blob8efc67f52ed79a6de2af1317bea1dfea21241c14
1 (require '#:asdf)
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+)
19 (gl:load-identity)
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)))))