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 "render_group.h"
#include "mesh.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 bool
rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char * frag_code, 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)
{ {
glGenVertexArrays(1, &rg->vertex_array_id); glGenVertexArrays(1, &rg->vertex_array_id);
glBindVertexArray(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); glAttachShader(rg->program_id, fragment_shader_id);
glLinkProgram(rg->program_id); glLinkProgram(rg->program_id);
rg->model_matrix_id = glGetUniformLocation(rg->program_id, model_name); rg->model_matrix_id = glGetUniformLocation(rg->program_id, "model");
rg->view_matrix_id = glGetUniformLocation(rg->program_id, view_name); rg->view_matrix_id = glGetUniformLocation(rg->program_id, "view");
rg->projection_matrix_id = glGetUniformLocation(rg->program_id, projection_name); rg->projection_matrix_id = glGetUniformLocation(rg->program_id, "projection");
rg->normal_matrix_id = glGetUniformLocation(rg->program_id, "normal_matrix"); rg->normal_matrix_id = glGetUniformLocation(rg->program_id, "normal_matrix");
glDetachShader(rg->program_id, vertex_shader_id); 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_index_buffer gl_index_buffer;
typedef struct gl_render_group gl_render_group; typedef struct gl_render_group gl_render_group;
gl_render_group* rgCreateGroup(); bool rgInitShaderProgram(gl_render_group* rg, const char * vertex_code, const char * frag_code);
// 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, uint len, GLenum usage, GLenum target, GLfloat data[]); 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 CAMERA_Z_CLAMP_ANGLE 85.f
//#define PROJ_TYPE ORTHOGRAPHIC //#define PROJ_TYPE ORTHOGRAPHIC
#define PROJ_TYPE PERSPECTIVE #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 = const char * LINE_FRAGMENT_SHADER_CODE =
"#version 330 core\n" "#version 330 core\n"
@ -82,11 +84,10 @@ struct camera
gl_matrix_info g_scene_matrices; 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;
gl_render_group* g_filled_hex_render_group = rgCreateGroup(); gl_render_group* g_hex_line_render_group;
gl_render_group* g_hex_line_render_group = rgCreateGroup(); gl_render_group* g_debug_render_group;
gl_render_group* g_debug_render_group = rgCreateGroup(); gl_render_group* g_entity_render_group;
gl_render_group* g_entity_render_group = rgCreateGroup();
camera g_camera; 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_STENCIL_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_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_GL_SetSwapInterval(1); // vsync
SDL_GetCurrentDisplayMode(0, &handles.currentDisplayMode); SDL_GetCurrentDisplayMode(0, &handles.currentDisplayMode);
handles.window = handles.window =
SDL_CreateWindow("hexgame", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_CreateWindow("hexgame", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
vpDims.x, vpDims.y, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE); vpDims.x, vpDims.y, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
if (handles.window == NULL) if (handles.window == NULL) {
{ LOG(ERROR) << SDL_GetError() << "\n";
// TODO: log error SDL_GetError()
return false; return false;
} }
handles.glContext = SDL_GL_CreateContext(handles.window); handles.glContext = SDL_GL_CreateContext(handles.window);
gl3wInit(); // TODO: decide on extension library
// 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
LOG(INFO) << "opengl vendor: " << glGetString(GL_VENDOR) << "\n"; LOG(INFO) << "opengl vendor: " << glGetString(GL_VENDOR) << "\n";
LOG(INFO)<< "opengl renderer: " << glGetString(GL_RENDERER) << "\n"; LOG(INFO)<< "opengl renderer: " << glGetString(GL_RENDERER) << "\n";
@ -278,21 +261,24 @@ initRenderer(SDL_Handles &handles, v2i vpDims)
// hide VRAM debug messages // hide VRAM debug messages
glDebugMessageControl(GL_DONT_CARE, 33361, GL_DONT_CARE, 0, 0, GL_FALSE); glDebugMessageControl(GL_DONT_CARE, 33361, GL_DONT_CARE, 0, 0, GL_FALSE);
const char* vs_code = utilDumpTextFile("../data/default.vs"); g_filled_hex_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
const char* fs_code = utilDumpTextFile("../data/default.fs"); 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));
if (!rgInitShaderProgram( g_entity_render_group = (gl_render_group *) std::calloc(1, sizeof(gl_render_group));
g_filled_hex_render_group, vs_code, fs_code,
"model", "view", "projection") if (!g_filled_hex_render_group || !g_hex_line_render_group
|| !rgInitShaderProgram( || !g_debug_render_group || !g_entity_render_group)
g_hex_line_render_group, vs_code, LINE_FRAGMENT_SHADER_CODE, {
"model", "view", "projection") return false;
|| !rgInitShaderProgram( }
g_debug_render_group, vs_code, DEBUG_FRAGMENT_SHADER_CODE,
"model", "view", "projection") const char* vs_code = utilDumpTextFile(DEFAULT_VERTEX_SHADER_FILE);
|| !rgInitShaderProgram( const char* fs_code = utilDumpTextFile(DEFAULT_FRAGMENT_SHADER_FILE);
g_entity_render_group, vs_code, fs_code,
"model", "view", "projection")) 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; return false;
} }

2
src/util.cpp

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

13
src/util.h

@ -64,19 +64,6 @@ SafeTruncateToInt32(int64 val)
return (int32) 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); char * utilDumpTextFile(const char* filename);
void utilSafeFree(void* mem); void utilSafeFree(void* mem);

Loading…
Cancel
Save