rtengine/src/runtime/renderer_api.h
2023-12-10 23:09:19 +01:00

78 lines
1.8 KiB
C

#ifndef VY_GFX_BACKEND_H
#define VY_GFX_BACKEND_H
/* Backend functions and types. */
#include <stddef.h>
#include "gfx.h"
#include "runtime.h"
#include "assets.h"
#ifdef _WIN32
struct HINSTANCE__;
struct HWND__;
#elif defined(VY_USE_XLIB)
struct _XDisplay;
#endif
struct vy_renderer_init_info_s {
#ifdef _WIN32
struct HINSTANCE__ *hInstance;
struct HWND__ *hWnd;
#elif defined(VY_USE_XLIB)
struct _XDisplay *display;
unsigned long window;
#endif
};
typedef struct {
const char *compute_source;
size_t compute_source_length;
} vy_compute_pipeline_info;
typedef struct {
const char *vertex_source;
size_t vertex_source_length;
const char *fragment_source;
size_t fragment_source_length;
} vy_graphics_pipeline_info;
typedef struct {
vy_uid vertex_shader;
vy_uid fragment_shader;
vy_uid compute_shader;
vy_relptr texture_bindings;
vy_relptr uniform_bindings;
vy_relptr storage_bindings;
uint16_t texture_binding_count;
uint16_t uniform_binding_count;
uint16_t storage_binding_count;
} vy_pipeline_info;
typedef void vy_register_renderer_cvars_fn(void);
typedef vy_result vy_init_renderer_fn(const vy_renderer_init_info *info);
typedef void vy_shutdown_renderer_fn(void);
typedef vy_gfx_pipeline_handle vy_compile_compute_pipeline_fn(const vy_compute_pipeline_info *info);
typedef vy_gfx_pipeline_handle
vy_compile_graphics_pipeline_fn(const vy_graphics_pipeline_info *info);
typedef struct {
vy_register_renderer_cvars_fn *RegisterCVars;
vy_init_renderer_fn *Init;
vy_shutdown_renderer_fn *Shutdown;
vy_compile_compute_pipeline_fn *CompileComputePipeline;
vy_compile_graphics_pipeline_fn *CompileGraphicsPipeline;
} vy_renderer_api;
#define VY_RENDERER_API_FN(name) VY_DLLEXPORT vyRen##name
#ifndef VY_DONT_DEFINE_RENDERER_GLOBAL
extern vy_renderer_api g_renderer;
#endif
#endif