← 목록
기타 2026-07-04 4KB 읽기 4분

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 opcodecrownyc.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 지정으로.