From 1425a0dc73f7fa37612b7a82f090e9b10ddebf25 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 1 Sep 2023 09:00:01 -0400 Subject: 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. --- chickadee.scm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'chickadee.scm') 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) -- cgit v1.2.3