SDL 2.0.22 ๋ฏธ๋””์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฆด๋ฆฌ์Šค

๊ฒŒ์ž„ ๋ฐ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•œ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€