summaryrefslogtreecommitdiff
path: root/chickadee/graphics/text.scm
diff options
context:
space:
mode:
Diffstat (limited to 'chickadee/graphics/text.scm')
-rw-r--r--chickadee/graphics/text.scm73
1 files changed, 36 insertions, 37 deletions
diff --git a/chickadee/graphics/text.scm b/chickadee/graphics/text.scm
index 20b8ca5..15caf85 100644
--- a/chickadee/graphics/text.scm
+++ b/chickadee/graphics/text.scm
@@ -33,17 +33,17 @@
#:use-module (chickadee config)
#:use-module (chickadee data array-list)
#:use-module (chickadee freetype)
- #:use-module (chickadee math)
- #:use-module (chickadee math matrix)
- #:use-module (chickadee math rect)
- #:use-module (chickadee math vector)
- #:use-module (chickadee graphics blend)
+ #:use-module (chickadee graphics)
#:use-module (chickadee graphics color)
- #:use-module (chickadee graphics engine)
+ #:use-module (chickadee graphics pipeline)
#:use-module (chickadee graphics pixbuf)
#:use-module (chickadee graphics shader)
#:use-module (chickadee graphics sprite)
#:use-module (chickadee graphics texture)
+ #:use-module (chickadee math)
+ #:use-module (chickadee math matrix)
+ #:use-module (chickadee math rect)
+ #:use-module (chickadee math vector)
#:use-module (chickadee utils)
#:use-module (rnrs bytevectors)
#:export (load-tile-font
@@ -63,7 +63,7 @@
glyph?
glyph-id
- glyph-texture-region
+ glyph-sprite
glyph-offset
glyph-dimensions
glyph-advance
@@ -89,10 +89,10 @@
;;;
(define-record-type <glyph>
- (make-glyph id texture-region offset dimensions advance)
+ (make-glyph id sprite offset dimensions advance)
glyph?
(id glyph-id)
- (texture-region glyph-texture-region)
+ (sprite glyph-sprite)
(offset glyph-offset)
(dimensions glyph-dimensions)
(advance glyph-advance))
@@ -146,7 +146,9 @@ non-smooth scaling will be used."
(let ((face (load-face (force freetype-handle) file-name))
(chars (make-hash-table))
(kernings (make-hash-table))
- (texture-size (min (graphics-engine-max-texture-size) 2048)))
+ (texture-size (min (gpu-limits-max-texture-dimension-2d
+ (gpu-limits (current-gpu)))
+ 2048)))
;; TODO: Use actual screen DPI.
(set-char-size! face (* point-size 64) 0 96 96)
(let ((glyph (face-glyph-slot face))
@@ -197,10 +199,9 @@ non-smooth scaling will be used."
char-set))
(texture-filter (if smooth? 'linear 'nearest))
;; TODO: Use multiple textures if needed.
- (texture (make-texture texture-size texture-size
- #:pixels pixels
- #:min-filter texture-filter
- #:mag-filter texture-filter)))
+ (texture (pixbuf->texture
+ (bytevector->pixbuf pixels texture-size texture-size)))
+ (texture-view (texture-view texture)))
;; Process kernings.
(char-set-for-each
(lambda (left)
@@ -225,14 +226,13 @@ non-smooth scaling will be used."
;; Build chars.
(for-each (match-lambda
((char x y width height left top advance)
- (hashv-set! chars char
- (make-glyph char
- (and x y
- (make-texture-region texture
- (make-rect x y width height)))
- (vec2 left (- top height))
- (vec2 width height)
- (vec2 advance 0.0)))))
+ (let* ((rect (and x y (make-rect x y width height)))
+ (sprite (and rect (make-sprite texture-view rect))))
+ (hashv-set! chars char
+ (make-glyph char sprite
+ (vec2 left (- top height))
+ (vec2 width height)
+ (vec2 advance 0.0))))))
specs)))
(let ((style (face-style-name face)))
(match (size-metrics (face-size face))
@@ -255,17 +255,17 @@ order that they are specified in the character set or text will not
render properly. Optionally, each tile may have SPACING pixels of
horizontal and vertical space between surrounding tiles and the entire
image may have MARGIN pixels of empty space around its border."
- (let* ((texture (load-image file))
- (atlas (split-texture texture tile-width tile-height
- #:margin margin
- #:spacing spacing))
+ (let* ((texture (texture-view (load-image file)))
+ (sheet (tileset texture tile-width tile-height
+ #:margin margin
+ #:spacing spacing))
(chars
(let ((table (make-hash-table)))
(string-for-each-index
(lambda (i)
(hashv-set! table (string-ref characters i)
(make-glyph (string-ref characters i)
- (texture-atlas-ref atlas i)
+ (sprite-sheet-ref sheet i)
(vec2 0.0 0.0)
(vec2 tile-width tile-height)
(vec2 tile-width 0.0))))
@@ -425,10 +425,9 @@ extension must be either .xml or .fnt."
(attr node 'yoffset string->number)))
(x-advance (attr node 'xadvance string->number))
(page (or (attr node 'page string->number) 0))
- (region (make-texture-region (hashv-ref pages page)
- (make-rect x y width height)))
- (char (make-glyph id
- region
+ (sprite (make-sprite (hashv-ref pages page)
+ (make-rect x y width height)))
+ (char (make-glyph id sprite
(vec2 x-offset y-offset)
(vec2 width height)
(vec2 x-advance 0.0))))
@@ -624,7 +623,7 @@ is not represented in FONT."
(define (page-free-batch page)
(let ((free-batches (page-free-batches page)))
(if (array-list-empty? free-batches)
- (make-sprite-batch null-texture)
+ (make-sprite-batch #f)
(array-list-pop! free-batches))))
(define (make-page-batch page texture)
@@ -651,13 +650,13 @@ is not represented in FONT."
(offset (glyph-offset glyph))
(dimensions (glyph-dimensions glyph))
(advance (glyph-advance glyph))
- (texture (glyph-texture-region glyph))
+ (sprite (glyph-sprite glyph))
(x (vec2-x position))
(y (- (vec2-y size) (vec2-y position)))
;; Not all glyphs have a visual representation, such as
;; the space character.
- (batch (and texture
- (page-batch page (texture-parent texture)))))
+ (batch (and sprite
+ (page-batch page (sprite-texture-view sprite)))))
;; Setup bounding box.
(set-rect-x! rect x)
(set-rect-y! rect y)
@@ -672,13 +671,13 @@ is not represented in FONT."
(sprite-batch-add* batch rect
(or (composited-glyph-matrix cglyph)
%identity-matrix)
- #:texture-region texture
+ #:texcoords (sprite-rect-uv sprite)
#:tint (composited-glyph-color cglyph)))))
(array-list-for-each write-glyph (compositor-cglyphs compositor))))
(define* (draw-page page matrix #:key (blend-mode blend:alpha))
(hash-for-each (lambda (texture batch)
- (draw-sprite-batch* batch matrix #:blend-mode blend-mode))
+ (draw-sprite-batch* batch matrix))
(page-batches page)))
(define draw-text*