|
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
|