From 3b5a8aecd3c495d227f34a6b39536fc4bc4461aa Mon Sep 17 00:00:00 2001 From: Shariq Shah Date: Tue, 1 Oct 2019 11:52:59 +1000 Subject: [PATCH] Moved #version definition to c code and added config option for enabling/disabling vsync --- assets/shaders/blinn_phong.frag | 2 +- assets/shaders/blinn_phong.vert | 2 +- assets/shaders/debug.frag | 2 -- assets/shaders/debug.vert | 2 -- assets/shaders/deferred_light.frag | 2 -- assets/shaders/deferred_light.vert | 2 -- assets/shaders/fbo.frag | 2 -- assets/shaders/fbo.vert | 2 -- assets/shaders/gui.frag | 2 -- assets/shaders/gui.vert | 2 -- assets/shaders/im_geom.frag | 2 -- assets/shaders/im_geom.vert | 2 -- assets/shaders/phong.frag | 2 +- assets/shaders/phong.vert | 2 +- assets/shaders/phongTextured.frag | 2 +- assets/shaders/quad.frag | 2 -- assets/shaders/quad.vert | 2 -- assets/shaders/simple.frag | 2 -- assets/shaders/simple.vert | 2 -- assets/shaders/sprite.frag | 2 -- assets/shaders/sprite.vert | 2 -- assets/shaders/unshaded.frag | 2 +- assets/shaders/unshaded.vert | 2 +- assets/shaders/unshaded_textured.frag | 2 +- assets/shaders/unshaded_textured.vert | 2 +- assets/shaders/version.glsl | 1 - src/game/shader.c | 19 +++++++------------ src/system/config_vars.c | 1 + src/system/main.c | 13 +++++++------ src/system/platform.c | 5 +++-- src/system/platform.h | 2 +- todo.txt | 6 +++++- 32 files changed, 33 insertions(+), 64 deletions(-) diff --git a/assets/shaders/blinn_phong.frag b/assets/shaders/blinn_phong.frag index cee6ddf..25a8a51 100755 --- a/assets/shaders/blinn_phong.frag +++ b/assets/shaders/blinn_phong.frag @@ -1,4 +1,4 @@ -//include fog.glsl common.glsl commonFrag.glsl version.glsl +//include fog.glsl common.glsl commonFrag.glsl struct Light { diff --git a/assets/shaders/blinn_phong.vert b/assets/shaders/blinn_phong.vert index 483762e..d99b6c6 100755 --- a/assets/shaders/blinn_phong.vert +++ b/assets/shaders/blinn_phong.vert @@ -1,4 +1,4 @@ -//include commonVert.glsl version.glsl +//include commonVert.glsl void main() { diff --git a/assets/shaders/debug.frag b/assets/shaders/debug.frag index 5d7cbac..1c58c44 100755 --- a/assets/shaders/debug.frag +++ b/assets/shaders/debug.frag @@ -1,5 +1,3 @@ -//include version.glsl - uniform vec4 debug_color; out vec4 frag_color; diff --git a/assets/shaders/debug.vert b/assets/shaders/debug.vert index 4485493..d98a23f 100755 --- a/assets/shaders/debug.vert +++ b/assets/shaders/debug.vert @@ -1,5 +1,3 @@ -//include version.glsl - uniform mat4 mvp; in vec3 vPosition; diff --git a/assets/shaders/deferred_light.frag b/assets/shaders/deferred_light.frag index 1650bd4..45c74dd 100755 --- a/assets/shaders/deferred_light.frag +++ b/assets/shaders/deferred_light.frag @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 uv; out vec4 frag_color; diff --git a/assets/shaders/deferred_light.vert b/assets/shaders/deferred_light.vert index 781a7ae..2c542f6 100755 --- a/assets/shaders/deferred_light.vert +++ b/assets/shaders/deferred_light.vert @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 vPosition; in vec2 vUV; diff --git a/assets/shaders/fbo.frag b/assets/shaders/fbo.frag index eeabe08..38be6eb 100755 --- a/assets/shaders/fbo.frag +++ b/assets/shaders/fbo.frag @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 uv; out vec4 frag_color; diff --git a/assets/shaders/fbo.vert b/assets/shaders/fbo.vert index 67c8018..adca47b 100755 --- a/assets/shaders/fbo.vert +++ b/assets/shaders/fbo.vert @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 vPosition; in vec2 vUV; diff --git a/assets/shaders/gui.frag b/assets/shaders/gui.frag index 2805126..c8e3f1d 100755 --- a/assets/shaders/gui.frag +++ b/assets/shaders/gui.frag @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 uv; in vec4 color; diff --git a/assets/shaders/gui.vert b/assets/shaders/gui.vert index 8554ea7..7cbe66a 100755 --- a/assets/shaders/gui.vert +++ b/assets/shaders/gui.vert @@ -1,5 +1,3 @@ -//include version.glsl - uniform mat4 proj_mat; in vec2 vPosition; diff --git a/assets/shaders/im_geom.frag b/assets/shaders/im_geom.frag index 2fe3e0c..6986ea9 100755 --- a/assets/shaders/im_geom.frag +++ b/assets/shaders/im_geom.frag @@ -1,5 +1,3 @@ -//include version.glsl - uniform vec4 geom_color; out vec4 frag_color; diff --git a/assets/shaders/im_geom.vert b/assets/shaders/im_geom.vert index 4485493..d98a23f 100755 --- a/assets/shaders/im_geom.vert +++ b/assets/shaders/im_geom.vert @@ -1,5 +1,3 @@ -//include version.glsl - uniform mat4 mvp; in vec3 vPosition; diff --git a/assets/shaders/phong.frag b/assets/shaders/phong.frag index 4749ad5..c29c3b4 100755 --- a/assets/shaders/phong.frag +++ b/assets/shaders/phong.frag @@ -1,4 +1,4 @@ -//include fog.glsl phongCommon.glsl common.glsl commonFrag.glsl version.glsl +//include fog.glsl phongCommon.glsl common.glsl commonFrag.glsl void main() { diff --git a/assets/shaders/phong.vert b/assets/shaders/phong.vert index 0a38aed..dcf43c9 100755 --- a/assets/shaders/phong.vert +++ b/assets/shaders/phong.vert @@ -1,4 +1,4 @@ -//include commonVert.glsl version.glsl +//include commonVert.glsl void main() { diff --git a/assets/shaders/phongTextured.frag b/assets/shaders/phongTextured.frag index 782cccf..99ca42f 100755 --- a/assets/shaders/phongTextured.frag +++ b/assets/shaders/phongTextured.frag @@ -1,4 +1,4 @@ -//include fog.glsl phongCommon.glsl common.glsl commonFrag.glsl version.glsl +//include fog.glsl phongCommon.glsl common.glsl commonFrag.glsl uniform sampler2D sampler; diff --git a/assets/shaders/quad.frag b/assets/shaders/quad.frag index 6676166..35db2e4 100755 --- a/assets/shaders/quad.frag +++ b/assets/shaders/quad.frag @@ -1,5 +1,3 @@ -#version 130 - in vec2 uv; out vec4 fragColor; diff --git a/assets/shaders/quad.vert b/assets/shaders/quad.vert index 214b206..05f61e2 100755 --- a/assets/shaders/quad.vert +++ b/assets/shaders/quad.vert @@ -1,5 +1,3 @@ -#version 130 - in vec2 vPosition; in vec2 vUV; diff --git a/assets/shaders/simple.frag b/assets/shaders/simple.frag index 0d1d45b..4bd43c2 100755 --- a/assets/shaders/simple.frag +++ b/assets/shaders/simple.frag @@ -1,5 +1,3 @@ -#version 130 - uniform sampler2D sampler; in vec2 uv; diff --git a/assets/shaders/simple.vert b/assets/shaders/simple.vert index bc97c35..a5a39ae 100755 --- a/assets/shaders/simple.vert +++ b/assets/shaders/simple.vert @@ -1,5 +1,3 @@ -#version 130 - in vec3 vPosition; in vec2 vUV; diff --git a/assets/shaders/sprite.frag b/assets/shaders/sprite.frag index ebd1fa9..674d011 100755 --- a/assets/shaders/sprite.frag +++ b/assets/shaders/sprite.frag @@ -1,5 +1,3 @@ -//include version.glsl - in vec2 uv; in vec4 color; diff --git a/assets/shaders/sprite.vert b/assets/shaders/sprite.vert index 2ed83c9..5442803 100755 --- a/assets/shaders/sprite.vert +++ b/assets/shaders/sprite.vert @@ -1,5 +1,3 @@ -//include version.glsl - uniform mat4 mvp; in vec2 vPosition; diff --git a/assets/shaders/unshaded.frag b/assets/shaders/unshaded.frag index 4bd7180..12b1241 100755 --- a/assets/shaders/unshaded.frag +++ b/assets/shaders/unshaded.frag @@ -1,4 +1,4 @@ -//include fog.glsl common.glsl commonFrag.glsl version.glsl +//include fog.glsl common.glsl commonFrag.glsl uniform sampler2D diffuse_texture; diff --git a/assets/shaders/unshaded.vert b/assets/shaders/unshaded.vert index 483762e..d99b6c6 100755 --- a/assets/shaders/unshaded.vert +++ b/assets/shaders/unshaded.vert @@ -1,4 +1,4 @@ -//include commonVert.glsl version.glsl +//include commonVert.glsl void main() { diff --git a/assets/shaders/unshaded_textured.frag b/assets/shaders/unshaded_textured.frag index c8e32f4..61dc489 100755 --- a/assets/shaders/unshaded_textured.frag +++ b/assets/shaders/unshaded_textured.frag @@ -1,4 +1,4 @@ -//include fog.glsl commonFrag.glsl common.glsl version.glsl +//include fog.glsl commonFrag.glsl common.glsl uniform sampler2D sampler; diff --git a/assets/shaders/unshaded_textured.vert b/assets/shaders/unshaded_textured.vert index 483762e..fa8678a 100755 --- a/assets/shaders/unshaded_textured.vert +++ b/assets/shaders/unshaded_textured.vert @@ -1,4 +1,4 @@ -//include commonVert.glsl version.glsl +//include commonVert.glsl void main() { diff --git a/assets/shaders/version.glsl b/assets/shaders/version.glsl index 2911713..e69de29 100755 --- a/assets/shaders/version.glsl +++ b/assets/shaders/version.glsl @@ -1 +0,0 @@ -#version 330 \ No newline at end of file diff --git a/src/game/shader.c b/src/game/shader.c index 14c21bd..1de0da1 100755 --- a/src/game/shader.c +++ b/src/game/shader.c @@ -13,10 +13,11 @@ #include #include +#define MAX_INCLUDE_LINE_LEN 256 + static uint* shader_list; static int* empty_indices; - -#define MAX_INCLUDE_LINE_LEN 256 +static const char* GLSL_VERSION_STR = "#version 330\n"; void debug_print_shader(const char* shaderText) { @@ -93,17 +94,11 @@ int shader_create(const char* vert_shader_name, const char* frag_shader_name) vert_source = run_preprocessor(vert_source); frag_source = run_preprocessor(frag_source); - GLint v_size = (GLint)strlen(vert_source); - GLint f_size = (GLint)strlen(frag_source); - - const char* vert_sourcePtr = vert_source; - const char* frag_sourcePtr = frag_source; - - const GLint* vert_size = &v_size; - const GLint* frag_size = &f_size; + const char* vert_sourcePtr[2] = { GLSL_VERSION_STR, vert_source }; + const char* frag_sourcePtr[2] = { GLSL_VERSION_STR, frag_source }; - GL_CHECK(glShaderSource(vert_shader, 1, &vert_sourcePtr, vert_size)); - GL_CHECK(glShaderSource(frag_shader, 1, &frag_sourcePtr, frag_size)); + GL_CHECK(glShaderSource(vert_shader, 2, &vert_sourcePtr, NULL)); + GL_CHECK(glShaderSource(frag_shader, 2, &frag_sourcePtr, NULL)); GL_CHECK(glCompileShader(vert_shader)); GL_CHECK(glCompileShader(frag_shader)); diff --git a/src/system/config_vars.c b/src/system/config_vars.c index adb1cd2..776f329 100755 --- a/src/system/config_vars.c +++ b/src/system/config_vars.c @@ -15,6 +15,7 @@ void config_vars_init(struct Hashmap* cvars) /* Initialize with default values incase there is no config file */ hashmap_int_set(cvars, "render_width", 1280); hashmap_int_set(cvars, "render_height", 720); + hashmap_bool_set(cvars, "vsync_enabled", true); hashmap_int_set(cvars, "fog_mode", 0); hashmap_vec3_setf(cvars, "fog_color", 0.9f, 0.2f, 0.2f); hashmap_float_set(cvars, "fog_density", 0.1f); diff --git a/src/system/main.c b/src/system/main.c index ceb1269..822aadd 100755 --- a/src/system/main.c +++ b/src/system/main.c @@ -76,11 +76,12 @@ bool init(void) return false; } - int width = hashmap_int_get(cvars, "render_width"); - int height = hashmap_int_get(cvars, "render_height"); - int msaa = hashmap_bool_get(cvars, "msaa_enabled"); - int msaa_levels = hashmap_int_get(cvars, "msaa_levels"); - window = window_create("Symmetry", width, height, msaa, msaa_levels); + int width = hashmap_int_get(cvars, "render_width"); + int height = hashmap_int_get(cvars, "render_height"); + int msaa = hashmap_bool_get(cvars, "msaa_enabled"); + int msaa_levels = hashmap_int_get(cvars, "msaa_levels"); + bool vsync = hashmap_bool_get(cvars, "vsync_enabled"); + window = window_create("Symmetry", width, height, msaa, msaa_levels, vsync); if(!window) { log_error("main:init", "Window creation failed"); @@ -101,4 +102,4 @@ void cleanup(void) io_file_cleanup(); log_message("Program exiting!"); log_cleanup(); -} \ No newline at end of file +} diff --git a/src/system/platform.c b/src/system/platform.c index 8a98f39..365d17f 100755 --- a/src/system/platform.c +++ b/src/system/platform.c @@ -18,7 +18,7 @@ struct Window bool is_fullscreen; }; -struct Window* window_create(const char* title, int width, int height, int msaa, int msaa_levels) +struct Window* window_create(const char* title, int width, int height, int msaa, int msaa_levels, bool vsync) { struct Window* new_window = NULL; if(!new_window) @@ -83,7 +83,8 @@ struct Window* window_create(const char* title, int width, int height, int msaa, SDL_Window* current_window = SDL_GL_GetCurrentWindow(); SDL_GLContext current_context = SDL_GL_GetCurrentContext(); SDL_GL_MakeCurrent((SDL_Window*)new_window->sdl_window, new_window->gl_context); - SDL_GL_SetSwapInterval(0); /* 0: Vsync disabled, 1: Vsync enabled*/ + + SDL_GL_SetSwapInterval(vsync ? 1 : 0); /* 0: Vsync disabled, 1: Vsync enabled*/ if(current_window && current_context) SDL_GL_MakeCurrent(current_window, current_context); int major = 0, minor = 0; diff --git a/src/system/platform.h b/src/system/platform.h index 1dbfb97..388cad0 100755 --- a/src/system/platform.h +++ b/src/system/platform.h @@ -14,7 +14,7 @@ enum Video_Drivers_Linux // Window Related functions struct Window; -struct Window* window_create(const char* title, int width, int height, int msaa, int msaa_levels); +struct Window* window_create(const char* title, int width, int height, int msaa, int msaa_levels, bool vsync); void window_destroy(struct Window* window); void window_show(struct Window* window); void window_hide(struct Window* window); diff --git a/todo.txt b/todo.txt index 5a353a9..88b9971 100644 --- a/todo.txt +++ b/todo.txt @@ -1,4 +1,7 @@ Todo: + - Move MAX_LIGHTS shader definition from inside the shader to be dynamically defined and added to the shader code when it is compiled + to reduce inconsistencies + - Fix bug with blinn shader reaching maximum uniform number on mac - Fix Deployment target issue in xcode build on macos - Implement/Fix copying libraries to executable folder after build completes on mac os - Fix symlink issue in genie for macos which interferes with fopen operations @@ -116,6 +119,7 @@ Bugs: - Fix hang on fullscreen toggle - Fix axis lines not aligning with grid lines - Fix arc angles resetting when rotating + - Fix shader preprocessor failing when the file in //include directive is empty Done: * Input @@ -310,4 +314,4 @@ Done: * Added editor shortcut key to delete selected entity * Console command to read/write entity to file and add it to scene * Fix editor camera right-click behaviour - + * Moved #version definition from shaders to c code for easier control