+
+\f
+;;;
+;;; 4.1 Per-Fragment Operations
+;;;
+
+(define* (set-gl-stencil-function stencil-function k #:key
+ (mask #xFFFFFFFF) ; 32-bit mask
+ face)
+ (if face
+ (%glStencilFuncSeparate face stencil-function k mask)
+ (%glStencilFunc stencil-function k mask)))
+
+(define* (set-gl-stencil-operation stencil-fail depth-fail depth-pass #:key
+ face)
+ (if face
+ (%glStencilOpSeparate face stencil-fail depth-fail depth-pass)
+ (%glStencilOp stencil-fail depth-fail depth-pass)))
+
+;; TODO: 4.1.7 Occlusion Queries
+
+(define* (set-gl-blend-equation mode-rgb #:optional (mode-alpha mode-rgb))
+ (%glBlendEquationSeparate mode-rgb mode-alpha))
+
+(define* (set-gl-blend-function src-rgb dest-rgb #:optional
+ (src-alpha src-rgb)
+ (dest-alpha dest-rgb))
+ (%glBlendFuncSeparate src-rgb dest-rgb src-alpha dest-alpha))
+
+(export set-gl-stencil-function
+ set-gl-stencil-operation
+ set-gl-blend-equation
+ set-gl-blend-function
+ )
+
+(re-export (%glScissor . set-gl-scissor)
+ (%glSampleCoverage . set-gl-sample-coverage)
+ (%glAlphaFunc . set-gl-alpha-function)
+ (%glDepthFunc . set-gl-depth-function)
+ (%glBlendColor . set-gl-blend-color)
+ (%glLogicOp . set-gl-logic-operation)
+ )
+
+;;;
+;;; 4.2 Whole Framebuffer Operations
+;;;
+
+(define (set-gl-draw-buffers buffers)
+ (let* ((n (length buffers))
+ (buffers (make-c-struct (make-list n (GLenum))
+ buffers)))
+ (%glDrawBuffers n buffers)))
+
+(define* (set-gl-stencil-mask mask #:key face)
+ (if face
+ (%glStencilMaskSeparate face mask)
+ (%glStencilMask mask)))
+
+(export set-gl-draw-buffers
+ set-gl-stencil-mask)
+
+(re-export (%glDrawBuffer . set-gl-draw-buffer)
+ (%glIndexMask . set-gl-index-mask)
+ (%glColorMask . set-gl-color-mask)
+ (%glDepthMask . set-gl-depth-mask)
+ (%glClear . gl-clear)
+ (%glClearColor . set-gl-clear-color)
+ (%glClearIndex . set-gl-clear-index)
+ (%glClearDepth . set-gl-clear-depth)
+ (%glClearStencil . set-gl-clear-stencil-value)
+ (%glClearAccum . set-gl-clear-accumulation-color)
+ (%glAccum . set-gl-accumulation-buffer-operation))
+
+;;;
+;;; 4.3 Drawing, Reading, and Copying Pixels
+;;;
+
+;; TODO: read-pixels
+
+(re-export (%glReadBuffer . set-gl-read-buffer)
+ (%glCopyPixels . gl-copy-pixels))