summaryrefslogtreecommitdiff
path: root/chickadee.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2023-09-01 09:00:01 -0400
committerDavid Thompson <dthompson2@worcester.edu>2023-11-08 21:35:34 -0500
commit1425a0dc73f7fa37612b7a82f090e9b10ddebf25 (patch)
tree97de459a6b021c7abb04944cdde512efe5909bd4 /chickadee.scm
parentd969c19756227899b39967989fa971fa3452e872 (diff)
First pass of rendering engine rewrite.
The (chickadee graphics gpu) module now handles most of the low-level OpenGL object creation/deletion/binding. The (chickadee graphics engine) module handles the with-graphics-state stuff via a render context object. There's lots of stuff that isn't great, but it's the first step towards a graphics backend agnostic rendering layer.
Diffstat (limited to 'chickadee.scm')
-rw-r--r--chickadee.scm27
1 files changed, 15 insertions, 12 deletions
diff --git a/chickadee.scm b/chickadee.scm
index 05f3d65..88928e1 100644
--- a/chickadee.scm
+++ b/chickadee.scm
@@ -28,6 +28,7 @@
#:use-module (chickadee graphics color)
#:use-module (chickadee graphics engine)
#:use-module (chickadee graphics gl)
+ #:use-module (chickadee graphics gpu)
#:use-module (chickadee graphics viewport)
#:use-module (chickadee utils)
#:use-module (gl)
@@ -306,14 +307,15 @@ border is disabled, otherwise it is enabled.")
#:fullscreen? window-fullscreen?
#:resizable? window-resizable?
#:multisample? #f)))
- (gfx (make-graphics-engine (window-gl-context window)))
- (default-viewport (make-atomic-box
+ (default-viewport (vector
(make-viewport 0 0 window-width window-height
#:clear-color clear-color)))
- (default-projection (make-atomic-box
+ (default-projection (vector
(orthographic-projection 0 window-width
window-height 0
- 0 1))))
+ 0 1)))
+ (gpu (make-gpu (window-gl-context window)))
+ (gfx (make-graphics-engine gpu)))
(define (invert-y y)
;; SDL's origin is the top-left, but our origin is the bottom
;; left so we need to invert Y coordinates that SDL gives us.
@@ -399,11 +401,11 @@ border is disabled, otherwise it is enabled.")
((width height)
(set! window-width width)
(set! window-height height)
- (atomic-box-set! default-viewport
- (make-viewport 0 0 width height
- #:clear-color clear-color))
- (atomic-box-set! default-projection
- (orthographic-projection 0 width height 0 0 1))
+ (vector-set! default-viewport 0
+ (make-viewport 0 0 width height
+ #:clear-color clear-color))
+ (vector-set! default-projection 0
+ (orthographic-projection 0 width height 0 0 1))
(window-resize width height))))))
;; Process all pending events.
(let loop ((event (poll-event)))
@@ -417,11 +419,12 @@ border is disabled, otherwise it is enabled.")
;; that were queued to play this frame start playing immediately.
(update-audio)
;; Free any GPU resources that have been GC'd.
- (graphics-engine-reap! gfx))
+ (graphics-engine-gc gfx))
(define (render-sdl-opengl alpha)
- (with-graphics-state! ((g:viewport (atomic-box-ref default-viewport)))
+ (graphics-engine-reset! gfx)
+ (with-viewport (vector-ref default-viewport 0)
(clear-viewport)
- (with-projection (atomic-box-ref default-projection)
+ (with-graphics-state ((projection (vector-ref default-projection 0)))
(draw alpha)))
(sdl2:swap-gl-window (unwrap-window window)))
(define (on-error e stack)