// TODO: put type info into seperate header from hexgame.h //#include "types.h" #include "hexgame.h" // TODO: can these structs be used as opaque pointers? struct gl_buffer { GLuint buffer_id = 0; size_t buffer_len = 0; // NOTE: number of elements in buffer GLfloat* buffer = nullptr; }; struct gl_index_buffer { GLuint buffer_id = 0; size_t buffer_len = 0; uint* indices = nullptr; }; struct gl_render_group { // NOTE: For now the renderFrame function will assume these are the same size gl_buffer vertex_buffer; gl_buffer color_buffer; gl_index_buffer index_buffer; GLuint program_id = 0; GLuint model_matrix_id = 0; GLuint view_matrix_id = 0; GLuint projection_matrix_id = 0; GLuint vertex_array_id = 0; }; typedef struct gl_buffer gl_buffer; typedef struct gl_index_buffer gl_index_buffer; typedef struct gl_render_group gl_render_group; gl_render_group* rgCreateGroup(); // NOTE: model_name, view_name, and projection_name should match the matrix variable // names in the shader source bool rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char * frag_code, const char* model_name, const char* view_name, const char* projection_name); void rgInitGLBufferObject(gl_buffer* buf_obj, int len, GLenum usage, GLenum target, GLfloat data[]); bool rgInitEntity(gl_render_group* rg, Entity* e); void rgFillColorBuffer(GLfloat buf[], int len, std::vector* hexes); void rgDraw(gl_render_group* rg, GLenum draw_mode, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, bool update_vertex_data = false); void rgDrawIndexed(gl_render_group* rg, GLenum draw_mode, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, bool update_vertex_data = false); void rgFree(gl_render_group* rg);