Skip to main content

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)

레이어 역할

LayerResponsibility
Application애플리케이션 로직
grender렌더링 API 인터페이스
Rendering Backend실제 렌더링 구현

3. Module Structure

grender는 다음 서브모듈로 구성된다.

grender
├─ common
├─ id
├─ enums
├─ types
└─ device

각 모듈은 렌더링 API를 구성하는 특정 기능을 담당한다.

ModuleResponsibility
common공통 설정 및 유틸리티
id리소스 핸들 타입
enums렌더링 열거형 정의
types렌더링 데이터 구조
device렌더링 장치 인터페이스

4. Public API

grenderPublic 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

grendercommand 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 인터페이스 계층을 제공한다.