Представен е релиз на библиотеката SDL 3.4.0 (Simple DirectMedia Layer). Библиотеката е насочена към опростяване на написването на игри и мултимедийни приложения, и предоставя възможности за хардуерно ускорено извеждане на 2D и 3D графика, обработка на входящи данни, възпроизвеждане на звук и извеждане на 3D през OpenGL, OpenGL ES, Metal, Direct3D или Vulkan. Кодът е написан на езика C и се разпространява под лицензията Zlib. Осигуряват се обвивки за използване на SDL в проекти на различни програмни езици.
SDL 3.4.0 е втората значителна стабилна версия в серията SDL 3.x – първата стабилна версия е обявена в серията 3.2.x, а версията 3.3.x е позиционирана като експериментална. Основните промени в SDL 3.4.0 са свързани с подобряване на преносимостта между API за 3D GPU и API за двумерно рисуване, разширяване на поддръжката за изграждане в WebAssembly с помощта на компилатора Emscripten, подобряване на работата с графични таблети и цифрови пера, както и добавяне на вградена поддръжка за формата на изображения PNG.
Сред новите функции в SDL 3.4.0:
- Добавена е вградена поддръжка за изображения в формата PNG, за работа с които са предложени функции SDL_LoadPNG(), SDL_LoadPNG_IO(), SDL_SavePNG() и SDL_SavePNG_IO(). За определяне на формата (PNG или BMP) и за зареждане на изображения като повърхности са добавени функции SDL_LoadSurface() и SDL_LoadSurface_IO().
- Добавена е функция SDL_RotateSurface() за създаване на завъртяна копия на повърхността.
- Добавена е функция SDL_CreateAnimatedCursor() за създаване на цветни анимирани курсори, както и признак SDL_HINT_MOUSE_DPI_SCALE_CURSORS за автоматично мащабиране на курсорите в зависимост от нивото на мащабиране на екрана.
- Добавени са функции SDL_SetWindowProgressState(), SDL_SetWindowProgressValue(), SDL_GetWindowProgressState() и SDL_GetWindowProgressValue() за показване на прогреса на операцията в иконката на приложението в панела със задачи.
- Добавени са свойства за работа с GPU API на по-старо оборудване.
- Добавено е свойство SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER и SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN за настройка и задействане на възможностите на API Vulkan при създаване на GPU устройства.
- Добавена е функция SDL_GetGPUDeviceProperties() за запитване на информация за GPU.
- Добавени са функции SDL_CreateGPURenderer() и SDL_GetGPURendererDevice() за задействане на GPU при 2D рисуване, а също така SDL_SetGPURenderStateFragmentUniforms(), SDL_SetGPURenderState() и SDL_DestroyGPURenderState() за задействане на фрагментни шейдъри при 2D рисуване.
- При 2D-отрисовке с помощю на GPU е реализирана поддръжка на YUV текстури и HDR. Добавена е поддръжка на текстури с палитри, за работа с които са добавени функциите SDL_GetTexturePalette() и SDL_SetTexturePalette(). Добавени са функциите SDL_GetPixelFormatFromGPUTextureFormat() и SDL_GetGPUTextureFormatFromPixelFormat() за преобразуване на формати на текстури, както и параметрите SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER и SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER за създаване на 2D текстури от GPU текстури. За настройка на текстурите са добавени функциите SDL_RenderTexture9GridTiled(), SDL_GetDefaultTextureScaleMode(), SDL_SetDefaultTextureScaleMode(), SDL_GetRenderTextureAddressMode(), SDL_SetRenderTextureAddressMode().
- Добавен е параметър SDL_SCALEMODE_PIXELART за използване на оптимизиран за пикселна графика алгоритъм за мащабиране.
- Реализирани са събития 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 и SDL_EVENT_AUDIO_DEVICE_ADDED, които се задействат при промяна на границите, показване/скриване на екранната клавиатура, екранни жестове и добавяне на звуково устройство.
- Добавени са функциите SDL_PutAudioStreamDataNoCopy() и SDL_PutAudioStreamPlanarData() за по-ефективна обработка на звукови потоци.
- Добавена е поддръжка на игрови контролери Nintendo Switch 2, свързани чрез USB. Разширена е поддръжката на контролери 8BitDo, FlyDigi и Hand Held Legend SInput.
- За подобряване на работата на WebAssembly приложения, компилирани с помощта на компилатора Emscripten, е добавена функцията SDL_SetWindowFillDocument() и са реализирани параметрите SDL_WINDOW_FILL_DOCUMENT, SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING и SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING.
- На платформата Linux е реализирана поддръжка на атомарни операции при използване на KMSDRM, активирани чрез свойството SDL_HINT_KMSDRM_ATOMIC. Добавен е параметър SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTER за запитване на устройството за изход wl_output, асоциирано с екрана, в среди на базата на Wayland.
Източник: opennet.ru
