mirror of
https://github.com/RetroPie/RetroPie-Setup.git
synced 2025-04-02 10:51:41 -04:00
Added the SDL12-Compat backend, using a shim library which implements the `sdl1.2` API over SDL2. The new `sdl12-compat` backend should be used for SDL1 applications when: * the platform doesn't have `dispmanx` anymore (e.g. `rpi` platforms with RaspiOS Bullseye and later) * `sdl2` has a working accelerated video & rendering drivers * not running under `x11` (i.e. KMS) Note: for SDL1+Videocore specific applications, which use directly the dispmanx/legacy GL stack (e.g. `pcsx-rearmed`, `advmame-1.4`, etc.), the backend will not help.
131 lines
4.3 KiB
Bash
131 lines
4.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# This file is part of The RetroPie Project
|
|
#
|
|
# The RetroPie Project is the legal property of its developers, whose names are
|
|
# too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
|
|
#
|
|
# See the LICENSE.md file at the top-level directory of this distribution and
|
|
# at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
|
|
#
|
|
|
|
rp_module_id="backends"
|
|
rp_module_desc="Configure display/driver backends for emulators"
|
|
rp_module_section="config"
|
|
rp_module_flags="!mali !x11"
|
|
|
|
function _list_backends() {
|
|
local id="$1"
|
|
backends=()
|
|
|
|
# skip the 'depends' packages
|
|
[[ ${__mod_info[$id/section]} == "depends" ]] && return 1
|
|
|
|
local flags="${__mod_info[$id/flags]}"
|
|
local sdl
|
|
if isPlatform "videocore" && hasFlag "$flags" "sdl1-videocore"; then
|
|
sdl="sdl1"
|
|
elif hasFlag "$flags" "sdl1" || hasFlag "$flags" "dispmanx"; then
|
|
sdl="sdl1"
|
|
elif hasFlag "$flags" "sdl2"; then
|
|
sdl="sdl2"
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
local default
|
|
local sdl_name="${sdl^^}"
|
|
if [[ "$sdl" == "sdl1" ]]; then
|
|
backends["default"]="SDL1 Framebuffer driver"
|
|
isPlatform "dispmanx" && backends["dispmanx"]="SDL1 DispmanX driver"
|
|
isPlatform "kms" && ! isPlatform "dispmanx" && backends["sdl12-compat"]="SDL1 Compat driver"
|
|
elif [[ "$sdl" == "sdl2" ]]; then
|
|
if isPlatform "videocore"; then
|
|
default="SDL2 videocore driver"
|
|
elif isPlatform "kms"; then
|
|
default="SDL2 KMS driver"
|
|
fi
|
|
backends["default"]="$default"
|
|
fi
|
|
backends["x11"]="$sdl_name on Desktop"
|
|
backends["x11-c"]="$sdl_name on Desktop + Cursor"
|
|
return 0
|
|
}
|
|
|
|
function _update_hook_backends() {
|
|
local dispmanx_cfg="$configdir/all/dispmanx.cfg"
|
|
local backends_cfg="$configdir/all/backends.cfg"
|
|
if [[ -f "$dispmanx_cfg" ]]; then
|
|
mv "$dispmanx_cfg" "$backends_cfg"
|
|
fi
|
|
}
|
|
|
|
function gui_backends() {
|
|
declare -A backends
|
|
local id
|
|
local backend
|
|
local default
|
|
local flags
|
|
local valid
|
|
while true; do
|
|
local options=()
|
|
for id in "${__mod_id[@]}"; do
|
|
valid=0
|
|
if rp_isInstalled "$id"; then
|
|
if _list_backends "$id" >/dev/null; then
|
|
backend="$(getBackend "$id")"
|
|
options+=("$id" "Using ${backends[$backend]} ($backend)")
|
|
fi
|
|
fi
|
|
done
|
|
local cmd=(dialog --backtitle "$__backtitle" --default-item "$default" --menu "Configure display/driver backends for emulators" 22 76 16)
|
|
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
|
[[ -z "$choice" ]] && break
|
|
default="$choice"
|
|
gui_configure_backends "$choice"
|
|
done
|
|
}
|
|
|
|
function gui_configure_backends() {
|
|
local id="$1"
|
|
declare -A backends
|
|
|
|
_list_backends "$id"
|
|
|
|
while true; do
|
|
local current="$(getBackend "$id")"
|
|
local options=()
|
|
local selected
|
|
local backend
|
|
local flags
|
|
for backend in $(echo "${!backends[@]}" | xargs -n1 | sort); do
|
|
selected=""
|
|
[[ "$current" == "$backend" ]] && selected="(Currently selected)"
|
|
options+=("$backend" "${backends[$backend]} $selected")
|
|
done
|
|
local cmd=(dialog --default-item "$current" --backtitle "$__backtitle" --menu "Select backend for $id" 22 76 16)
|
|
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
|
if [[ -n "$choice" ]]; then
|
|
if [[ "$choice" == "x11" ]] && ( ! hasPackage "xorg" || ! hasPackage "matchbox-window-manager" ); then
|
|
if dialog --defaultno --yesno "To use the X11/Xorg backend, some additional packages are needed (xorg / matchbox-window-manager) - do you want to continue?" 22 76 2>&1 >/dev/tty; then
|
|
aptInstall xorg matchbox-window-manager
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
if [[ "$choice" == "sdl12-compat" ]] && ! rp_isInstalled "sdl12-compat"; then
|
|
rp_callModule "sdl12-compat" _auto_
|
|
fi
|
|
local func="_backend_set_$id"
|
|
if fnExists "$func"; then
|
|
rp_callModule "$id" _backend_set "$choice" 1
|
|
else
|
|
setBackend "$id" "$choice" 1
|
|
fi
|
|
fi
|
|
break
|
|
done
|
|
}
|
|
|
|
|
|
|