diff --git a/frontend/src/app/main/ui/workspace/viewport/gl.cljs b/frontend/src/app/main/ui/workspace/viewport/gl.cljs index 93d81c130c..5d9df621f5 100644 --- a/frontend/src/app/main/ui/workspace/viewport/gl.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/gl.cljs @@ -12,6 +12,11 @@ (def default-vertex-shader (slurp "src/app/util/gl/shaders/default.v.glsl")) (def default-fragment-shader (slurp "src/app/util/gl/shaders/default.f.glsl")) +#_(def shaders (js/Map.)) +(def programs (js/Map.)) +#_(def textures (js/Map.)) +#_(def framebuffers (js/Map.)) + (defn resize-canvas-to [canvas width height] (let [resized-width (not= (.-width canvas) width) @@ -31,19 +36,26 @@ (defn prepare-gl [gl] - (let [default-program (gl/create-program-from-sources gl default-vertex-shader default-fragment-shader)])) + (let [default-program (gl/create-program-from-sources gl default-vertex-shader default-fragment-shader)] + (.set programs "default" default-program))) (defn render-gl [gl objects] - (.clearColor gl 1.0 0.0 1.0 1.0) + (.clearColor gl 0.0 0.0 0.0 0.0) (.clear gl (.-COLOR_BUFFER_BIT gl)) (.viewport gl 0 0 (.-width (.-canvas gl)) (.-height (.-canvas gl))) - (for [object objects] + (.useProgram gl (.get programs "default")) + (.uniform2f gl (.getUniformLocation gl (.get programs "default") "u_screenSize") (.-width (.-canvas gl)) (.-height (.-canvas gl))) - - (.drawArrays gl (.TRIANGLES gl) 0 4))) + (println "objects vals" (vals objects)) + (doseq [[_ object] objects] + (do + (.uniform4f gl (.getUniformLocation gl (.get programs "default") "u_color") 1.0 0.0 0.0 1.0) + (.uniform2f gl (.getUniformLocation gl (.get programs "default") "u_size") (:width object) (:height object)) + (.uniform2f gl (.getUniformLocation gl (.get programs "default") "u_position") (:x object) (:y object)) + (.drawArrays gl (.-TRIANGLE_STRIP gl) 0 4)))) (mf/defc canvas "A canvas element with a WebGL context." diff --git a/frontend/src/app/util/gl.cljs b/frontend/src/app/util/gl.cljs index d848950194..8e4dd91455 100644 --- a/frontend/src/app/util/gl.cljs +++ b/frontend/src/app/util/gl.cljs @@ -18,7 +18,8 @@ (.shaderSource gl shader source) (.compileShader gl shader) (when-not (.getShaderParameter gl shader (.-COMPILE_STATUS gl)) - (throw (js/Error. (dm/str (get-shader-type gl type) " " (.getShaderInfoLog gl shader))))))) + (throw (js/Error. (dm/str (get-shader-type gl type) " " (.getShaderInfoLog gl shader))))) + shader)) (defn create-vertex-shader "Creates a vertex shader with the given source" diff --git a/frontend/src/app/util/gl/shaders/default.f.glsl b/frontend/src/app/util/gl/shaders/default.f.glsl index 7578853e51..d950503467 100644 --- a/frontend/src/app/util/gl/shaders/default.f.glsl +++ b/frontend/src/app/util/gl/shaders/default.f.glsl @@ -2,9 +2,10 @@ precision highp float; -in vec2 v_texCoord; +// in vec2 v_texCoord; -uniform sampler2D u_texture; +// uniform sampler2D u_texture; +uniform vec4 u_color; out vec4 fragColor; @@ -12,5 +13,6 @@ void main() { // fragColor = texture(u_framebuffer, v_texCoord) + texture(u_texture, v_texCoord); // fragColor = texture(u_texture, v_texCoord); // Pintamos rosita - fragColor = vec4(1.0, 0.0, 1.0, 1.0); + fragColor = u_color; + // fragColor = vec4(1.0, 0.0, 1.0, 1.0); } \ No newline at end of file diff --git a/frontend/src/app/util/gl/shaders/default.v.glsl b/frontend/src/app/util/gl/shaders/default.v.glsl index 97e8ac7053..9a876d13c4 100644 --- a/frontend/src/app/util/gl/shaders/default.v.glsl +++ b/frontend/src/app/util/gl/shaders/default.v.glsl @@ -6,7 +6,7 @@ uniform vec2 u_screenSize; uniform vec2 u_position; uniform vec2 u_size; -out vec2 v_texCoord; +// out vec2 v_texCoord; vec2 get_base_position(int id) { if(id == 0) { @@ -22,6 +22,7 @@ vec2 get_base_position(int id) { } } +/* vec2 get_tex_position(int id) { if(id == 0) { return vec2(0.0f, 1.0f); @@ -35,8 +36,9 @@ vec2 get_tex_position(int id) { return vec2(0.0f, 0.0f); } } +*/ void main() { gl_Position = vec4((get_base_position(gl_VertexID) * u_size + u_position) / u_screenSize, 0.0f, 1.0f); - v_texCoord = get_tex_position(gl_VertexID); + // v_texCoord = get_tex_position(gl_VertexID); } \ No newline at end of file