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
*
17 (gl:make-shader-arb gl
:+vertex-shader-arb
+ "
21 colour = gl_Color.rgb;
22 gl_Position = ftransform();
25 (gl:make-shader-arb gl
:+fragment-shader-arb
+ "
28 const float pi2=2.0*3.14159265;
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),
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
+)
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)))