summaryrefslogtreecommitdiff
path: root/chickadee/render/buffer.scm
diff options
context:
space:
mode:
Diffstat (limited to 'chickadee/render/buffer.scm')
-rw-r--r--chickadee/render/buffer.scm234
1 files changed, 117 insertions, 117 deletions
diff --git a/chickadee/render/buffer.scm b/chickadee/render/buffer.scm
index e784456..19d1e8d 100644
--- a/chickadee/render/buffer.scm
+++ b/chickadee/render/buffer.scm
@@ -51,25 +51,25 @@
unmap-buffer!
with-mapped-buffer
*buffer-state*
- make-typed-buffer
- make-streaming-typed-buffer
- typed-buffer?
- typed-buffer->buffer
- typed-buffer->vector
- typed-buffer-name
- typed-buffer-offset
- typed-buffer-component-type
- typed-buffer-normalized?
- typed-buffer-count
- typed-buffer-type
- typed-buffer-max
- typed-buffer-min
- typed-buffer-sparse
- typed-buffer-data
- typed-buffer-divisor
- map-typed-buffer!
- unmap-typed-buffer!
- with-mapped-typed-buffer
+ make-buffer-view
+ make-streaming-buffer-view
+ buffer-view?
+ buffer-view->buffer
+ buffer-view->vector
+ buffer-view-name
+ buffer-view-offset
+ buffer-view-component-type
+ buffer-view-normalized?
+ buffer-view-count
+ buffer-view-type
+ buffer-view-max
+ buffer-view-min
+ buffer-view-sparse
+ buffer-view-data
+ buffer-view-divisor
+ map-buffer-view!
+ unmap-buffer-view!
+ with-mapped-buffer-view
make-vertex-array
vertex-array?
vertex-array-indices
@@ -237,29 +237,29 @@ vertex buffer data back to the GPU."
;;;
-;;; Typed Buffers
+;;; Buffer Views
;;;
-(define-record-type <typed-buffer>
- (%make-typed-buffer name buffer offset component-type
- normalized? length type max min sparse divisor)
- typed-buffer?
- (name typed-buffer-name)
- (buffer typed-buffer->buffer)
- (offset typed-buffer-offset)
- (component-type typed-buffer-component-type)
- (normalized? typed-buffer-normalized?)
- (length typed-buffer-length)
- (type typed-buffer-type)
- (max typed-buffer-max)
- (min typed-buffer-min)
- (sparse typed-buffer-sparse)
- (divisor typed-buffer-divisor)) ; for instanced rendering
-
-(define (typed-buffer-stride typed-buffer)
- (or (buffer-stride (typed-buffer->buffer typed-buffer))
- (* (type-size (typed-buffer-type typed-buffer))
- (component-type-size (typed-buffer-component-type typed-buffer)))))
+(define-record-type <buffer-view>
+ (%make-buffer-view name buffer offset component-type
+ normalized? length type max min sparse divisor)
+ buffer-view?
+ (name buffer-view-name)
+ (buffer buffer-view->buffer)
+ (offset buffer-view-offset)
+ (component-type buffer-view-component-type)
+ (normalized? buffer-view-normalized?)
+ (length buffer-view-length)
+ (type buffer-view-type)
+ (max buffer-view-max)
+ (min buffer-view-min)
+ (sparse buffer-view-sparse)
+ (divisor buffer-view-divisor)) ; for instanced rendering
+
+(define (buffer-view-stride buffer-view)
+ (or (buffer-stride (buffer-view->buffer buffer-view))
+ (* (type-size (buffer-view-type buffer-view))
+ (component-type-size (buffer-view-component-type buffer-view)))))
(define (num-elements byte-length byte-offset type component-type)
(inexact->exact
@@ -269,21 +269,21 @@ vertex buffer data back to the GPU."
(type-size type))))))
-(define* (make-typed-buffer #:key
- (name "anonymous")
- buffer
- type
- component-type
- normalized?
- (offset 0)
- (length (num-elements (buffer-length buffer)
- offset
- type
- component-type))
- max
- min
- sparse
- divisor)
+(define* (make-buffer-view #:key
+ (name "anonymous")
+ buffer
+ type
+ component-type
+ normalized?
+ (offset 0)
+ (length (num-elements (buffer-length buffer)
+ offset
+ type
+ component-type))
+ max
+ min
+ sparse
+ divisor)
"Return a new typed buffer view for BUFFER starting at byte index
OFFSET of LENGTH elements, where each element is of TYPE and composed
of COMPONENT-TYPE values.
@@ -314,8 +314,8 @@ divisor of 0 means that a single element is used for every instance
and is used for the data being instanced. A divisor of 1 means that
each element is used for 1 instance. A divisor of 2 means that each
element is used for 2 instances, and so on."
- (%make-typed-buffer name buffer offset component-type
- normalized? length type max min sparse divisor))
+ (%make-buffer-view name buffer offset component-type
+ normalized? length type max min sparse divisor))
(define (type-size type)
(match type
@@ -337,11 +337,11 @@ element is used for 2 instances, and so on."
('float 4)
('double 8)))
-(define* (make-streaming-typed-buffer type component-type length #:key
- (name "anonymous")
- (target 'vertex)
- data
- divisor)
+(define* (make-streaming-buffer-view type component-type length #:key
+ (name "anonymous")
+ (target 'vertex)
+ data
+ divisor)
"Return a new typed buffer to hold LENGTH elements of TYPE whose
components are comprised of COMPONENT-TYPE values. The underlying
untyped buffer is configured for GPU streaming. Optonally, a NAME can
@@ -359,32 +359,32 @@ which attributes advance when rendering multiple instances."
(make-streaming-buffer buffer-length
#:name name
#:target target))))
- (make-typed-buffer #:name name
- #:buffer buffer
- #:type type
- #:component-type component-type
- #:length length
- #:divisor divisor)))
-
-(define (display-typed-buffer typed-buffer port)
- (format port "#<typed-buffer name: ~s buffer: ~a type: ~s component-type: ~s length: ~d offset: ~d>"
- (typed-buffer-name typed-buffer)
- (typed-buffer->buffer typed-buffer)
- (typed-buffer-type typed-buffer)
- (typed-buffer-component-type typed-buffer)
- (typed-buffer-length typed-buffer)
- (typed-buffer-offset typed-buffer)))
-
-(set-record-type-printer! <typed-buffer> display-typed-buffer)
-
-(define (typed-buffer-type-size typed-buffer)
- (type-size (typed-buffer-type typed-buffer)))
-
-(define (typed-buffer-data typed-buffer)
- (buffer-data (typed-buffer->buffer typed-buffer)))
-
-(define (typed-buffer-type-gl typed-buffer)
- (match (typed-buffer-component-type typed-buffer)
+ (make-buffer-view #:name name
+ #:buffer buffer
+ #:type type
+ #:component-type component-type
+ #:length length
+ #:divisor divisor)))
+
+(define (display-buffer-view buffer-view port)
+ (format port "#<buffer-view name: ~s buffer: ~a type: ~s component-type: ~s length: ~d offset: ~d>"
+ (buffer-view-name buffer-view)
+ (buffer-view->buffer buffer-view)
+ (buffer-view-type buffer-view)
+ (buffer-view-component-type buffer-view)
+ (buffer-view-length buffer-view)
+ (buffer-view-offset buffer-view)))
+
+(set-record-type-printer! <buffer-view> display-buffer-view)
+
+(define (buffer-view-type-size buffer-view)
+ (type-size (buffer-view-type buffer-view)))
+
+(define (buffer-view-data buffer-view)
+ (buffer-data (buffer-view->buffer buffer-view)))
+
+(define (buffer-view-type-gl buffer-view)
+ (match (buffer-view-component-type buffer-view)
('byte (data-type byte))
('unsigned-byte (data-type unsigned-byte))
('short (data-type short))
@@ -394,33 +394,33 @@ which attributes advance when rendering multiple instances."
('float (data-type float))
('double (data-type double))))
-(define (map-typed-buffer! typed-buffer)
- (map-buffer! (typed-buffer->buffer typed-buffer)))
+(define (map-buffer-view! buffer-view)
+ (map-buffer! (buffer-view->buffer buffer-view)))
-(define (unmap-typed-buffer! typed-buffer)
- (unmap-buffer! (typed-buffer->buffer typed-buffer)))
+(define (unmap-buffer-view! buffer-view)
+ (unmap-buffer! (buffer-view->buffer buffer-view)))
-(define-syntax-rule (with-mapped-typed-buffer typed-buffer body ...)
- (with-mapped-buffer (typed-buffer->buffer typed-buffer) body ...))
+(define-syntax-rule (with-mapped-buffer-view buffer-view body ...)
+ (with-mapped-buffer (buffer-view->buffer buffer-view) body ...))
-(define* (apply-typed-buffer typed-buffer #:optional attribute-index)
- (gpu-state-set! *buffer-state* (typed-buffer->buffer typed-buffer))
+(define* (apply-buffer-view buffer-view #:optional attribute-index)
+ (gpu-state-set! *buffer-state* (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
(gl-enable-vertex-attrib-array attribute-index)
(gl-vertex-attrib-pointer attribute-index
- (typed-buffer-type-size typed-buffer)
- (typed-buffer-type-gl typed-buffer)
- (typed-buffer-normalized? typed-buffer)
- (typed-buffer-stride typed-buffer)
- (make-pointer (typed-buffer-offset typed-buffer)))
- (let ((divisor (typed-buffer-divisor typed-buffer)))
+ (buffer-view-type-size buffer-view)
+ (buffer-view-type-gl buffer-view)
+ (buffer-view-normalized? buffer-view)
+ (buffer-view-stride buffer-view)
+ (make-pointer (buffer-view-offset buffer-view)))
+ (let ((divisor (buffer-view-divisor buffer-view)))
(when divisor
(gl-vertex-attrib-divisor attribute-index divisor)))))
;; TODO: Handle 4-byte alignment rule for the types that need it.
-(define (typed-buffer->vector typed-buffer)
+(define (buffer-view->vector buffer-view)
(define (component-parser type)
(match type
('byte bytevector-s8-ref)
@@ -490,13 +490,13 @@ which attributes advance when rendering multiple instances."
(parse-component bv (+ i (* component-type-size 13)))
(parse-component bv (+ i (* component-type-size 14)))
(parse-component bv (+ i (* component-type-size 15)))))))))
- (with-mapped-typed-buffer typed-buffer
- (let* ((data (typed-buffer-data typed-buffer))
- (length (typed-buffer-length typed-buffer))
- (offset (typed-buffer-offset typed-buffer))
- (stride (typed-buffer-stride typed-buffer))
- (type (typed-buffer-type typed-buffer))
- (component-type (typed-buffer-component-type typed-buffer))
+ (with-mapped-buffer-view buffer-view
+ (let* ((data (buffer-view-data buffer-view))
+ (length (buffer-view-length buffer-view))
+ (offset (buffer-view-offset buffer-view))
+ (stride (buffer-view-stride buffer-view))
+ (type (buffer-view-type buffer-view))
+ (component-type (buffer-view-component-type buffer-view))
(type-byte-size (* (type-size type)
(component-type-size component-type)))
(v (make-vector length))
@@ -574,10 +574,10 @@ argument may be overridden. The following values are supported:
mode))))
(gpu-state-set! *vertex-array-state* array)
(for-each (match-lambda
- ((index . typed-buffer)
- (apply-typed-buffer typed-buffer index)))
+ ((index . buffer-view)
+ (apply-buffer-view buffer-view index)))
attributes)
- (apply-typed-buffer indices)
+ (apply-buffer-view indices)
(gpu-state-set! *vertex-array-state* null-vertex-array)
array))
@@ -596,8 +596,8 @@ argument may be overridden. The following values are supported:
(let ((indices (vertex-array-indices array)))
(gl-draw-elements (vertex-array-mode-gl array)
(or count
- (typed-buffer-length indices))
- (typed-buffer-type-gl indices)
+ (buffer-view-length indices))
+ (buffer-view-type-gl indices)
%null-pointer)))
(define* (render-vertices/instanced array instances #:optional count)
@@ -605,7 +605,7 @@ argument may be overridden. The following values are supported:
(let ((indices (vertex-array-indices array)))
(gl-draw-elements-instanced (vertex-array-mode-gl array)
(or count
- (typed-buffer-length indices))
- (typed-buffer-type-gl indices)
+ (buffer-view-length indices))
+ (buffer-view-type-gl indices)
%null-pointer
instances)))