Grender
1. Overview
grender는 Grap 시스템에서 Rendering API Layer를 제공하는 라이브러리이다.
이 모듈은 애플리케이션과 렌더링 구현 사이에 위치하는 렌더링 인터페이스 계층을 구성한다.
grender는 다음 요소를 정의한다.
- 렌더링 장치 인터페이스
- 렌더링 명령 구조
- 렌더링 데이터 타입
- 렌더링 리소스 핸들
- 렌더링 열거형
grender는 렌더링 알고리즘 또는 GPU API를 직접 구현하지 않는다.
실제 렌더링 구현은 별도의 렌더러 backend에서 수행된다.
2. Layer Position
grender는 Grap 시스템에서 렌더링 인터페이스 계층으로 동작한다.
시스템 레이어 구조
Application
▲
│
grender
(Render API Layer)
▲
│
Rendering Backend
(CPU Renderer / GPU Renderer)
레이어 역할
| Layer | Responsibility |
|---|---|
| Application | 애플리케이션 로직 |
| grender | 렌더링 API 인터페이스 |
| Rendering Backend | 실제 렌더링 구현 |
3. Module Structure
grender는 다음 서브모듈로 구성된다.
grender
├─ common
├─ id
├─ enums
├─ types
└─ device
각 모듈은 렌더링 API를 구성하는 특정 기능을 담당한다.
| Module | Responsibility |
|---|---|
| common | 공통 설정 및 유틸리티 |
| id | 리소스 핸들 타입 |
| enums | 렌더링 열거형 정의 |
| types | 렌더링 데이터 구조 |
| device | 렌더링 장치 인터페이스 |
4. Public API
grender는 Public Header 구조를 제공한다.
모든 Public API는 다음 헤더를 통해 접근할 수 있다.
#include <grender/grender.hpp>
grender.hpp는 라이브러리의 umbrella header로 동작하며 다음 모듈을 포함한다.
common
id
enums
types
device
5. Core Concepts
grender API는 다음 핵심 개념을 기반으로 설계된다.
Render Device
렌더링 장치는 IRenderDevice 인터페이스를 통해 추상화된다.
렌더러 구현은 해당 인터페이스를 구현해야 한다.
Frame Description
프레임 설정은 FrameDesc 구조체를 통해 전달된다.
이 구조체는 프레임 크기와 초기 clear color 정보를 포함한다.
Render Command
렌더링 명령은 DrawCmd 구조체로 표현된다.
이 구조체는 다음 정보를 포함한다.
- vertex buffer
- vertex count
- pipeline
- primitive type
Resource Handle
렌더링 리소스는 핸들 기반 시스템을 사용한다.
대표 핸들 타입
- VertexBufferHandle
- IndexBufferHandle
- TextureHandle
- PipelineHandle
핸들은 리소스를 식별하기 위한 값이며
실제 리소스 메모리를 관리하지 않는다.
6. Rendering Model
grender는 command based rendering model을 사용한다.
렌더링 흐름
begin_frame()
draw()
end_frame()
present()
각 단계는 IRenderDevice 인터페이스를 통해 호출된다.
7. Directory Layout
grender 디렉토리 구조
grender/
├─ grender.hpp
│
├─ common/
│ ├─ config.hpp
│ ├─ result.hpp
│ └─ assert.hpp
│
├─ id/
│ ├─ ids.hpp
│ └─ handle.hpp
│
├─ enums/
│ ├─ primitive.hpp
│ ├─ format.hpp
│ └─ flags.hpp
│
├─ types/
│ ├─ frame_desc.hpp
│ ├─ draw_cmd.hpp
│ ├─ vertex_format.hpp
│ └─ resource_desc.hpp
│
├─ device/
│ ├─ render_device.hpp
│ └─ render_device.cpp
│
└─ tests/
└─ smoke.cpp
8. Test
grender는 기본 API 검증을 위한 테스트를 포함한다.
테스트 파일
tests/smoke.cpp
테스트 항목
- API version 접근
- FrameDesc 기본 값 확인
- DrawCmd validation
- Handle validation
- PrimitiveType enum 확인
- Result helper 함수 확인
9. Summary
grender는 Grap 시스템에서 렌더링 인터페이스 계층을 제공하는 라이브러리이다.
이 모듈은 다음 기능을 제공한다.
- 렌더링 장치 인터페이스 정의
- 렌더링 명령 구조 정의
- 렌더링 데이터 타입 정의
- 렌더링 리소스 핸들 시스템 제공
grender는 실제 렌더링 구현을 포함하지 않으며
렌더링 backend와 애플리케이션 사이의 API 인터페이스 계층을 제공한다.