Skip to content
This repository was archived by the owner on Aug 13, 2025. It is now read-only.

Commit 4931717

Browse files
committed
Only use glbufferstorage if available.
1 parent 252a960 commit 4931717

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

resources/struct-buffer.lisp

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -105,17 +105,26 @@
105105
(setf (data-pointer buffer) vbo)
106106
(v:debug :trial.resource "Allocating ~d KB buffer." (ceiling (size buffer) 1024))
107107
(%gl:bind-buffer (buffer-type buffer) vbo)
108-
(%gl:buffer-storage
109-
(buffer-type buffer)
110-
(memory-region-size region)
111-
(memory-region-pointer region)
112-
(ecase (data-usage buffer)
113-
((:dynamic-draw :stream-draw :static-draw)
114-
(list* :dynamic-storage :map-write (map-bits buffer)))
115-
((:dynamic-read :stream-read :static-read)
116-
(list* :dynamic-storage :map-read (map-bits buffer)))
117-
((:dynamic-copy :stream-copy :static-copy)
118-
(list* :dynamic-storage :map-read :map-write (map-bits buffer)))))))))
108+
(let ((usage (ecase (data-usage buffer)
109+
((:dynamic-draw :stream-draw :static-draw)
110+
(list* :dynamic-storage :map-write (map-bits buffer)))
111+
((:dynamic-read :stream-read :static-read)
112+
(list* :dynamic-storage :map-read (map-bits buffer)))
113+
((:dynamic-copy :stream-copy :static-copy)
114+
(list* :dynamic-storage :map-read :map-write (map-bits buffer))))))
115+
(gl-extension-case
116+
(:GL-ARB-BUFFER-STORAGE
117+
(%gl:buffer-storage (buffer-type buffer) (memory-region-size region) (memory-region-pointer region)
118+
(ecase (data-usage buffer)
119+
((:dynamic-draw :stream-draw :static-draw)
120+
(list* :dynamic-storage :map-write (map-bits buffer)))
121+
((:dynamic-read :stream-read :static-read)
122+
(list* :dynamic-storage :map-read (map-bits buffer)))
123+
((:dynamic-copy :stream-copy :static-copy)
124+
(list* :dynamic-storage :map-read :map-write (map-bits buffer))))))
125+
(T
126+
(%gl:buffer-data (buffer-type buffer) (memory-region-size region) (memory-region-pointer region)
127+
(data-usage buffer)))))))))
119128

120129
(defvar *buffers-in-tx* ())
121130
(defmacro with-buffer-tx ((struct buffer &key (update :write)) &body body)

0 commit comments

Comments
 (0)