summaryrefslogtreecommitdiff
path: root/chickadee/graphics/gpu.scm
diff options
context:
space:
mode:
Diffstat (limited to 'chickadee/graphics/gpu.scm')
-rw-r--r--chickadee/graphics/gpu.scm29
1 files changed, 29 insertions, 0 deletions
diff --git a/chickadee/graphics/gpu.scm b/chickadee/graphics/gpu.scm
index 93aac87..ef12d10 100644
--- a/chickadee/graphics/gpu.scm
+++ b/chickadee/graphics/gpu.scm
@@ -113,6 +113,7 @@
free-gpu-framebuffer
gpu-framebuffer?
gpu-framebuffer-id
+ gpu-framebuffer-init
gpu-framebuffer:null
fresh-gpu-renderbuffer
@@ -1132,6 +1133,34 @@
(set-active-texture-unit! 0)
(gl-generate-mipmap (gpu-texture-target texture)))
+(define %draw-buffers
+ (bytevector->pointer (u32vector (version-3-0 color-attachment0))))
+
+(define (gpu-framebuffer-init gpu framebuffer renderbuffer texture width height)
+ (set-gpu-framebuffer! gpu framebuffer)
+ ;; Setup depth buffer.
+ (set-gpu-renderbuffer! gpu renderbuffer)
+ (gl-renderbuffer-storage (version-3-0 renderbuffer)
+ (arb-framebuffer-object depth24-stencil8)
+ width
+ height)
+ (set-gpu-renderbuffer! gpu gpu-renderbuffer:null)
+ (gl-framebuffer-renderbuffer (version-3-0 framebuffer)
+ (arb-framebuffer-object depth-stencil-attachment)
+ (version-3-0 renderbuffer)
+ renderbuffer)
+ ;; Setup framebuffer texture.
+ (gl-framebuffer-texture-2d (version-3-0 framebuffer)
+ (version-3-0 color-attachment0)
+ (texture-target texture-2d)
+ (gpu-texture-id texture)
+ 0)
+ (gl-draw-buffers 1 %draw-buffers)
+ ;; Check for errors.
+ (unless (= (gl-check-framebuffer-status (version-3-0 framebuffer))
+ (version-3-0 framebuffer-complete))
+ (error "Framebuffer cannot be created")))
+
(define (gpu-buffer-upload gpu buffer usage data length offset)
(set-gpu-buffer! gpu buffer)
(gl-buffer-data (gpu-buffer-target buffer)