LINUX.ORG.RU

SDL 2.0.12

 ,


1

2

11 марта вышла очередная версия SDL 2.0.12.

SDL - кроссплатформенная библиотека разработки для обеспечения низкоуровневого доступа к устройствам ввода, звуковому оборудованию, графическому оборудованию через OpenGL и Direct3D. С применением SDL написаны различные видеопроигрыватели, эмуляторы и компьютерные игры, в том числе предоставляемые в виде свободного ПО.

SDL написан на языке C, работает с C++ и предоставляет биндинги к десятку других языков программирования, в том числе к языку Pascal.

Обозначены следующие улучшения:

  • Добавлены функции уровня увеличения текстуры SDL_GetTextureScaleMode() и SDL_SetTextureScaleMode()
  • Добавлена функция блокировки текстуры SDL_LockTextureToSurface(), в отличие от SDL_LockTexture() представляющую блокированную часть в виде поверхности SDL.
  • Добавлен новый режим смешения SDL_BLENDMODE_MUL, сочетающий модуляцию и смешение
  • Добавлено указание SDL_HINT_DISPLAY_USABLE_BOUNDS для игнорирования результатов SDL_GetDisplayUsableBounds() для индекса дисплея 0.
  • Добавлено окно под пальцем для события SDL_TouchFingerEvent
  • Добавлены функции SDL_GameControllerTypeForIndex(), SDL_GameControllerGetType() для получения типа игрового контроллера
  • Добавлено указание SDL_HINT_GAMECONTROLLERTYPE для игнорирования автоматического определения типа контроллера
  • Добавлены функции SDL_JoystickFromPlayerIndex(), SDL_GameControllerFromPlayerIndex(), SDL_JoystickSetPlayerIndex(), SDL_GameControllerSetPlayerIndex() для определения и установки соответствия номера игрока и устройства
  • Добавлена или улучшена поддержка двух десятков разных игровых контроллеров
  • Исправлена блокировка вызова вибрации игровых контроллеров при использовании драйвера HIDAPI
  • Добавлен макрос обнуления элементов массива SDL_zeroa()
  • Добавлена функция SDL_HasARMSIMD(), возвращающая истину в случае, если процессор поддерживает ARM SIMD (ARMv6+)

Улучшения для Linux:

  • Добавлено указание SDL_HINT_VIDEO_X11_WINDOW_VISUALID для определения вида, выбранного для новых окон X11
  • Добавлено указание SDL_HINT_VIDEO_X11_FORCE_EGL для определения использвания GLX или EGL для X11 по умолчанию

Улучшения для Android:

  • Добавлена фукнкция SDL_GetAndroidSDKVersion(), возвращающая уровень API данного устройства
  • Добавлена поддержка захвата звука с помощью OpenSL-ES
  • Добавлена поддержка Bluetooth Steam Controller в качестве игровых контроллеров
  • Исправлены редкие падения приложения в случае его ухода в фоновый режим или его закрытия

>>> Подробности

★★★

Проверено: Zhbert ()

Чёт заминорили

SDL_zeroa()

странно что не SDL_bzero()

Добавлен новый режим смешения SDL_BLENDMODE_MUL, сочетающий модуляцию и смешение

Чёт не понял, надо сырцы глянуть

По остальному просто полезные житейские добавления. Ну и ладно, в целом всё хорошо. Гип-Гип!

А прикол с различием поведения SDL_vsnprintf() так и не пофиксили наверное, юмористы =) Ну и ладно :D

LINUX-ORG-RU ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)

Офигенная штука. Заменяет DirectInput, а также все остальные компоненты DirectX. Кроме Direct3D, потому что OpenGL

И, в отличие от DirectX, занимает всего 3 мегабайта. Хороший код, быстрый и лёгкий

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

в отличие от DirectX, занимает всего 3 мегабайта

Так-то sdl, лишь кросплатформенная обёртка над системным API. На Windows использует DirectX. Так что если быть честным, то SDL занимает 3 мегабайта + DirectX.

Либо можно менять render по умолчанию если ненавидишь своих пользователей и думаешь что знаешь лучше авторов SDL на OpenGL. И даже тогда правильно сравнивать по размеру: OpenGL + SDL vs Direct3D

fsb4000 ★★★ ()
Ответ на: комментарий от fsb4000

Не думаю, что под Windows используется DirectX. Для SDL это было бы слишком позорно. Помню ранние игры для Win98, такие как Heroes 3, там ведь DirectX не использовался. Люди помнили, как их «кинули» с WinG (а heroes2 использовали WinG), и не торопились переходить на DirectX.

Возможно, SDL использует что-то более низкоуровневое, чем DirectX

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Heroes 3, там ведь DirectX не использовался

Да ну, установщик предлагает его установить.

gedisdone ★★★ ()

в том числе к языку Pascal.

Достает с запылённой полки книгу по TP

Andreezy ()
Ответ на: комментарий от ZenitharChampion

Не думаю, что под Windows используется DirectX

100% по-умолчанию авторы SDL используют DirectX под Windows.

#include <stdio.h>
#include <stdlib.h>

#include <SDL2/SDL.h>

int main(void)
{
	if (SDL_Init(SDL_INIT_VIDEO) != 0)
	{
		fprintf(stderr, "Failed to initialize SDL (%s)\n", SDL_GetError());
		return -1;
	}
	SDL_Window* window = SDL_CreateWindow("test SDL2", SDL_WINDOWPOS_UNDEFINED,
		SDL_WINDOWPOS_UNDEFINED,
		800,
		600,
		SDL_WINDOW_SHOWN);

	if (window)
	{
                // -1 это у них типа renderer по-умолчанию.
		SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 
		if (renderer) 
		{
			SDL_RendererInfo info;
			SDL_GetRendererInfo(renderer, &info);
			printf("%s", info.name);
			SDL_DestroyRenderer(renderer);
		}
		SDL_DestroyWindow(window);
	}
	SDL_Quit();
}
// документация
/**
 *  \brief Create a 2D rendering context for a window.
 *
 *  \param window The window where rendering is displayed.
 *  \param index    The index of the rendering driver to initialize, or -1 to
 *                  initialize the first one supporting the requested flags.
 *  \param flags    ::SDL_RendererFlags.
 *
 *  \return A valid rendering context or NULL if there was an error.
 *
 *  \sa SDL_CreateSoftwareRenderer()
 *  \sa SDL_GetRendererInfo()
 *  \sa SDL_DestroyRenderer()
 */
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window,
                                               int index, Uint32 flags);

https://i.imgur.com/vzqlEia.png

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от ZenitharChampion

/src/render/

drwxr-xr-x 			direct3d 	files
drwxr-xr-x 			direct3d11 	files
drwxr-xr-x 			metal 	files
drwxr-xr-x 			opengl 	files
drwxr-xr-x 			opengles 	files
drwxr-xr-x 			opengles2 	files
drwxr-xr-x 			psp 	files
drwxr-xr-x 			software 	files
-rw-r--r-- 	2020-03-10 18:25 -0700 	4328 	SDL_d3dmath.c 	file | revisions | annotate
-rw-r--r-- 	2020-03-10 18:25 -0700 	1953 	SDL_d3dmath.h 	file | revisions | annotate
-rw-r--r-- 	2020-03-10 18:25 -0700 	103117 	SDL_render.c 	file | revisions | annotate
-rw-r--r-- 	2020-03-10 18:25 -0700 	9714 	SDL_sysrender.h 	file | revisions | annotate
-rw-r--r-- 	2020-03-10 18:25 -0700 	13944 	SDL_yuv_sw.c 	file | revisions | annotate
-rw-r--r-- 	2020-03-10 18:25 -0700 	2877 	SDL_yuv_sw_c.h 	file | revisions | annotate

Так же /src/video/windows/SDL_windowsvideo.c, например, тоже можно глянуть. Да много чего можно посмотреть.

SkyMaverick ★★ ()
Последнее исправление: SkyMaverick (всего исправлений: 1)

fsb4000, SkyMaverick, хм, интересно, спасибо. Может я с версией 1.2.15 путаю? Или она тоже?

Upd: что касается sdl_image и sdl_gfx. Мне кажется, что через них можно пользоваться OpenGL и Direct3D, чтобы не обращаться напрямую. Только и всего.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Не думаю, что под Windows используется DirectX

Для 2D ускорения выбирается то что нативно для платформы по умолчанию, на винде директ, на линуксе гл, на маке метал. Но далеко не всегда 2D SDL API используется вообще, а если и используется то глубоко плевать что там под капотом, оно для этого и создано. Тоже самое про окна через winapi они или через X11 тоже самое про ввод и вывод. Но никто не мешает открыть SDL_OPENGL окно и рисовать всё самому также с ускорением без даже намёков на DirectX как большинство и делает по сути

LINUX-ORG-RU ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я так и подумал ) SDL предоставляет возможность связаться OpenGL через себя, хотя можно работать с OpenGL напрямую, используя SDL только для отрисовки окна, и для работы с устройствами ввода. Со звуком так же: можно напрямую в /dev/dsp слать звук, но зачем, когда можно через sdl_mixer?

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Интересно... SDL 2 умеет directfb? Я думал, что от него уже все избавились. Хотя в SNES Mini как раз directfb используется, поэтому почему бы и нет. Интересно, а где wayland/weston?

Странное решение назвать вывод звука через «пульсу» по-разному: судя по данным в таблице, для 1.2 это «pulse», а для 2.0 это «pulseaudio»!

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 4)
Ответ на: комментарий от ZenitharChampion

SDL не серебряная пуля, но для совершенно бесплатного достаточно универсального мультимедиа леера она действительно очень неплоха скидывайте свои пулреквесты с реализацией «как надо и что надо» если код нормальный думаю вам вряд ли откажут.

abcq ()
Ответ на: комментарий от ZenitharChampion

1.2 и 2.0 Это вообще по сути 2 полностью разные версии. 2.0 была полностью переписана что бы выйти под zlib. А в целом скачай исходники, для просто понимания в целом достаточно посмотреть на имена файлов исходников и каталогов и будет видно, что есть а чего нет =)

LINUX-ORG-RU ()
Ответ на: комментарий от ZenitharChampion

Не думаю

Ну, так начинай учиться.

SDL2-2.0.12\src\render\

direct3d\
direct3d11\
metal\
opengl\
opengles\
opengles2\
psp\
software\
SDL_d3dmath.c
SDL_d3dmath.h
SDL_render.c
SDL_sysrender.h
SDL_yuv_sw.c
SDL_yuv_sw_c.h

Для SDL это было бы слишком позорно.

Позорно быть безграмотным идиотом.

LamerOk ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Для 2D ускорения выбирается то что нативно для платформы по умолчанию,

Ты тоже не фантазируй. Конкретный бэкэнд выбирает разработчик / мэйнтейнер.

LamerOk ★★★★★ ()
Ответ на: комментарий от LamerOk

Ты тоже не фантазируй. Конкретный бэкэнд выбирает разработчик / мэйнтейнер.

Ты бы пальцы гнул поменьше. И читать научился. :D

Я сказал

выбирается то что нативно для платформы по умолчанию

By default the first one in the list that is available on the current platform is chosen.

Первый из это и есть всегда нативный как я выше перечислил. То что ты SDL_HINT_RENDER_DRIVER заюзаешь не значит что получишь желаемое ибо его может не быть вовсе. Да и в целом тебе может быть глубоко плевать на это все если ты не выходишь за рамки SDL Renderer API и делаешь всё через него.

Чё ты агрися на людей я нипанимаю! ^.^

Если же мы выходим за рамки то да согласен, отныне всё на 100% под контролем разработчика.

LINUX-ORG-RU ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Думаю, zeroa не требует указания размера массива в отличие от bzero

mittorn ★★★★★ ()
Ответ на: комментарий от Andreezy

БТВ нынче Паскаль уже не тот, фактически с добавлением адресов он стал клоном Си.

sanaris ()
Ответ на: комментарий от ZenitharChampion

Возможно, SDL использует что-то более низкоуровневое, чем DirectX

Разве для этого «чего-то более низкоуровневого» не потребуется поддержка в видеодрайвере?

mshewzov ()
Последнее исправление: mshewzov (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Первый из это и есть всегда нативный как я выше перечислил.

Лол. Единственный «не нативный» рендер в SDL - это софтверный. Всё остальное - это, разумеется, обёртки к.

Но если ты не наркоман, у тебя не будет в сборке никаких других рендеров, кроме одного единственного - того, который нужен.

LamerOk ★★★★★ ()

в том числе к языку Pascal gedisdone

Не угадал автора.

hateyoufeel ★★★★★ ()
Ответ на: комментарий от LamerOk

Та я про нативный для платформы на которой SDL дёргается. А не для самого SDL ты меня неверно понял. Если мы используем официальную сборку для винды или сборку которую предоставляет дистрибутив линукса или ещё кого.

Но если ты не наркоман, у тебя не будет в сборке никаких других рендеров, кроме одного единственного - того, который нужен.

Ну если я SDL с собой таскаю то да, лишнее выпиливается за ненадобностью. Тут ты прав и я не спорю.

Ой кароче всё, пошёл я спать, одни нервы с вами ^.^

LINUX-ORG-RU ()
Ответ на: комментарий от ZenitharChampion

Ты несёшь какую-то дичь.

что касается sdl_image и sdl_gfx. Мне кажется, что через них можно пользоваться OpenGL и Direct3D, чтобы не обращаться напрямую. Только и всего.

SDL_image это парсер форматов. Ну, чтобы твоя игра умела открывать PNG/BMP/JPEG и так далее, а ты не тратил время на реализацию всего этого. SDL_gfx это графические примитивы.

SDL предоставляет возможность связаться OpenGL через себя

Создать контекст.

хотя можно работать с OpenGL напрямую

Работать с EGL/GLX/WGL/etc и оконной системой операционной системы, если она есть, скорее. Ты и так напрямую с OpenGL работаешь, SDL даёт тебе только абстракцию над созданием окна и контекста.

Хотя должен сказать, что в SDL есть встроенный 2D рендерер, реализованный софтварно, через OpenGL, через Direct3D, через Metal. Вот кстати для него SDL_gfx и существует. Но это всё 2D, повторюсь, и не так интересно. :)

можно напрямую в /dev/dsp слать звук

/dev/dsp больше не существует. По крайней мере на Linux.

зачем, когда можно через sdl_mixer

mixer занимается тем, что… видно из названия. Его задача смиксировать звук с разных каналов, в том числе один с музыкой из MP3/OGG/etc. Чтобы просто играть звук он не нужен.

Некоторые движки кстати самостоятельно микшируют звук. Например, у нас в Xash3D свой микшер, родом из Quake и никакой SDL_mixer ему не нужен. Отдаёт готовый буфер, который можно уже прямиком слать на девайс, будь то /dev/dsp, ALSA, PulseAudio или OpenSL ES.

a1batross ★★★★★ ()
Последнее исправление: a1batross (всего исправлений: 1)
Ответ на: комментарий от mshewzov

>> Возможно, SDL использует что-то более низкоуровневое, чем DirectX

> Разве для этого «чего-то более низкоуровневого» не потребуется поддержка в видеодрайвере?

Видеодрайвере? Я же говорил:

Заменяет весь DirectX, кроме Direct3D

Я про ввод, вывод на экран, звук, сеть, и так далее

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Уж слишком сильно у людей DirectX ассоциируется с Direct3D, и ничем больше. А я в первом сообщении (втором в теме) сказал мнение (а заодно спросил у знающих людей), что SDL не работает поверх DirectX, а заменяет все его компоненты, которые не связаны с работой в 3D. Такие как DirectInput, DirectNet, DirectSound, DirectMusic и так далее

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Возможно, SDL использует что-то более низкоуровневое, чем DirectX

Ха-ха-ха.

andreyu ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Ты не отдупляешь. DirctX - это самый «низкоуровневый» доступ для приложений режима пользователя.

Скажем ввод через «стандартный message loop» «уровнем выше».

LamerOk ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

DirectX это не только Direct3D

Полагаю, исходя из этого вы сделали какой-то особый вывод?

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Проще установить Win95 не OSR2, там нет DirectX (версия 1.0 вышла только в декабре 1995) и проверить, работает ли там SDL. Версий 1.2 и 2.0.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

SDL 2.0 - minimum Windows XP

SDL 1.2 - пишут что есть поддержка Windows 9x, но конкретно про Win95 не OSR2 я хз…

fsb4000 ★★★ ()
Ответ на: комментарий от ZenitharChampion

В SDL 1.2 2D-графика работает через GDI, насколько я знаю. Игры, собранные MinGW и использующие SDL 1.2, например Cave Story (NXEngine) вполне себе работали в Win98 и Win95.

http://esxi.z-lab.me:666/~exl_lab/screens/win98_1.png

Современный SDL2 скорее всего уже поддержку Win 7 дропает, нет смысла тянуть всё это.

EXL ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.