SDL 3.4 јача интероперабилност између 3D GPU API-ја и 2D рендеровања

  • SDL 3.4 јача интероперабилност између 3D GPU API-ја и 2D рендеровања, са новим рендерима, GPU стањима и подршком за YUV и HDR.
  • Ова верзија додаје изворну PNG подршку, нове опције скалирања и рутирања текстура, анимиране курсоре и напредне догађаје уноса и прозора.
  • Укључује специфична побољшања за Windows, macOS, Linux, Emscripten, iOS и visionOS, заједно са проширеном подршком за контролере, HID и atomic KMSDRM.
  • SDL 3.4 је успостављен као зрела верзија SDL3, са већом стабилношћу, бољим перформансама и дубљом интеграцијом са Steam, Vulkan и веб платформама.

СЛД 3.4

Ако радите у развоју видео игара или мултимедијалних апликација на више платформи, вероватно сте чули за SDL. долазак de СДЛ 3.4Библиотека прави значајан корак напред у погледу графичких могућности, подршке за платформу и алата за побољшање корисничког искуства, на десктоп рачунарима, вебу и мобилним уређајима. Ово није мало ажурирање: обухвата све, од 2Д рендеровања и 3Д ГПУ API-ја до обраде звука, драјвера, уноса оловком, модерних Линукс система и још много тога.

Иако се SDL 3 наставља развијати, грана 3.4 се представља као веома солидна верзија Дизајнирано да помогне новим и текућим пројектима да искористе побољшања перформанси, нове API-је и бољу интеграцију са окружењима као што су Emscripten, Wayland, Vision Pro или чак PlayStation 2 у веома специфичним контекстима. Хајде да детаљније погледамо шта је ново у SDL 3.4, зашто је релевантно за ваш следећи пројекат и које техничке детаље треба да имате на уму ако желите да извучете максимум из њега.

Најважније опште нове карактеристике SDL 3.4

Главна линија рада SDL 3.4 фокусира се на Побољшајте интероперабилност између 3Д и 2ДОво је кључно за гејм енџине и апликације које комбинују 2Д интерфејсе са 3Д садржајем. До сада је комбиновање оба слоја могло захтевати више посла од програмера; ова верзија уводи нове услужне програме и својства која олакшавају овај процес.

Поред графике, ажурирање укључује изворна подршка за PNG сликеПостоје значајна побољшања система уноса (миш, оловка, гестови, тастатура на екрану) и мноштво специфичних промена за Windows, macOS, Linux, Emscripten, iOS, visionOS и друге мање уобичајене платформе. Интеграција са Steam екосистемом и његовим runtime-ом је такође унапређена, што је кључно за Linux игре и развој на више платформи усмерених на Steam дистрибуцију.

СДЛ 3
Повезани чланак:
СДЛ 3: Нова ера за Линук развој и игре на више платформи

Интероперабилност између 3D GPU API-ја и 2D рендеровања

Једна од предности SDL 3.4 је подстицај за интеграција између 3Д и 2ДБиблиотека уводи нове функције за креирање 2Д рендерера заснованих на GPU-у и за размену информација између GPU текстура и формата пиксела које обрађује SDL.

  • Додаје SDL_CreateGPURenderer() да би се креирао 2Д рендерер који користи основни GPU API.
  • са SDL_GetGPURendererDevice() Можете преузети ГПУ уређај повезан са тим рендерером.
  • Они се придружују SDL_CreateGPURenderState(), SDL_SetGPURenderStateFragmentUniforms(), SDL_SetGPURenderState() и SDL_DestroyGPURenderState() за рад са фрагментним шејдерима унутар 2D GPU рендеровања.
  • Сада су примљени YUV текстуре и HDR простори боја у 2Д рендереру заснованом на ГПУ-у, што је посебно занимљиво за врхунске видео записе и садржај.

Такође укључује карактеристике као што су SDL_GetGPUDeviceProperties()Ово враћа својства ГПУ уређаја, укључујући назив уређаја, назив и верзију драјвера и друге информације релевантне за компатибилност или дијагностичке одлуке. Поред тога, `SDL_GetPixelFormatFromGPUTextureFormat()` и `SDL_GetGPUTextureFormatFromPixelFormat()` олакшавају конверзију између формата текстура ГПУ-а и формата пиксела SDL-а.

Паралелно, имовина је укључена SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER Да би се креирала 2Д текстура од постојеће ГПУ текстуре, и SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER да би се добила ГПУ текстура повезана са 2Д текстуром када се користи 2Д ГПУ рендерер. Овај приступ значајно смањује трење при мешању садржаја генерисаног у ГПУ АПИ-ју са класичним СДЛ 2Д цевоводом.

Побољшања у 2Д рендеровању и руковању текстурама

SDL 3.4 иде даље од пуке интероперабилности и додаје специфичне функције за фино подешавање квалитета и контроле 2Д рендеровањаНа пример, уведен је SDL_RenderTexture9GridTiled(), који омогућава рендеровање у 9 мрежа са текстурама у „плочастом“ режиму уместо њиховог истезања, избегавајући деформације у елементима интерфејса или оквирима.

Да би се управљало скалирањем текстура, додато је следеће SDL_GetDefaultTextureScaleMode() и SDL_SetDefaultTextureScaleMode(), који омогућава подешавање подразумеваног режима скалирања за нове текстуре. Повезани са овим су SDL_GetRenderTextureAddressMode() и SDL_SetRenderTextureAddressMode(), заједно са константом SDL_TEXTURE_ADDRESS_WRAP, која пружа подршка за обмотавање текстуром када рендерер назначи да подржава преламање (SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN).

Веома занимљива нова функција за игре са ретро естетиком је SDL_SCALEMODE_PIXELART, алгоритам скалирања дизајниран за пиксел арт који избегава класично замућење других режима филтрирања, чувајући дефинисане ивице чак и при значајном увећању слике.

Такође постоји могућност рада са текстурне палетеSDL_SetTexturePalette() и SDL_GetTexturePalette() вам омогућавају да доделите и испитате палете у текстурама, што је корисно ако рекреирате старе графичке стилове или желите да оптимизујете одређене токове меморије и пропусног опсега.

Што се тиче површина, SDL 3.4 укључује SDL_RotateSurface() Да би се креирале ротиране копије површине, додаје се SDL_FLIP_HORIZONTAL_AND_VERTICAL да би се површине истовремено окретале на обе осе. Поред тога, својство SDL_PROP_SURFACE_ROTATION_NUMBER (касније замењено са SDL_PROP_SURFACE_ROTATION_FLOAT у изменама финалног кандидата за издање) се користи за одређивање угла потребног за исправан приказ слика камере.

Подршка за изворни PNG и површинско учитавање

Једно од најпожељнијих побољшања у погледу практичности је то што SDL 3.4 укључује изворна подршка за PNG...без ослањања на екстерне библиотеке у многим случајевима. Ово поједностављује много тога мали пројекти и прототипове.

  • SDL_LoadPNG() и SDL_LoadPNG_IO() омогућавају директно учитавање PNG слика као површина.
  • SDL_SavePNG() и SDL_SavePNG_IO() се користе за чување површина у PNG формату.
  • са SDL_LoadSurface() SDL_LoadSurface_IO() аутоматски детектује да ли је датотека BMP или PNG и учитава је на површину без бриге о формату.

Ова интегрисана подршка се претвара у мање зависности и екстерних конфигурацијаОво је посебно корисно приликом компајлирања за више платформи или коришћења SDL-а у окружењима као што је Emscripten, где смањење броја помоћних библиотека прави разлику и у величини бинарног фајла и у сложености.

Унос: миш, оловка, гестови и тастатура на екрану

SDL 3.4 значајно побољшава све што је везано за напредни улазни уређајиУ домену миша, уведена је SDL_SetRelativeMouseTransform(), која омогућава примену прилагођене трансформације на релативни унос миша, корисно за технике скалирања, инверзију оса или посебна мапирања.

Што се тиче оловака и писаљки, чини се SDL_GetPenDeviceType()што вам омогућава да разликујете да ли оловка делује директно на екрану или на посебној тачпеду, што је веома користан детаљ за прилагођавање корисничког искуства према типу уређаја.

На уређајима са виртуелном тастатуром, SDL додаје догађаје као што су SDL_ДОГАЂАЈ_ПРИКАЗ_ЕКРАНА_ТАСТАТУРЕ и SDL_EVENT_SCREEN_KEYBOARD_HIDDEN, који извештавају када је тастатура на екрану приказана или скривена. Ово вам даје слободу да подесите интерфејс, померите елементе или спречите прекривање текстуалних поља.

Систем гестова се такође проширује догађајима SDL_EVENT_PINCH_BEGIN, SDL_EVENT_PINCH_UPDATE и SDL_EVENT_PINCH_ENDкоји детектују гестове штипања за зумирање и сличне радње. Поред тога, у Wayland окружењу је исправљена подршка за више од пет тастера миша, а у X11 је уведено прецизно скроловање, побољшавајући глаткоћу финог скроловања.

Коначно, SDL 3.4 укључује SDL_GetEventDescription(), функција за добијање енглеског описа догађаја, намењена за евидентирање и дебаговање, нешто веома корисно када пратите ретка понашања уноса на више платформи.

Аудио: флексибилнији токови рада и без поновне обраде система

Аудио подсистем такође добија свој део побољшања, са снажним фокусом на Ефикасна обрада и контрола цевоводаЗа почетак, SDL_EVENT_AUDIO_DEVICE_ADDED се сада такође шаље током иницијализације за сваки детектовани аудио уређај, што олакшава откривање и навођење уређаја без чекања на динамичке догађаје.

Две нове карактеристике, SDL_PutAudioStreamDataNoCopy() и SDL_PutAudioStreamPlanarData(), дају више опција при раду са аудио стримовима: први избегава непотребне копије у одређеним случајевима, а други омогућава унос података у планарном формату уместо испреплетаних, идеално за напредне стримове или интеграцију са библиотекама за обраду звука високог нивоа.

Поред тога, централно место заузима назнака SDL_HINT_AUDIO_DEVICE_RAW_STREAM: ова назнака указује да оперативни систем Не би требало да примењујете додатну обраду на звук. (као што је поништавање буке). Ово је кључно ако ваша апликација или игра већ обрађује и не желите да оперативни систем омета и искривљује резултат. Такође је представљен SDL_PROP_AUDIOSTREAM_AUTO_CLEANUP_BOOLEAN, који омогућава одређеним стримовима да преживе након животног циклуса аудио подсистема, што је корисно у сложенијим архитектурама.

HID контролери и уређаји

SDL 3.4 значајно побољшава подршку за контролере и HID уређаје, проширујући опсег хардвера који ради одмах по инсталацији без спољне конфигурације. Конкретно, додаје Побољшана подршка за 8BitDo контролереFlyDigi и Hand Held Legend SINput, што олакшава многим гејмпадовима трећих страна да раде доследније.

Такође је уграђен Жични сталак за контролер Nintendo Switch 2 Када се SDL компајлира са libusb-ом, ово је занимљиво за кориснике који преферирају директну везу у односу на бежични режим. На нивоу HID API-ја, SDL_hid_get_properties() изгледа да повезује SDL својства са HID уређајима, а својство SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER омогућава преузимање libusb идентификатора повезаног са SDL_hid_device-ом када је отворен са libusb-ом.

Ова побољшања су додатак чињеници да SDL 3.4 укључује подршка за нови Steam контролер унутар свог улазног екосистема, и то се веома добро уклапа у његову улогу унутар Steam runtime-а и фокус на играње на Linux-у и другим платформама.

Догађаји, систем и опште услужне програме

Поред графичких и уносних аспеката, SDL 3.4 уводи низ промена у систему догађаја и општим услужним програмима о којима је вредно знати. На пример, SDL_EVENT_WINDOW_EXPOSED Сада попуњава поље data1 са вредношћу true када се шаље током промене величине прозора уживо, пружајући додатни контекст.

Додаје SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGEDОвај догађај се покреће када се промене употребљиве границе радне површине (на пример, приликом померања трака задатака или панела). Такође укључује SDL_EVENT_SCREEN_KEYBOARD_SHOWN/SDL_EVENT_SCREEN_KEYBOARD_HIDDEN и претходно поменуте догађаје pinch-а, чиме се пружа свеобухватнији екосистем догађаја за динамичке сценарије корисничког интерфејса.

Са стране профита, SDL_HINT_GLAVNI_CALLBACK_BRZE сада се може подесити као вредност са покретним зарезом, што даје већу прецизност; SDL_AddAtomicU32() Додаје подршку за атомско сабирање на 32-битним неозначеним целим бројевима; и SDL_GetSystemPageSize() враћа величину системске странице, корисно за задатке меморије ниског нивоа.

Такође укључено SDL_ПОРАВНАТО()Овај макро указује да одређени подаци треба да имају специфично поравнање, што је веома релевантно за оптимизацију перформанси и коришћење SIMD инструкција. У међувремену, SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER вам омогућава да дефинишете прилагођену функцију ослобађања за меморију коју користе SDL_IOFromMem() и SDL_IOFromConstMem(), дајући вам већу контролу приликом интеграције SDL-а са вашим сопственим алокаторима.

Још једно занимљиво побољшање је подршка за детаљан излаз дневника Када је променљива окружења DEBUG_INVOCATION подешена на „1“, намењена је за дубинско отклањање грешака иницијализације библиотеке и понашања у сложеним контекстима.

Конкретна побољшања у систему Windows

На Windows-у, SDL 3.4 укључује значајне промене које утичу на звук, видео и систем уноса. Једна од занимљивих ствари је функција наговештаја. SDL_HINT_RENDER_DIRECT3D11_WARPОво вам омогућава да активирате WARP (софтверски растеризатор D3D11). Ово је корисно на машинама без компатибилне графичке картице или у виртуелизованим окружењима где нема директног убрзања, али и даље желите да користите API.

WASAPI драјвер користи предности Улога_стрима_SDL_HINT_AUDIO_DEVICE_STREAM Да би се подесила категорија аудио стрима, важна интеграција за понашање конзистентно са системом (нпр. звук игре, комуникација итд.). Такође се ослања на SDL_HINT_AUDIO_DEVICE_RAW_STREAM да би се назначило да ли драјвер треба да примени додатну обраду.

Наговештај се уноси на страни тастатуре. SDL_HINT_WINDOWS_RAW_KEYBOARD_ECLUDE_HOTCEYSОво вам омогућава да онемогућите одређене системске пречице када користите сирови унос, што је веома практично за игре којима је потребно да снимају комбинације тастера без ометања система. А на нивоу GameInput API-ја, SDL_HINT_WINDOWS_GAMEINPUT Подразумевано је онемогућено, што смањује потенцијалне сукобе у неким окружењима док се експлицитно не конфигурише.

Такође се додаје SDL_PROP_DISPLAY_WINDOWS_HMONITOR_POINTER Да бисте добили HMONITOR повезан са екраном, нешто веома корисно ако комбинујете SDL са класичним Win32 кодом и потребно је да координирате прозоре или мониторе.

macOS, iOS и VisionOS

На macOS-у, SDL 3.4 укључује веома практичан савет: SDL_HINT_MAC_ПРТИСНИ_И_ДРЖИОво подешавање контролише да ли држање притиснутог тастера понавља притисак тастера или отвара мени са акцентима. Ово вам омогућава да подесите понашање тастатуре за игре и апликације које захтевају брзо понављање тастера уместо типичног менија са акцентима у macOS-у.

На iOS-у, SDL сада подржава сцене са прозоримаОвим се решава упозорење „КЛИЈЕНТ UIKIT-а ПОТРЕБНО АЖУРИРАЊЕ“ и библиотека се усклађује са модерним UIKit праксама. Својство SDL_PROP_WINDOW_CREATE_WINDOWSCENE_POINTER је уведено да би се одредила сцена прозора приликом креирања SDL прозора, што помаже у правилној интеграцији апликације у iOS систем за рад са прозорима.

У систему VisionOS и уређајима попут Apple Vision Pro, SDL 3.4 подешава понашање прозора и брзину освежавања. Подразумевана брзина освежавања је повећава се на 90 Hzпружајући глађе искуство, а SDL_SetWindowSize() ефикасно мења величину прозора на Vision Pro слушалицама, дајући већу контролу над распоредом у окружењима мешовите стварности.

Линукс, Вејланд, КМС/ДРМ и Вулкан

У свету Линукса, SDL 3.4 долази са много нових функција. Пре свега, додаје атомска подршка за KMSDRMОво побољшава стабилност и синхронизацију директним радом са графичким подсистемом језгра. У вези са тим, назнака SDL_HINT_KMSDRM_ATOMIC омогућава контролу над тим да ли ће KMSDRM користити ову атомску функционалност или не.

За Вејланд је укључено следеће: SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTERОва функција вам омогућава да добијете wl_output повезан са екраном, што олакшава дубоке интеграције са композитором. Поред тога, проблеми са мишевима са више од пет дугмади су решени, а прецизно скроловање под X11 је побољшано, пружајући много прецизнији осећај контроле у ​​апликацијама које се у великој мери ослањају на скроловање.

Што се тиче Вулкана, SDL 3.4 уводи груписање рендеровања и друга побољшања за API-је попут Vulkan-а, што смањује сувишне позиве за цртање и побољшава укупне перформансе. Такође се ради на логици која детектује Моћнији Вулкан ГПУ У системима са више графичких процесора, помаже аутоматски избор најпогоднијег уређаја, посебно у хибридним или лаптоп системима са интегрисаним и наменским графичким процесорима.

Поред тога, додато је својство SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER за конфигурисање Vulkan опција приликом креирања GPU уређаја и SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN за захтевање хардверског убрзања приликом креирања поменутог уређаја. На нивоу система, SDL је такође позициониран као X11 комплет алата са увођењем X11TK као сопственог X11 алата за SDL.

Емскриптен и коришћење прегледача

SDL 3.4 значајно побољшава своју интеграцију са Емскриптен и извршавање у веб прегледачимаОво је кључно ако желите да пренесете своју игру или апликацију на веб без преписивања од нуле. Једна од нових функција омогућава SDL прозору да „попуни документ“ без нужног приказивања преко целог екрана.

У претходној верзији, представљен је SDL_HINT_EMSCRIPTEN_FILL_DOCUMENT, а у финалном издању је реорганизован око заставице SDL_WINDOW_FILL_DOCUMENT и функцију SDL_SetWindowFillDocument(), заједно са неколико повезаних својстава. Значајни примери укључују:

  • SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING и SDL_PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING, за подешавање и упит о ИД-у платна које користи SDL.
  • SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN и SDL_PROP_WINDOW_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN, да би се назначило и проверило да ли прозор треба да заузме цео документ.
  • SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING и SDL_PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING, да би се одредио и испитао елемент са којим је повезан унос са тастатуре.

Ове опције нуде веома фину контролу над Како се SDL интегрише са DOM-ом и платном (canvas)?Ово помаже у избегавању хакова и међуслојева при раду са Emscripten-ом. Такође олакшавају обезбеђивање SDL компатибилности са веб фрејмворцима или сложенијим интеграцијама где је платно само један део странице.

PlayStation 2 и друге мање уобичајене платформе

Иако може бити изненађујуће, SDL 3.4 такође обраћа пажњу на ветеранске платформе попут PlayStation 2Додати су савети за контролу параметара приказа: SDL_HINT_PS2_GS_WIDTH, SDL_HINT_PS2_GS_HEIGHT, SDL_HINT_PS2_GS_PROGRESSIVE и SDL_HINT_PS2_GS_MODE, који вам омогућавају да подесите резолуцију, прогресивни режим и општа подешавања графичког синтетизатора.

Ови детаљи јасно показују да SDL остаје веома флексибилна опција за пројекти кућне израде, емулација или истраживање на старијим платформама, осим снажног фокуса на модерне рачунаре, мобилне уређаје и веб.

Управљање процесима, дозволе за камеру и ELF метаподаци

На системском нивоу, SDL 3.4 додаје својство SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRINGОво се користи за конфигурисање радног директоријума нових процеса креираних из SDL-а. Ово поједностављује покретање подпроцеса или екстерних алата из ваше SDL апликације без потребе за приступом API-ју оперативног система.

У области фотографије, SDL_GetCameraPermissionState() сада враћа вредност типа SDL_CameraPermissionState уместо генеричког целог броја, боље усклађивање семантике и олакшавање управљања дозволама на мобилним и десктоп платформама.

У Јуникс системима, SDL укључује ELF белешке које описују његове необавезни библиотечки објекти Пратећи формат документован на systemd.io/ELF_DLOPEN_METADATA, идеја је да дистрибуције могу анализирати ове белешке и аутоматски генерисати зависности паковања користећи алате као што је package-notes. SDL пружа макро SDL_ELF_NOTE_DLOPEN тако да друге библиотеке и игре могу да ураде исто, олакшавајући много чистије управљање зависностима.

Напредак прозора и анимирани курсори

Да би се побољшало корисничко искуство, SDL 3.4 додаје функције дизајниране да прикажите напредак и обогатите интерфејсНа пример, SDL_SetWindowProgressState(), SDL_SetWindowProgressValue(), SDL_GetWindowProgressState() и SDL_GetWindowProgressValue() су уведени да би приказали траке напретка на икони прозора у траци задатака система Windows и Linux.

Ова функција омогућава кориснику да види стање дуге операције (преузимања, отпремања, интерне израде итд.) чак и ако прозор није у првом плану. То је прилично елегантан начин да се пруже повратне информације без потребе за дизајнирањем додатних HUD-ова.

С друге стране, SDL_CreateAnimatedCursor() дозвољава креирајте анимиране курсоре у бојиОво додаје дашак визуелног сјаја играма или алатима где курсор комуницира стања (учитавање, могућа радња, упозорење итд.). У комбинацији са новим назнаком SDL_HINT_MOUSE_DPI_SCALE_CURSORS, који је сада подразумевано подешен на „0“ како би се спречило да курсори неочекивано мењају величину у окружењима са DPI скалом, пружа предвидљивију контролу над изгледом показивача.

Са овим скупом промена - од 3Д/2Д ГПУ интеграције, изворне ПНГ подршке, побољшања уноса и звука, до пажње посвећене модерном Линуксу, Емскриптену, ВижнОС-у и класичним конзолама - СДЛ 3.4 учвршћује своју позицију као веома комплетан сет алата за развој на више платформиминимизирајући спољне зависности и нудећи чврсту основу за итерацију без трошења целог дана на решавање проблема који нису повезани са вашим сопственим кодом.