mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-03 04:53:35 +00:00
make Source:setSpatial a constructor option instead
This commit is contained in:
parent
8403c9bd70
commit
407742e8b5
|
@ -49,15 +49,16 @@ static int l_lovrAudioSetVolume(lua_State* L) {
|
||||||
static int l_lovrAudioNewSource(lua_State* L) {
|
static int l_lovrAudioNewSource(lua_State* L) {
|
||||||
Source* source = NULL;
|
Source* source = NULL;
|
||||||
SoundData* soundData = luax_totype(L, 1, SoundData);
|
SoundData* soundData = luax_totype(L, 1, SoundData);
|
||||||
|
bool spatial = lua_isboolean(L, 2) ? lua_toboolean(L, 2) : true;
|
||||||
|
|
||||||
if (soundData) {
|
if (soundData) {
|
||||||
source = lovrSourceCreate(soundData);
|
source = lovrSourceCreate(soundData, spatial);
|
||||||
} else {
|
} else {
|
||||||
Blob* blob = luax_readblob(L, 1, "Source");
|
Blob* blob = luax_readblob(L, 1, "Source");
|
||||||
soundData = lovrSoundDataCreateFromFile(blob, false);
|
soundData = lovrSoundDataCreateFromFile(blob, false);
|
||||||
lovrRelease(Blob, blob);
|
lovrRelease(Blob, blob);
|
||||||
|
|
||||||
source = lovrSourceCreate(soundData);
|
source = lovrSourceCreate(soundData, spatial);
|
||||||
lovrRelease(SoundData, soundData);
|
lovrRelease(SoundData, soundData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,13 +57,6 @@ static int l_lovrSourceGetSpatial(lua_State* L) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int l_lovrSourceSetSpatial(lua_State* L) {
|
|
||||||
Source* source = luax_checktype(L, 1, Source);
|
|
||||||
bool spatial = lua_toboolean(L, 2);
|
|
||||||
lovrSourceSetSpatial(source, spatial);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int l_lovrSourceSetPose(lua_State *L) {
|
static int l_lovrSourceSetPose(lua_State *L) {
|
||||||
Source* source = luax_checktype(L, 1, Source);
|
Source* source = luax_checktype(L, 1, Source);
|
||||||
float position[4], orientation[4];
|
float position[4], orientation[4];
|
||||||
|
@ -128,7 +121,6 @@ const luaL_Reg lovrSource[] = {
|
||||||
{ "getVolume", l_lovrSourceGetVolume },
|
{ "getVolume", l_lovrSourceGetVolume },
|
||||||
{ "setVolume", l_lovrSourceSetVolume },
|
{ "setVolume", l_lovrSourceSetVolume },
|
||||||
{ "getSpatial", l_lovrSourceGetSpatial },
|
{ "getSpatial", l_lovrSourceGetSpatial },
|
||||||
{ "setSpatial", l_lovrSourceSetSpatial },
|
|
||||||
{ "setPose", l_lovrSourceSetPose },
|
{ "setPose", l_lovrSourceSetPose },
|
||||||
{ "getDuration", l_lovrSourceGetDuration },
|
{ "getDuration", l_lovrSourceGetDuration },
|
||||||
{ "getTime", l_lovrSourceGetTime },
|
{ "getTime", l_lovrSourceGetTime },
|
||||||
|
|
|
@ -226,17 +226,7 @@ void lovrAudioSetListenerPose(float position[4], float orientation[4])
|
||||||
|
|
||||||
// Source
|
// Source
|
||||||
|
|
||||||
Source* lovrSourceCreate(SoundData* sound) {
|
static void _lovrSourceAssignConverter(Source *source) {
|
||||||
Source* source = lovrAlloc(Source);
|
|
||||||
source->sound = sound;
|
|
||||||
lovrRetain(source->sound);
|
|
||||||
source->volume = 1.f;
|
|
||||||
lovrSourceSetSpatial(source, true);
|
|
||||||
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _lovrSourceAssignConverter(Source *source) {
|
|
||||||
source->converter = NULL;
|
source->converter = NULL;
|
||||||
for (size_t i = 0; i < state.converters.length; i++) {
|
for (size_t i = 0; i < state.converters.length; i++) {
|
||||||
ma_data_converter* converter = &state.converters.data[i];
|
ma_data_converter* converter = &state.converters.data[i];
|
||||||
|
@ -263,6 +253,19 @@ void _lovrSourceAssignConverter(Source *source) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Source* lovrSourceCreate(SoundData* sound, bool spatial) {
|
||||||
|
Source* source = lovrAlloc(Source);
|
||||||
|
source->sound = sound;
|
||||||
|
lovrRetain(source->sound);
|
||||||
|
source->volume = 1.f;
|
||||||
|
|
||||||
|
source->spatial = spatial;
|
||||||
|
source->output_channel_count = source->spatial ? 1 : 2;
|
||||||
|
_lovrSourceAssignConverter(source);
|
||||||
|
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
void lovrSourceDestroy(void* ref) {
|
void lovrSourceDestroy(void* ref) {
|
||||||
Source* source = ref;
|
Source* source = ref;
|
||||||
lovrRelease(SoundData, source->sound);
|
lovrRelease(SoundData, source->sound);
|
||||||
|
@ -318,12 +321,6 @@ bool lovrSourceGetSpatial(Source *source) {
|
||||||
return source->spatial;
|
return source->spatial;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lovrSourceSetSpatial(Source *source, bool spatial) {
|
|
||||||
source->spatial = spatial;
|
|
||||||
source->output_channel_count = source->spatial ? 1 : 2;
|
|
||||||
_lovrSourceAssignConverter(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]) {
|
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]) {
|
||||||
mat4_identity(source->pose);
|
mat4_identity(source->pose);
|
||||||
mat4_translate(source->pose, position[0], position[1], position[2]);
|
mat4_translate(source->pose, position[0], position[1], position[2]);
|
||||||
|
|
|
@ -36,7 +36,7 @@ float lovrAudioGetVolume(void);
|
||||||
void lovrAudioSetVolume(float volume);
|
void lovrAudioSetVolume(float volume);
|
||||||
void lovrAudioSetListenerPose(float position[4], float orientation[4]);
|
void lovrAudioSetListenerPose(float position[4], float orientation[4]);
|
||||||
|
|
||||||
Source* lovrSourceCreate(struct SoundData* soundData);
|
Source* lovrSourceCreate(struct SoundData* soundData, bool spatial);
|
||||||
void lovrSourceDestroy(void* ref);
|
void lovrSourceDestroy(void* ref);
|
||||||
void lovrSourcePlay(Source* source);
|
void lovrSourcePlay(Source* source);
|
||||||
void lovrSourcePause(Source* source);
|
void lovrSourcePause(Source* source);
|
||||||
|
@ -47,7 +47,6 @@ void lovrSourceSetLooping(Source* source, bool isLooping);
|
||||||
float lovrSourceGetVolume(Source* source);
|
float lovrSourceGetVolume(Source* source);
|
||||||
void lovrSourceSetVolume(Source* source, float volume);
|
void lovrSourceSetVolume(Source* source, float volume);
|
||||||
bool lovrSourceGetSpatial(Source *source);
|
bool lovrSourceGetSpatial(Source *source);
|
||||||
void lovrSourceSetSpatial(Source *source, bool spatial);
|
|
||||||
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]);
|
void lovrSourceSetPose(Source *source, float position[4], float orientation[4]);
|
||||||
uint32_t lovrSourceGetTime(Source* source);
|
uint32_t lovrSourceGetTime(Source* source);
|
||||||
void lovrSourceSetTime(Source* source, uint32_t sample);
|
void lovrSourceSetTime(Source* source, uint32_t sample);
|
||||||
|
|
Loading…
Reference in a new issue