diff --git a/src/audio/audio.c b/src/audio/audio.c new file mode 100644 index 00000000..55376719 --- /dev/null +++ b/src/audio/audio.c @@ -0,0 +1,26 @@ +#include "audio/audio.h" +#include "util.h" +#include + +static AudioState state; + +void lovrAudioInit() { + ALCdevice* device = alcOpenDevice(NULL); + if (!device) { + error("Unable to open default audio device"); + } + + ALCcontext* context = alcCreateContext(device, NULL); + if (!context || !alcMakeContextCurrent(context) || alcGetError(device) != ALC_NO_ERROR) { + error("Unable to create OpenAL context"); + } + + state.device = device; + state.context = context; +} + +void lovrAudioDestroy() { + alcMakeContextCurrent(NULL); + alcDestroyContext(state.context); + alcCloseDevice(state.device); +} diff --git a/src/audio/audio.h b/src/audio/audio.h new file mode 100644 index 00000000..2706db52 --- /dev/null +++ b/src/audio/audio.h @@ -0,0 +1,15 @@ +#include +#include + +#ifndef LOVR_AUDIO_TYPES +#define LOVR_AUDIO_TYPES + +typedef struct { + ALCdevice* device; + ALCcontext* context; +} AudioState; + +#endif + +void lovrAudioInit(); +void lovrAudioDestroy(); diff --git a/src/lovr.c b/src/lovr.c index 37ebd750..bb5a80cb 100644 --- a/src/lovr.c +++ b/src/lovr.c @@ -1,4 +1,5 @@ #include "lovr.h" +#include "lovr/audio.h" #include "lovr/event.h" #include "lovr/filesystem.h" #include "lovr/graphics.h" @@ -56,6 +57,7 @@ void lovrInit(lua_State* L, int argc, char** argv) { lua_setglobal(L, "lovr"); // Preload modules + luax_preloadmodule(L, "lovr.audio", l_lovrAudioInit); luax_preloadmodule(L, "lovr.event", l_lovrEventInit); luax_preloadmodule(L, "lovr.filesystem", l_lovrFilesystemInit); luax_preloadmodule(L, "lovr.graphics", l_lovrGraphicsInit); @@ -67,6 +69,7 @@ void lovrInit(lua_State* L, int argc, char** argv) { snprintf(buffer, sizeof(buffer), "%s", "local conf = { " " modules = { " + " audio = true, " " event = true, " " graphics = true, " " headset = true, " @@ -85,7 +88,7 @@ void lovrInit(lua_State* L, int argc, char** argv) { " success, err = pcall(lovr.conf, conf) " "end " - "local modules = { 'event', 'graphics', 'headset', 'timer' } " + "local modules = { 'audio', 'event', 'graphics', 'headset', 'timer' } " "for _, module in ipairs(modules) do " " if conf.modules[module] then " " lovr[module] = require('lovr.' .. module) " diff --git a/src/lovr/audio.c b/src/lovr/audio.c new file mode 100644 index 00000000..d74bd9c8 --- /dev/null +++ b/src/lovr/audio.c @@ -0,0 +1,13 @@ +#include "lovr/audio.h" +#include "audio/audio.h" + +const luaL_Reg lovrAudio[] = { + { NULL, NULL } +}; + +int l_lovrAudioInit(lua_State* L) { + lua_newtable(L); + luaL_register(L, NULL, lovrAudio); + lovrAudioInit(); + return 1; +} diff --git a/src/lovr/audio.h b/src/lovr/audio.h new file mode 100644 index 00000000..c144ed9a --- /dev/null +++ b/src/lovr/audio.h @@ -0,0 +1,6 @@ +#include +#include +#include + +extern const luaL_Reg lovrAudio[]; +int l_lovrAudioInit(lua_State* L);