Cut-out empty enum groups earlier (results in reordering of exports) and...
[cl-glfw/jecs.git] / examples / shader.lisp
blob548d3d3bdab6c51b764bb11aa17b5274f787b0f7
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_2_0)
7 (defparameter *shader-program* nil)
8 (defparameter *uniform-time* nil)
10 (glfw:do-window ("An OpenGL 2.0 Shader Example")
11 ((gl:with-setup-projection
12 (glu:perspective 45 4/3 0.1 50))
13 (setf *shader-program*
14 (gl:make-program
15 (gl:make-shader gl:+vertex-shader+ "
16 varying vec3 colour;
17 void main()
19 colour = gl_Color.rgb;
20 gl_Position = ftransform();
23 (gl:make-shader gl:+fragment-shader+ "
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 *shader-program*)
36 (setf *uniform-time* (gl:get-uniform-location *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 *uniform-time* (coerce (glfw:get-time) 'single-float))
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)))