#include "RuntimeModule.h" #include "Globals.h" #include "RenderModule.h" struct Renderer; // // Module // struct module_state { Renderer *renderer; }; static struct module_state *module_init() { gLog ("%s %s called", __FILE__, __FUNCTION__); assert (gWindow != nullptr && "Cannot initialize renderer module without gWindow!"); module_state *state = (module_state*) malloc(sizeof(*state)); state->renderer = new Renderer(); assert (state->renderer != nullptr); return state; } template static void module_serialize ( struct module_state *state, Serializer* serializer) { // // get the state from the serializer // Camera* camera = &gRenderer->cameras[gRenderer->activeCameraIndex]; // assert (camera != nullptr); // SerializeBool (*serializer, "protot.RenderModule.draw_floor", gRenderer->drawFloor); // SerializeBool (*serializer, "protot.RenderModule.draw_skybox", gRenderer->drawSkybox); // SerializeBool (*serializer, "protot.RenderModule.debug_enabled", gRenderer->drawDebug); // SerializeVec3 (*serializer, "protot.RenderModule.camera.eye", camera->eye); // SerializeVec3 (*serializer, "protot.RenderModule.camera.poi", camera->poi); } static void module_finalize(struct module_state *state) { gLog ("%s %s called (state %p)", __FILE__, __FUNCTION__, state); assert (state->renderer != nullptr); delete state->renderer; free(state); } static void module_reload(struct module_state *state, void *read_serializer) { gLog ("%s %s called (state %p)", __FILE__, __FUNCTION__, state); assert (gWindow != nullptr); gLog ("Renderer initialize"); assert (state != nullptr); state->renderer->Initialize(100, 100); gRenderer = state->renderer; // load the state of the module if (read_serializer != nullptr) { module_serialize(state, static_cast(read_serializer)); } } static void module_unload(struct module_state *state, void* write_serializer) { // serialize the state of the module if (write_serializer != nullptr) { module_serialize(state, static_cast(write_serializer)); } gRenderer = nullptr; state->renderer->Shutdown(); gLog ("RenderModule unload called"); } static bool module_step(struct module_state *state, float dt) { int width, height; assert (gWindow != nullptr); state->renderer->RenderGui(); state->renderer->RenderGl(); return true; } extern "C" { const struct module_api MODULE_API = { .init = module_init, .reload = module_reload, .step = module_step, .unload = module_unload, .finalize = module_finalize }; } // // Camera // void Camera::updateMatrices() { assert(false); } // // Camera // void Renderer::Initialize(int width, int height) { assert(false); } void Renderer::Shutdown() { assert(false); } void Renderer::RenderGl() { assert(false); } void Renderer::RenderGui() { assert(false); } void Renderer::Resize (int width, int height) { assert(false); }