Cut-out empty enum groups earlier (results in reordering of exports) and...
[cl-glfw/jecs.git] / examples / shader-arb.lisp
bloba81da14050669dedcac9c097aa1e6e373ddbb181
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 (defparameter *shader-program* nil)
8 (defparameter *uniform-time* nil)
10 (glfw:do-window ("An ARB Extension Shader Example")
11 ((gl:with-setup-projection
12 (glu:perspective 45 4/3 0.1 50))
13 (when (and (gl-ext:load-extension "ARB_shader_objects")
14 (gl-ext:load-extension "ARB_vertex_shader")
15 (gl-ext:load-extension "ARB_fragment_shader"))
16 (setf *shader-program*
17 (gl:make-program-arb
18 (gl:make-shader-arb gl:+vertex-shader-arb+ "
19 varying vec3 colour;
20 void main()
22 colour = gl_Color.rgb;
23 gl_Position = ftransform();
26 (gl:make-shader-arb gl:+fragment-shader-arb+ "
27 uniform float time;
28 varying vec3 colour;
29 const float pi2=2.0*3.14159265;
30 void main()
32 gl_FragColor = vec4(pow(sin(colour.r*pi2*4.0+mod(time*8.0,pi2)),2.0),
33 pow(sin(colour.g*pi2*4.0+mod(time*8.0,pi2)),2.0),
34 pow(sin(colour.b*pi2*4.0+mod(time*8.0,pi2)),2.0),
35 1.0);
37 "))))
38 (gl:use-program-object-arb *shader-program*)
39 (setf *uniform-time* (gl:get-uniform-location-arb *shader-program* "time")))
40 (gl:clear gl:+color-buffer-bit+)
41 (gl:load-identity)
42 (gl:translate-f 0 0 -5)
43 (gl:rotate-d (* 10 (glfw:get-time)) 1 1 0)
44 (gl:rotate-d (* 90 (glfw:get-time)) 0 0 1)
45 (gl:uniform-1f-arb *uniform-time* (glfw:get-time))
46 (gl:with-begin gl:+triangles+
47 (gl:color-3f 1 0 0) (gl:vertex-3f 1 0 0)
48 (gl:color-3f 0 1 0) (gl:vertex-3f -1 1 0)
49 (gl:color-3f 0 0 1) (gl:vertex-3f -1 -1 0)))