diff options
Diffstat (limited to 'chickadee/render/buffer.scm')
-rw-r--r-- | chickadee/render/buffer.scm | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/chickadee/render/buffer.scm b/chickadee/render/buffer.scm index 3361ba2..c38e1fc 100644 --- a/chickadee/render/buffer.scm +++ b/chickadee/render/buffer.scm @@ -50,7 +50,6 @@ map-buffer! unmap-buffer! with-mapped-buffer - *buffer-state* make-buffer-view make-streaming-buffer-view buffer-view? @@ -76,7 +75,6 @@ vertex-array-attributes vertex-array-mode null-vertex-array - *vertex-array-state* render-vertices render-vertices/instanced)) @@ -121,9 +119,6 @@ (gl-bind-buffer (buffer-target-gl buffer) (buffer-id buffer))) -(define *buffer-state* - (make-gpu-state apply-buffer null-buffer)) - (define (generate-buffer-gl) (let ((bv (u32vector 1))) (gl-gen-buffers 1 (bytevector->pointer bv)) @@ -172,7 +167,7 @@ NAME is simply an arbitrary string for debugging purposes that is never sent to the GPU." ;; Weird bugs will occur when creating a new vertex buffer while a ;; vertex array is bound. - (gpu-state-set! *vertex-array-state* null-vertex-array) + (set-gpu-vertex-array! (current-gpu) null-vertex-array) (let ((buffer (gpu-guard (%make-buffer (generate-buffer-gl) name @@ -181,14 +176,14 @@ never sent to the GPU." target usage #f)))) - (gpu-state-set! *buffer-state* buffer) + (set-gpu-vertex-buffer! (current-gpu) buffer) (gl-buffer-data (buffer-target-gl buffer) length (if data (bytevector->pointer data offset) %null-pointer) (buffer-usage-gl buffer)) - (gpu-state-set! *buffer-state* null-buffer) + (set-gpu-vertex-buffer! (current-gpu) null-buffer) buffer)) (define* (make-streaming-buffer length #:key @@ -210,7 +205,7 @@ vertex buffer data back to the GPU." (unless (buffer-mapped? buffer) ;; Don't map a buffer that is already mapped! (let ((target (buffer-target-gl buffer)) (length (buffer-length buffer))) - (gpu-state-set! *buffer-state* buffer) + (set-gpu-vertex-buffer! (current-gpu) buffer) (when (eq? (buffer-usage buffer) 'stream) ;; Orphan the buffer to avoid implicit synchronization. ;; See: https://www.opengl.org/wiki/Buffer_Object_Streaming#Buffer_re-specification @@ -223,7 +218,7 @@ vertex buffer data back to the GPU." (define (unmap-buffer! buffer) "Return the mapped vertex buffer data for BUFFER to the GPU." - (gpu-state-set! *buffer-state* buffer) + (set-gpu-vertex-buffer! (current-gpu) buffer) (gl-unmap-buffer (buffer-target-gl buffer)) (set-buffer-data! buffer #f)) @@ -404,7 +399,7 @@ which attributes advance when rendering multiple instances." (with-mapped-buffer (buffer-view->buffer buffer-view) body ...)) (define* (apply-buffer-view buffer-view #:optional attribute-index) - (gpu-state-set! *buffer-state* (buffer-view->buffer buffer-view)) + (set-gpu-vertex-buffer! (current-gpu) (buffer-view->buffer buffer-view)) ;; If there is no attribute-index, we assume this is being bound for ;; use as an index buffer. (when attribute-index @@ -547,9 +542,6 @@ which attributes advance when rendering multiple instances." (define (apply-vertex-array va) (gl-bind-vertex-array (vertex-array-id va))) -(define *vertex-array-state* - (make-gpu-state apply-vertex-array null-vertex-array)) - (define* (make-vertex-array #:key indices attributes (mode 'triangles)) "Return a new vertex array using the index data within the typed buffer INDICES and the vertex attribute data within ATTRIBUTES, an @@ -572,13 +564,13 @@ argument may be overridden. The following values are supported: indices attributes mode)))) - (gpu-state-set! *vertex-array-state* array) + (set-gpu-vertex-array! (current-gpu) array) (for-each (match-lambda ((index . buffer-view) (apply-buffer-view buffer-view index))) attributes) (apply-buffer-view indices) - (gpu-state-set! *vertex-array-state* null-vertex-array) + (set-gpu-vertex-array! (current-gpu) null-vertex-array) array)) (define (vertex-array-mode-gl array) @@ -592,7 +584,7 @@ argument may be overridden. The following values are supported: ('triangle-fan (begin-mode triangle-fan)))) (define* (render-vertices array #:optional count) - (gpu-state-set! *vertex-array-state* array) + (set-gpu-vertex-array! (current-gpu) array) (let ((indices (vertex-array-indices array))) (gl-draw-elements (vertex-array-mode-gl array) (or count @@ -601,7 +593,7 @@ argument may be overridden. The following values are supported: %null-pointer))) (define* (render-vertices/instanced array instances #:optional count) - (gpu-state-set! *vertex-array-state* array) + (set-gpu-vertex-array! (current-gpu) array) (let ((indices (vertex-array-indices array))) (gl-draw-elements-instanced (vertex-array-mode-gl array) (or count |