diff options
Diffstat (limited to 'chickadee/graphics/pbr.scm')
-rw-r--r-- | chickadee/graphics/pbr.scm | 81 |
1 files changed, 3 insertions, 78 deletions
diff --git a/chickadee/graphics/pbr.scm b/chickadee/graphics/pbr.scm index 01a330c..1ed3777 100644 --- a/chickadee/graphics/pbr.scm +++ b/chickadee/graphics/pbr.scm @@ -22,6 +22,7 @@ ;;; Code: (define-module (chickadee graphics pbr) + #:use-module (chickadee config) #:use-module (chickadee math vector) #:use-module (chickadee graphics buffer) #:use-module (chickadee graphics color) @@ -87,84 +88,8 @@ #:double-sided? #f)) (define-graphics-variable pbr-shader - ;; TODO: Actually implement PBR. For now it's just the minimal amount - ;; of code needed to render the base texture of a mesh. - (strings->shader - " -#ifdef GLSL330 -layout (location = 0) in vec3 position; -layout (location = 1) in vec2 texcoord0; -layout (location = 2) in vec2 texcoord1; -layout (location = 3) in vec4 color0; -#elif defined(GLSL130) -in vec3 position; -in vec2 texcoord0; -in vec2 texcoord1; -in vec4 color0; -#elif defined(GLSL120) -attribute vec3 position; -attribute vec2 texcoord0; -attribute vec2 texcoord1; -attribute vec4 color0; -#endif -#ifdef GLSL120 -varying vec2 fragTexcoord0; -varying vec2 fragTexcoord1; -varying vec4 fragColor0; -#else -out vec2 fragTexcoord0; -out vec2 fragTexcoord1; -out vec4 fragColor0; -#endif -uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; - -void main(void) { - fragTexcoord0 = texcoord0; - fragTexcoord1 = texcoord1; - fragColor0 = color0; - gl_Position = projection * view * model * vec4(position.xyz, 1.0); -} -" - " -#ifdef GLSL120 -attribute vec2 fragTexcoord0; -attribute vec2 fragTexcoord1 -attribute vec4 fragColor0; -#else -in vec2 fragTexcoord0; -in vec2 fragTexcoord1; -in vec4 fragColor0; -#endif -#ifdef GLSL330 -out vec4 fragColor; -#endif -uniform bool textured0; -uniform bool textured1; -uniform bool vertexColored; -uniform vec3 baseColorFactor; -uniform sampler2D texture0; -uniform sampler2D texture1; - -void main (void) { - vec4 finalColor = vec4(baseColorFactor, 1.0); - if(vertexColored) { - finalColor *= fragColor0; - } - if(textured0) { - finalColor *= texture(texture0, fragTexcoord0); - } - if(textured1) { - finalColor += texture(texture1, fragTexcoord1); - } -#ifdef GLSL330 - fragColor = finalColor; -#else - gl_FragColor = finalColor; -#endif -} -")) + (load-shader (scope-datadir "shaders/pbr-vert.glsl") + (scope-datadir "shaders/pbr-frag.glsl"))) (define (shader-apply/pbr vertex-array material model-matrix view-matrix) (let* ((shader (graphics-variable-ref pbr-shader)) |