diff options
author | David Thompson <dthompson2@worcester.edu> | 2023-09-14 19:53:07 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2023-11-08 21:35:34 -0500 |
commit | 783713719bc6fb6f891191b2cba0a1c9053a3674 (patch) | |
tree | a4dc813f3cf784adc2a74024ca1bbbbf591f192a | |
parent | 5c6c61f5750ad0dc798ae4c3ca5d19d9b25551cc (diff) |
graphics: Factor out GL calls in viewport module.
-rw-r--r-- | chickadee/graphics/gpu.scm | 13 | ||||
-rw-r--r-- | chickadee/graphics/viewport.scm | 27 |
2 files changed, 18 insertions, 22 deletions
diff --git a/chickadee/graphics/gpu.scm b/chickadee/graphics/gpu.scm index 44ffa7b..93aac87 100644 --- a/chickadee/graphics/gpu.scm +++ b/chickadee/graphics/gpu.scm @@ -26,6 +26,7 @@ #:use-module (gl) #:use-module (ice-9 match) #:use-module (rnrs bytevectors) + #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (system foreign) #:export (blend-mode? @@ -216,6 +217,7 @@ set-gpu-texture! gpu-gc gpu-reset! + gpu-clear-viewport gpu-draw gpu-draw/indexed gpu-draw/instanced @@ -1193,6 +1195,17 @@ (when divisor (gl-vertex-attrib-divisor index divisor))) +(define (gpu-clear-viewport flags) + (gl-clear + (fold (lambda (flag result) + (logior (match flag + ('depth-buffer 256) + ('accum-buffer 512) + ('stencil-buffer 1024) + ('color-buffer 16384)) + result)) + 0 flags))) + (define (gpu-draw gpu mode count offset) (gl-draw-arrays (symbol->begin-mode mode) offset count)) diff --git a/chickadee/graphics/viewport.scm b/chickadee/graphics/viewport.scm index 4258e05..9d93c0e 100644 --- a/chickadee/graphics/viewport.scm +++ b/chickadee/graphics/viewport.scm @@ -22,12 +22,10 @@ (define-module (chickadee graphics viewport) #:use-module (ice-9 match) #:use-module (srfi srfi-9) - #:use-module (gl) #:use-module (chickadee utils) #:use-module (chickadee graphics color) #:use-module (chickadee graphics engine) #:use-module (chickadee graphics gpu) - #:use-module (chickadee graphics gl) #:export (make-viewport viewport? viewport-rect @@ -40,12 +38,11 @@ %default-clear-color)) (define-record-type <viewport> - (%make-viewport rect clear-color clear-flags clear-mask) + (%make-viewport rect clear-color clear-flags) viewport? (rect viewport-rect) (clear-color viewport-clear-color) - (clear-flags viewport-clear-flags) - (clear-mask viewport-clear-mask)) + (clear-flags viewport-clear-flags)) (define %default-clear-flags '(color-buffer depth-buffer stencil-buffer)) ;; Just a fun color from the Dawnbringer 32-color palette instead of @@ -57,19 +54,6 @@ n (error "expecting non-negative integer:" n))) -;; TODO: This is gross. Get rid of it. -(define clear-buffer-mask - (memoize - (lambda (flags) - (apply logior - ;; Map symbols to OpenGL constants. - (map (match-lambda - ('depth-buffer 256) - ('accum-buffer 512) - ('stencil-buffer 1024) - ('color-buffer 16384)) - flags))))) - (define* (make-viewport x y width height #:key (clear-color %default-clear-color) (clear-flags %default-clear-flags)) @@ -84,8 +68,7 @@ CLEAR-FLAGS are 'color-buffer', 'depth-buffer', 'accum-buffer', and (assert-non-negative-integer width) (assert-non-negative-integer height)) clear-color - clear-flags - (clear-buffer-mask clear-flags))) + clear-flags)) (define null-viewport (make-viewport 0 0 0 0)) @@ -95,7 +78,7 @@ CLEAR-FLAGS are 'color-buffer', 'depth-buffer', 'accum-buffer', and (clear-color (viewport-clear-color viewport))) body ...))) -;; TODO: Add clear buffer mask to managed gpu state. +;; TODO: Use current viewport's clear flags. (define (clear-viewport) (graphics-engine-commit! (current-graphics-engine)) - (gl-clear (clear-buffer-mask %default-clear-flags))) + (gpu-clear-viewport %default-clear-flags)) |