๊ฒ์ ๋ฐ ๋ฉํฐ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ๋จ์ํํ๊ธฐ ์ํ SDL 2.0.22(Simple DirectMedia Layer) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ์๋์์ต๋๋ค. SDL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋์จ์ด ๊ฐ์ 2D ๋ฐ 3D ๊ทธ๋ํฝ ์ถ๋ ฅ, ์ ๋ ฅ ์ฒ๋ฆฌ, ์ค๋์ค ์ฌ์, OpenGL/OpenGL ES/Vulkan์ ํตํ 3D ์ถ๋ ฅ ๋ฐ ๊ธฐํ ์ฌ๋ฌ ๊ด๋ จ ์์ ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C๋ก ์์ฑ๋์์ผ๋ฉฐ Zlib ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ ํ๋ก์ ํธ์์ SDL์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ธ๋ฉ์ด ์ ๊ณต๋ฉ๋๋ค.
์ ๋ฆด๋ฆฌ์ค์์:
- Wayland ํ๋กํ ์ฝ์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค. ๋น์ด Wayland์ X11์ ๋์์ ์ง์ํ๋ ํ๊ฒฝ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Wayland ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋๋ก ์ ํํ ๊ณํ์ด์์ผ๋, ๊ฒ์ ๋ฐ NVIDIA ๋๋ผ์ด๋ฒ์์ Wayland์ ๊ด๋ จ๋ ๋ฌธ์ ๋ก ์ธํด ์ ํ์ ์ฐ๊ธฐํ๊ธฐ๋ก ๊ฒฐ์ ๋์์ต๋๋ค(Wayland ํ๊ฒฝ์์๋ XWayland ๊ตฌ์ฑ ์์, X11 ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ). Wayland๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๊ธฐ ์ ์ ํ๊ฒฝ ๋ณ์ โSDL_VIDEODRIVER=waylandโ๋ฅผ ์ค์ ํ๊ฑฐ๋ SDL_Init()๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ฝ๋์ โSDL_SetHint(SDL_HINT_VIDEODRIVER, โwayland,x11โ)โ ํจ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. Wayland๋ก ์ปดํ์ผํ๋ ค๋ฉด libwayland-client ๋ฒ์ 1.18.0 ์ด์์ด ํ์ํฉ๋๋ค.
- SDL ๋ ๋๋ฌ์ ์ฐ๊ฒฐ๋ ์ฐฝ์ ๊ฐ์ ธ์ค๋ SDL_RenderGetWindow() ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ง์ฌ๊ฐํ ์์ญ์ ์กฐ์ํ๊ธฐ ์ํ ํจ์ ์ธํธ(์ ๋ฐ์ ๊ฒฐ์ , ์ง์ฐ๊ธฐ, ๋น๊ต, ๋ณํฉ ๋ฑ)๋ฅผ ์ถ๊ฐํ๊ณ ๋ถ๋ ์์์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ขํ ๋ฐ ํฌ๊ธฐ๋ก ์๋ํฉ๋๋ค: SDL_PointInFRect(), SDL_FRectEmpty(), SDL_FRectEquals(), SDL_FRectEqualsEpsilon () , SDL_HasIntersectionF(), SDL_IntersectFRect(), SDL_UnionFRect(), SDL_EncloseFPoints() ๋ฐ SDL_IntersectFRectAndLine().
- ํ ์คํธ ์ ๋ ฅ ์์ญ์ด ํ์๋๋์ง ํ์ธํ๋ SDL_IsTextInputShown() ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ ๋ ฅ ๋ฐฉ๋ฒ(IME)์ ๋นํ์ฑํํ์ง ์๊ณ ํ ์คํธ ์ ๋ ฅ ์์ญ์ ์ง์ฐ๋ SDL_ClearComposition() ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๊ธด ํ ์คํธ ์ ๋ ฅ ์์ญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด SDL_TEXTEDITING_EXT ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ด ์ด๋ฒคํธ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด SDL_HINT_IME_SUPPORT_EXTENDED_TEXT ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์๋ ๋ชจ๋๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ๋ง์ฐ์ค๋ฅผ ์ ์ฒด ์ฐฝ ๋์ ์ฐฝ ์ค์์ผ๋ก๋ง ์ ํํ ์ ์๋๋ก SDL_HINT_MOUSE_RELATIVE_MODE_CENTER ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๋ง์ฐ์ค ๋ฒํผ์ ๋๋ฅผ ๋ ์๋ ๋ง์ฐ์ค ์บก์ฒ๋ฅผ ํ์ฑํํ์ต๋๋ค. ์ด๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด SDL_HINT_MOUSE_AUTO_CAPTURE ํ๋๊ทธ๊ฐ ์ ์๋ฉ๋๋ค.
- ์ธ๋ถ ์ฐฝ์์ OpenGL ๋๋ Vulkan ์ฌ์ฉ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL ๋ฐ SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ๋ง์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ฐฝ์ด ๋ซํ ๋ SDL_QUIT ์ด๋ฒคํธ ์ ๋ฌ์ ํ์ฑํํ๊ธฐ ์ํด SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ROG Chakram ๋ง์ฐ์ค๋ฅผ ์กฐ์ด์คํฑ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด SDL_HINT_JOYSTICK_ROG_CHAKRAM ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- Linux์ ๊ฒฝ์ฐ _NET_WM_WINDOW_TYPE ๋งค๊ฐ๋ณ์๋ฅผ windows๋ก ์ค์ ํ๊ธฐ ์ํด SDL_HINT_X11_WINDOW_TYPE ์์ฑ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Linux์ ๊ฒฝ์ฐ xdg-์ฅ์์ ์ง์ํ๋ ๋ณตํฉ ์๋ฒ์์ libdecor๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- Android์ ๊ฒฝ์ฐ SDL Java ํธ๋ค๋ฌ์ ์์์ ๋ช ๋ น์ ๋ณด๋ด๋๋ก SDL_AndroidSendMessage() ํจ์๊ฐ ๊ตฌํ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru