diff options
Diffstat (limited to 'chickadee/graphics/gpu.scm')
-rw-r--r-- | chickadee/graphics/gpu.scm | 29 |
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) |