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
c_view
뷰 관리
GAL Abstraction
c_gal
그래픽스 인터페이스
OpenGL Backend
c_gl_frame
GL 컨텍스트
c_gl_resources
리소스 관리
c_vertex_manager
버텍스 관리
Post-Processing
c_compositor
레이어 합성
c_antialiasing
안티앨리어싱
GPU
최종 출력

파이프라인 단계별 역할

컴포넌트역할주요 파일
c_gl_frameOpenGL 컨텍스트 생성 및 프레임 관리gl_frame.h
c_gl_resources셰이더, 텍스처, VBO 등 GPU 리소스 관리gl_resources.h
c_vertex_manager버텍스 데이터 수집 및 GPU 전송vertex_manager.h
c_compositor다중 레이어를 하나의 프레임으로 합성compositor.h
c_antialiasingMSAA/FXAA 기반 안티앨리어싱antialiasing.h

GPU Cache 시스템

c_gpu_cached_manager

GPU 캐시 생명주기 관리. 캐시 할당, 무효화, 해제를 담당합니다.

cache management

c_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.hGAL 추상 인터페이스
opengl_gal.hOpenGL 구현체
gl_frame.hGL 프레임/컨텍스트
gl_resources.hGPU 리소스 관리
vertex_manager.h버텍스 수집/전송
compositor.h레이어 합성
antialiasing.h안티앨리어싱
gpu_cached_manager.hGPU 캐시 관리
cached_container_gpu.hGPU 버텍스 컨테이너
color4d.h색상 클래스 (RGBA/BGRA)
painter.h도형별 렌더링 로직