LINUX.ORG.RU

SDL 2.0.7

 , ,


1

3

Simple DirectMedia Layer (SDL) — это свободная кроссплатформенная мультимедийная библиотека, реализующая единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Она активно используется при написании кроссплатформенных мультимедийных программ (в основном игр).

Основные изменения по сравнению с 2.0.6:

  • Добавлены новые функции для преобразования звуковых потоков: SDL_NewAudioStream, SDL_AudioStreamPut, SDL_AudioStreamGet, SDL_AudioStreamAvailable, SDL_AudioStreamFlush, SDL_AudioStreamClear и SDL_FreeAudioStream.
  • Добавлены функции для запроса и установки функций выделения памяти: SDL_GetMemoryFunctions, SDL_SetMemoryFunctions и SDL_GetNumAllocations.
  • Добавлены функции блокировки для многопоточного доступа к API управления джойстиков и игровых контроллеров: SDL_LockJoysticks, SDL_UnlockJoysticks.
  • Функции SDL_SetEventFilter, SDL_GetEventFilter, SDL_AddEventWatch и SDL_DelEventWatch теперь потокобезопасны.
  • Улучшен код ресемплинга аудио.
  • Исправлена поддержка D-Bus.

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

★★★★★

Проверено: jollheef ()
Последнее исправление: sudopacman (всего исправлений: 4)

Ответ на: комментарий от mittorn

Уже. Я всегда при изменении разрешения на дисплее размещаю на нем окно. При этом код SDL 1.2 и 2 работает идентично. Никаких искажений не видно, соотношение размера окна и fbo одинаковое.

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

Зачем изменять разрешение?
Потому что растягивание картинки через FBO тормозит
Зачем растягивать картинку через FBO?
Потому что нельзя сменить разрешение

Немного непонятная логика получается

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

Ещё раз повторюсь, функции SDL например, при масштабировании картинки, просто меняют координаты вершин соответствующим образом

То же самое можно сделать и в вершинном шейдере при желании

Зачем использовать FBO?

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

Можно, закоммитил в то что у меня выложено. Раскомментируй этот блок https://github.com/lieff/lvg/blob/master/platform/platform_sdl.c#L157

Я тут немного поэкспериментировал. На убунте у меня все разрешения работают нормально, за исключением 640х480 - на нем всплывает то что ты говоришь, но, всплывает и на SDL 1.2. На opensuse все разрешения норм.

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

Баг в убунте похоже связан с тем, что в настройках системы у дисплея нет 640х480 и его нельзя установить. А SDL это разрешение почему то сообщает, при этом оно видимо вместо реальной смены пытается как-то эмулировать и все слетает, даже обратно уже не переключается, если выйти в десктоп он уже нормально не функционирует. Это какой-то баг X11 или еще чего то.

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

У меня переключение разрешения экрана выглядит так:
https://pp.userapi.com/c834201/v834201338/39df/dNt69gN8Byo.jpg
Замечу что glClear чистит часть которую не должно быть видно - значит gpu ещё трудится обновлять изображение за границами окна Твою репу пока не собирал, но полагаю, что там будет то же самое и у тебя просто на убунте этот баг проявляется только с 640x480, а не со всеми режимами.

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

По скрину не очень понятно что не так. Это нативное разрешение дисплея, которое видно в настройках системы, и в которое можно установить десктоп без прокрутки, вот так выглядит? Если нет, это может быть виртуальное разрешение, которое вполне себе поддерживается системой. Если SDL 1.2 и 2 у вас ведет себя по разному, то могу предположить, что есть различие в том, как они скомпилированы. SDL поддерживает смену разрешения через XRANDR и XVIDMODE. Все в итоге сводится либо к X11_XRRSetCrtcConfig, либо к X11_XF86VidModeSwitchToMode. Больше я не вижу где может быть проблема.

lieff
()
Ответ на: комментарий от Gary

Но зачем? Это довольно бесполезная фишка

Чтобы написать на ней плеер. Если во время работы либа разрешение менять не умеет, то для смены размера окна придётся перезапускать всё приложение, что приведёт к миганию окна.

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

SDL не изменяет виртуальное разрешение экрана. он изменяет именно режим видеоадаптера. При этом SDL говорит оконному менежджеру растянуть окно на весь экран. Видимо в каких-то модных оконных менеджерах окно растягивается правильно только на видимую часть экрана. Но у меня на всех десктопах включая оффтопики это не работает и в итоге получается то что видно на скрине. режим правильный. Просто окно находится не там где должно.
Ради эксперимента сломал в SDL функцию X11_SetWindowFullscreen чтобы он не выставлял флаг полного экрана оконному менеджеру - в результате получил корректную работу при условии что окно сразу создаётся полноэкранным.

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

Хмм. Попробовал еще Fedora, на nvidia, AMD и интеле. Никак не могу проявить ваш баг. Попробуйте все же мой код. Еще я использую код из hg clone http://hg.libsdl.org/SDL, не из репы системы, в этом еще может быть разница.

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

Я проверяю релиз 2.0.7 сейчас. С openbox теперь не проявляется. Значит они всё же что-то исправили. Надо будет на винде проверить. Но такая зависимость полноэкрана от wm - плохо. в wine например таких проблем нету.

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

C wm и так идет плотное общение в SDL_x11window.c, без всяких фулскринов. Это логично что wm должен быть вкурсе (если окно не помечено как игнорируемое wm), без этого никуда.

lieff
()
Ответ на: комментарий от SakuraKun

а 2.0 не катит! почему так я до сих пор не понимаю... может Вы знаете?

Скорее всего потому, что выход SDL2 запоздал. Поддержка платформ была ограниченна. Если мне не изменяет память, то для получения поддержки ios и android нужно было заплатить (возможно так было только для коммерческих игр).
Кроме того, API кардинально поменялся.

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

Я наверно перепутал его с freeglut или с чем-то еще таким.

Это тоже практически нужный уровень.

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

У меня даже на Intel HD Graphics 2500 дополнительный рендер через fbo отнимает треть fps.

Что за дополнительный рендер? В том же ios всегда рендерится в fbo, но проблем нет.
Проблема на старых девайсах - тяжелый шейдер и заоблачный фреймрейт. Но к вашей проблеме оно отношения не имеет.

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

Я бы даже сказал не только на ios, на андройде без вариантов SurfaceFlinger, на винде dwm.exe, на лине. Абсолютно все мажорные OS используют этот подход, т.к. накладные расходы на современном GPU <1% даже на мобилах, страдает только память. Линукс, кстати, единственная OS, где все еще без проблем можно откатиться на старый механизм.

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

Blender использует собственный тулкит GHOST, он может как использовать SDL, так и не использовать. С натяжной можно считать за правду.

anonymous
()
Ответ на: комментарий от vvviperrr

Самое кросплатформенное решение это вебморда. На первый взгляд в вашем случае применение SDL выглядит странно.

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

Помню только, что у qt тогда lgpl еще не было

Скорее всего тогда ещё было принято экономить процессор и память.

O02eg ★★★★★
()
Ответ на: комментарий от A-234

угу, современный браузер, иксы и дохлый баребон. Когда sdl аппликуха отлично крутится в directfb. Да и вообще, программировали как умели) Сейчас яб не раздумывая делал на андроиде.

Кстати, софт продается более 10 лет. А его предшественник был написан во времена win 3.11. К вопросу об ангулярах, реактах и прочего буллшита.

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

А мне вот не выглядит. Во-первых автор говорит это было давно, значит всяких электронов еще не было, бравзеры могли быть еще плохо совместимыми между собой, в целом разработка такого десктоп софта на вебе была менее распространена. Во-вторых интерфейс выглядит простенько, имел опыт делать такой на вебе и на nuklear/imgui. Для такого интерфейса веб не кажется лучшим решением, более многословен и отладка, особенно для плохо разбирающегося в вебе, может быть гораздо сложнее. Всякие ошибки с экранированием символов, итд итп. Ну и поддержка, не факт что с обновлением бравзера оно не слетит, придется поставлять и бразвер - тогда придется поддерживать его запускаемым на целевой машине клиента.

lieff
()
Ответ на: комментарий от O02eg

«Тогда» это до 2009 года? Дело совсем не в ресурсах, браузеры и в 98-м не тормозили, просто раньше это было не принято.

A-234 ★★★★★
()

Поддержка ондроеда у SDL ужасна. Я понимаю, что у гугла примеры нативных приложений тоже криво написаны, но это же не повод делать хуже. С одной стороны, тут стоило бы кинуть чем-нибудь в вендоров (особенно в Леново), но можно же было и такие кейсы похендлить. Пришлось свою реализацию писать, потому что глупые пользователи не понимают, что если они выбрали платформу с зоопарком, не работать может именно у них

anonymous
()
Ответ на: комментарий от EXL

Нету особенной истории, нативные примеры от гугла тоже не умеют толком хендлить сворачивание, и SDL делает это не на всех девайсах. Чтобы не терялись ресурсы, SDL сохраняет их в отдельном контексте и потом копирует из него создавая шареный. Уже это надо делать аккуратно, а на некоторых китайских устройствах пропускать пару кадров потому что они не готовы,. Но тут такое дело, что если мы всё равно храним шареный контекст, то вместо этого почему просто не детачить текущий чтобы его система не прибивала? С таким подходом работает на чуть бОльшем количестве девайсов.

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

Использую и glfw, но надо еще выводить и аудио. Получается либо один SDL, либо glfw + что-то еще. Так же константы сканкодов клавиш у SDL соответствуют USB HID стандарту, а вот у glfw хоть и написано что им вдохновлялись - не соответствуют. А так штука хорошая, да.

lieff
()
Ответ на: комментарий от anonymous

Что то я не вижу этой логики в самой либе в SDL/src/video/android. Да и в андройдном примере там java которая грузит so`шки, а не нативное активити. Можете показать где это происходит?

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