@fxshelf/glyph-rain
Version:
Matrix-style glyph rain with cursor stir and drop-head lighting for React and Vue. WebGL2, zero animation-lib deps. Copy-as-source friendly.
29 lines (28 loc) • 956 B
text/typescript
export function buildAtlas(charset: string): {
canvas: HTMLCanvasElement
count: number
grid: number
} {
const glyphs = Array.from(new Set(Array.from(charset))).filter(
(g) => g.trim().length > 0,
)
if (glyphs.length === 0) glyphs.push('0', '1')
const count = glyphs.length
const grid = Math.max(Math.ceil(Math.sqrt(count)), 1)
const cellPx = 64
const canvas = document.createElement('canvas')
canvas.width = grid * cellPx
canvas.height = grid * cellPx
const ctx = canvas.getContext('2d')!
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.fillStyle = '#ffffff'
ctx.textAlign = 'center'
ctx.textBaseline = 'middle'
ctx.font = `600 ${Math.round(cellPx * 0.72)}px ui-monospace, SFMono-Regular, Menlo, monospace`
for (let i = 0; i < count; i++) {
const x = ((i % grid) + 0.5) * cellPx
const y = (Math.floor(i / grid) + 0.5) * cellPx
ctx.fillText(glyphs[i]!, x, y)
}
return { canvas, count, grid }
}