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()
|
endif()
|
||||||
|
|
||||||
# OpenAL
|
# 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_UTILS OFF CACHE BOOL "")
|
||||||
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
||||||
set(ALSOFT_TESTS OFF CACHE BOOL "")
|
set(ALSOFT_TESTS OFF CACHE BOOL "")
|
||||||
if(EMSCRIPTEN)
|
|
||||||
include_directories(deps/openal-soft/include)
|
if(USE_OPENAL)
|
||||||
elseif(WIN32)
|
add_definitions(-DUSE_OPENAL)
|
||||||
add_subdirectory(deps/openal-soft openal)
|
set(LOVR_AUDIO_SRC src/audio/audio.c src/audio/source.c src/audio/microphone.c)
|
||||||
include_directories(deps/openal-soft/include)
|
|
||||||
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
|
if(EMSCRIPTEN)
|
||||||
set(LOVR_OPENAL OpenAL)
|
include_directories(deps/openal-soft/include)
|
||||||
else()
|
elseif(WIN32)
|
||||||
pkg_search_module(OPENAL openal-soft)
|
add_subdirectory(deps/openal-soft openal)
|
||||||
if (NOT OPENAL_FOUND)
|
include_directories(deps/openal-soft/include)
|
||||||
pkg_search_module(OPENAL openal)
|
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
|
||||||
|
set(LOVR_OPENAL OpenAL)
|
||||||
|
else()
|
||||||
|
pkg_search_module(OPENAL openal-soft)
|
||||||
if (NOT OPENAL_FOUND)
|
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()
|
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()
|
endif()
|
||||||
include_directories(${OPENAL_INCLUDE_DIRS})
|
else()
|
||||||
string(REPLACE ";" " " OPENAL_LDFLAGS_STR "${OPENAL_LDFLAGS}")
|
set(LOVR_AUDIO_SRC src/audio/null.c)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENAL_LDFLAGS_STR}")
|
|
||||||
set(LOVR_OPENAL ${OPENAL_LIBRARIES})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# OpenGL
|
# OpenGL
|
||||||
|
@ -258,9 +267,6 @@ set(LOVR_SRC
|
||||||
src/api/types/transform.c
|
src/api/types/transform.c
|
||||||
src/api/types/vertexData.c
|
src/api/types/vertexData.c
|
||||||
src/api/types/world.c
|
src/api/types/world.c
|
||||||
src/audio/audio.c
|
|
||||||
src/audio/microphone.c
|
|
||||||
src/audio/source.c
|
|
||||||
src/data/audioStream.c
|
src/data/audioStream.c
|
||||||
src/data/blob.c
|
src/data/blob.c
|
||||||
src/data/modelData.c
|
src/data/modelData.c
|
||||||
|
@ -304,6 +310,7 @@ set(LOVR_SRC
|
||||||
src/resources/shaders.c
|
src/resources/shaders.c
|
||||||
src/timer/timer.c
|
src/timer/timer.c
|
||||||
src/util.c
|
src/util.c
|
||||||
|
${LOVR_AUDIO_SRC}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Conditional sources
|
# Conditional sources
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
#include "audio/source.h"
|
#include "audio/source.h"
|
||||||
#include "audio/microphone.h"
|
#include "audio/microphone.h"
|
||||||
#include "lib/vec/vec.h"
|
#include "lib/vec/vec.h"
|
||||||
|
#ifdef USE_OPENAL
|
||||||
#include <AL/al.h>
|
#include <AL/al.h>
|
||||||
#include <AL/alc.h>
|
#include <AL/alc.h>
|
||||||
#include <AL/alext.h>
|
#include <AL/alext.h>
|
||||||
|
#endif
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define MAX_MICROPHONES 8
|
#define MAX_MICROPHONES 8
|
||||||
|
|
||||||
|
#ifdef USE_OPENAL
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool initialized;
|
bool initialized;
|
||||||
ALCdevice* device;
|
ALCdevice* device;
|
||||||
|
@ -20,6 +23,10 @@ typedef struct {
|
||||||
float position[3];
|
float position[3];
|
||||||
float velocity[3];
|
float velocity[3];
|
||||||
} AudioState;
|
} AudioState;
|
||||||
|
#else
|
||||||
|
typedef unsigned int AudioState;
|
||||||
|
typedef unsigned int ALenum;
|
||||||
|
#endif
|
||||||
|
|
||||||
ALenum lovrAudioConvertFormat(int bitDepth, int channelCount);
|
ALenum lovrAudioConvertFormat(int bitDepth, int channelCount);
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "data/soundData.h"
|
#include "data/soundData.h"
|
||||||
|
#if USE_OPENAL
|
||||||
#include <AL/al.h>
|
#include <AL/al.h>
|
||||||
#include <AL/alc.h>
|
#include <AL/alc.h>
|
||||||
|
#endif
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef USE_OPENAL
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Ref ref;
|
Ref ref;
|
||||||
ALCdevice* device;
|
ALCdevice* device;
|
||||||
|
@ -15,6 +18,9 @@ typedef struct {
|
||||||
int bitDepth;
|
int bitDepth;
|
||||||
int channelCount;
|
int channelCount;
|
||||||
} Microphone;
|
} Microphone;
|
||||||
|
#else
|
||||||
|
typedef unsigned int Microphone;
|
||||||
|
#endif
|
||||||
|
|
||||||
Microphone* lovrMicrophoneCreate(const char* name, int samples, int sampleRate, int bitDepth, int channelCount);
|
Microphone* lovrMicrophoneCreate(const char* name, int samples, int sampleRate, int bitDepth, int channelCount);
|
||||||
void lovrMicrophoneDestroy(void* ref);
|
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/audioStream.h"
|
||||||
#include "data/soundData.h"
|
#include "data/soundData.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#ifdef USE_OPENAL
|
||||||
#include <AL/al.h>
|
#include <AL/al.h>
|
||||||
#include <AL/alc.h>
|
#include <AL/alc.h>
|
||||||
|
#endif
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -19,6 +21,7 @@ typedef enum {
|
||||||
UNIT_SAMPLES
|
UNIT_SAMPLES
|
||||||
} TimeUnit;
|
} TimeUnit;
|
||||||
|
|
||||||
|
#ifdef USE_OPENAL
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Ref ref;
|
Ref ref;
|
||||||
SourceType type;
|
SourceType type;
|
||||||
|
@ -28,6 +31,11 @@ typedef struct {
|
||||||
ALuint buffers[SOURCE_BUFFERS];
|
ALuint buffers[SOURCE_BUFFERS];
|
||||||
bool isLooping;
|
bool isLooping;
|
||||||
} Source;
|
} Source;
|
||||||
|
#else
|
||||||
|
typedef struct { Ref ref; } Source;
|
||||||
|
typedef unsigned int ALuint;
|
||||||
|
#define ALC_HRTF_SOFT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
Source* lovrSourceCreateStatic(SoundData* soundData);
|
Source* lovrSourceCreateStatic(SoundData* soundData);
|
||||||
Source* lovrSourceCreateStream(AudioStream* stream);
|
Source* lovrSourceCreateStream(AudioStream* stream);
|
||||||
|
|
Loading…
Reference in New Issue