diff --git a/src/render_group.cpp b/src/render_group.cpp index 41defc9..db67cb8 100644 --- a/src/render_group.cpp +++ b/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); diff --git a/src/render_group.h b/src/render_group.h index 33cabbc..b1224bd 100644 --- a/src/render_group.h +++ b/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[]); diff --git a/src/renderer.cpp b/src/renderer.cpp index 315cf9a..3c36c32 100644 --- a/src/renderer.cpp +++ b/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"; @@ -277,22 +260,25 @@ initRenderer(SDL_Handles &handles, v2i vpDims) glDebugMessageCallback((GLDEBUGPROC) openglDebugCallback, 0); // hide VRAM debug messages glDebugMessageControl(GL_DONT_CARE, 33361, GL_DONT_CARE, 0, 0, GL_FALSE); + + 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("../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")) + 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; } diff --git a/src/util.cpp b/src/util.cpp index c54ee67..1a49539 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -2,6 +2,8 @@ #include #include +#include "aixlog.hpp" + #include "util.h" const uint MAX_FILESIZE = 2 * 1024 * 1024; // 2MB diff --git a/src/util.h b/src/util.h index c106e3c..e278a88 100644 --- a/src/util.h +++ b/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);