<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vega/symbols/symbols.c, branch master</title>
<subtitle>Surface runtime projecting Pure views across pixel, terminal, CLI, and web.
</subtitle>
<id>http://git.yeowoo.org/vega/atom?h=master</id>
<link rel='self' href='http://git.yeowoo.org/vega/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/'/>
<updated>2026-09-28T11:48:45Z</updated>
<entry>
<title>Shape text as HarfBuzz does, from a symbol file, checked against HarfBuzz</title>
<updated>2026-09-28T11:48:45Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-28T11:48:45Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=c38380464d29c4502c98d996236ccf890392fe86'/>
<id>urn:sha1:c38380464d29c4502c98d996236ccf890392fe86</id>
<content type='text'>
The build tool compiles a font's shaping plans the way HarfBuzz's planner
does (features, stages, masks, lookups per script and direction) and
carries them with the font's character map, advances and GDEF, GSUB and
GPOS tables in a section of the symbol file (VEGASYM4); glyphs shaping
reaches become symbols of their own. A small engine ports HarfBuzz 10's
default, Arabic and Hebrew shaping step for step and reads the tables in
place, every read bounds-checked. The build refuses a file whose shaping
differs from HarfBuzz's on random runs: DejaVu Sans agrees on 600,000
runs in six scripts both ways, and every installed font the tool accepts
agrees too, at 1.05-1.18 times HarfBuzz's time.
</content>
</entry>
<entry>
<title>Centre a wide character's glyph in its two cells</title>
<updated>2026-09-27T22:12:16Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T22:12:16Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=0d9d4c50bbd4a33a309ccb498b6bc55509c1dfed'/>
<id>urn:sha1:0d9d4c50bbd4a33a309ccb498b6bc55509c1dfed</id>
<content type='text'>
A Hangul or CJK glyph is one em across, less than two cells of a
monospace Latin font (1.2 em for DejaVu Sans Mono), and was drawn from
the left of its cells, so syllables stood apart unevenly. A cached
glyph now keeps its advance in pixels, and a wide character's glyph is
drawn centred in its two cells.
</content>
</entry>
<entry>
<title>Draw the TUI's cells as pixels with the symbols' glyphs</title>
<updated>2026-09-27T13:54:53Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T13:54:53Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=993871c6dfa19cf4e0bd4a16c9aad26cb0025d70'/>
<id>urn:sha1:993871c6dfa19cf4e0bd4a16c9aad26cb0025d70</id>
<content type='text'>
vega pixels runs the same scripts as tui --dump and writes each frame as
an image: the view's cells (only those on screen are evaluated) become
glyphs, each drawn once per size with the exact area of its curves, in its
tone's colour on its row's background. No page, no scene in between. A
1920x1350 grid takes 12 ms a frame here, writing the image included.

Symbol files carry the font's line now (format 3: ascent and descent where
format 2 kept zeros), the cell height and baseline; and the build tool takes
fonts in order, later ones filling the codes earlier ones lack: a CJK font
alone drew ambiguous-width arrows two cells wide in a one-cell grid, which
the new check caught, so a monospace Latin font comes first and Hangul after.

</content>
</entry>
<entry>
<title>Draw text from an atlas the CPU fills, composed by the GPU</title>
<updated>2026-09-27T13:21:39Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T13:21:39Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=2c1e29780da41bba13ac84ad01472d550e6d02e8'/>
<id>urn:sha1:2c1e29780da41bba13ac84ad01472d550e6d02e8</id>
<content type='text'>
Each size's symbols are drawn on the CPU into one 8-bit atlas, every pixel
the exact area its curves cover, and text is a quad per glyph reading it.
A 1080p page of 11,382 glyphs composes in 1.07 ms at 16 px (it took 525 ms
computing coverage per fragment), and the composed pixels are the CPU
raster's exactly (worst difference 0 for DejaVu's ASCII, 1 for Noto's
11,172 Hangul syllables).

Computing coverage on the GPU lost on both counts: a compute pass filling
the atlas took 5-13x longer than one Cortex-A76 core (35 against 2.7 ms at
16 px), and its faster sorting-network form computed whole rows wrongly
under this Mesa V3D. Coverage now has one implementation, in C, and the
shaders only compose. vega_symbol_raster takes a row stride to draw into
the atlas in place.

</content>
</entry>
<entry>
<title>Name Vega's parts: lib/, surfaces/ and symbols/</title>
<updated>2026-09-27T12:45:31Z</updated>
<author>
<name>eunhhu</name>
<email>necpition205@gmail.com</email>
</author>
<published>2026-09-27T12:45:31Z</published>
<link rel='alternate' type='text/html' href='http://git.yeowoo.org/vega/commit/?id=2920e389f624263efe515d9a5f33f6b822efff5e'/>
<id>urn:sha1:2920e389f624263efe515d9a5f33f6b822efff5e</id>
<content type='text'>
src/ held two parts, the surfaces that show modules to people and the
symbol format with its CPU and GPU drawing. As in Pure (design 009), top
level directories are now the parts, and the README says what each builds.

</content>
</entry>
</feed>
