Implement OpenAL as an audio backend

This commit is contained in:
Gustaf Alhäll 2025-07-30 11:31:00 +02:00 committed by NepDisk
parent 09d00bdd5f
commit aaa5d22ec8
2 changed files with 1125 additions and 2 deletions

View file

@ -70,8 +70,94 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
)
endif()
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_SDL)
find_package(SDL2 CONFIG REQUIRED)
find_package(SDL2 REQUIRED)
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2)
if(TARGET SDL2main)
target_link_libraries(SRB2SDL2 PRIVATE SDL2main)
endif()
target_compile_definitions(SRB2SDL2 PRIVATE -DDIRECTFULLSCREEN -DHAVE_SDL)
target_include_directories(SRB2SDL2 PRIVATE ${SDL2_INCLUDE_DIR})
find_package(OpenAL CONFIG QUIET)
find_package(OpenAL QUIET)
if(TARGET OpenAL::OpenAL)
target_link_libraries(SRB2SDL2 PRIVATE sndfile)
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENAL)
target_link_libraries(SRB2SDL2 PRIVATE OpenAL::OpenAL)
target_sources(SRB2SDL2 PRIVATE al_sound.c)
else()
find_package(SDL2_mixer_ext CONFIG QUIET)
find_package(SDL2_mixer_ext QUIET)
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static OR TARGET SDL2_mixer_ext OR TARGET SDL2_mixer_ext_Static)
if(NOT TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static AND TARGET SDL2_mixer_ext_Static)
add_library(SDL2_mixer_ext::SDL2_mixer_ext_Static ALIAS SDL2_mixer_ext_Static)
endif()
if(NOT TARGET SDL2_mixer_ext::SDL2_mixer_ext AND TARGET SDL2_mixer_ext)
add_library(SDL2_mixer_ext::SDL2_mixer_ext ALIAS SDL2_mixer_ext)
endif()
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer_ext::SDL2_mixer_ext_Static)
else()
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer_ext::SDL2_mixer_ext)
endif()
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DHAVE_MIXERX -DSOUND=SOUND_MIXER)
endif()
endif()
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
message(STATUS "SDL2_mixer_ext found, skipping SDL2_mixer")
else()
message(STATUS "SDL2_mixer_ext not found, going to try SDL2_mixer")
find_package(SDL2_mixer CONFIG QUIET)
find_package(SDL2_mixer QUIET)
if(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static OR TARGET SDL2_mixer OR TARGET SDL2_mixer_Static)
if(NOT TARGET SDL2_mixer::SDL2_mixer-static AND TARGET SDL2_mixer_Static)
add_library(SDL2_mixer::SDL2_mixer-static ALIAS SDL2_mixer_Static)
endif()
if(NOT TARGET SDL2_mixer::SDL2_mixer AND TARGET SDL2_mixer)
add_library(SDL2_mixer::SDL2_mixer ALIAS SDL2_mixer)
endif()
if(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
if(TARGET SDL2_mixer::SDL2_mixer-static)
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer::SDL2_mixer-static)
else()
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer::SDL2_mixer)
endif()
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
endif()
endif()
endif()
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static OR TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
target_sources(SRB2SDL2 PRIVATE mixer_sound.c)
else()
target_sources(SRB2SDL2 PRIVATE sdl_sound.c)
endif()
endif()
if(TARGET SDL2::SDL2)
message(STATUS "SDL2 Found")
else()
message(STATUS "no SDL2 Found")
endif()
if(TARGET SDL2::SDL2main)
message(STATUS "SDL2main Found")
else()
message(STATUS "No SDL2main Found")
endif()
if(TARGET OpenAL::OpenAL)
message(STATUS "OpenAL Found")
elseif(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
message(STATUS "SDL2_mixer_ext Found")
elseif(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
message(STATUS "SDL2_mixer found")
else()
message(STATUS "no SDL2_mixer_ext or SDL2_mixer Found")
endif()
#### Installation ####
if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)

1037
src/sdl/al_sound.c Normal file

File diff suppressed because it is too large Load diff