taisei/test/renderer/test_renderer.h

96 lines
1.9 KiB
C

#include "taisei.h"
#include "renderer/api.h"
#include "events.h"
#include "log.h"
#include "util/compat.h"
#include "video.h"
#include "config.h"
#include <locale.h>
static void test_init_log(void) {
log_init(LOG_ALL);
log_add_output(LOG_ALL, SDL_RWFromFP(stderr, false), log_formatter_console);
}
static void test_init_sdl(void) {
mem_install_sdl_callbacks();
if(SDL_Init(SDL_INIT_EVENTS) < 0) {
log_fatal("SDL_Init() failed: %s", SDL_GetError());
}
events_init();
}
static void test_init_basic(void) {
setlocale(LC_ALL, "C");
test_init_log();
test_init_sdl();
}
static ShaderObject *test_renderer_load_glsl(ShaderStage stage, const char *src) {
// TODO: This is mostly copypasted from resource/shader_object; add a generic API for this
ShaderSource s = {
.content = (char*)src,
.content_size = strlen(src),
.stage = stage,
.lang = {
.lang = SHLANG_GLSL,
.glsl.version = { 330, GLSL_PROFILE_CORE }
},
};
ShaderLangInfo altlang = { SHLANG_INVALID };
if(!r_shader_language_supported(&s.lang, &altlang)) {
if(altlang.lang == SHLANG_INVALID) {
log_fatal("Shading language not supported by backend");
}
log_warn("Shading language not supported by backend, attempting to translate");
assert(r_shader_language_supported(&altlang, NULL));
spirv_init_compiler();
ShaderSource newsrc;
bool result = spirv_transpile(&s, &newsrc, &(SPIRVTranspileOptions) {
.lang = &altlang,
.optimization_level = SPIRV_OPTIMIZE_NONE,
.filename = "<embedded>",
});
if(!result) {
log_fatal("Shader translation failed");
}
s = newsrc;
}
ShaderObject *obj = r_shader_object_compile(&s);
if(!obj) {
log_fatal("Failed to compile shader");
}
if(s.content != src) {
shader_free_source(&s);
}
return obj;
}
static void test_init_renderer(void) {
test_init_basic();
config_set_int(CONFIG_VSYNC, 1);
config_set_int(CONFIG_VID_RESIZABLE, 1);
video_init(&(VideoInitParams) {
.width = 800,
.height = 600,
});
}