summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chickadee/graphics/shader.scm16
1 files changed, 16 insertions, 0 deletions
diff --git a/chickadee/graphics/shader.scm b/chickadee/graphics/shader.scm
index 94c6bfc..73c8136 100644
--- a/chickadee/graphics/shader.scm
+++ b/chickadee/graphics/shader.scm
@@ -33,6 +33,7 @@
#:use-module (chickadee graphics color)
#:use-module (chickadee graphics engine)
#:use-module (chickadee graphics gl)
+ #:use-module (chickadee graphics sglsl)
#:use-module (chickadee graphics texture)
#:use-module (chickadee utils)
#:export (shader-data-type?
@@ -59,6 +60,7 @@
current-shader
load-shader
strings->shader
+ make-shader*
shader-uniform
shader-uniforms
shader-attributes
@@ -790,6 +792,20 @@ shader program."
(lambda (fragment-port)
(make-shader vertex-port fragment-port))))))
+(define-syntax make-shader*
+ (lambda (x)
+ (syntax-case x ()
+ ((_ vertex fragment)
+ (with-syntax ((vert-glsl (datum->syntax x
+ (with-output-to-string
+ (lambda ()
+ (sglsl->glsl (syntax->datum #'vertex))))))
+ (frag-glsl (datum->syntax x
+ (with-output-to-string
+ (lambda ()
+ (sglsl->glsl (syntax->datum #'fragment)))))))
+ #'(strings->shader (pk vert-glsl) (pk frag-glsl)))))))
+
(define (shader-uniform shader name)
"Return the metadata for the uniform NAME in SHADER."
(let ((uniform (uniform-namespace-ref (shader-uniforms shader) name)))