You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.8 KiB
59 lines
1.8 KiB
|
|
// 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<hex_info>* 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); |
|
|
|
|