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

// 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);