summaryrefslogtreecommitdiff
path: root/chickadee/render.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2017-01-19 09:30:02 -0500
committerDavid Thompson <dthompson2@worcester.edu>2017-01-19 09:43:15 -0500
commitd89629e400a570122a57cc0cb7243ad40cc0a954 (patch)
treee37b4e555a0cade2c251c85df02b4d1ebf65d72c /chickadee/render.scm
parentaace6bb510656364cbd0dba02aea97a3c8d37e7f (diff)
render: Add framebuffers.
Diffstat (limited to 'chickadee/render.scm')
-rw-r--r--chickadee/render.scm14
1 files changed, 14 insertions, 0 deletions
diff --git a/chickadee/render.scm b/chickadee/render.scm
index efb5004..9588a95 100644
--- a/chickadee/render.scm
+++ b/chickadee/render.scm
@@ -26,16 +26,19 @@
#:use-module (chickadee math matrix)
#:use-module (chickadee render gpu)
#:use-module (chickadee render blend)
+ #:use-module (chickadee render framebuffer)
#:use-module (chickadee render shader)
#:use-module (chickadee render texture)
#:use-module (chickadee render vertex-buffer)
#:use-module (chickadee render viewport)
#:export (current-viewport
+ current-framebuffer
current-blend-mode
current-depth-test
current-texture
current-projection
with-viewport
+ with-framebuffer
with-blend-mode
with-depth-test
with-texture
@@ -44,6 +47,7 @@
gpu-apply*))
(define *current-viewport* null-viewport)
+(define *current-framebuffer* null-framebuffer)
(define *current-blend-mode* 'replace)
(define *current-depth-test* #f)
(define *current-texture* null-texture)
@@ -52,6 +56,9 @@
(define (current-viewport)
*current-viewport*)
+(define (current-framebuffer)
+ *current-framebuffer*)
+
(define (current-blend-mode)
*current-blend-mode*)
@@ -74,6 +81,9 @@
(define-syntax-rule (with-viewport viewport body ...)
(with (*current-viewport* viewport) body ...))
+(define-syntax-rule (with-framebuffer framebuffer body ...)
+ (with (*current-framebuffer* framebuffer) body ...))
+
(define-syntax-rule (with-blend-mode blend-mode body ...)
(with (*current-blend-mode* blend-mode) body ...))
@@ -133,6 +143,10 @@
(define-syntax-rule (gpu-apply* shader vertex-array count . uniforms)
(begin
+ ;; It's important that the framebuffer is set before setting the
+ ;; viewport because applying a new viewport will clear the current
+ ;; framebuffer.
+ (gpu-state-set! *framebuffer-state* (current-framebuffer))
(gpu-state-set! *viewport-state* (current-viewport))
(gpu-state-set! *blend-mode-state* (current-blend-mode))
(gpu-state-set! *depth-test-state* (current-depth-test))