summaryrefslogtreecommitdiff
path: root/chickadee/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'chickadee/graphics')
-rw-r--r--chickadee/graphics/color.scm38
-rw-r--r--chickadee/graphics/gpu.scm17
2 files changed, 49 insertions, 6 deletions
diff --git a/chickadee/graphics/color.scm b/chickadee/graphics/color.scm
index 497ecd3..2e1bf43 100644
--- a/chickadee/graphics/color.scm
+++ b/chickadee/graphics/color.scm
@@ -22,10 +22,11 @@
;;; Code:
(define-module (chickadee graphics color)
+ #:use-module (chickadee graphics gl)
+ #:use-module (chickadee math)
#:use-module (ice-9 match)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-1)
- #:use-module (chickadee math)
#:export (make-color
color?
color-r color-g color-b color-a
@@ -41,7 +42,17 @@
tango-light-plum tango-plum tango-dark-plum
tango-light-scarlet-red tango-scarlet-red tango-dark-scarlet-red
tango-aluminium-1 tango-aluminium-2 tango-aluminium-3
- tango-aluminium-4 tango-aluminium-5 tango-aluminium-6))
+ tango-aluminium-4 tango-aluminium-5 tango-aluminium-6
+
+ make-color-mask
+ default-color-mask
+ null-color-mask
+ color-mask?
+ color-mask-red?
+ color-mask-green?
+ color-mask-blue?
+ color-mask-alpha?
+ apply-color-mask))
(define-record-type <color>
(wrap-color bv)
@@ -171,6 +182,7 @@ a color object."
(color+ (color* start (- 1.0 alpha))
(color* end alpha)))
+
;;;
;;; Pre-defined Colors
;;;
@@ -215,3 +227,25 @@ a color object."
(define tango-aluminium-4 (rgb #x888a85))
(define tango-aluminium-5 (rgb #x555753))
(define tango-aluminium-6 (rgb #x2e3436))
+
+
+;;;
+;;; Color Masks
+;;;
+
+(define-record-type <color-mask>
+ (make-color-mask red? green? blue? alpha?)
+ color-mask?
+ (red? color-mask-red?)
+ (green? color-mask-green?)
+ (blue? color-mask-blue?)
+ (alpha? color-mask-alpha?))
+
+(define default-color-mask (make-color-mask #t #t #t #t))
+(define null-color-mask (make-color-mask #f #f #f #f))
+
+(define (apply-color-mask mask)
+ (gl-color-mask (color-mask-red? mask)
+ (color-mask-green? mask)
+ (color-mask-blue? mask)
+ (color-mask-alpha? mask)))
diff --git a/chickadee/graphics/gpu.scm b/chickadee/graphics/gpu.scm
index 7a70d7e..16f5554 100644
--- a/chickadee/graphics/gpu.scm
+++ b/chickadee/graphics/gpu.scm
@@ -47,6 +47,7 @@
gpu-vertex-array
gpu-viewport
gpu-multisample
+ gpu-color-mask
set-gpu-blend-mode!
set-gpu-depth-test!
set-gpu-stencil-test!
@@ -56,7 +57,8 @@
set-gpu-vertex-buffer!
set-gpu-vertex-array!
set-gpu-viewport!
- set-gpu-multisample!))
+ set-gpu-multisample!
+ set-gpu-color-mask!))
;;;
@@ -114,7 +116,8 @@ from the GPU's memory."
vertex-buffer
vertex-array
viewport
- multisample)
+ multisample
+ color-mask)
gpu?
(gl-context gpu-gl-context)
(gl-version gpu-gl-version)
@@ -129,7 +132,8 @@ from the GPU's memory."
(vertex-buffer %gpu-vertex-buffer)
(vertex-array %gpu-vertex-array)
(viewport %gpu-viewport)
- (multisample %gpu-multisample))
+ (multisample %gpu-multisample)
+ (color-mask %gpu-color-mask))
(define current-gpu (make-parameter #f))
@@ -157,6 +161,7 @@ from the GPU's memory."
(shader-module (resolve-interface '(chickadee graphics shader)))
(texture-module (resolve-interface '(chickadee graphics texture)))
(viewport-module (resolve-interface '(chickadee graphics viewport)))
+ (color-module (resolve-interface '(chickadee graphics color)))
(gl-version (extract-version (string-name version)))
(glsl-version (extract-version (version-2-0 shading-language-version))))
;; Create state for 32 texture units.
@@ -187,7 +192,9 @@ from the GPU's memory."
(module-ref buffer-module 'null-vertex-array))
(make-gpu-state (module-ref viewport-module 'apply-viewport)
(module-ref viewport-module 'null-viewport))
- (make-gpu-state apply-multisample #f))))
+ (make-gpu-state apply-multisample #f)
+ (make-gpu-state (module-ref color-module 'apply-color-mask)
+ (module-ref color-module 'default-color-mask)))))
(define-syntax-rule (define-gpu-getter name ref)
(define (name gpu)
@@ -202,6 +209,7 @@ from the GPU's memory."
(define-gpu-getter gpu-vertex-array %gpu-vertex-array)
(define-gpu-getter gpu-viewport %gpu-viewport)
(define-gpu-getter gpu-multisample %gpu-multisample)
+(define-gpu-getter gpu-color-mask %gpu-color-mask)
(define-syntax-rule (define-gpu-setter name ref)
(define (name gpu x)
@@ -216,6 +224,7 @@ from the GPU's memory."
(define-gpu-setter set-gpu-vertex-array! %gpu-vertex-array)
(define-gpu-setter set-gpu-viewport! %gpu-viewport)
(define-gpu-setter set-gpu-multisample! %gpu-multisample)
+(define-gpu-setter set-gpu-color-mask! %gpu-color-mask)
(define (gpu-texture gpu texture-unit)
(gpu-state-ref (vector-ref (gpu-textures gpu) texture-unit)))