mirror of https://github.com/bjornbytes/lovr.git
Introduce -DUSE_OPENAL=0 CMake option which prevents inclusion of OpenAL
This commit is contained in:
parent
1f00948da0
commit
883883f0fa
|
@ -164,28 +164,37 @@ else()
|
|||
endif()
|
||||
|
||||
# OpenAL
|
||||
set(USE_OPENAL ON CACHE BOOL "If set to OFF, OpenAL is excluded and the behavior of lovr.audio is undefined")
|
||||
set(ALSOFT_UTILS OFF CACHE BOOL "")
|
||||
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
||||
set(ALSOFT_TESTS OFF CACHE BOOL "")
|
||||
if(EMSCRIPTEN)
|
||||
include_directories(deps/openal-soft/include)
|
||||
elseif(WIN32)
|
||||
add_subdirectory(deps/openal-soft openal)
|
||||
include_directories(deps/openal-soft/include)
|
||||
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
|
||||
set(LOVR_OPENAL OpenAL)
|
||||
else()
|
||||
pkg_search_module(OPENAL openal-soft)
|
||||
if (NOT OPENAL_FOUND)
|
||||
pkg_search_module(OPENAL openal)
|
||||
|
||||
if(USE_OPENAL)
|
||||
add_definitions(-DUSE_OPENAL)
|
||||
set(LOVR_AUDIO_SRC src/audio/audio.c src/audio/source.c src/audio/microphone.c)
|
||||
|
||||
if(EMSCRIPTEN)
|
||||
include_directories(deps/openal-soft/include)
|
||||
elseif(WIN32)
|
||||
add_subdirectory(deps/openal-soft openal)
|
||||
include_directories(deps/openal-soft/include)
|
||||
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
|
||||
set(LOVR_OPENAL OpenAL)
|
||||
else()
|
||||
pkg_search_module(OPENAL openal-soft)
|
||||
if (NOT OPENAL_FOUND)
|
||||
message(FATAL_ERROR "OpenAL not found.")
|
||||
pkg_search_module(OPENAL openal)
|
||||
if (NOT OPENAL_FOUND)
|
||||
message(FATAL_ERROR "OpenAL not found.")
|
||||
endif()
|
||||
endif()
|
||||
include_directories(${OPENAL_INCLUDE_DIRS})
|
||||
string(REPLACE ";" " " OPENAL_LDFLAGS_STR "${OPENAL_LDFLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENAL_LDFLAGS_STR}")
|
||||
set(LOVR_OPENAL ${OPENAL_LIBRARIES})
|
||||
endif()
|
||||
include_directories(${OPENAL_INCLUDE_DIRS})
|
||||
string(REPLACE ";" " " OPENAL_LDFLAGS_STR "${OPENAL_LDFLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENAL_LDFLAGS_STR}")
|
||||
set(LOVR_OPENAL ${OPENAL_LIBRARIES})
|
||||
else()
|
||||
set(LOVR_AUDIO_SRC src/audio/null.c)
|
||||
endif()
|
||||
|
||||
# OpenGL
|
||||
|
@ -258,9 +267,6 @@ set(LOVR_SRC
|
|||
src/api/types/transform.c
|
||||
src/api/types/vertexData.c
|
||||
src/api/types/world.c
|
||||
src/audio/audio.c
|
||||
src/audio/microphone.c
|
||||
src/audio/source.c
|
||||
src/data/audioStream.c
|
||||
src/data/blob.c
|
||||
src/data/modelData.c
|
||||
|
@ -304,6 +310,7 @@ set(LOVR_SRC
|
|||
src/resources/shaders.c
|
||||
src/timer/timer.c
|
||||
src/util.c
|
||||
${LOVR_AUDIO_SRC}
|
||||
)
|
||||
|
||||
# Conditional sources
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
#include "audio/source.h"
|
||||
#include "audio/microphone.h"
|
||||
#include "lib/vec/vec.h"
|
||||
#ifdef USE_OPENAL
|
||||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
#include <AL/alext.h>
|
||||
#endif
|
||||
#include <stdbool.h>
|
||||
|
||||
#pragma once
|
||||
|
||||
#define MAX_MICROPHONES 8
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
typedef struct {
|
||||
bool initialized;
|
||||
ALCdevice* device;
|
||||
|
@ -20,6 +23,10 @@ typedef struct {
|
|||
float position[3];
|
||||
float velocity[3];
|
||||
} AudioState;
|
||||
#else
|
||||
typedef unsigned int AudioState;
|
||||
typedef unsigned int ALenum;
|
||||
#endif
|
||||
|
||||
ALenum lovrAudioConvertFormat(int bitDepth, int channelCount);
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
#include "util.h"
|
||||
#include "data/soundData.h"
|
||||
#if USE_OPENAL
|
||||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
#endif
|
||||
#include <stdbool.h>
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
typedef struct {
|
||||
Ref ref;
|
||||
ALCdevice* device;
|
||||
|
@ -15,6 +18,9 @@ typedef struct {
|
|||
int bitDepth;
|
||||
int channelCount;
|
||||
} Microphone;
|
||||
#else
|
||||
typedef unsigned int Microphone;
|
||||
#endif
|
||||
|
||||
Microphone* lovrMicrophoneCreate(const char* name, int samples, int sampleRate, int bitDepth, int channelCount);
|
||||
void lovrMicrophoneDestroy(void* ref);
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
// "Null" implementation of all audio code for no-OpenAL mode
|
||||
// Currently, some of these functions may lead to crashes (IE by returning null values)
|
||||
|
||||
// audio.c
|
||||
|
||||
#include "audio/audio.h"
|
||||
|
||||
ALenum lovrAudioConvertFormat(int bitDepth, int channelCount) { return 0; }
|
||||
void lovrAudioInit() {}
|
||||
void lovrAudioDestroy() {}
|
||||
void lovrAudioUpdate() {}
|
||||
void lovrAudioAdd(Source* source) {}
|
||||
void lovrAudioGetDopplerEffect(float* factor, float* speedOfSound) {}
|
||||
void lovrAudioGetMicrophoneNames(const char* names[MAX_MICROPHONES], uint8_t* count) {}
|
||||
void lovrAudioGetOrientation(float* angle, float* ax, float* ay, float* az) {}
|
||||
void lovrAudioGetPosition(float* x, float* y, float* z) {}
|
||||
void lovrAudioGetVelocity(float* x, float* y, float* z) {}
|
||||
float lovrAudioGetVolume() { return 0; }
|
||||
bool lovrAudioHas(Source* source) { return false; }
|
||||
bool lovrAudioIsSpatialized() { return false; }
|
||||
void lovrAudioPause() {}
|
||||
void lovrAudioResume() {}
|
||||
void lovrAudioRewind() {}
|
||||
void lovrAudioSetDopplerEffect(float factor, float speedOfSound) {}
|
||||
void lovrAudioSetOrientation(float angle, float ax, float ay, float az) {}
|
||||
void lovrAudioSetPosition(float x, float y, float z) {}
|
||||
void lovrAudioSetVelocity(float x, float y, float z) {}
|
||||
void lovrAudioSetVolume(float volume) {}
|
||||
void lovrAudioStop() {}
|
||||
|
||||
// microphone.c
|
||||
|
||||
#include "audio/microphone.h"
|
||||
|
||||
Microphone* lovrMicrophoneCreate(const char* name, int samples, int sampleRate, int bitDepth, int channelCount) { return 0; }
|
||||
void lovrMicrophoneDestroy(void* ref) {}
|
||||
int lovrMicrophoneGetBitDepth(Microphone* microphone) { return 0; }
|
||||
int lovrMicrophoneGetChannelCount(Microphone* microphone) { return 0; }
|
||||
SoundData* lovrMicrophoneGetData(Microphone* microphone) { return NULL; }
|
||||
const char* lovrMicrophoneGetName(Microphone* microphone) { return NULL; }
|
||||
int lovrMicrophoneGetSampleCount(Microphone* microphone) { return 0; }
|
||||
int lovrMicrophoneGetSampleRate(Microphone* microphone) { return 0; }
|
||||
bool lovrMicrophoneIsRecording(Microphone* microphone) { return false; }
|
||||
void lovrMicrophoneStartRecording(Microphone* microphone) {}
|
||||
void lovrMicrophoneStopRecording(Microphone* microphone) {}
|
||||
|
||||
// source.c
|
||||
|
||||
#include "audio/source.h"
|
||||
|
||||
Source* lovrSourceCreateStatic(SoundData* soundData) { return NULL; }
|
||||
Source* lovrSourceCreateStream(AudioStream* stream) { return NULL; }
|
||||
void lovrSourceDestroy(void* ref) {}
|
||||
SourceType lovrSourceGetType(Source* source) { return SOURCE_STATIC; }
|
||||
int lovrSourceGetBitDepth(Source* source) { return 0; }
|
||||
int lovrSourceGetChannelCount(Source* source) { return 0; }
|
||||
void lovrSourceGetCone(Source* source, float* innerAngle, float* outerAngle, float* outerGain) {}
|
||||
void lovrSourceGetDirection(Source* source, float* x, float* y, float* z) {}
|
||||
int lovrSourceGetDuration(Source* source) { return 0; }
|
||||
void lovrSourceGetFalloff(Source* source, float* reference, float* max, float* rolloff) {}
|
||||
float lovrSourceGetPitch(Source* source) { return 0; }
|
||||
void lovrSourceGetPosition(Source* source, float* x, float* y, float* z) {}
|
||||
void lovrSourceGetVelocity(Source* source, float* x, float* y, float* z) {}
|
||||
int lovrSourceGetSampleRate(Source* source) { return 0; }
|
||||
float lovrSourceGetVolume(Source* source) { return 0; }
|
||||
void lovrSourceGetVolumeLimits(Source* source, float* min, float* max) {}
|
||||
bool lovrSourceIsLooping(Source* source) { return false; }
|
||||
bool lovrSourceIsPaused(Source* source) { return false; }
|
||||
bool lovrSourceIsPlaying(Source* source) { return false; }
|
||||
bool lovrSourceIsRelative(Source* source) { return false; }
|
||||
bool lovrSourceIsStopped(Source* source) { return false; }
|
||||
void lovrSourcePause(Source* source) {}
|
||||
void lovrSourcePlay(Source* source) {}
|
||||
void lovrSourceResume(Source* source) {}
|
||||
void lovrSourceRewind(Source* source) {}
|
||||
void lovrSourceSeek(Source* source, int sample) {}
|
||||
void lovrSourceSetCone(Source* source, float inner, float outer, float outerGain) {}
|
||||
void lovrSourceSetDirection(Source* source, float x, float y, float z) {}
|
||||
void lovrSourceSetFalloff(Source* source, float reference, float max, float rolloff) {}
|
||||
void lovrSourceSetLooping(Source* source, bool isLooping) {}
|
||||
void lovrSourceSetPitch(Source* source, float pitch) {}
|
||||
void lovrSourceSetPosition(Source* source, float x, float y, float z) {}
|
||||
void lovrSourceSetRelative(Source* source, bool isRelative) {}
|
||||
void lovrSourceSetVelocity(Source* source, float x, float y, float z) {}
|
||||
void lovrSourceSetVolume(Source* source, float volume) {}
|
||||
void lovrSourceSetVolumeLimits(Source* source, float min, float max) {}
|
||||
void lovrSourceStop(Source* source) {}
|
||||
void lovrSourceStream(Source* source, ALuint* buffers, int count) {}
|
||||
int lovrSourceTell(Source* source) { return 0; }
|
|
@ -1,8 +1,10 @@
|
|||
#include "data/audioStream.h"
|
||||
#include "data/soundData.h"
|
||||
#include "util.h"
|
||||
#ifdef USE_OPENAL
|
||||
#include <AL/al.h>
|
||||
#include <AL/alc.h>
|
||||
#endif
|
||||
#include <stdbool.h>
|
||||
|
||||
#pragma once
|
||||
|
@ -19,6 +21,7 @@ typedef enum {
|
|||
UNIT_SAMPLES
|
||||
} TimeUnit;
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
typedef struct {
|
||||
Ref ref;
|
||||
SourceType type;
|
||||
|
@ -28,6 +31,11 @@ typedef struct {
|
|||
ALuint buffers[SOURCE_BUFFERS];
|
||||
bool isLooping;
|
||||
} Source;
|
||||
#else
|
||||
typedef struct { Ref ref; } Source;
|
||||
typedef unsigned int ALuint;
|
||||
#define ALC_HRTF_SOFT 0
|
||||
#endif
|
||||
|
||||
Source* lovrSourceCreateStatic(SoundData* soundData);
|
||||
Source* lovrSourceCreateStream(AudioStream* stream);
|
||||
|
|
Loading…
Reference in New Issue