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