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