← 목록
기타 2026-06-23 5KB 읽기 5분

요청: GPU추상화-전면화

  • 날짜: 2026-06-23 10:09:31
  • 작업 경로: /Users/ef/crowny-ai

요청 본문

GPU렌더러 텍스처/셰이더/버퍼/드로우 추상화를 VM 프레임버퍼 소프트웨어 GPU로 실재화(스텁→실)

관련 산출

(클로드가 작업 결과를 이어 기록)

산출 결과 — 소프트웨어 GPU 첫 수직슬라이스 (2026-06-23)

GPU렌더러.한선 = 60+ 함수 추상화이나 전부 ID·메타만 반환하는 스텁(텍스처/셰이더/버퍼/렌더패스/드로우/레이어합성/타일맵/SDF/메모리풀). 핵심 통찰: VM 프레임버퍼(C레벨 RGB사각형 358)가 진짜 GPU 표면 → 픽셀당 한선씨 루프(64000회 폭주) 회피, 네이티브 opcode로 래스터화.

소프트GPU.한선 신규 (실 백엔드)

  • 텍스처 = CIF 픽셀소스(씨앗 RECT). 텍스처CIF로드(경로)→폭/높이 추출, 드로우시 디코드.
  • 셰이더 = 드로우시 색 변환(픽셀 함수): 항등 / 틴트(채널곱 rf/gf/bf) / 그레이스케일(휘도 77/150/29).
  • 드로우텍스처 = 씨앗마다 셰이더 적용 → RGB사각형(x+ox,y+oy,w,h,R',G',B') 네이티브 래스터.
  • 다층 합성 = 드로우텍스처 반복(painter's = z순서). 합성시작=화면초기화 / 합성저장=화면저장→PPM.

검증 (실 픽셀, PPM)

  • 셰이더: identity 픽셀(5,5)=(39,29,49) / tint(레드만)=(39,0,0) / gray=(34,34,34) — 셰이더가 실제로 픽셀 변환 ✅
  • 다층 z순서 합성: 배경(5,5)=(39,29,49) + 시안 오버레이영역(100,80)=(0,29,49, R채널=0) — z1이 z0 위에 합성 ✅ (PNG 시각확인)

의미 + 잔여

이제 GPU 추상화의 핵심 경로(텍스처→셰이더→합성→present)가 실제 픽셀을 생성(스텁 아님). 첫 수직슬라이스 완성. 잔여(다음 증분): SDF 텍스트렌더링·타일맵·블렌드모드(알파/멀티플라이/스크린)·그라데이션/그림자/보더·레이어 필터(blur)·GPU 메모리풀을 동일 패턴(네이티브 FB op 백엔드)으로 실재화. 대용량 텍스처는 청크(폰트글리프렌더.sh 패턴).

관련 파일

  • /Users/ef/CrownyBrowser/src/소프트GPU.한선 (+ _데모, _합성데모)
  • 의존: VM opcode 화면초기화(346)/RGB사각형(358)/화면저장(355)

2번째 증분 — 블렌드/그라데이션/그림자/보더 (2026-06-23)

소프트GPU.한선에 UI 렌더 핵심 프리미티브 추가 (전부 네이티브 FB op 백엔드, 실 픽셀):

  • 알파사각형 = RGB알파사각형(789, fb_blend_pixel) 실 알파 블렌딩 → 반투명 레이어 합성.
  • 그라데이션세로 = 행 스트립마다 색 보간(c1+(c2-c1)dy/h) → RGB사각형.
  • 그림자 = 오프셋 검정 알파사각형. 보더 = 4변 스트립.
  • 드로우텍스처알파 = 텍스처를 알파로 겹쳐 그림(반투명 레이어).

검증 (실 픽셀, PPM)

  • 그라데이션: 상(20,22,61)→하(20,117,118) 선형 보간 ✅
  • 보더: (201,169,97) 골드 정확 ✅
  • 알파카드(흰50%): (125,138,143) 배경과 블렌드 ✅
  • 그림자: (10,46,52) 어두워짐 ✅
  • PNG 시각: 그라데이션 배경 + 골드보더 + 반투명 카드 + 드롭섀도우 (실제 UI 카드).

소프트GPU 현재 커버리지

텍스처 · 셰이더(틴트/그레이) · 다층 z순서 합성 · 알파 블렌드 · 그라데이션 · 그림자 · 보더 → 브라우저 UI 렌더 공통 표면 실재화. 잔여: SDF 텍스트렌더링 · 타일맵 · 블렌드모드 확장(멀티플라이/스크린/오버레이) · 레이어 필터(blur/채도) · GPU 메모리풀.

관련 파일

  • /Users/ef/CrownyBrowser/src/소프트GPU.한선 (+ _효과데모)

3번째 증분 — 셰이더 확장·타일맵·텍스트 (2026-06-24)

소프트GPU.한선에 추가 (전부 실 픽셀, 셰이더=드로우시 per-pixel / 타일맵·텍스트=네이티브):

  • 셰이더 4종 추가: 채도(gray+(c-gray)f/256) · 밝기(cf/256 클램프) · 멀티상수(cconst/255) · 스크린상수(255-(255-c)(255-const)/255).
  • 타일맵그리기: 격자 색배열 → 타일당 RGB사각형.
  • 텍스트그리기: RGB글쓰기(366) VM 비트맵 폰트.

검증 (실 픽셀)

  • 멀티셰이더 텍스처 픽셀(5,105)=(20,23,49) = round(멀티(39,29,49)) ✅ (한선씨 자연반올림, floor 참조보다 정밀)
  • 타일맵 체커: 타일(0,0)=(30,30,40) 타일(1,0)=(60,60,80) 정확 ✅
  • PNG 시각: 타일맵 체커 + "GPU OK" 텍스트 + 멀티틴트 텍스처.

소프트GPU 최종 커버리지 (이번 트랙)

텍스처 · 셰이더(틴트/그레이/채도/밝기/멀티/스크린 6종) · 다층 z순서 합성 · 알파 블렌드 · 그라데이션 · 그림자 · 보더 · 타일맵 · 텍스트.

정직한 경계

  • 프레임버퍼-read 블렌드(배경과 multiply/screen)·박스 블러는 점읽기(351)가 c27 레이어만 읽어 RGB사각형 풀RGB와 어긋남 → 풀RGB read opcode(VM 추가) 필요. 상수 대비 멀티/스크린은 read 불요라 실재화 완료.
  • SDF 글리프 아틀라스는 폰트 글리프 CIF(catalog-cif)+드로우텍스처로 대체 가능(폰트카탈로그 연계).