GAL Rendering
그래픽스 추상화 레이어 - OpenGL 기반 CAD 렌더링 파이프라인
모듈 개요
GAL(Graphics Abstraction Layer)은 ImEDA의 핵심 렌더링 시스템입니다. OpenGL을 기반으로 좌표 변환, 도형 렌더링, GPU 캐싱, FBO 관리 등 CAD 도면의 고성능 렌더링을 담당합니다.
25 header files OpenGL 3.3+ GLSL Shaders GPU Cached
c_gal - 그래픽스 기본 인터페이스
모든 렌더링 작업의 진입점이 되는 추상 인터페이스입니다.
📌
좌표 변환
월드 좌표계와 스크린 좌표계 간의 변환. MATRIX3x3D 행렬로 이동, 회전, 스케일 변환을 수행합니다.
🎨
색상 관리
c_color4d로 RGBA 색상 관리, BGRA 포맷 변환과 Named Color([JUNCTION] 등) 지원.
✎
도형 렌더링
선, 원, 호, 다각형, 텍스트 등 CAD 기본 도형 렌더링. 각 도형은 GPU 버텍스로 변환됩니다.
🔍
줌 / 회전 / 뒤집기
줌 레벨에 따른 LOD 처리와 회전/뒤집기 변환을 지원합니다.
좌표 변환 시스템
| 변환 | 설명 | 사용 행렬 |
|---|---|---|
| 월드 → 스크린 | CAD 좌표를 화면 픽셀로 변환 | worldScreenMatrix |
| 스크린 → 월드 | 마우스 좌표를 CAD 좌표로 변환 | screenWorldMatrix |
| 로컬 변환 | 심볼/풋프린트 내부 좌표 변환 | MATRIX3x3D 스택 |
색상 포맷 변환
// BGRA 포맷: A(31:24) | R(23:16) | G(15:8) | B(7:0)
uint32_t rgba = bgraToRGBA(bgraColor);
uint32_t bgra = rgbaToBGRA(rgbaColor);
std::string namedColor = "[JUNCTION]";
OpenGL 렌더링 파이프라인
Application Layer
c_painter
SCH / PCB Painter
SCH / PCB Painter
c_view
뷰 관리
뷰 관리
↓
GAL Abstraction
c_gal
그래픽스 인터페이스
그래픽스 인터페이스
↓
OpenGL Backend
c_gl_frame
GL 컨텍스트
GL 컨텍스트
c_gl_resources
리소스 관리
리소스 관리
c_vertex_manager
버텍스 관리
버텍스 관리
↓
Post-Processing
c_compositor
레이어 합성
레이어 합성
c_antialiasing
안티앨리어싱
안티앨리어싱
↓
GPU
최종 출력
최종 출력
파이프라인 단계별 역할
| 컴포넌트 | 역할 | 주요 파일 |
|---|---|---|
c_gl_frame | OpenGL 컨텍스트 생성 및 프레임 관리 | gl_frame.h |
c_gl_resources | 셰이더, 텍스처, VBO 등 GPU 리소스 관리 | gl_resources.h |
c_vertex_manager | 버텍스 데이터 수집 및 GPU 전송 | vertex_manager.h |
c_compositor | 다중 레이어를 하나의 프레임으로 합성 | compositor.h |
c_antialiasing | MSAA/FXAA 기반 안티앨리어싱 | antialiasing.h |
GPU Cache 시스템
c_gpu_cached_manager
GPU 캐시 생명주기 관리. 캐시 할당, 무효화, 해제를 담당합니다.
cache managementc_cached_container_gpu
GPU 메모리 상의 버텍스 컨테이너. VBO에 직접 매핑되어 드로우 콜을 최소화합니다.
vertex buffer캐시 무효화 규칙
엔진 설정 변경 후 반드시 doc->setNeedsRender()를 호출하여 FBO 캐시를 무효화해야 합니다.
// CAD 문서 즉시 렌더링 - 세 가지 모두 호출 필수
doc->setNeedsRender(); // FBO 캐시 무효화
c_cadframe_document::RequestRepaint(); // CAD 문서 뷰 갱신
if (m_host) m_host->requestRepaint(); // 워크스페이스 UI 갱신
GLSL 셰이더
| 카테고리 | 용도 | 특징 |
|---|---|---|
| 기본 셰이더 | 선, 다각형, 원 | 색상, 두께, 패턴 |
| PCB 전용 | 패드, 비아, 동박 | 레이어별 블렌딩 |
| SCH 전용 | 심볼, 와이어, 넷 라벨 | 텍스트 최적화 |
| 포스트 프로세싱 | 안티앨리어싱, 합성 | FXAA, 알파 블렌딩 |
Glyph / Text 렌더링
벡터 글리프
TTF 폰트를 벡터 경로로 변환하여 GPU에서 렌더링. 확대해도 품질 유지.
텍스트 레이아웃
정렬, 회전, 미러링 지원. 바운딩 박스 정확 계산.
FBO (Framebuffer Object) 캐싱
FBO 캐싱 흐름
도면 변경 감지
setNeedsRender()
FBO 재렌더링
↓
변경 없음
캐시된 FBO 재사용
화면 출력
주요 헤더 파일
| 파일 | 설명 |
|---|---|
gal.h | GAL 추상 인터페이스 |
opengl_gal.h | OpenGL 구현체 |
gl_frame.h | GL 프레임/컨텍스트 |
gl_resources.h | GPU 리소스 관리 |
vertex_manager.h | 버텍스 수집/전송 |
compositor.h | 레이어 합성 |
antialiasing.h | 안티앨리어싱 |
gpu_cached_manager.h | GPU 캐시 관리 |
cached_container_gpu.h | GPU 버텍스 컨테이너 |
color4d.h | 색상 클래스 (RGBA/BGRA) |
painter.h | 도형별 렌더링 로직 |