È stato rilasciato SDL 3.4.0 (Simple DirectMedia Layer). Questa libreria è progettata per semplificare lo sviluppo di giochi e applicazioni multimediali, offrendo funzionalità come l'output grafico 2D e 3D accelerato hardware, la gestione degli input, la riproduzione audio e l'output 3D tramite OpenGL, OpenGL ES, Metal, Direct3D o Vulkan. Il codice è scritto in C e distribuito sotto la licenza Zlib. Sono disponibili anche dei wrapper per utilizzare SDL in progetti in vari linguaggi di programmazione.
SDL 3.4.0 rappresenta la seconda importante iterazione stabile della serie SDL 3.x — la prima versione stabile è stata la serie 3.2.x, mentre la 3.3.x è stata proposta come branch sperimentale. Le principali novità di SDL 3.4.0 riguardano il miglioramento della portabilità tra API 3D GPU e API per il rendering 2D, l'espansione del supporto per la compilazione in WebAssembly tramite il compilatore Emscripten, e il miglioramento del supporto per tavoletta grafica e stilo, oltre alla nuova integrazione del supporto per il formato immagine PNG.
Tra le nuove funzionalità in SDL 3.4.0:
- È stata aggiunta la supporto integrato per le immagini in formato PNG, con le funzioni SDL_LoadPNG(), SDL_LoadPNG_IO(), SDL_SavePNG() e SDL_SavePNG_IO() per gestirle. Sono state aggiunte anche le funzioni SDL_LoadSurface() e SDL_LoadSurface_IO() per determinare il formato (PNG o BMP) e caricare le immagini come superfici.
- È stata aggiunta la funzione SDL_RotateSurface() per creare una copia ruotata della superficie.
- È stata aggiunta la funzione SDL_CreateAnimatedCursor() per creare cursori animati colorati, insieme all'opzione SDL_HINT_MOUSE_DPI_SCALE_CURSORS per la scala automatica dei cursori in base al livello di scaling dello schermo.
- Sono state aggiunte le funzioni SDL_SetWindowProgressState(), SDL_SetWindowProgressValue(), SDL_GetWindowProgressState() e SDL_GetWindowProgressValue() per mostrare il progresso delle operazioni nell'icona dell'applicazione nella barra delle applicazioni.
- Sono state aggiunte proprietà per l'utilizzo delle API GPU con hardware più vecchio.
- È stata aggiunta la proprietà SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER e SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEA per configurare e abilitare le funzionalità delle API Vulkan durante la creazione dei dispositivi GPU.
- È stata aggiunta la funzione SDL_GetGPUDeviceProperties() per richiedere informazioni sul GPU.
- Sono state aggiunte le funzioni SDL_CreateGPURenderer() e SDL_GetGPURendererDevice() per l'utilizzo della GPU nella rasterizzazione 2D, così come SDL_SetGPURenderStateFragmentUniforms(), SDL_SetGPURenderState() e SDL_DestroyGPURenderState() per l'attivazione degli shader a frammento nella rasterizzazione 2D.
- Nella rasterizzazione 2D utilizzando la GPU è stata implementata la supporto per texture YUV e HDR. È stata aggiunta la supporto per texture con palette, per le quali sono state introdotte le funzioni SDL_GetTexturePalette() e SDL_SetTexturePalette(). Sono state aggiunte le funzioni SDL_GetPixelFormatFromGPUTextureFormat() e SDL_GetGPUTextureFormatFromPixelFormat() per la conversione dei formati delle texture, così come le proprietà SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER e SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER per la creazione di texture 2D da texture GPU. Per la configurazione delle texture sono state aggiunte le funzioni SDL_RenderTexture9GridTiled(), SDL_GetDefaultTextureScaleMode(), SDL_SetDefaultTextureScaleMode(), SDL_GetRenderTextureAddressMode(), SDL_SetRenderTextureAddressMode().
- È stato aggiunto il parametro SDL_SCALEMODE_PIXELART per utilizzare un algoritmo di scalatura ottimizzato per la grafica a pixel.
- Sono stati implementati gli eventi SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED, SDL_EVENT_SCREEN_KEYBOARD_SHOWN, SDL_EVENT_SCREEN_KEYBOARD_HIDDEN, SDL_EVENT_PINCH_BEGIN, SDL_EVENT_PINCH_UPDATE, SDL_EVENT_PINCH_END e SDL_EVENT_AUDIO_DEVICE_ADDED, che si attivano in caso di modifica dei confini, apertura/chiusura della tastiera su schermo, gesti su schermo e aggiunta di un dispositivo audio.
- Sono state aggiunte le funzioni SDL_PutAudioStreamDataNoCopy() e SDL_PutAudioStreamPlanarData() per una gestione più efficiente dei flussi audio.
- Aggiunta la compatibilità con i controller di gioco Nintendo Switch 2, collegati tramite USB. Espansa anche la compatibilità con i controller 8BitDo, FlyDigi e Hand Held Legend SInput.
- Per migliorare le prestazioni delle applicazioni WebAssembly compilate con il compilatore Emscripten, è stata aggiunta la funzione SDL_SetWindowFillDocument() e implementati i parametri SDL_WINDOW_FILL_DOCUMENT, SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING e SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING.
- Sulla piattaforma Linux è stata implementata la supporto per operazioni atomiche utilizzando KMSDRM, attivabili tramite la proprietà SDL_HINT_KMSDRM_ATOMIC. Aggiunto il parametro SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTER per richiedere il dispositivo di output wl_output associato allo schermo in ambienti basati su Wayland.
Fonte: opennet.ru
