All checks were successful
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Successful in 1m58s
59 lines
1.8 KiB
C
59 lines
1.8 KiB
C
#include "backend_api.h"
|
|
#include "runtime/dynamic_libs.h"
|
|
#include "runtime/config.h"
|
|
#include "runtime/runtime.h"
|
|
|
|
#include <string.h>
|
|
|
|
|
|
RT_DLLEXPORT rt_render_backend_api g_render_backend;
|
|
|
|
typedef rt_render_backend_api rt_load_renderer_impl_fn(void);
|
|
|
|
#ifdef RT_STATIC_LIB
|
|
extern rt_render_backend_api rtLoadRenderBackendImpl(void);
|
|
#else
|
|
static rt_dynlib _renderer_lib;
|
|
#endif
|
|
|
|
#define DEFAULT_RENDERER "vk"
|
|
|
|
RT_DLLEXPORT rt_result rtLoadRenderBackend(void) {
|
|
rt_load_renderer_impl_fn *LoadRenderBackendImpl = NULL;
|
|
rt_cvar *rt_Renderer = rtGetCVAR("rt_Renderer");
|
|
const char *renderer = DEFAULT_RENDERER;
|
|
if (!rt_Renderer) {
|
|
rtReportError("RENDERER", "rt_Renderer CVAR is not registered. Falling back to '%s'.", DEFAULT_RENDERER);
|
|
}
|
|
else {
|
|
renderer = rt_Renderer->s;
|
|
}
|
|
|
|
#ifdef RT_STATIC_LIB
|
|
RT_UNUSED((void*)renderer);
|
|
LoadRenderBackendImpl = rtLoadRenderBackendImpl;
|
|
#else
|
|
const char *dllname = NULL;
|
|
if (strcmp(renderer, "dx11")==0)
|
|
dllname = RT_DLLNAME("rtdx11");
|
|
else if (strcmp(renderer, "vk") == 0)
|
|
dllname = RTODLLNAME("rtvk");
|
|
else {
|
|
rtReportError("RENDERER", "Invalid renderer selected: %s", rt_Renderer.s);
|
|
return RT_INVALID_VALUE;
|
|
}
|
|
_renderer_lib = rtOpenLib(dllname);
|
|
if (!_renderer_lib) {
|
|
rtReportError("RENDERER", "Unable to load renderer backend: %s", dllname);
|
|
return RT_UNKNOWN_ERROR;
|
|
}
|
|
LoadRenderBackendImpl = (rt_load_renderer_impl_fn *)rtGetSymbol(_renderer_lib, "rtLoadRenderBackendImpl");
|
|
if (!LoadRenderBackendImpl) {
|
|
rtReportError("RENDERER", "Invalid renderer. Could not find rtLoadRendererImpl");
|
|
return RT_UNKNOWN_ERROR;
|
|
}
|
|
#endif
|
|
g_render_backend = LoadRenderBackendImpl();
|
|
return RT_SUCCESS;
|
|
}
|