SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
nemoux00@gmail.com 
http://nemoux00.wordpress.com
윈도우 매니저 소개 WAYLAND 소개 X vs WAYLAND 오픈 소스 기반 UI/UX 플랫폼 기본 UI/UX 플랫폼 구조 필수 오픈소스 프로젝트 윈도우 매니저 구조 및 기본 동작 원리 컴포지터/쉘 역할 기본 동작 과정 WAYLAND/WESTON 구조 스터디 진행 계획
여러 어플리케이션이 하나의 입/출력 장치를 공유 데스크탑 환경 vs 스마트폰 환경 
APPLICATION 
WINDOW 
WINDOW 
APPLICATION 
WINDOW 
APPLICATION 
WINDOW 
WINDOW 
WINDOW
윈도우 프로토콜 윈도우 서버/클라이언트 간의 통신 규약 X protocol, WAYLAND protocol, ... 컴포지터 (compositor) 여러 윈도우 화면을 하나의 스크린에 출력하기 위해 합성 입력 장치로부터 들어온 이벤트를 적절한 윈도우로 전달 … 쉘 (shell) 윈도우 화면의 위치나 크기 변경 기능 제공 시작 메뉴, 바탕화면, 스크린세이버 제공 윈도우 포커스 관리 및 전환 기능 제공 …
WAYLAND 의 시작 2008년 레드햇의 개발자였던 Kristian Høgsberg (이하 krh) 의 개인 프로젝트로 시작 (현재 krh 는 인텔에서 근무) WAYLAND 의 목표 X 윈도우 프로토콜을 완전히 대체 데스크탑 환경 뿐 아니라 다양한 스마트 장치 효과적으로 지원 WAYLAND 의 특징 오픈 소스를 최대한 활용/내부를 최소한으로 유지 로컬 기반 (유닉스 도메인 소켓) 
■파일디스크립터 공유, 레퍼런스 기반 버퍼, … 컴포지팅 API 만 제공 (Direct Rendering 과 CSD (Client-Side Decoration 지원))
윈도우 서버/클라이언트 프로토콜 윈도우 화면 생성 및 갱신 (wl_surface, wl_buffer, …) 입력 장치 이벤트 전달 (wl_seat, wl_keyboard, wl_pointer, …) 윈도우 위치/크기 변경, 최대/최소화 (wl_shell_surface, xdg_surface, …) 윈도우 서버/클라이언트 기본 라이브러리 기본 프로토콜 정의 유닉스 도메인 소켓을 이용한 네트워크 통신 제공 기본 프로토콜을 위한 소켓 통신에 필요한 함수 제공 WESTON 기능 검증을 위한 레퍼런스 컴포지터/쉘
오래된 X 를 버리고 새롭게 시작하자! 기능적인 차이(x), 구조적인 차이(..) 하위 호환성 유지/새로운 기능 수용  프로토콜/코드 복잡도 증가 
X client 
X client 
X server 
compositor 
Kernel 
KMS 
evdev 
wayland client 
wayland client 
wayland compositor 
Kernel 
KMS 
evdev
일반적인 어플리케이션(GUI) 개발 형태 APPLICATION vs TOOLKIT vs WINDOW MANAGER 
GTK+/QT/… 
drm-backend 
application 
(GTK+) 
application (wayland) 
application 
(drm) 
application 
(QT) 
wayland-backend 
shell (gnome-shell, plasma, …) 
kernel (drm, fb, kms, evdev, …) 
GPU, KEYBOARD, MOUSE, … 
drm-backend 
…-backend 
compositor (mutter, kwin, …)
DRM/MESA 하드웨어 가속 지원 (OPENGL) OPENGL 라이브러리/GPU 드라이버 플랫폼 API(GLX/WGL/EGL/…)/렌더링 API 
weston 
mesa 
gl-renderer 
EGL-api 
gallium 
GL-api 
i915-driver 
drm 
kernel 
drm-driver (kms, gem, …) 
i915-driver 
nv, radeon, … 
nv, radeon, … 
OpenGL app 
OpenGL app 
gl-renderer 
OpenGL app 
OpenGL app 
nvidia OpenGL library 
EGL-api 
GL-api 
nvidia kernel driver
PIXMAN 픽셀 기반 이미지 관리 CPU 를 이용한 렌더링에 주로 활용 (FB 백엔드) http://www.pixman.org/ CAIRO 벡터 그래픽 지원 레스터라이징 vs 벡터 http://cairographics.org/ PANGO 폰트 레이아웃 지원 http://www.pango.org/
SURFACE  윈도우 BUFFER  윈도우 화면 내용 VIEW  윈도우 위치 속성 SHELL_SURFACE  윈도우 관리 (위치, 크기, 속성, …) 
WAYLAND/WESTON 
weston_surface 
weston_view 
shell_surface 
weston_view 
weston_view 
shell_surface 
shell_surface 
CLIENT 
wl_surface 
wl_shell_surface 
wl_surface 
wl_buffer 
wl_compositor 
weston_compositor 
wl_surface
윈도우 생성 (클라이언트  컴포지터) 윈도우 화면 갱신 (클라이언트  컴포지터) 공유메모리 버퍼/DRM 버퍼 전달 결과 화면 갱신 (컴포지터  커널  장치) 모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성 
CLIENT 
BUFFER 
WAYLAND/WESTON (screen) 
WINDOW 
CLIENT 
BUFFER 
WINDOW 
shared memory buffer 
DRM buffer
렌더링 메모리 기반 vs 하드웨어가속 기반 
SCREEN 
GPU 
framebuffer 
framebuffer 
GUI framework (without opengl) 
GUI framework 
(with opengl) 
WINDOW 
WINDOW 
CPU
컴포지팅 여러 화면을 하나의 화면으로 합쳐주는 것 
■SCENE GRAPH  각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용 
■윈도우 매니저  여러 윈도우를 하나의 프레임버퍼로 합성 
■위젯 엔진  여러 위젯을 하나의 윈도우 화면으로 합성 
■… 
window 
window 
framebuffer 
widget 
widget 
widget 
widget 
window 
widget 
widget 
window 
copy 
copy 
copy 
copy
입력 이벤트 수집 (장치  커널  컴포지터) 입력 이벤트 전달 (컴포지터  클라이언트) 윈도우 매니저에 바인딩되어있는 이벤트 우선 처리 포커스(window)를 소유 중인 클라이언트에게 해당 이벤트 전달 
CLIENT 
WAYLAND/WESTON (screen) 
WINDOW 
CLIENT 
WINDOW 
wl_keyboard 
wl_pointer
포커스(focus) 모델 Click to Focus  마우스(혹은 터치)로 클릭 Focus Follows Mouse  마우스 포인터의 현재 위치 이용 Sloppy Focus  패널이 아닌 윈도우만 포커스 그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식 윈도우 이동/크기 변환/…, 드래그&드롭, … 일반 사용자에게 익숙한 인터페이스 방식 
SCREEN 
WINDOW 
WINDOW 
press 
motion 
release
다양한 렌더러/백엔드 지원 
CLIENT 
wl_shm 
wl_egl_window 
wl_surface 
WAYLAND/WESTON 
pixman-renderer 
gl-renderer 
rpi-renderer 
compositor- 
fbdev 
compositor- 
drm 
compositor- rdp 
compositor- 
rpi 
compositor- 
wayland 
compositor- 
x11 
shm_buffer 
egl_texture 
weston_surface 
wl_buffer
키보드/마우스/멀티터치 지원 UDEV 기반 장치 검색 EVDEV/MTDEV 프로토콜 지원 
CLIENT 
WAYLAND/WESTON 
kernel 
touch 
mtdev 
udev 
seat 
touch 
pointer 
mouse 
evdev 
wl_seat 
wl_touch 
wl_pointer 
grab 
(default) 
grab (default) 
button motion 
key 
default 
move 
resize 
… 
keyboard 
keyboard 
wl_keyboard 
evdev 
grab (default) 
touch motion
다양한 개발 언어/프로토콜/툴킷 지원 가능 
wayland core interface 
xdg shell interface 
wl_surface 
wl_buffer 
wl_seat 
… 
xdg_surface 
xdg_popup 
… 
GTK+/QT/… 
X11-backend 
wayland-backend 
X11 protocol 
EGL 
mesa 
nvidia opengl driver 
… 
xserver 
xwayland 
application (GTK+) 
application 
(QT) 
application 
(wayland) 
application (OpenGL-wayland) 
kwin 
mutter 
weston 
application 
(X11) 
GLX 
application 
(OpenGL-X11)

Weitere ähnliche Inhalte

Was ist angesagt?

In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you screamMario Heiderich
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGLSuhan Lee
 
semaphore & mutex.pdf
semaphore & mutex.pdfsemaphore & mutex.pdf
semaphore & mutex.pdfAdrian Huang
 
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFA Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFoholiab
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depthChris Simmonds
 
Physical Memory Models.pdf
Physical Memory Models.pdfPhysical Memory Models.pdf
Physical Memory Models.pdfAdrian Huang
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonAMD Developer Central
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal BootloaderSatpal Parmar
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateLinaro
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14AMD Developer Central
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 
Parallel Futures of a Game Engine
Parallel Futures of a Game EngineParallel Futures of a Game Engine
Parallel Futures of a Game EngineJohan Andersson
 

Was ist angesagt? (20)

In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you scream
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGL
 
semaphore & mutex.pdf
semaphore & mutex.pdfsemaphore & mutex.pdf
semaphore & mutex.pdf
 
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPFA Kernel of Truth: Intrusion Detection and Attestation with eBPF
A Kernel of Truth: Intrusion Detection and Attestation with eBPF
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depth
 
Physical Memory Models.pdf
Physical Memory Models.pdfPhysical Memory Models.pdf
Physical Memory Models.pdf
 
Introduction to Modern U-Boot
Introduction to Modern U-BootIntroduction to Modern U-Boot
Introduction to Modern U-Boot
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack Update
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
 
Gstreamer plugin development
Gstreamer plugin development Gstreamer plugin development
Gstreamer plugin development
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
Linux Internals - Part II
Linux Internals - Part IILinux Internals - Part II
Linux Internals - Part II
 
Hardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for AndroidHardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for Android
 
Parallel Futures of a Game Engine
Parallel Futures of a Game EngineParallel Futures of a Game Engine
Parallel Futures of a Game Engine
 

Ähnlich wie 윈도우 매니저 스터디: 0.윈도우 매니저 소개

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화nemoux
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
 
Mobile/Embedded for Silverlight
Mobile/Embedded for SilverlightMobile/Embedded for Silverlight
Mobile/Embedded for SilverlightSeo Jinho
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows MobileSeo Jinho
 
Korean input overview in the linux desktop
Korean input overview in the linux desktopKorean input overview in the linux desktop
Korean input overview in the linux desktopgnomekr
 
리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요Changwoo Ryu
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정funmeate
 
Html5 게임 기술의 개요
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요Changhwan Yi
 
Node.js 살펴보기
Node.js 살펴보기Node.js 살펴보기
Node.js 살펴보기명신 김
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
하이브리드앱
하이브리드앱하이브리드앱
하이브리드앱knight1128
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기Jae Sung Park
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012Chanho Song
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 

Ähnlich wie 윈도우 매니저 스터디: 0.윈도우 매니저 소개 (20)

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Manage book project
Manage book projectManage book project
Manage book project
 
Manage book project
Manage book projectManage book project
Manage book project
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 
Mobile/Embedded for Silverlight
Mobile/Embedded for SilverlightMobile/Embedded for Silverlight
Mobile/Embedded for Silverlight
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows Mobile
 
Korean input overview in the linux desktop
Korean input overview in the linux desktopKorean input overview in the linux desktop
Korean input overview in the linux desktop
 
리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요리눅스 데스크톱의 한국어 입력 개요
리눅스 데스크톱의 한국어 입력 개요
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
 
Html5 게임 기술의 개요
Html5 게임 기술의 개요Html5 게임 기술의 개요
Html5 게임 기술의 개요
 
Node.js 살펴보기
Node.js 살펴보기Node.js 살펴보기
Node.js 살펴보기
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
하이브리드앱
하이브리드앱하이브리드앱
하이브리드앱
 
가상키패드 (Vkeypad)
가상키패드 (Vkeypad)가상키패드 (Vkeypad)
가상키패드 (Vkeypad)
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 

윈도우 매니저 스터디: 0.윈도우 매니저 소개

  • 2. 윈도우 매니저 소개 WAYLAND 소개 X vs WAYLAND 오픈 소스 기반 UI/UX 플랫폼 기본 UI/UX 플랫폼 구조 필수 오픈소스 프로젝트 윈도우 매니저 구조 및 기본 동작 원리 컴포지터/쉘 역할 기본 동작 과정 WAYLAND/WESTON 구조 스터디 진행 계획
  • 3.
  • 4. 여러 어플리케이션이 하나의 입/출력 장치를 공유 데스크탑 환경 vs 스마트폰 환경 APPLICATION WINDOW WINDOW APPLICATION WINDOW APPLICATION WINDOW WINDOW WINDOW
  • 5. 윈도우 프로토콜 윈도우 서버/클라이언트 간의 통신 규약 X protocol, WAYLAND protocol, ... 컴포지터 (compositor) 여러 윈도우 화면을 하나의 스크린에 출력하기 위해 합성 입력 장치로부터 들어온 이벤트를 적절한 윈도우로 전달 … 쉘 (shell) 윈도우 화면의 위치나 크기 변경 기능 제공 시작 메뉴, 바탕화면, 스크린세이버 제공 윈도우 포커스 관리 및 전환 기능 제공 …
  • 6. WAYLAND 의 시작 2008년 레드햇의 개발자였던 Kristian Høgsberg (이하 krh) 의 개인 프로젝트로 시작 (현재 krh 는 인텔에서 근무) WAYLAND 의 목표 X 윈도우 프로토콜을 완전히 대체 데스크탑 환경 뿐 아니라 다양한 스마트 장치 효과적으로 지원 WAYLAND 의 특징 오픈 소스를 최대한 활용/내부를 최소한으로 유지 로컬 기반 (유닉스 도메인 소켓) ■파일디스크립터 공유, 레퍼런스 기반 버퍼, … 컴포지팅 API 만 제공 (Direct Rendering 과 CSD (Client-Side Decoration 지원))
  • 7. 윈도우 서버/클라이언트 프로토콜 윈도우 화면 생성 및 갱신 (wl_surface, wl_buffer, …) 입력 장치 이벤트 전달 (wl_seat, wl_keyboard, wl_pointer, …) 윈도우 위치/크기 변경, 최대/최소화 (wl_shell_surface, xdg_surface, …) 윈도우 서버/클라이언트 기본 라이브러리 기본 프로토콜 정의 유닉스 도메인 소켓을 이용한 네트워크 통신 제공 기본 프로토콜을 위한 소켓 통신에 필요한 함수 제공 WESTON 기능 검증을 위한 레퍼런스 컴포지터/쉘
  • 8. 오래된 X 를 버리고 새롭게 시작하자! 기능적인 차이(x), 구조적인 차이(..) 하위 호환성 유지/새로운 기능 수용  프로토콜/코드 복잡도 증가 X client X client X server compositor Kernel KMS evdev wayland client wayland client wayland compositor Kernel KMS evdev
  • 9.
  • 10. 일반적인 어플리케이션(GUI) 개발 형태 APPLICATION vs TOOLKIT vs WINDOW MANAGER GTK+/QT/… drm-backend application (GTK+) application (wayland) application (drm) application (QT) wayland-backend shell (gnome-shell, plasma, …) kernel (drm, fb, kms, evdev, …) GPU, KEYBOARD, MOUSE, … drm-backend …-backend compositor (mutter, kwin, …)
  • 11. DRM/MESA 하드웨어 가속 지원 (OPENGL) OPENGL 라이브러리/GPU 드라이버 플랫폼 API(GLX/WGL/EGL/…)/렌더링 API weston mesa gl-renderer EGL-api gallium GL-api i915-driver drm kernel drm-driver (kms, gem, …) i915-driver nv, radeon, … nv, radeon, … OpenGL app OpenGL app gl-renderer OpenGL app OpenGL app nvidia OpenGL library EGL-api GL-api nvidia kernel driver
  • 12. PIXMAN 픽셀 기반 이미지 관리 CPU 를 이용한 렌더링에 주로 활용 (FB 백엔드) http://www.pixman.org/ CAIRO 벡터 그래픽 지원 레스터라이징 vs 벡터 http://cairographics.org/ PANGO 폰트 레이아웃 지원 http://www.pango.org/
  • 13.
  • 14. SURFACE  윈도우 BUFFER  윈도우 화면 내용 VIEW  윈도우 위치 속성 SHELL_SURFACE  윈도우 관리 (위치, 크기, 속성, …) WAYLAND/WESTON weston_surface weston_view shell_surface weston_view weston_view shell_surface shell_surface CLIENT wl_surface wl_shell_surface wl_surface wl_buffer wl_compositor weston_compositor wl_surface
  • 15. 윈도우 생성 (클라이언트  컴포지터) 윈도우 화면 갱신 (클라이언트  컴포지터) 공유메모리 버퍼/DRM 버퍼 전달 결과 화면 갱신 (컴포지터  커널  장치) 모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성 CLIENT BUFFER WAYLAND/WESTON (screen) WINDOW CLIENT BUFFER WINDOW shared memory buffer DRM buffer
  • 16. 렌더링 메모리 기반 vs 하드웨어가속 기반 SCREEN GPU framebuffer framebuffer GUI framework (without opengl) GUI framework (with opengl) WINDOW WINDOW CPU
  • 17. 컴포지팅 여러 화면을 하나의 화면으로 합쳐주는 것 ■SCENE GRAPH  각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용 ■윈도우 매니저  여러 윈도우를 하나의 프레임버퍼로 합성 ■위젯 엔진  여러 위젯을 하나의 윈도우 화면으로 합성 ■… window window framebuffer widget widget widget widget window widget widget window copy copy copy copy
  • 18. 입력 이벤트 수집 (장치  커널  컴포지터) 입력 이벤트 전달 (컴포지터  클라이언트) 윈도우 매니저에 바인딩되어있는 이벤트 우선 처리 포커스(window)를 소유 중인 클라이언트에게 해당 이벤트 전달 CLIENT WAYLAND/WESTON (screen) WINDOW CLIENT WINDOW wl_keyboard wl_pointer
  • 19. 포커스(focus) 모델 Click to Focus  마우스(혹은 터치)로 클릭 Focus Follows Mouse  마우스 포인터의 현재 위치 이용 Sloppy Focus  패널이 아닌 윈도우만 포커스 그랩(grab) 인터페이스 마우스 버튼 (or 터치) 다운 + 모션 … + 업 이벤트 전달 방식 윈도우 이동/크기 변환/…, 드래그&드롭, … 일반 사용자에게 익숙한 인터페이스 방식 SCREEN WINDOW WINDOW press motion release
  • 20. 다양한 렌더러/백엔드 지원 CLIENT wl_shm wl_egl_window wl_surface WAYLAND/WESTON pixman-renderer gl-renderer rpi-renderer compositor- fbdev compositor- drm compositor- rdp compositor- rpi compositor- wayland compositor- x11 shm_buffer egl_texture weston_surface wl_buffer
  • 21. 키보드/마우스/멀티터치 지원 UDEV 기반 장치 검색 EVDEV/MTDEV 프로토콜 지원 CLIENT WAYLAND/WESTON kernel touch mtdev udev seat touch pointer mouse evdev wl_seat wl_touch wl_pointer grab (default) grab (default) button motion key default move resize … keyboard keyboard wl_keyboard evdev grab (default) touch motion
  • 22. 다양한 개발 언어/프로토콜/툴킷 지원 가능 wayland core interface xdg shell interface wl_surface wl_buffer wl_seat … xdg_surface xdg_popup … GTK+/QT/… X11-backend wayland-backend X11 protocol EGL mesa nvidia opengl driver … xserver xwayland application (GTK+) application (QT) application (wayland) application (OpenGL-wayland) kwin mutter weston application (X11) GLX application (OpenGL-X11)
  • 23.
  • 24. 1주차 : 출력 과정 이해 컴포지팅 동작 원리 이해 공유 메모리 기반 컴포지팅 과정 이해 (shm, pixman, …) 하드웨어 가속 기반 컴포지팅 과정 이해 (opengl/egl, drm, …) WAYLAND/WESTON 기반 컴포지팅 과정 이해 2주차 : 입력 과정 이해 입력 장치 관리 이해 (udev, evdev, …) 포커스 모델 이해 (마우스, 키보드, 멀티터치, …) WAYLAND/WESTON 기반 입력 장치 동작 과정 이해 WAYLAND/WESTON 기반 가상 키보드/한글 입력 동작 과정 이해
  • 25. 3주차 : 렌더링 최적화 기술 분석 SCENE GRAPH 동작 과정 분석 (레이어 관리, 데미지/클리핑 관리, …) 더블 버퍼링, 디스플레이 동기화, 하드웨어 플레인 동작 과정 분석 OpenGL 확장 기능 분석 ■buffer_age, unpack_subimage, swap_buffers_with_damage, … 4주차 : WAYLAND 기반 윈도우 매니저 분석 서페이스 관리 분석 (윈도우 활성화, 서브서페이스, …) 그랩 인터페이스 분석 (윈도우 이동, 크기 변환, …) 데이터 인터페이스 분석 (drag & drop, selection, clipboard, …) 쉘 인터페이스 분석 (wayland/xdg shell, workspace, …) 확장 프로토콜 분석 (subsurface, presentation, …)
  • 26. 5주차 : UI/UX 플랫폼 분석 WAYLAND 기반 UI/UX 플랫폼 구조 분석 툴킷 엔진 지원 분석 (GTK, QT, …) X 프로토콜 지원 분석 (xwayland) 어플리케이션 지원 분석 (브라우저, 영상 재생, …) WAYLAND 기반 윈도우 매니저 소개 ■weston, mutter, kwin, hawaii, ...