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.
 
 
 
 

68 lines
1.4 KiB

#pragma once
#include <GL/gl3w.h>
#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<hex_info>* 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);