From 07fc116e7be92c005a1cd9a73dc435ec7969dd3c Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sun, 19 Feb 2023 13:30:08 -0500 Subject: Add gl_FragCoord support. --- chickadee/graphics/seagull.scm | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/chickadee/graphics/seagull.scm b/chickadee/graphics/seagull.scm index 2d7b7f8..800a513 100644 --- a/chickadee/graphics/seagull.scm +++ b/chickadee/graphics/seagull.scm @@ -224,8 +224,12 @@ (proc name exp))) env)) -(define (top-level-env) - (empty-env)) +(define (top-level-env stage) + (case stage + ((vertex) + (empty-env)) + ((fragment) + '((fragment:coord . fragment:coord))))) ;;; @@ -2391,6 +2395,7 @@ (vertex:clip-distance ,type:float))) ((fragment) `((fragment:depth ,type:float) + (fragment:coord ,type:vec4) (texture . ,type:texture)))))) ;; TODO: Add some kind of context object that is threaded through the @@ -2802,6 +2807,9 @@ names exps)) '(#f)) +(define %built-in-input-map + '((fragment:coord . gl_FragCoord))) + (define* (emit-glsl exp stage version port #:optional (level 0)) (match exp (('t _ (? exact-integer? n)) @@ -2811,7 +2819,7 @@ (('t _ (? boolean? b)) (emit:boolean b stage version port level)) (('t _ (? symbol? var)) - (list var)) + (list (or (assq-ref %built-in-input-map var) var))) (('t _ ('if predicate consequent alternate)) (emit:if predicate consequent alternate stage version port level)) (('t _ ('values exps ...)) @@ -2900,7 +2908,7 @@ (let ((source* `(top-level ,(append inputs outputs uniforms) ,body))) (define-values (expanded global-map) - (expand source* stage (top-level-env))) + (expand source* stage (top-level-env stage))) (let* ((simplified (simplify-exp expanded (empty-env))) (pruned (prune simplified)) (hoisted (hoist-functions* pruned)) -- cgit v1.2.3