render: scene: Apply base color texture and factor.
authorDavid Thompson <dthompson2@worcester.edu>
Fri, 7 Sep 2018 13:03:43 +0000 (09:03 -0400)
committerDavid Thompson <dthompson2@worcester.edu>
Fri, 7 Sep 2018 13:03:43 +0000 (09:03 -0400)
* chickadee/render/scene.scm (draw-primitive): Set base color texture
and send base color factor as uniform to shader.
* data/shaders/pbr/pbr-vert.glsl (texcoord_0): New input attribute.
(frag_tex): New output attribute.
* data/shaders/pbr/pbr-frag.glsl (frag_tex): New input attribute.
(base_color_factor, base_color_texture): New uniforms.

chickadee/render/scene.scm
data/shaders/pbr/pbr-frag.glsl
data/shaders/pbr/pbr-vert.glsl

index 60b34ce..db8b2bf 100644 (file)
   (%make-scene name nodes))
 
 (define (draw-primitive primitive matrix)
-  ;; TODO: Use material.
   ;; TODO: Actually use physically based rendering.
-  (let ((mvp (primitive-matrix primitive)))
+  (let ((mvp (primitive-matrix primitive))
+        (material (primitive-material primitive)))
     (matrix4-mult! mvp matrix (current-projection))
-    (gpu-apply (pbr-shader)
-               (primitive-vertex-array primitive)
-               #:mvp mvp)))
+    (with-texture 0 (material-base-color-texture material)
+      (gpu-apply (pbr-shader)
+                 (primitive-vertex-array primitive)
+                 #:mvp mvp
+                 #:base_color_factor (material-base-color-factor material)))))
 
 (define (draw-mesh mesh matrix)
   (for-each (lambda (primitive)
index a4790b8..1552880 100644 (file)
@@ -1,5 +1,10 @@
 #version 130
 
+in vec2 frag_tex;
+uniform vec3 base_color_factor;
+uniform sampler2D base_color_texture;
+
 void main (void) {
-  gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
+  gl_FragColor = texture2D(base_color_texture, frag_tex) *
+    vec4(base_color_factor, 1.0);
 }
index 938f475..b6fefef 100644 (file)
@@ -1,8 +1,11 @@
 #version 130
 
 in vec3 position;
+in vec2 texcoord_0;
+out vec2 frag_tex;
 uniform mat4 mvp;
 
 void main(void) {
+  frag_tex = texcoord_0;
   gl_Position = mvp * vec4(position.xyz, 1.0);
 }