Software Design Specification
grender_cpu
1. 개요
본 문서는 grender_cpu 모듈의 Software Design Specification (SDS) 를 정의한다.
grender_cpu는 grender 모듈의 렌더링 인터페이스를 기반으로 동작하는 CPU 기반 렌더링 구현 모듈이다.
이 모듈은 GPU API에 의존하지 않는 software rasterizer 구조를 제공하며 CPU에서 동작하는 렌더링 파이프라인을 구성한다.
렌더링 파이프라인은 다음 처리 단계를 포함한다.
- vertex processing
- primitive clipping
- rasterization
- fragment processing
- framebuffer 기록
2. 설계 목표
grender_cpu 모듈의 설계 목표는 다음과 같다.
- CPU 기반 렌더링 파이프라인 구현
- 렌더링 단계의 모듈 분리
- framebuffer 기반 pixel 기록 구조 제공
- primitive rasterization 구현
본 모듈은 CPU에서 동작하는 software rasterizer 설계 구조를 제공한다.
3. 모듈 구조
grender_cpu 모듈은 다음 하위 모듈로 구성된다.
grender_cpu
├─ common
├─ framebuffer
├─ pipeline
│ └─ raster
└─ device
각 모듈의 역할은 다음과 같다.
| 모듈 | 역할 |
|---|---|
| common | 공통 데이터 타입 정의 |
| framebuffer | framebuffer 데이터 구조 |
| pipeline | 렌더링 파이프라인 처리 |
| raster | primitive rasterization |
| device | CPU render device 구현 |
4. 렌더링 파이프라인 구조
grender_cpu는 다음 렌더링 처리 단계를 사용한다.
Vertex Input
↓
Vertex Stage
↓
Primitive Clipping
↓
Rasterization
↓
Fragment Processing
↓
Framebuffer Write
각 단계는 pipeline 모듈의 구성 요소에서 수행된다.
5. 주요 설계 구성 요소
5.1 Vertex Stage
vertex stage는 입력 vertex 데이터를 처리하여 screen-space vertex 데이터를 생성한다.
이 단계는 다음 기능을 수행한다.
- vertex 좌표 처리
- screen-space 좌표 생성
5.2 Primitive Clipping
primitive clipping 단계는 primitive가 화면 영역 내부에 존재하는지 판단한다.
해당 단계는 화면 영역 밖 primitive를 제거한다.
5.3 Rasterization
rasterization 단계는 primitive를 pixel fragment로 변환한다.
지원 primitive
- triangle
- line
- point
이 단계는 pipeline/raster 모듈에서 수행된다.
5.4 Fragment Processing
fragment processing 단계는 rasterization 단계에서 생성된 fragment에 대해 다음 처리를 수행한다.
- depth 비교
- color buffer 기록
fragment 결과는 framebuffer에 기록된다.
6. 데이터 구조
grender_cpu는 다음 주요 데이터 구조를 사용한다.
| 데이터 | 설명 |
|---|---|
| CpuVertex | vertex 입력 데이터 |
| ScreenVertex | screen-space vertex |
| RasterTriangle | triangle rasterization 입력 |
| RasterLine | line rasterization 입력 |
| RasterPoint | point rasterization 입력 |
| FramebufferView | framebuffer 접근 구조 |
7. 모듈 의존성
grender_cpu 모듈은 다음 모듈과 연동된다.
| 모듈 | 역할 |
|---|---|
| grender | 렌더 디바이스 인터페이스 |
| ghost | 플랫폼 window 시스템 |
내부 의존성
device
↓
pipeline
↓
raster
↓
framebuffer
↓
common
8. 설계 제약
grender_cpu 모듈은 다음 설계 제약을 가진다.
- CPU 기반 렌더링만 사용해야 한다.
- GPU API 의존성을 가져서는 안 된다.
- framebuffer 기반 pixel 기록 구조를 사용해야 한다.
9. 요약
grender_cpu는 CPU 기반 렌더링을 수행하는 software rasterizer 구현 모듈이다.
본 모듈은 다음 구조로 구성된다.
- common
- framebuffer
- pipeline
- raster
- device
각 모듈은 CPU 렌더링 파이프라인의 특정 단계를 담당하며 이를 통해 software rendering 시스템이 구성된다.