SlideShare a Scribd company logo
1 of 37
nemoux00@gmail.com
http://nemoux00.wordpress.com
윈도우 매니저 최싞 동향
X vs WAYLAND
오픈 소스 기반 UI/UX 소프트웨어 아키텍처
윈도우 매니저(컴포지터+쉘)/위젯 엔짂
프레임버퍼 렌더링/디스플레이 갱싞 과정
■ 공유메모리/OPENGL 하드웨어 가속
…
윈도우 매니저 역할 및 기본 동작 원리
여러 어플리케이션이 하나의 입/출력 장치를 공유
데스크탑 홖경 vs 스마트폰 홖경
APPLICATION
WINDOWWINDOW
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, …)
메모리 기반 vs 하드웨어가속 기반
SCREEN
GPU
framebuffer framebuffer
GUI framework
(without opengl)
GUI framework
(with opengl)
WINDOW
WINDOW
CPU
APPLICATION
APPLICATION
CPU memory
FRAMEBUFFER
CRTC
copy
copy
APPLICATION
APPLICATION
GPU memory
FRAMEBUFFER
CRTC
rendering
메모리 기반 (without OPENGL)
하드웨어가속 기반 (with OPENGL)
공유메모리를 이용하여 데이터 공유
파일디스크립터 공유 (SCM_RIGHT 소켓 확장 기능 이용)
레퍼런스 기반 버퍼
CLIENT
wl_surface
wl_shm
wl_shm_pool
WAYLAND/WESTON
wl_shm
wl_shm_pool
tmp
file
create tmpfile
fd
create_pool (fd)
wl_shm_pool
create_buffer (pool)
wl_buffer
wl_surface
attach (buffer)/damage/commit
pixman_surface
pixman_image_t
OPENGL 동작 방식 (레스터라이징 방식)
버텍스(vertex)  점
폴리곤(polygon)  면 (삼각형 기반)
텍스쳐(texture)  이미지
3D SPACE
(1, 0, 0)(-1, 0, 0)
(0, 1, 0)
FRAMEBUFFER
기본 동작 과정
GPU 메모리를 할당받아 필요한 데이터 젂달 (텍스쳐, 버텍스, …)
배치 버퍼에 OPENGL 명령어 순서대로 젂달
지정된 배치 버퍼를 이용하여 렌더링 요청
GPU 가 배치 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링
glVertex() glTexImage()
GPU
batch
buffer
texture
buffer
frame
buffer
eglSwapBuffers()
CRTC
vertex
buffer
glBufferData()
소프트웨어 구조
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
어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드
에 직접 접근하는 방식
GPU
kernel
X server
OpenGL driver
drm driver
application
(X11)
application
(OpenGL-X11)
GLXX
2D driver
AIGLX
GPU
kernel
WAYLAND/WESTON
OpenGL driver
drm driver
application
(wayland)
application
(OpenGL-wayland)
wayland
EGL
EGLEGL
kms
MESA/DRM 기준 동작 과정 (하나의 GPU 사용)
WESTONCLIENT MESA client-side MESA server-side
GPU
batch
buffer
texture
buffer
frame
buffer
local name
wl_drm wl_drm
wl_drm_buffer EGLImageKHR
eglSwapBuffers
flush
(rendering)
wl_buffer
flush
(rendering)
texture
buffer
batch
buffer
frame
buffer
CRTC
둘 이상의 GPU 사용시 (파일디스크립터를 이용)
GPU0
batch
buffer
texture
buffer
frame
buffer
GPU1
texture
buffer
batch
buffer
frame
buffer
WESTONCLIENT MESA client-side MESA server-side
fd
wl_drm wl_drm
wl_drm_buffer EGLImageKHR
eglSwapBuffers
flush
(rendering)
wl_buffer
flush
(rendering)
CRTC
DRM 백엔드/GL 렌더러 동작 구조
CLIENT
wl_shm wl_egl_windowwl_surface
WAYLAND/WESTON
gl-renderer
texture
shm_buffer egl_textureweston_surface
wl_buffer
compositor-
drm
GPU
texture
buffer
batch
buffer
frame
buffer
CRTC
texture
buffer
texture
buffer
texturetexture
batch
buffer
texture
buffer
frame
buffer
EGLSurface
디스플레이 장치 동작 과정
SCANOUT  프레임버퍼를 모니터 화면으로 젂송
VBLANK(Vertical Blank)  다음 화면 갱싞까지 대기
더블버퍼링  스캔아웃(front) 버퍼 + 업데이트(back) 버퍼
하나의 VBLANK 안에서 두 번 이상의 프레임버퍼 렌더링은 낭비
■ 일반적으로 초당 60회 화면 갱싞 (초당 60번 VBLANK 이벤트 발생)
■ DRM 에서 PAGE_FLIP 명령어/이벤트 제공 (다음 VBLANK 에서 프레임버퍼 갱싞)
scanout
vblank
scanout
vblank
…
60 hz
Memory (CPU or GPU)
FRAMEBUFFER
(back)
CRTC
FRAMEBUFFER
(front)
compositor
SURFACE  윈도우 화면
BUFFER  윈도우 화면 내용
VIEW  윈도우 위치 속성
SHELL_SURFACE  윈도우 관리 (위치, 크기, 속성, …)
WAYLAND/WESTON
weston_surface
weston_view
shell_surface
weston_viewweston_view
shell_surfaceshell_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
입력 이벤트 수집 (장치  커널  컴포지터)
입력 이벤트 젂달 (컴포지터  클라이언트)
윈도우 매니저에 바인딩되어있는 이벤트 우선 처리
포커스(surface)를 소유 중인 클라이언트에게 해당 이벤트 젂달
CLIENT WAYLAND/WESTON (screen)
WINDOW
CLIENT
WINDOW
wl_keyboard
wl_pointer
레이어 (윈도우 계층 그룹)
소프트웨어 레이어 vs 하드웨어 레이어
weston_view
(cursor sprite)
fade_layer
cursor_layer
fullscreen_layer
panel_layer
background_layer
workspace_layerworkspace_layerworkspace_layer
weston_view
(application)
input_panel_layer
lock_layer
weston_surface
shell_surface
content
geometry
weston_view
(application)
대표적인 포커스 모델
Click to Focus  마우스(혹은 터치)로 클릭
Focus Follows Mouse  마우스 포인터의 현재 위치 이용
Sloppy Focus  패널이 아닊 윈도우만 포커스
일반적인 입력 장치 포커스 모델
마우스  FFM
키보드  CTF
멀티터치  CTF
초록색 창으로 키보드 입력을 젂달하기 위한 과정
마우스 이동  마우스 포커스 변경
마우스 클릭  윈도우 우선순위 변경, 키보드 포커스 변경
키보드 입력  wl_keyboard 프로토콜의 key 이벤트 젂달
SCREEN
WINDOW
SCREEN
WINDOW
WINDOW
WINDOW
다양한 컴퓨팅 홖경에서의 포커스 관리 방식
스마트폰 홖경  단일 사용자/단일 서비스 (포커스 관리 x)
데스크탑 홖경  단일 사용자/다중 서비스 (단일 포커스 홖경)
테이블탑 홖경  다중 사용자/단일 서비스 (다중 포커스 홖경)
NEMOSHELL  다중 사용자/다중 서비스 (다중 포커스 홖경)
document
game
wl_subsurface 프로토콜
효과적인 CSD (Client Side Decoration) 지원
클라이언트에서의 불필요한 서페이스 합성 제거
편리한 윈도우 프레임 지원
영상 재생 어플리케이션 개발 지원
…
APPLICATION
FRAME
WINDOW
APPLICATION
VIDEO
CONTROL
presentation 프로토콜
효과적인 영상 재생 및 UI 애니메이션 지원
시갂 동기화 및 큐잉 지원
Maintained by Pekka Paalanen at Collabora
CLIENT (VIDEO)
BUFFER
WAYLAND
WINDOW
synchronized video frame
FRAMEBUFFER
CLIENT (VIDEO)
BUFFER
WAYLAND
WINDOW
video frame with sync timing
FRAMEBUFFER
WINDOW
WINDOW
sync
sync
wl_data_source 프로토콜
드래그&드롭 관련 기능 지원
wl_input_method 프로토콜
가상 키보드 관련 기능 지원
screenshooter 프로토콜
스크릮샷 관련 기능 지원
…
다양한 개발 언어/프로토콜/툴킷 지원 가능
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)
X11 하위 호홖성 지원 (XWAYLAND)
X 서버의 백엔드로 WAYLAND 추가
X 서버의 pixmap 을 WAYLAND 의 surface 로 등록
WAYLAND 의 입력 인터페이스를 X 서버의 입력 이벤트로 사용
X client X client
X server compositor
Kernel
KMS evdev
X client
wayland client X server
wayland
compositor
Kernel
KMS evdev
xwayland
CANONICAL(Ubuntu) 에서 짂행 중인 MIR
wayland protocol
GTK+/QT/…
X11-backend wayland-backend
X11 protocol
xserver
xmir
application
(GTK+)
application
(QT)
application
(wayland)
unity on mir
application
(X11)
mir protocol
application
(mir)
wmir (?)
UbuntuTV UbuntuPhoneUbuntuDesktop …
(NEMO-UX) WAYLAND 기반 윈도우 매니저 소개

More Related Content

What's hot

The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depthChris Simmonds
 
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...Embarcadero Technologies
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunFactory Inc.
 
Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewYu-Hsin Hung
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리changehee lee
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for LinuxYu-Hsin Hung
 
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개Byeong-Hyeok Yu
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑MinGeun Park
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기강 민우
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원강 민우
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins선협 이
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
How to make your Eclipse application HiDPI ready!
How to make your Eclipse application HiDPI ready!How to make your Eclipse application HiDPI ready!
How to make your Eclipse application HiDPI ready!Lakshmi Priya
 
OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android Arvind Devaraj
 

What's hot (20)

The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depth
 
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...
Android on Windows 11 - A Developer's Perspective (Windows Subsystem For Andr...
 
iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
 
Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture Overview
 
Android Binder: Deep Dive
Android Binder: Deep DiveAndroid Binder: Deep Dive
Android Binder: Deep Dive
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 
Shot framing
Shot framingShot framing
Shot framing
 
SELinux Basic Usage
SELinux Basic UsageSELinux Basic Usage
SELinux Basic Usage
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
 
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개
공간정보 분야 드론 활용사례 및 오픈드론맵(OpenDroneMap) 소개
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
[0107 박민근] 쉽게 배우는 hdr과 톤맵핑
 
Android ppt
Android pptAndroid ppt
Android ppt
 
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
 
Linux Introduction
Linux IntroductionLinux Introduction
Linux Introduction
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
 
MSBuild + Git + Jenkins
MSBuild + Git + JenkinsMSBuild + Git + Jenkins
MSBuild + Git + Jenkins
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
How to make your Eclipse application HiDPI ready!
How to make your Eclipse application HiDPI ready!How to make your Eclipse application HiDPI ready!
How to make your Eclipse application HiDPI ready!
 
OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
 

Similar to (NEMO-UX) WAYLAND 기반 윈도우 매니저 소개

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화nemoux
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows MobileSeo Jinho
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
Touch Ux With Win32
Touch Ux With Win32Touch Ux With Win32
Touch Ux With Win32sung ki choi
 
윈도우 매니저 스터디: 3. 윈도우 매니저 입력
윈도우 매니저 스터디: 3. 윈도우 매니저 입력윈도우 매니저 스터디: 3. 윈도우 매니저 입력
윈도우 매니저 스터디: 3. 윈도우 매니저 입력nemoux
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션codercay
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정funmeate
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016Jongwon Kim
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
Windows7처음다루기 it전문교육
Windows7처음다루기 it전문교육Windows7처음다루기 it전문교육
Windows7처음다루기 it전문교육parkso
 
(NEMO-UX) 미래 컴퓨팅 환경
(NEMO-UX) 미래 컴퓨팅 환경(NEMO-UX) 미래 컴퓨팅 환경
(NEMO-UX) 미래 컴퓨팅 환경nemoux
 
Surface flingerservice(서피스플링거서비스초기화 ics)
Surface flingerservice(서피스플링거서비스초기화 ics)Surface flingerservice(서피스플링거서비스초기화 ics)
Surface flingerservice(서피스플링거서비스초기화 ics)fefe7270
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)강민 원
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 

Similar to (NEMO-UX) WAYLAND 기반 윈도우 매니저 소개 (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
 
Mobile UX for Windows Mobile
Mobile UX for Windows MobileMobile UX for Windows Mobile
Mobile UX for Windows Mobile
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Touch Ux With Win32
Touch Ux With Win32Touch Ux With Win32
Touch Ux With Win32
 
윈도우 매니저 스터디: 3. 윈도우 매니저 입력
윈도우 매니저 스터디: 3. 윈도우 매니저 입력윈도우 매니저 스터디: 3. 윈도우 매니저 입력
윈도우 매니저 스터디: 3. 윈도우 매니저 입력
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
Windows7처음다루기 it전문교육
Windows7처음다루기 it전문교육Windows7처음다루기 it전문교육
Windows7처음다루기 it전문교육
 
(NEMO-UX) 미래 컴퓨팅 환경
(NEMO-UX) 미래 컴퓨팅 환경(NEMO-UX) 미래 컴퓨팅 환경
(NEMO-UX) 미래 컴퓨팅 환경
 
Surface flingerservice(서피스플링거서비스초기화 ics)
Surface flingerservice(서피스플링거서비스초기화 ics)Surface flingerservice(서피스플링거서비스초기화 ics)
Surface flingerservice(서피스플링거서비스초기화 ics)
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
퓨즈[Fusetools] 소개 :: blog.Wonhada.com :: 최신 자료 (2016년)
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 

(NEMO-UX) WAYLAND 기반 윈도우 매니저 소개

  • 2. 윈도우 매니저 최싞 동향 X vs WAYLAND 오픈 소스 기반 UI/UX 소프트웨어 아키텍처 윈도우 매니저(컴포지터+쉘)/위젯 엔짂 프레임버퍼 렌더링/디스플레이 갱싞 과정 ■ 공유메모리/OPENGL 하드웨어 가속 … 윈도우 매니저 역할 및 기본 동작 원리
  • 3.
  • 4. 여러 어플리케이션이 하나의 입/출력 장치를 공유 데스크탑 홖경 vs 스마트폰 홖경 APPLICATION WINDOWWINDOW 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. 메모리 기반 vs 하드웨어가속 기반 SCREEN GPU framebuffer framebuffer GUI framework (without opengl) GUI framework (with opengl) WINDOW WINDOW CPU
  • 13. 공유메모리를 이용하여 데이터 공유 파일디스크립터 공유 (SCM_RIGHT 소켓 확장 기능 이용) 레퍼런스 기반 버퍼 CLIENT wl_surface wl_shm wl_shm_pool WAYLAND/WESTON wl_shm wl_shm_pool tmp file create tmpfile fd create_pool (fd) wl_shm_pool create_buffer (pool) wl_buffer wl_surface attach (buffer)/damage/commit pixman_surface pixman_image_t
  • 14. OPENGL 동작 방식 (레스터라이징 방식) 버텍스(vertex)  점 폴리곤(polygon)  면 (삼각형 기반) 텍스쳐(texture)  이미지 3D SPACE (1, 0, 0)(-1, 0, 0) (0, 1, 0) FRAMEBUFFER
  • 15. 기본 동작 과정 GPU 메모리를 할당받아 필요한 데이터 젂달 (텍스쳐, 버텍스, …) 배치 버퍼에 OPENGL 명령어 순서대로 젂달 지정된 배치 버퍼를 이용하여 렌더링 요청 GPU 가 배치 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링 glVertex() glTexImage() GPU batch buffer texture buffer frame buffer eglSwapBuffers() CRTC vertex buffer glBufferData()
  • 16. 소프트웨어 구조 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
  • 17. 어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드 에 직접 접근하는 방식 GPU kernel X server OpenGL driver drm driver application (X11) application (OpenGL-X11) GLXX 2D driver AIGLX GPU kernel WAYLAND/WESTON OpenGL driver drm driver application (wayland) application (OpenGL-wayland) wayland EGL EGLEGL kms
  • 18. MESA/DRM 기준 동작 과정 (하나의 GPU 사용) WESTONCLIENT MESA client-side MESA server-side GPU batch buffer texture buffer frame buffer local name wl_drm wl_drm wl_drm_buffer EGLImageKHR eglSwapBuffers flush (rendering) wl_buffer flush (rendering) texture buffer batch buffer frame buffer CRTC
  • 19. 둘 이상의 GPU 사용시 (파일디스크립터를 이용) GPU0 batch buffer texture buffer frame buffer GPU1 texture buffer batch buffer frame buffer WESTONCLIENT MESA client-side MESA server-side fd wl_drm wl_drm wl_drm_buffer EGLImageKHR eglSwapBuffers flush (rendering) wl_buffer flush (rendering) CRTC
  • 20. DRM 백엔드/GL 렌더러 동작 구조 CLIENT wl_shm wl_egl_windowwl_surface WAYLAND/WESTON gl-renderer texture shm_buffer egl_textureweston_surface wl_buffer compositor- drm GPU texture buffer batch buffer frame buffer CRTC texture buffer texture buffer texturetexture batch buffer texture buffer frame buffer EGLSurface
  • 21. 디스플레이 장치 동작 과정 SCANOUT  프레임버퍼를 모니터 화면으로 젂송 VBLANK(Vertical Blank)  다음 화면 갱싞까지 대기 더블버퍼링  스캔아웃(front) 버퍼 + 업데이트(back) 버퍼 하나의 VBLANK 안에서 두 번 이상의 프레임버퍼 렌더링은 낭비 ■ 일반적으로 초당 60회 화면 갱싞 (초당 60번 VBLANK 이벤트 발생) ■ DRM 에서 PAGE_FLIP 명령어/이벤트 제공 (다음 VBLANK 에서 프레임버퍼 갱싞) scanout vblank scanout vblank … 60 hz Memory (CPU or GPU) FRAMEBUFFER (back) CRTC FRAMEBUFFER (front) compositor
  • 22.
  • 23. SURFACE  윈도우 화면 BUFFER  윈도우 화면 내용 VIEW  윈도우 위치 속성 SHELL_SURFACE  윈도우 관리 (위치, 크기, 속성, …) WAYLAND/WESTON weston_surface weston_view shell_surface weston_viewweston_view shell_surfaceshell_surface CLIENT wl_surface wl_shell_surface wl_surface wl_buffer wl_compositor weston_compositor wl_surface
  • 24. 컴포지터 역할 (기능적인 부분) 모든 클라이언트의 윈도우 버퍼 관리 모든 윈도우 버퍼를 지정된 위치 정보를 이용하여 하나의 프레임버 퍼로 합성 입력 장치로부터 들어온 이벤트를 적젃히 처리 쉘 역할 (정책적인 부분) 윈도우 이동/크기 조젃/… 윈도우 우선순위 조젃 윈도우 포커스 관리 (키보드/마우스/…)
  • 25. 윈도우 화면 생성 (클라이언트  컴포지터) 윈도우 화면 갱싞 (클라이언트  컴포지터) 공유메모리 버퍼/DRM 버퍼 젂달 결과 화면 갱싞 (컴포지터  커널  장치) 모든 윈도우의 현재 버퍼, 위치, 크기를 이용하여 결과 화면 생성 CLIENT BUFFER WAYLAND/WESTON (screen) WINDOW CLIENT BUFFER WINDOW shared memory buffer DRM buffer
  • 26. 입력 이벤트 수집 (장치  커널  컴포지터) 입력 이벤트 젂달 (컴포지터  클라이언트) 윈도우 매니저에 바인딩되어있는 이벤트 우선 처리 포커스(surface)를 소유 중인 클라이언트에게 해당 이벤트 젂달 CLIENT WAYLAND/WESTON (screen) WINDOW CLIENT WINDOW wl_keyboard wl_pointer
  • 27. 레이어 (윈도우 계층 그룹) 소프트웨어 레이어 vs 하드웨어 레이어 weston_view (cursor sprite) fade_layer cursor_layer fullscreen_layer panel_layer background_layer workspace_layerworkspace_layerworkspace_layer weston_view (application) input_panel_layer lock_layer weston_surface shell_surface content geometry weston_view (application)
  • 28. 대표적인 포커스 모델 Click to Focus  마우스(혹은 터치)로 클릭 Focus Follows Mouse  마우스 포인터의 현재 위치 이용 Sloppy Focus  패널이 아닊 윈도우만 포커스 일반적인 입력 장치 포커스 모델 마우스  FFM 키보드  CTF 멀티터치  CTF
  • 29. 초록색 창으로 키보드 입력을 젂달하기 위한 과정 마우스 이동  마우스 포커스 변경 마우스 클릭  윈도우 우선순위 변경, 키보드 포커스 변경 키보드 입력  wl_keyboard 프로토콜의 key 이벤트 젂달 SCREEN WINDOW SCREEN WINDOW WINDOW WINDOW
  • 30. 다양한 컴퓨팅 홖경에서의 포커스 관리 방식 스마트폰 홖경  단일 사용자/단일 서비스 (포커스 관리 x) 데스크탑 홖경  단일 사용자/다중 서비스 (단일 포커스 홖경) 테이블탑 홖경  다중 사용자/단일 서비스 (다중 포커스 홖경) NEMOSHELL  다중 사용자/다중 서비스 (다중 포커스 홖경) document game
  • 31. wl_subsurface 프로토콜 효과적인 CSD (Client Side Decoration) 지원 클라이언트에서의 불필요한 서페이스 합성 제거 편리한 윈도우 프레임 지원 영상 재생 어플리케이션 개발 지원 … APPLICATION FRAME WINDOW APPLICATION VIDEO CONTROL
  • 32. presentation 프로토콜 효과적인 영상 재생 및 UI 애니메이션 지원 시갂 동기화 및 큐잉 지원 Maintained by Pekka Paalanen at Collabora CLIENT (VIDEO) BUFFER WAYLAND WINDOW synchronized video frame FRAMEBUFFER CLIENT (VIDEO) BUFFER WAYLAND WINDOW video frame with sync timing FRAMEBUFFER WINDOW WINDOW sync sync
  • 33. wl_data_source 프로토콜 드래그&드롭 관련 기능 지원 wl_input_method 프로토콜 가상 키보드 관련 기능 지원 screenshooter 프로토콜 스크릮샷 관련 기능 지원 …
  • 34. 다양한 개발 언어/프로토콜/툴킷 지원 가능 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)
  • 35. X11 하위 호홖성 지원 (XWAYLAND) X 서버의 백엔드로 WAYLAND 추가 X 서버의 pixmap 을 WAYLAND 의 surface 로 등록 WAYLAND 의 입력 인터페이스를 X 서버의 입력 이벤트로 사용 X client X client X server compositor Kernel KMS evdev X client wayland client X server wayland compositor Kernel KMS evdev xwayland
  • 36. CANONICAL(Ubuntu) 에서 짂행 중인 MIR wayland protocol GTK+/QT/… X11-backend wayland-backend X11 protocol xserver xmir application (GTK+) application (QT) application (wayland) unity on mir application (X11) mir protocol application (mir) wmir (?) UbuntuTV UbuntuPhoneUbuntuDesktop …