#pragma once #include #include "entity.h" //#include "hexgame.h" #include "util.h" struct Entity; // 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* buffer = nullptr; }; struct render_object { gl_buffer vertex_buffer; gl_buffer normal_buffer; gl_buffer color_buffer; gl_index_buffer index_buffer; }; struct rg_shader_program { GLuint program_id = 0; GLuint model_matrix_id = 0; GLuint view_matrix_id = 0; GLuint projection_matrix_id = 0; GLuint normal_matrix_id = 0; GLuint vertex_array_id = 0; }; struct render_group { uint num_objects = 0; render_object** render_objects = nullptr; rg_shader_program shader; bool use_normals = false; bool draw_indexed = false; GLenum draw_mode = GL_TRIANGLES; }; bool rgInitShaderProgram(rg_shader_program& sp, const char * vertex_code, const char * frag_code); bool rgInitEntity(Entity* e); // TODO: fix this function to use just buffers instead of hexes //void rgFillColorBuffer(GLfloat buf[], int len, std::vector* hexes); void rgDraw(render_group* rg, glm::mat4 model_matrix, glm::mat4 view_matrix, glm::mat4 projection_matrix, glm::vec3 light_position, GLuint light_id, bool update_vertex_data = false); void rgFree(render_group* rg);