fork download
  1. (def vertex-shader "
  2. attribute vec2 pos;
  3. void main()
  4. {
  5. gl_Position = vec4(pos, 0, 1);
  6. }")
  7.  
  8. (def fragment-shader "
  9. precision mediump float;
  10.  
  11. void main()
  12. {
  13. gl_FragColor = vec4(0, 0.8, 0, 1);
  14. }
  15. ")
  16.  
  17. (defn create-shader
  18. [gl text type]
  19. (let [shader (.createShader gl type)]
  20. (.shaderSource gl shader text)
  21. (.compileShader gl shader)
  22. shader))
  23.  
  24. (defn create-program
  25. [gl vstr fstr
  26. (let [program (.createProgram gl)
  27. vshader (create-shader gl vstr (.-VERTEX_SHADER gl))
  28. fshader (create-shader gl fstr (.-FRAGMENT_SHADER gl))]
  29. (.attachShader gl program vshader)
  30. (.attachShader gl program fshader)
  31. (.linkProgram gl program)
  32. program))
  33.  
  34. (defn init
  35. []
  36. (let [canvas (.getElementById js/document "c")
  37. gl (.getContext canvas "experimental-webgl")
  38. buffer (.createBuffer gl)
  39. vertices (js/Array. -0.5 -0.5
  40. 0.5 -0.5
  41. 0 0.5)
  42. program (create-program gl vertex-shader fragment-shader)]
  43. (.bindBuffer gl (.-ARRAY_BUFFER gl) buffer)
  44. (.bufferData gl (.-ARRAY_BUFFER gl) (js/Float32Array. vertices) (.-STATIC_DRAW gl))
  45. (.useProgram gl program)
  46. (set! (.-vertexPosAttrib program) (.getAttribLocation gl program "pos"))
  47. (.enableVertexAttribArray gl (.-vertexPosAttrib program))
  48. (.vertexAttribPointer gl (.-vertexPosAttrib program) 2 (.-FLOAT gl) false 0 0)
  49. (.drawArrays gl (.-TRIANGLES gl) 0 3)))
  50.  
  51. (set! (.-onload js/window) init)
  52.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty