diff --git a/CMakeLists.txt b/CMakeLists.txt index 0eb20332..a8370125 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,6 +137,7 @@ endif() #-------------------------------------------------- set(REDREAM_SOURCES + src/audio/sdl_backend.c src/core/assert.c src/core/interval_tree.c src/core/list.c diff --git a/src/audio/backend.h b/src/audio/backend.h new file mode 100644 index 00000000..3aa3ffc0 --- /dev/null +++ b/src/audio/backend.h @@ -0,0 +1,12 @@ +#ifndef AUDIO_BACKEND_H +#define AUDIO_BACKEND_H + +struct audio_backend; +struct window; + +void audio_queue(void *data, int samples); + +struct audio_backend *audio_create(struct window *window); +void audio_destroy(struct audio_backend *audio); + +#endif diff --git a/src/audio/sdl_backend.c b/src/audio/sdl_backend.c new file mode 100644 index 00000000..0a839aa1 --- /dev/null +++ b/src/audio/sdl_backend.c @@ -0,0 +1,20 @@ +#include "audio/backend.h" +#include "ui/window.h" + +struct audio_backend { + struct window *window; +}; + +void audio_queue(void *data, int samples) {} + +struct audio_backend *audio_create(struct window *window) { + struct audio_backend *audio = + (struct audio_backend *)calloc(1, sizeof(struct audio_backend)); + audio->window = window; + + return audio; +} + +void audio_destroy(struct audio_backend *audio) { + free(audio); +} diff --git a/src/ui/window.c b/src/ui/window.c index fd58940b..54d54599 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -1,6 +1,7 @@ #include #include #include "ui/window.h" +#include "audio/backend.h" #include "core/assert.h" #include "core/list.h" #include "ui/microprofile.h" @@ -855,6 +856,14 @@ struct window *win_create() { return NULL; } + // setup audio backend + win->audio = audio_create(win); + if (!win->audio) { + LOG_WARNING("Audio backend creation failed"); + win_destroy(win); + return NULL; + } + // setup video backend win->video = video_create(win); if (!win->video) { @@ -895,6 +904,10 @@ void win_destroy(struct window *win) { video_destroy(win->video); } + if (win->audio) { + audio_destroy(win->audio); + } + if (win->handle) { SDL_DestroyWindow(win->handle); } diff --git a/src/ui/window.h b/src/ui/window.h index 67aee959..c145b23e 100644 --- a/src/ui/window.h +++ b/src/ui/window.h @@ -6,6 +6,7 @@ #include "core/list.h" #include "ui/keycode.h" +struct audio_backend; struct imgui; struct microprofile; struct nuklear; @@ -36,6 +37,7 @@ struct window_listener { struct window { // public struct SDL_Window *handle; + struct audio_backend *audio; struct video_backend *video; struct nuklear *nk; struct microprofile *mp; diff --git a/src/video/backend.h b/src/video/backend.h index 2092aa47..96c5d638 100644 --- a/src/video/backend.h +++ b/src/video/backend.h @@ -1,5 +1,5 @@ -#ifndef RENDERER_BACKEND_H -#define RENDERER_BACKEND_H +#ifndef VIDEO_BACKEND_H +#define VIDEO_BACKEND_H #include #include