CIF 벡터 폰트 정리 (v4) — 44KB 래스터 → 330B 벡터, 해상도 독립
개요
사용자 지적("CIF는 벡터형포맷인데 CSS처럼 가볍고 빨라야 한다")에서 출발. 조사 결과 CIF v3는 이름만 벡터, 실제로는
72×84 AA 비트맵을 949개 색사각형으로 분해 저장한 래스터 포맷(글자당 44KB, 폰트 24MB, 해상도 고정, 949 draw/글자로 느림). TTF에 이미 있는 벡터 아웃라인을 래스터화해 버리고 있었음. →
버리던 벡터를 살리는 정리로 재구성.
결과 (측정)
- 무게: 44KB/글자 → ~330B (133×↓). 폰트 24MB → 메모 charset 88K.
- 해상도 독립: 같은 글자 44px·200px 양쪽 선명. FB_MAX 상향·2× 렌더 불필요(승인받았던 밴드에이드 회피).
- 속도: 949 사각형/글자 → 윤곽 경로 수개, VM이 목표크기 직접 AA.
- 품질: 메모 타이틀 블록화 완전 제거, 런처급 선명(브라우저 E2E 확인).
밀스톤
| M | 산출물 | 검증 |
|---|
| M1 생성기 | crowny-fonts/build/글리프윤곽.c (CoreText CTFontCreatePathForGlyph → CIF v4) | 가=330B |
| M2 독립 래스터라이저 | crowny-fonts/build/벡터글리프렌더.c (비지어평탄화+넌제로와인딩+4×4 SS AA) | 44/200px 선명 |
| M3 VM opcode | crownyc.c fb_fill_glyph_v4 + opcode 807 벡터글리프(경로,x,y,크기,R,G,B), hanseonc_high.c 등록 | 다중크기 렌더 |
| M4 파이프라인 | 페이지배선.py _ensure_glyph_v4+GLYPHV(CROWNY_TEXT_VECTOR4), 페이지렌더러.한선 GLYPHV→벡터글리프 | 메모 36 GLYPHV |
| M5 배포 | 공유 crownyc/hanseonc(타세션 재빌드가 소스 반영) + 뷰어렌더.sh CROWNY_TEXT_VECTOR4=1 | 스모크 15/15, 브라우저 E2E |
CIF v4 포맷
CIFV!
버전:4.0
EM:1000
어드밴스:920
경계:55 -77 889 827
---
M 662 827
L 745 827
Q 512 601 470 484 (2차 베지어)
Z
좌표 EM=1000 정규화, y-up 베이스라인 기준. M/L/Q/C/Z.
관련 파일
crowny-fonts/build/글리프윤곽.c (생성기), 벡터글리프렌더.c (독립 검증)
crowny-fonts/cifv4/<폰트>/<HEX>.cifv (온디맨드 생성 캐시)
CrownyOS/crownyc/crownyc.c (fb_fill_glyph_v4, opcode 807), hanseonc_high.c (벡터글리프 807)
CrownyBrowser/native/m3-배선/페이지배선.py (_ensure_glyph_v4, GLYPHV), 뷰어렌더.sh (CROWNY_TEXT_VECTOR4=1)
CrownyBrowser/src/페이지렌더러.한선 (GLYPHV 처리)
잔여 이슈
- 폰트 일괄 v4 생성(현재 온디맨드로 충분). CIF v3 24MB는 점진 폐기.
- 색상 글리프(이모지)는 별도 경로 필요(텍스트는 단색 벡터로 충분).
- 앞으로 모든 크라우니 UI 텍스트를 벡터글리프로(브라우저 앱뷰 외 확대).
교훈
- 공유 crownyc 배포 레이스: 타 세션이 crownyc.c 동시 편집·재빌드 중이면 스모크가
cc의 바이너리 truncate와 겹쳐 거짓 실패. 백업+자동복원 게이트로 회피, 타세션 빌드가 내 opcode를 이미 반영함을 확인. (신중 배포 = 백업→스테이징→스모크→자동복원)
- 벡터가 FB_MAX를 대체: 해상도 독립이라 프레임버퍼 상향 없이 선명. 밴드에이드보다 근본 정리.
후속 (2026-07-07)
- 탭 X 삭제+확인+복원: 부모 제스처가 X버튼 가로채던 버그 수정(X영역 gesture 라우팅)+확인 대화상자("닫으시겠습니까?"+⌘⇧T 복원 안내+다시묻지않음)+복원=_closedTabs 스택. caveat: 티어차단 crowny 웹탭 teardown은 선존재 WebKit 레이스(앱종료시도 동일)로 분리.
- 앱뷰 배경 풀캔버스(①): 계산기/시계 화면시작(800,600) 고정→CW/CH 읽어 배경이 전체 채움(네이비 여백 제거).
- 폰트 패밀리 v4(②③): CrownyGothicMedium/Bold, CrownyMyeongjo(세리프), CrownyModern 일괄 생성(각 3.6M/919자). 벡터일괄생성.sh 재사용도구.
- 폰트 통일: 앱 렌더스크립트 전부 CROWNY_FONT=CrownyGothic 명시.
- OS셸(④): HTML/CSS(셸.한선 생성)라 벡터글리프(PPM) 경로 아님 — CSS 웹폰트(WOFF2) 경로. 통일은 CSS font 지정으로.