Browse Source

cleaned up renderer.cpp a bit

master
cinnaboot 8 years ago
parent
commit
6cc979d44c
  1. 16
      src/render_group.cpp
  2. 7
      src/render_group.h
  3. 68
      src/renderer.cpp
  4. 2
      src/util.cpp
  5. 13
      src/util.h

16
src/render_group.cpp

@ -14,16 +14,8 @@
#include "render_group.h"
#include "mesh.h"
gl_render_group*
rgCreateGroup()
{
gl_render_group* rg = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
return rg;
}
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)
rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char * frag_code)
{
glGenVertexArrays(1, &rg->vertex_array_id);
glBindVertexArray(rg->vertex_array_id);
@ -40,9 +32,9 @@ rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char *
glAttachShader(rg->program_id, fragment_shader_id);
glLinkProgram(rg->program_id);
rg->model_matrix_id = glGetUniformLocation(rg->program_id, model_name);
rg->view_matrix_id = glGetUniformLocation(rg->program_id, view_name);
rg->projection_matrix_id = glGetUniformLocation(rg->program_id, projection_name);
rg->model_matrix_id = glGetUniformLocation(rg->program_id, "model");
rg->view_matrix_id = glGetUniformLocation(rg->program_id, "view");
rg->projection_matrix_id = glGetUniformLocation(rg->program_id, "projection");
rg->normal_matrix_id = glGetUniformLocation(rg->program_id, "normal_matrix");
glDetachShader(rg->program_id, vertex_shader_id);

7
src/render_group.h

@ -37,12 +37,7 @@ 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);
bool rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char * frag_code);
void rgInitGLBufferObject(gl_buffer* buf_obj, uint len, GLenum usage, GLenum target, GLfloat data[]);

68
src/renderer.cpp

@ -29,6 +29,8 @@
#define CAMERA_Z_CLAMP_ANGLE 85.f
//#define PROJ_TYPE ORTHOGRAPHIC
#define PROJ_TYPE PERSPECTIVE
#define DEFAULT_VERTEX_SHADER_FILE "../data/default.vs"
#define DEFAULT_FRAGMENT_SHADER_FILE "../data/default.fs"
const char * LINE_FRAGMENT_SHADER_CODE =
"#version 330 core\n"
@ -82,11 +84,10 @@ struct camera
gl_matrix_info g_scene_matrices;
// TODO: maybe don't allocate memory here, at least before initRenderer()
gl_render_group* g_filled_hex_render_group = rgCreateGroup();
gl_render_group* g_hex_line_render_group = rgCreateGroup();
gl_render_group* g_debug_render_group = rgCreateGroup();
gl_render_group* g_entity_render_group = rgCreateGroup();
gl_render_group* g_filled_hex_render_group;
gl_render_group* g_hex_line_render_group;
gl_render_group* g_debug_render_group;
gl_render_group* g_entity_render_group;
camera g_camera;
@ -223,37 +224,19 @@ initRenderer(SDL_Handles &handles, v2i vpDims)
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
// TODO: Line drawing quality seems to depend on graphics driver whims
// maybe try using textured billboards instead?
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
SDL_GL_SetSwapInterval(1); // vsync
SDL_GetCurrentDisplayMode(0, &handles.currentDisplayMode);
handles.window =
SDL_CreateWindow("hexgame", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
vpDims.x, vpDims.y, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
if (handles.window == NULL)
{
// TODO: log error SDL_GetError()
if (handles.window == NULL) {
LOG(ERROR) << SDL_GetError() << "\n";
return false;
}
handles.glContext = SDL_GL_CreateContext(handles.window);
// TODO: decide on extension library
gl3wInit();
#if 0
// Initialize GLEW
// glewExperimental is only needed in GLEW <= 1.13.0
// we can require version 2.0.0+
//glewExperimental = true; // Needed for core profile
GLenum err = glewInit();
if (err != GLEW_OK) {
LOG(ERROR) << "Failed to initilize GLEW" << glewGetErrorString(err) << "\n";
return false;
}
#endif
gl3wInit(); // TODO: decide on extension library
LOG(INFO) << "opengl vendor: " << glGetString(GL_VENDOR) << "\n";
LOG(INFO)<< "opengl renderer: " << glGetString(GL_RENDERER) << "\n";
@ -278,21 +261,24 @@ initRenderer(SDL_Handles &handles, v2i vpDims)
// hide VRAM debug messages
glDebugMessageControl(GL_DONT_CARE, 33361, GL_DONT_CARE, 0, 0, GL_FALSE);
const char* vs_code = utilDumpTextFile("../data/default.vs");
const char* fs_code = utilDumpTextFile("../data/default.fs");
if (!rgInitShaderProgram(
g_filled_hex_render_group, vs_code, fs_code,
"model", "view", "projection")
|| !rgInitShaderProgram(
g_hex_line_render_group, vs_code, LINE_FRAGMENT_SHADER_CODE,
"model", "view", "projection")
|| !rgInitShaderProgram(
g_debug_render_group, vs_code, DEBUG_FRAGMENT_SHADER_CODE,
"model", "view", "projection")
|| !rgInitShaderProgram(
g_entity_render_group, vs_code, fs_code,
"model", "view", "projection"))
g_filled_hex_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
g_hex_line_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
g_debug_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
g_entity_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
if (!g_filled_hex_render_group || !g_hex_line_render_group
|| !g_debug_render_group || !g_entity_render_group)
{
return false;
}
const char* vs_code = utilDumpTextFile(DEFAULT_VERTEX_SHADER_FILE);
const char* fs_code = utilDumpTextFile(DEFAULT_FRAGMENT_SHADER_FILE);
if (!rgInitShaderProgram(g_filled_hex_render_group, vs_code, fs_code)
|| !rgInitShaderProgram(g_hex_line_render_group, vs_code, LINE_FRAGMENT_SHADER_CODE)
|| !rgInitShaderProgram(g_debug_render_group, vs_code, DEBUG_FRAGMENT_SHADER_CODE)
|| !rgInitShaderProgram(g_entity_render_group, vs_code, fs_code))
{
return false;
}

2
src/util.cpp

@ -2,6 +2,8 @@
#include <cstdlib>
#include <cstdio>
#include "aixlog.hpp"
#include "util.h"
const uint MAX_FILESIZE = 2 * 1024 * 1024; // 2MB

13
src/util.h

@ -64,19 +64,6 @@ SafeTruncateToInt32(int64 val)
return (int32) val;
}
// TODO: can't implement this before removing aixlog because of global name clashes
#if 0
enum utilLogLevel {
DEBUG,
INFO,
WARNING,
ERROR,
ENUM_COUNT
};
void utilLog(utilLogError lvl, char* message);
#endif
char * utilDumpTextFile(const char* filename);
void utilSafeFree(void* mem);

Loading…
Cancel
Save