From a6147d65957ef795665eb0785e9a2a88668a7d85 Mon Sep 17 00:00:00 2001 From: georgerbr Date: Thu, 13 Aug 2015 10:54:16 -0300 Subject: [PATCH 1/4] Calls to glUniform*() wrongly assume uniform variable is at location 0 These changes fix problems on 4 of the examples (see below) with the following hardware & drivers on Windows 8.1 Pro x64: - NVIDIA GeForce GTX 650 Ti with driver 353.30: - Intel HD 4400 with driver 10.18.14.4206 (OpenGL 4.3). - hdrexposure NVIDIA: no output, and the following error: GL_INVALID_OPERATION error generated. Wrong component type or count. - ktxview NVIDIA: GL_INVALID_OPERATION error generated. Wrong component type or count. Intel: no output, and the following error: Error has been generated. GL error GL_INVALID_OPERATION: GL error GL_INVALID_OPERATION: mismatched type setting uniform "s" in program 1, "" using shaders, 2, "", 3, "" - tesssubdivmodes NVIDIA: no output, and the following error: GL_INVALID_OPERATION error generated. Wrong component type or count. - wrapmodes NVIDIA: wrong output, and the following error: GL_INVALID_OPERATION error generated. Wrong component type or count. --- src/hdrexposure/hdrexposure.cpp | 4 +++- src/ktxview/ktxview.cpp | 4 +++- src/tesssubdivmodes/tesssubdivmodes.cpp | 6 ++++-- src/wrapmodes/wrapmodes.cpp | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/hdrexposure/hdrexposure.cpp b/src/hdrexposure/hdrexposure.cpp index f5b74a2..864821c 100644 --- a/src/hdrexposure/hdrexposure.cpp +++ b/src/hdrexposure/hdrexposure.cpp @@ -121,6 +121,7 @@ class hdrexposure_app : public sb7::application glAttachShader(program, fs); glLinkProgram(program); + exposure_location = glGetUniformLocation(program, "exposure"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -142,7 +143,7 @@ class hdrexposure_app : public sb7::application glBindTexture(GL_TEXTURE_2D, texture); glUseProgram(program); glViewport(0, 0, info.windowWidth, info.windowHeight); - glUniform1f(0, exposure); + glUniform1f(exposure_location, exposure); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); char buffer[1024]; @@ -174,6 +175,7 @@ class hdrexposure_app : public sb7::application GLuint program; GLuint vao; float exposure; + GLint exposure_location; sb7::text_overlay overlay; }; diff --git a/src/ktxview/ktxview.cpp b/src/ktxview/ktxview.cpp index 4507199..9558de4 100644 --- a/src/ktxview/ktxview.cpp +++ b/src/ktxview/ktxview.cpp @@ -111,6 +111,7 @@ class simpletexture_app : public sb7::application glAttachShader(program, fs); glLinkProgram(program); + exposure_location = glGetUniformLocation(program, "exposure"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -130,7 +131,7 @@ class simpletexture_app : public sb7::application glUseProgram(program); glViewport(0, 0, info.windowWidth, info.windowHeight); - glUniform1f(0, (float)(sin(t) * 16.0 + 16.0)); + glUniform1f(exposure_location, (float)(sin(t) * 16.0 + 16.0)); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -138,6 +139,7 @@ class simpletexture_app : public sb7::application GLuint texture; GLuint program; GLuint vao; + GLint exposure_location; }; DECLARE_MAIN(simpletexture_app); diff --git a/src/tesssubdivmodes/tesssubdivmodes.cpp b/src/tesssubdivmodes/tesssubdivmodes.cpp index 6106e08..fbc19bf 100644 --- a/src/tesssubdivmodes/tesssubdivmodes.cpp +++ b/src/tesssubdivmodes/tesssubdivmodes.cpp @@ -180,6 +180,7 @@ class tesssubdivmodes_app : public sb7::application glAttachShader(program[i], tes); glAttachShader(program[i], fs); glLinkProgram(program[i]); + tess_level_location[i] = glGetUniformLocation(program[i], "tess_level"); glDeleteShader(vs); glDeleteShader(tcs); @@ -200,8 +201,8 @@ class tesssubdivmodes_app : public sb7::application glClearBufferfv(GL_COLOR, 0, black); glUseProgram(program[program_index]); - // glUniform1f(0, sinf((float)currentTime) * 5.0f + 6.0f); - glUniform1f(0, 5.3f); + // glUniform1f(tess_level_location[program_index], sinf((float)currentTime) * 5.0f + 6.0f); + glUniform1f(tess_level_location[program_index], 5.3f); glDrawArrays(GL_PATCHES, 0, 4); } @@ -232,6 +233,7 @@ class tesssubdivmodes_app : public sb7::application GLuint program[3]; int program_index; GLuint vao; + GLint tess_level_location[3]; }; DECLARE_MAIN(tesssubdivmodes_app) diff --git a/src/wrapmodes/wrapmodes.cpp b/src/wrapmodes/wrapmodes.cpp index 3c1946c..c91b7e1 100644 --- a/src/wrapmodes/wrapmodes.cpp +++ b/src/wrapmodes/wrapmodes.cpp @@ -96,6 +96,7 @@ class wrapmodes_app : public sb7::application glAttachShader(program, fs); glLinkProgram(program); + offset_location = glGetUniformLocation(program, "offset"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -127,7 +128,7 @@ class wrapmodes_app : public sb7::application for (int i = 0; i < 4; i++) { - glUniform2fv(0, 1, &offsets[i * 2]); + glUniform2fv(offset_location, 1, &offsets[i * 2]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapmodes[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapmodes[i]); @@ -139,6 +140,7 @@ class wrapmodes_app : public sb7::application GLuint texture; GLuint program; GLuint vao; + GLint offset_location; }; DECLARE_MAIN(wrapmodes_app); From 972130bf0e3baff353ec7aec39920c82cad80feb Mon Sep 17 00:00:00 2001 From: georgerbr Date: Thu, 13 Aug 2015 11:46:07 -0300 Subject: [PATCH 2/4] Replace key codes that only exist on numeric keypads Several of the examples let the user adjust parameters by means of the GLFW_KEY_KP_ADD (keypad +) and GLFW_KEY_KP_SUBTRACT (keypad -) keys, but these keys are not available on keyboards that lack a keypad, e.g. a number of laptop keyboards and tenkeyless keyboards. As a result, users of these keyboards can not adjust parameters in those examples. In order to allow users of said keyboards to adjust the parameters on those examples, this change modifies onKey() in the following manner: - Parameter values are decreased by pressing the GLFW_KEY_MINUS key (-) instead of GLFW_KEY_KP_SUBTRACT (keypad -) - Parameter values are increased by pressing the GLFW_KEY_EQUAL key (=) instead of GLFW_KEY_KP_ADD (keypad +). The rationale for this is that, on US and UK keyboard layout, you hold SHIFT and strike = to type +. --- src/dispmap/dispmap.cpp | 4 ++-- src/gsquads/gsquads.cpp | 4 ++-- src/hdrbloom/hdrbloom.cpp | 4 ++-- src/hdrexposure/hdrexposure.cpp | 4 ++-- src/hdrtonemap/hdrtonemap.cpp | 4 ++-- src/raytracer/raytracer.cpp | 4 ++-- src/springmass/springmass.cpp | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/dispmap/dispmap.cpp b/src/dispmap/dispmap.cpp index f2846d3..6d41c34 100644 --- a/src/dispmap/dispmap.cpp +++ b/src/dispmap/dispmap.cpp @@ -123,9 +123,9 @@ class dispmap_app : public sb7::application { switch (key) { - case GLFW_KEY_KP_ADD: dmap_depth += 0.1f; + case GLFW_KEY_EQUAL: dmap_depth += 0.1f; break; - case GLFW_KEY_KP_SUBTRACT: dmap_depth -= 0.1f; + case GLFW_KEY_MINUS: dmap_depth -= 0.1f; break; case 'F': enable_fog = !enable_fog; break; diff --git a/src/gsquads/gsquads.cpp b/src/gsquads/gsquads.cpp index 4db12ec..72ac0f0 100644 --- a/src/gsquads/gsquads.cpp +++ b/src/gsquads/gsquads.cpp @@ -140,10 +140,10 @@ class gsquads_app : public sb7::application case '2': mode = key - '1'; break; - case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: vid_offset++; break; - case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: vid_offset--; break; case 'P': paused = !paused; diff --git a/src/hdrbloom/hdrbloom.cpp b/src/hdrbloom/hdrbloom.cpp index bd5b693..03b9e54 100644 --- a/src/hdrbloom/hdrbloom.cpp +++ b/src/hdrbloom/hdrbloom.cpp @@ -311,10 +311,10 @@ class hdrbloom_app : public sb7::application case 'P': paused = !paused; break; - case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; - case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/hdrexposure/hdrexposure.cpp b/src/hdrexposure/hdrexposure.cpp index 864821c..4bd6d35 100644 --- a/src/hdrexposure/hdrexposure.cpp +++ b/src/hdrexposure/hdrexposure.cpp @@ -161,10 +161,10 @@ class hdrexposure_app : public sb7::application switch (key) { - case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; - case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/hdrtonemap/hdrtonemap.cpp b/src/hdrtonemap/hdrtonemap.cpp index f07db59..c69bcdc 100644 --- a/src/hdrtonemap/hdrtonemap.cpp +++ b/src/hdrtonemap/hdrtonemap.cpp @@ -144,10 +144,10 @@ class hdrtonemap_app : public sb7::application case 'M': mode = (mode + 1) % 3; break; - case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; - case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp index ba37d42..c054884 100644 --- a/src/raytracer/raytracer.cpp +++ b/src/raytracer/raytracer.cpp @@ -446,12 +446,12 @@ void raytracer_app::onKey(int key, int action) { switch (key) { - case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: max_depth++; if (max_depth > MAX_RECURSION_DEPTH) max_depth = MAX_RECURSION_DEPTH; break; - case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: max_depth--; if (max_depth < 1) max_depth = 1; diff --git a/src/springmass/springmass.cpp b/src/springmass/springmass.cpp index 66d11a0..94a7536 100644 --- a/src/springmass/springmass.cpp +++ b/src/springmass/springmass.cpp @@ -229,9 +229,9 @@ class springmass_app : public sb7::application break; case 'P': draw_points = !draw_points; break; - case GLFW_KEY_KP_ADD: iterations_per_frame++; + case GLFW_KEY_EQUAL: iterations_per_frame++; break; - case GLFW_KEY_KP_SUBTRACT: iterations_per_frame--; + case GLFW_KEY_MINUS: iterations_per_frame--; break; } } From 9639eccf78a22fe4e5ac5eba732a606958e4f8c8 Mon Sep 17 00:00:00 2001 From: georgerbr Date: Thu, 13 Aug 2015 21:31:38 -0300 Subject: [PATCH 3/4] Revert "Replace key codes that only exist on numeric keypads" This reverts commit 972130bf0e3baff353ec7aec39920c82cad80feb. --- src/dispmap/dispmap.cpp | 4 ++-- src/gsquads/gsquads.cpp | 4 ++-- src/hdrbloom/hdrbloom.cpp | 4 ++-- src/hdrexposure/hdrexposure.cpp | 4 ++-- src/hdrtonemap/hdrtonemap.cpp | 4 ++-- src/raytracer/raytracer.cpp | 4 ++-- src/springmass/springmass.cpp | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/dispmap/dispmap.cpp b/src/dispmap/dispmap.cpp index 6d41c34..f2846d3 100644 --- a/src/dispmap/dispmap.cpp +++ b/src/dispmap/dispmap.cpp @@ -123,9 +123,9 @@ class dispmap_app : public sb7::application { switch (key) { - case GLFW_KEY_EQUAL: dmap_depth += 0.1f; + case GLFW_KEY_KP_ADD: dmap_depth += 0.1f; break; - case GLFW_KEY_MINUS: dmap_depth -= 0.1f; + case GLFW_KEY_KP_SUBTRACT: dmap_depth -= 0.1f; break; case 'F': enable_fog = !enable_fog; break; diff --git a/src/gsquads/gsquads.cpp b/src/gsquads/gsquads.cpp index 72ac0f0..4db12ec 100644 --- a/src/gsquads/gsquads.cpp +++ b/src/gsquads/gsquads.cpp @@ -140,10 +140,10 @@ class gsquads_app : public sb7::application case '2': mode = key - '1'; break; - case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_ADD: vid_offset++; break; - case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: vid_offset--; break; case 'P': paused = !paused; diff --git a/src/hdrbloom/hdrbloom.cpp b/src/hdrbloom/hdrbloom.cpp index 03b9e54..bd5b693 100644 --- a/src/hdrbloom/hdrbloom.cpp +++ b/src/hdrbloom/hdrbloom.cpp @@ -311,10 +311,10 @@ class hdrbloom_app : public sb7::application case 'P': paused = !paused; break; - case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_ADD: exposure *= 1.1f; break; - case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: exposure /= 1.1f; break; } diff --git a/src/hdrexposure/hdrexposure.cpp b/src/hdrexposure/hdrexposure.cpp index 4bd6d35..864821c 100644 --- a/src/hdrexposure/hdrexposure.cpp +++ b/src/hdrexposure/hdrexposure.cpp @@ -161,10 +161,10 @@ class hdrexposure_app : public sb7::application switch (key) { - case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_ADD: exposure *= 1.1f; break; - case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: exposure /= 1.1f; break; } diff --git a/src/hdrtonemap/hdrtonemap.cpp b/src/hdrtonemap/hdrtonemap.cpp index c69bcdc..f07db59 100644 --- a/src/hdrtonemap/hdrtonemap.cpp +++ b/src/hdrtonemap/hdrtonemap.cpp @@ -144,10 +144,10 @@ class hdrtonemap_app : public sb7::application case 'M': mode = (mode + 1) % 3; break; - case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_ADD: exposure *= 1.1f; break; - case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: exposure /= 1.1f; break; } diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp index c054884..ba37d42 100644 --- a/src/raytracer/raytracer.cpp +++ b/src/raytracer/raytracer.cpp @@ -446,12 +446,12 @@ void raytracer_app::onKey(int key, int action) { switch (key) { - case GLFW_KEY_EQUAL: + case GLFW_KEY_KP_ADD: max_depth++; if (max_depth > MAX_RECURSION_DEPTH) max_depth = MAX_RECURSION_DEPTH; break; - case GLFW_KEY_MINUS: + case GLFW_KEY_KP_SUBTRACT: max_depth--; if (max_depth < 1) max_depth = 1; diff --git a/src/springmass/springmass.cpp b/src/springmass/springmass.cpp index 94a7536..66d11a0 100644 --- a/src/springmass/springmass.cpp +++ b/src/springmass/springmass.cpp @@ -229,9 +229,9 @@ class springmass_app : public sb7::application break; case 'P': draw_points = !draw_points; break; - case GLFW_KEY_EQUAL: iterations_per_frame++; + case GLFW_KEY_KP_ADD: iterations_per_frame++; break; - case GLFW_KEY_MINUS: iterations_per_frame--; + case GLFW_KEY_KP_SUBTRACT: iterations_per_frame--; break; } } From e5f467d2a7c344039ab9332ea8b689dd010f1fc6 Mon Sep 17 00:00:00 2001 From: georgerbr Date: Thu, 13 Aug 2015 21:51:30 -0300 Subject: [PATCH 4/4] Allow parameters to be adjusted with +,- on keyboards without numeric keypads Several of the examples let the user adjust parameters by means of the GLFW_KEY_KP_ADD (keypad +) and GLFW_KEY_KP_SUBTRACT (keypad -) keys, but these keys are not available on keyboards that lack a keypad, e.g. a number of laptop keyboards and tenkeyless keyboards. As a result, users of these keyboards can not adjust parameters in those examples. In order to allow users of said keyboards to adjust the parameters on those examples, this change modifies onKey() in the following manner: - Parameter values are decreased, in addition to GLFW_KEY_KP_SUBTRACT (keypad -), by pressing the GLFW_KEY_MINUS key (-) - Parameter values are increased, in addition to GLFW_KEY_KP_ADD (keypad +), by pressing the GLFW_KEY_EQUAL key (=) . The rationale for this is that, on US and UK keyboard layouts, you hold SHIFT and strike = to type +. --- src/dispmap/dispmap.cpp | 8 ++++++-- src/gsquads/gsquads.cpp | 2 ++ src/hdrbloom/hdrbloom.cpp | 2 ++ src/hdrexposure/hdrexposure.cpp | 2 ++ src/hdrtonemap/hdrtonemap.cpp | 2 ++ src/raytracer/raytracer.cpp | 2 ++ src/springmass/springmass.cpp | 8 ++++++-- 7 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/dispmap/dispmap.cpp b/src/dispmap/dispmap.cpp index f2846d3..99410ae 100644 --- a/src/dispmap/dispmap.cpp +++ b/src/dispmap/dispmap.cpp @@ -123,9 +123,13 @@ class dispmap_app : public sb7::application { switch (key) { - case GLFW_KEY_KP_ADD: dmap_depth += 0.1f; + case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: + dmap_depth += 0.1f; break; - case GLFW_KEY_KP_SUBTRACT: dmap_depth -= 0.1f; + case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: + dmap_depth -= 0.1f; break; case 'F': enable_fog = !enable_fog; break; diff --git a/src/gsquads/gsquads.cpp b/src/gsquads/gsquads.cpp index 4db12ec..42905a9 100644 --- a/src/gsquads/gsquads.cpp +++ b/src/gsquads/gsquads.cpp @@ -141,9 +141,11 @@ class gsquads_app : public sb7::application mode = key - '1'; break; case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: vid_offset++; break; case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: vid_offset--; break; case 'P': paused = !paused; diff --git a/src/hdrbloom/hdrbloom.cpp b/src/hdrbloom/hdrbloom.cpp index bd5b693..5fc2fc1 100644 --- a/src/hdrbloom/hdrbloom.cpp +++ b/src/hdrbloom/hdrbloom.cpp @@ -312,9 +312,11 @@ class hdrbloom_app : public sb7::application paused = !paused; break; case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/hdrexposure/hdrexposure.cpp b/src/hdrexposure/hdrexposure.cpp index 864821c..4fc316e 100644 --- a/src/hdrexposure/hdrexposure.cpp +++ b/src/hdrexposure/hdrexposure.cpp @@ -162,9 +162,11 @@ class hdrexposure_app : public sb7::application switch (key) { case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/hdrtonemap/hdrtonemap.cpp b/src/hdrtonemap/hdrtonemap.cpp index f07db59..2b4883e 100644 --- a/src/hdrtonemap/hdrtonemap.cpp +++ b/src/hdrtonemap/hdrtonemap.cpp @@ -145,9 +145,11 @@ class hdrtonemap_app : public sb7::application mode = (mode + 1) % 3; break; case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: exposure *= 1.1f; break; case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: exposure /= 1.1f; break; } diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp index ba37d42..53b94b7 100644 --- a/src/raytracer/raytracer.cpp +++ b/src/raytracer/raytracer.cpp @@ -447,11 +447,13 @@ void raytracer_app::onKey(int key, int action) switch (key) { case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: max_depth++; if (max_depth > MAX_RECURSION_DEPTH) max_depth = MAX_RECURSION_DEPTH; break; case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: max_depth--; if (max_depth < 1) max_depth = 1; diff --git a/src/springmass/springmass.cpp b/src/springmass/springmass.cpp index 66d11a0..f1b6660 100644 --- a/src/springmass/springmass.cpp +++ b/src/springmass/springmass.cpp @@ -229,9 +229,13 @@ class springmass_app : public sb7::application break; case 'P': draw_points = !draw_points; break; - case GLFW_KEY_KP_ADD: iterations_per_frame++; + case GLFW_KEY_KP_ADD: + case GLFW_KEY_EQUAL: + iterations_per_frame++; break; - case GLFW_KEY_KP_SUBTRACT: iterations_per_frame--; + case GLFW_KEY_KP_SUBTRACT: + case GLFW_KEY_MINUS: + iterations_per_frame--; break; } }