Engineering/Computer Graphics

Graphic 포스팅 계획 [취미]

luckydipper 2025. 10. 1. 18:34
반응형

Isaac simulator나 Muzuco 등 다양한 시뮬레이터에서 그래픽스가 쓰인다. 또한 내가 만든 애플리케이션을 appimage로 패키징 해서 배포한다면, GUI가 필요하다. 또한 만화나 애니메이션 버튜버쪽에 관심이 있어서 취미로 공부해보고 싶다. [각주:1] 취미인 만큼, 시장성보단 재미로 하고 있다. Rust를 통해 Graphics를 공부해보려고 한다. CMU에서 들은 강의 내용도 요약할 예정이다. Rerun 비쥬얼라이저에 쓰이는 (winit egui), 요즘 뜨고 있는 WebAssembly, WebGPU 등을 공부 해보려고 한다. 

1. 뭘 공부 하면 재밌을까?

┌─────────────────────────────────────────┐
│      Application (게임, 앱)               │
└─────────────────────────────────────────┘
                  ↓
┌─────────────────────────────────────────┐
│  Desktop Environment (GNOME, KDE)       │  ← 완전한 데스크톱 경험
│  - 파일 관리자, 시스템 설정, 테마              │
└─────────────────────────────────────────┘
                  ↓
┌─────────────────────────────────────────┐
│  GUI Framework (Qt, GTK, wxWidgets)     │  ← 위젯, 레이아웃, 이벤트
│  - 버튼, 메뉴, 다이얼로그                    │
└─────────────────────────────────────────┘
                  ↓
┌─────────────────────────────────────────┐
│  Windowing Library (GLFW, SDL)          │  ← OS 윈도우 추상화
│  - 윈도우 생성, 입력, 그래픽 컨텍스트           │
└─────────────────────────────────────────┘
                  ↓
┌─────────────────────────────────────────┐
│  Display Server (X11, Wayland)          │  ← 화면 출력 프로토콜
│  - 윈도우 관리, 합성, 입력 라우팅              │
└─────────────────────────────────────────┘
                  ↓
┌─────────────────────────────────────────┐
│  Kernel + GPU Driver                    │
└─────────────────────────────────────────┘

 

2. GUI

- 실제 어플리케이션을 만들려면 GUI 딴에서 개발하는 것이 편할 것이다. 그런데 너무 설정할 것이 많다. 이전에 QT로 개발을 한 적이 있는데 GUI 자체도 무겁고, API도 너무 많았다. cross platform이 가장 큰 장점이었으나, 지금 한다면 간단한 GUI를 이용했을 것이다. python의 simplegui, rust의 egui, c++ imgui를 쓸 것이다. 

 

- Desktop Environment 맥과 윈도우 OS에 따라서 앱의 설정 버튼 위치가 다르다. 이걸 건드릴 일은 없을 것 같다. 

3. Windowing Library 

OS마다 화면에 픽셀에 그림 그리는 API가 다르다. 키보드 입력받는 법도 API도 다 다르다. window의 경우 win32, 리눅스의 경우 x11, 맥의 경우 cocoa를 쓴다. 이런 API를 통합한 것이 Windowing Library이다. 아마 OpenGL이나 Vulkan 같은 그래픽 라이브러리

1. 윈도우, 위젯을 연다. 

2. I/O 관리(키보드, 마우스 네트워크) 

3. Opengl, Vulkan의 처리 

아마 그래픽 라이브러리를 배우려면 여기서부터 하는 게 좋을 것 같다. 

 

 

4. Windowing Library  vs GUI

목적 윈도우 생성 + 입력 완전한 UI 구축
위젯 ✗ 없음 ✓ 버튼, 메뉴, 다이얼로그 등
레이아웃 ✗ 없음 ✓ 그리드, 박스, 플로우 등
그래픽 OpenGL/Vulkan 컨텍스트만 자체 2D 렌더링 + 3D 지원
사용 사례 게임, 3D 렌더러 데스크톱 앱, IDE
예시 GLFW, SDL, winit Qt, GTK, wxWidgets
코드량 적음 (10-50줄) 많음 (100+줄)
자유도 높음 (직접 그림) 낮음 (위젯 사용)

5. Display server

  X11 Wayland
출시 1984 2008
복잡도 높음 (3개 컴포넌트) 낮음 (1개)
네트워크 내장 지원 별도 도구 필요
보안 약함 (앱 간 투명) 강함 (격리)
성능 오버헤드 있음 효율적
호환성 거의 모든 앱 점진적 전환 중
스크린샷 쉬움 권한 필요
화면 공유 쉬움 Pipewire 필요
현 상태 레거시 표준으로 전환 중

 

  1. 저자의 본점은 로보틱스 자율주행이다. :) [본문으로]
반응형