[sdl] sdl backend stub (runs SDL_Init and friends)
This commit is contained in:
parent
344d5ca059
commit
ea96f494ca
4
Makefile
4
Makefile
|
@ -1,5 +1,7 @@
|
||||||
cc = clang
|
cc = clang
|
||||||
|
|
||||||
|
sdl_ldflags = $(shell pkg-config SDL2_ttf sdl2 --libs)
|
||||||
|
|
||||||
cflags = -g -O0 -pthread \
|
cflags = -g -O0 -pthread \
|
||||||
-Wall \
|
-Wall \
|
||||||
-Wshadow \
|
-Wshadow \
|
||||||
|
@ -25,6 +27,6 @@ gen:
|
||||||
racket scripts/enum.rkt src _build
|
racket scripts/enum.rkt src _build
|
||||||
|
|
||||||
${test_bin}: ${srcs} ${hdrs}
|
${test_bin}: ${srcs} ${hdrs}
|
||||||
${cc} ${cflags} ${srcs} -o ${test_bin}
|
${cc} ${cflags} ${srcs} ${sdl_ldflags} -o ${test_bin}
|
||||||
|
|
||||||
.PHONY: all clean gen
|
.PHONY: all clean gen
|
||||||
|
|
|
@ -10,8 +10,10 @@ struct ax_font_h;
|
||||||
|
|
||||||
extern const char* ax__backend_impl_name;
|
extern const char* ax__backend_impl_name;
|
||||||
|
|
||||||
struct ax_backend* ax__backend_new(
|
int ax__backend_new(
|
||||||
struct rgn* init_rgn);
|
struct rgn* init_rgn,
|
||||||
|
struct ax_backend** out_bac,
|
||||||
|
const char** out_err);
|
||||||
|
|
||||||
const char* ax__backend_get_error(
|
const char* ax__backend_get_error(
|
||||||
struct ax_backend* bac);
|
struct ax_backend* bac);
|
||||||
|
|
|
@ -1,20 +1,53 @@
|
||||||
#include "../backend.h"
|
#include "../backend.h"
|
||||||
#include "../util/region.h"
|
#include "../util/region.h"
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <SDL2/SDL_ttf.h>
|
||||||
|
|
||||||
struct ax_backend {
|
struct ax_backend {
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ax__backend_impl_name = "SDL";
|
const char* ax__backend_impl_name = "SDL";
|
||||||
|
|
||||||
struct ax_backend* ax__backend_new(
|
static void shutdown_backend(struct ax_backend* bac);
|
||||||
struct rgn* init_rgn)
|
|
||||||
|
int ax__backend_new(
|
||||||
|
struct rgn* init_rgn,
|
||||||
|
struct ax_backend** out_bac,
|
||||||
|
const char** out_err)
|
||||||
{
|
{
|
||||||
|
const char* err;
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) {
|
||||||
|
err = SDL_GetError();
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
if (TTF_Init() != 0) {
|
||||||
|
err = TTF_GetError();
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
struct ax_backend* bac = ralloc_typed(init_rgn, struct ax_backend, 1);
|
struct ax_backend* bac = ralloc_typed(init_rgn, struct ax_backend, 1);
|
||||||
return bac;
|
rgn_pin(init_rgn, bac, (void*) shutdown_backend);
|
||||||
|
|
||||||
|
if (out_bac != NULL) {
|
||||||
|
*out_bac = bac;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
if (out_err != NULL) {
|
||||||
|
*out_err = err;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ax__backend_get_error(
|
static void shutdown_backend(struct ax_backend* bac)
|
||||||
struct ax_backend* bac)
|
{
|
||||||
|
// printf("bye, from SDL\n");
|
||||||
|
TTF_Quit();
|
||||||
|
SDL_Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* ax__backend_get_error(struct ax_backend* bac)
|
||||||
{
|
{
|
||||||
(void) bac;
|
(void) bac;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -43,5 +43,3 @@ static inline void ax__set_error(struct ax_ctxt* ax, const char* text)
|
||||||
{
|
{
|
||||||
strcpy(ax__make_error_buf(ax, strlen(text) + 1), text);
|
strcpy(ax__make_error_buf(ax, strlen(text) + 1), text);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ax_backend* ax__backend(struct ax_ctxt* ax);
|
|
||||||
|
|
|
@ -49,7 +49,12 @@ void ax__ctxt_init(struct ax_ctxt* ax, struct rgn* init_rgn)
|
||||||
ax->thmb = NULL;
|
ax->thmb = NULL;
|
||||||
ax->sel_theme = NULL;
|
ax->sel_theme = NULL;
|
||||||
|
|
||||||
ax->bac = NULL;
|
const char* err;
|
||||||
|
if (ax__backend_new(init_rgn, &ax->bac, &err) != 0) {
|
||||||
|
ASSERT(0, "initializing %s backend failed: %s",
|
||||||
|
ax__backend_impl_name,
|
||||||
|
err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ax__ctxt_cleanup(struct ax_ctxt* ax)
|
void ax__ctxt_cleanup(struct ax_ctxt* ax)
|
||||||
|
@ -58,20 +63,6 @@ void ax__ctxt_cleanup(struct ax_ctxt* ax)
|
||||||
rgn_cleanup(&ax->err_rgn);
|
rgn_cleanup(&ax->err_rgn);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ax_backend* ax__backend(struct ax_ctxt* ax)
|
|
||||||
{
|
|
||||||
if (ax->bac == NULL) {
|
|
||||||
struct rgn msg_rgn;
|
|
||||||
rgn_init(&msg_rgn, SMALL);
|
|
||||||
ax_log(ax, rsprintf(&msg_rgn, "initializing `%s' backend",
|
|
||||||
ax__backend_impl_name));
|
|
||||||
rgn_cleanup(&msg_rgn);
|
|
||||||
|
|
||||||
ax->bac = ax__backend_new(ax->init_rgn);
|
|
||||||
}
|
|
||||||
return ax->bac;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* API functions :: logging
|
* API functions :: logging
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
@ -106,13 +97,9 @@ void ax_begin_theme(struct ax_ctxt* ax)
|
||||||
void ax_end_theme(struct ax_ctxt* ax, struct ax_theme** out_thm)
|
void ax_end_theme(struct ax_ctxt* ax, struct ax_theme** out_thm)
|
||||||
{
|
{
|
||||||
ASSERT(ax->thmb != NULL, "`ax_end_theme' called while not building a theme");
|
ASSERT(ax->thmb != NULL, "`ax_end_theme' called while not building a theme");
|
||||||
|
|
||||||
struct ax_theme* thm;
|
struct ax_theme* thm;
|
||||||
ax__theme_builder_finish(ax->thmb, ax->init_rgn, &thm);
|
ax__theme_builder_finish(ax->thmb, ax->init_rgn, &thm);
|
||||||
rgn_clear(&ax->thmb_rgn);
|
rgn_clear(&ax->thmb_rgn);
|
||||||
|
|
||||||
(void) ax__backend(ax); // TODO: tell backend to load this theme
|
|
||||||
|
|
||||||
if (out_thm != NULL) {
|
if (out_thm != NULL) {
|
||||||
*out_thm = thm;
|
*out_thm = thm;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue