All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m28s
- Add JAX text rendering with font atlas, styled text placement, and typography primitives - Add xector (element-wise/reduction) operations library and sexp effects - Add deferred effect chain fusion for JIT-compiled effect pipelines - Expand drawing primitives with font management, alignment, shadow, and outline - Add interpreter support for function-style define and require - Add GPU persistence mode and hardware decode support to streaming - Add new sexp effects: cell_pattern, halftone, mosaic, and derived definitions - Add path registry for asset resolution - Add integration, primitives, and xector tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
66 lines
2.3 KiB
Common Lisp
66 lines
2.3 KiB
Common Lisp
;; Cell Pattern effect - custom patterns within cells
|
||
;;
|
||
;; Demonstrates building arbitrary per-cell visuals from primitives.
|
||
;; Uses local coordinates within cells to draw patterns scaled by luminance.
|
||
|
||
(require-primitives "xector")
|
||
|
||
(define-effect cell_pattern
|
||
:params (
|
||
(cell-size :type int :default 16 :range [8 48] :desc "Cell size")
|
||
(pattern :type string :default "diagonal" :desc "Pattern: diagonal, cross, ring")
|
||
)
|
||
(let* (
|
||
;; Pool to get cell colors
|
||
(pooled (pool-frame frame cell-size))
|
||
(cell-r (nth pooled 0))
|
||
(cell-g (nth pooled 1))
|
||
(cell-b (nth pooled 2))
|
||
(cell-lum (α/ (nth pooled 3) 255))
|
||
|
||
;; Cell indices for each pixel
|
||
(cell-idx (cell-indices frame cell-size))
|
||
|
||
;; Look up cell values for each pixel
|
||
(pix-r (gather cell-r cell-idx))
|
||
(pix-g (gather cell-g cell-idx))
|
||
(pix-b (gather cell-b cell-idx))
|
||
(pix-lum (gather cell-lum cell-idx))
|
||
|
||
;; Local position within cell [0, 1]
|
||
(lx (local-x-norm frame cell-size))
|
||
(ly (local-y-norm frame cell-size))
|
||
|
||
;; Pattern mask based on pattern type
|
||
(mask
|
||
(cond
|
||
;; Diagonal lines - thickness based on luminance
|
||
((= pattern "diagonal")
|
||
(let* ((diag (αmod (α+ lx ly) 0.25))
|
||
(thickness (α* pix-lum 0.125)))
|
||
(α< diag thickness)))
|
||
|
||
;; Cross pattern
|
||
((= pattern "cross")
|
||
(let* ((cx (αabs (α- lx 0.5)))
|
||
(cy (αabs (α- ly 0.5)))
|
||
(thickness (α* pix-lum 0.25)))
|
||
(αor (α< cx thickness) (α< cy thickness))))
|
||
|
||
;; Ring pattern
|
||
((= pattern "ring")
|
||
(let* ((dx (α- lx 0.5))
|
||
(dy (α- ly 0.5))
|
||
(dist (αsqrt (α+ (α² dx) (α² dy))))
|
||
(target (α* pix-lum 0.4))
|
||
(thickness 0.05))
|
||
(α< (αabs (α- dist target)) thickness)))
|
||
|
||
;; Default: solid
|
||
(else (α> pix-lum 0)))))
|
||
|
||
;; Apply mask: show cell color where mask is true, black elsewhere
|
||
(rgb (where mask pix-r 0)
|
||
(where mask pix-g 0)
|
||
(where mask pix-b 0))))
|