Basic audio boilerplate;

This commit is contained in:
bjorn 2017-01-02 19:09:33 -08:00
parent 724e0dd6eb
commit 062bdda684
5 changed files with 64 additions and 1 deletions

26
src/audio/audio.c Normal file
View File

@ -0,0 +1,26 @@
#include "audio/audio.h"
#include "util.h"
#include <stdlib.h>
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);
}

15
src/audio/audio.h Normal file
View File

@ -0,0 +1,15 @@
#include <OpenAL/al.h>
#include <OpenAL/alc.h>
#ifndef LOVR_AUDIO_TYPES
#define LOVR_AUDIO_TYPES
typedef struct {
ALCdevice* device;
ALCcontext* context;
} AudioState;
#endif
void lovrAudioInit();
void lovrAudioDestroy();

View File

@ -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) "

13
src/lovr/audio.c Normal file
View File

@ -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;
}

6
src/lovr/audio.h Normal file
View File

@ -0,0 +1,6 @@
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
extern const luaL_Reg lovrAudio[];
int l_lovrAudioInit(lua_State* L);