#pragma once #if defined (_WIN32) #include #else #include #endif #include #include #include "camera.h" #include "entity.h" #include "lights.h" #include "util.h" #include "shader_program.h" struct SDL_Handles { SDL_Window *window; SDL_GLContext glContext; SDL_DisplayMode currentDisplayMode; }; // NOTE: array of entities rendered with the same shader program struct render_group { // TODO: also needs to be resizable entity* entities; uint entity_count; shader_wrapper shader; }; struct render_state { glm::vec2 viewport_dims; SDL_Handles handles; camera cam; util_RGBA clear_col; // TODO: this really needs to be a resizable array, or linked list, or // ...gasp, std::vector render_group* render_groups; uint render_group_count; default_shader_program* default_shader; simple_shader_program* simple_shader; light_group* lights; }; render_state* renInit(const char* title = "Tangerine", glm::vec2 viewport_dims = glm::vec2(1280, 720)); void renShutdown(render_state* rs); render_group* renAllocateGroup(uint entity_count, shader_wrapper shader); typedef void (*frame_callback_fn) (render_state*); void renDoRenderLoop(render_state* rs, uint framerate = 60, frame_callback_fn cb_func = nullptr); void renRenderFrame(render_state* rs); bool renAddLight(render_state* rs, glm::vec3 pos = glm::vec3(0, 0, 0), glm::vec3 color = glm::vec3(1, 1, 1), float intensity = 1.0);