From 4e9eab1b2b5d04e81063e43fffea283ff17dc16e Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Wed, 11 Jul 2018 00:11:45 +0200 Subject: [PATCH 1/8] Add some ifdefs to add emscripten specific params and includes --- examples/imgui_impl_opengl3.cpp | 83 ++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 6 deletions(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index b1db4cbeb26f..9647417c2e82 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -37,7 +37,7 @@ // 3.2 150 "#version 150" // 3.3 330 // 4.0 400 -// 4.1 410 +// 4.1 410 "version 410 core" // 4.2 420 // 4.3 430 // ES 2.0 100 "#version 100" @@ -52,7 +52,12 @@ #include "imgui_impl_opengl3.h" #include -#include // This example is using gl3w to access OpenGL functions. You may use another OpenGL loader/header such as: glew, glext, glad, glLoadGen, etc. +#ifdef __EMSCRIPTEN_BUILD__ + #define GLFW_INCLUDE_ES3 + #include +#else + #include // This example is using gl3w to access OpenGL functions. You may use another OpenGL loader/header such as: glew, glext, glad, glLoadGen, etc. +#endif //#include //#include //#include @@ -109,7 +114,9 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); - GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + #ifndef __EMSCRIPTEN_BUILD__ + GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + #endif GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box); GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb); @@ -130,7 +137,9 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glEnable(GL_SCISSOR_TEST); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + #ifndef __EMSCRIPTEN_BUILD__ + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + #endif // Setup viewport, orthographic projection matrix // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. @@ -216,7 +225,9 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); - glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + #ifndef __EMSCRIPTEN_BUILD__ + glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + #endif glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]); } @@ -335,6 +346,35 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects() " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" "}\n"; + const GLchar* vertex_shader_glsl_300_es = + "precision mediump float;\n" + "uniform mat4 ProjMtx;\n" + "in vec2 Position;\n" + "in vec2 UV;\n" + "in vec4 Color;\n" + "out vec2 Frag_UV;\n" + "out vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + + const GLchar* vertex_shader_glsl_410_core = + "layout (location = 0) in vec2 Position;\n" + "layout (location = 1) in vec2 UV;\n" + "layout (location = 2) in vec4 Color;\n" + "uniform mat4 ProjMtx;\n" + "out vec2 Frag_UV;\n" + "out vec4 Frag_Color;\n" + "void main()\n" + "{\n" + " Frag_UV = UV;\n" + " Frag_Color = Color;\n" + " gl_Position = ProjMtx * vec4(Position.xy,0,1);\n" + "}\n"; + const GLchar* fragment_shader_glsl_120 = "#ifdef GL_ES\n" " precision mediump float;\n" @@ -357,10 +397,41 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects() " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" "}\n"; + const GLchar* fragment_shader_glsl_300_es = + "precision mediump float;\n" + "uniform sampler2D Texture;\n" + "in vec2 Frag_UV;\n" + "in vec4 Frag_Color;\n" + "out vec4 Out_Color;\n" + "void main()\n" + "{\n" + " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" + "}\n"; + + const GLchar* fragment_shader_glsl_410_core = + "in vec2 Frag_UV;\n" + "in vec4 Frag_Color;\n" + "uniform sampler2D Texture;\n" + "layout (location = 0) out vec4 Out_Color;\n" + "void main()\n" + "{\n" + " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" + "}\n"; + // Select shaders matching our GLSL versions const GLchar* vertex_shader = NULL; const GLchar* fragment_shader = NULL; - if (glsl_version < 130) + if(glsl_version == 410) + { + vertex_shader = vertex_shader_glsl_410_core; + fragment_shader = fragment_shader_glsl_410_core; + } + else if(glsl_version == 300) + { + vertex_shader = vertex_shader_glsl_300_es; + fragment_shader = fragment_shader_glsl_300_es; + } + else if (glsl_version < 130) { vertex_shader = vertex_shader_glsl_120; fragment_shader = fragment_shader_glsl_120; From 56862842602e93dc1f545a2d3d150328c2830aaa Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Wed, 11 Jul 2018 02:18:38 +0200 Subject: [PATCH 2/8] Update imgui_impl_opengl3.cpp --- examples/imgui_impl_opengl3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 9647417c2e82..7b42b0f694a3 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -37,7 +37,7 @@ // 3.2 150 "#version 150" // 3.3 330 // 4.0 400 -// 4.1 410 "version 410 core" +// 4.1 410 "#version 410 core" // 4.2 420 // 4.3 430 // ES 2.0 100 "#version 100" From aa89c87f3541500fd0a2c7f7a098a548c4371ff6 Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Wed, 11 Jul 2018 08:29:38 +0200 Subject: [PATCH 3/8] Update imgui_impl_opengl3.cpp --- examples/imgui_impl_opengl3.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 7b42b0f694a3..4f1666d6e885 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -348,10 +348,10 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects() const GLchar* vertex_shader_glsl_300_es = "precision mediump float;\n" + "layout (location = 0) in vec2 Position;\n" + "layout (location = 1) in vec2 UV;\n" + "layout (location = 2) in vec4 Color;\n" "uniform mat4 ProjMtx;\n" - "in vec2 Position;\n" - "in vec2 UV;\n" - "in vec4 Color;\n" "out vec2 Frag_UV;\n" "out vec4 Frag_Color;\n" "void main()\n" @@ -363,7 +363,7 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects() const GLchar* vertex_shader_glsl_410_core = "layout (location = 0) in vec2 Position;\n" - "layout (location = 1) in vec2 UV;\n" + "layout (location = 1) in vec2 UV;\n" "layout (location = 2) in vec4 Color;\n" "uniform mat4 ProjMtx;\n" "out vec2 Frag_UV;\n" @@ -402,7 +402,7 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects() "uniform sampler2D Texture;\n" "in vec2 Frag_UV;\n" "in vec4 Frag_Color;\n" - "out vec4 Out_Color;\n" + "layout (location = 0) out vec4 Out_Color;\n" "void main()\n" "{\n" " Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n" From acaecfe7978f41314893bb72c74e8a2b7d0918ce Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Fri, 13 Jul 2018 13:08:12 +0200 Subject: [PATCH 4/8] Update imgui_impl_opengl3.cpp --- examples/imgui_impl_opengl3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 4f1666d6e885..5e3df8a9376a 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -52,7 +52,7 @@ #include "imgui_impl_opengl3.h" #include -#ifdef __EMSCRIPTEN_BUILD__ +#ifdef __EMSCRIPTEN__ #define GLFW_INCLUDE_ES3 #include #else From abae6ea6c88bd0240efe01c31d8a6d7ed3c0dcf0 Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Fri, 13 Jul 2018 13:10:00 +0200 Subject: [PATCH 5/8] replace __EMSCRIPTEN_BUILD__ with __EMSCRIPTEN__ --- examples/imgui_impl_opengl3.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 5e3df8a9376a..44668d0ee39f 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -114,7 +114,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); - #ifndef __EMSCRIPTEN_BUILD__ + #ifndef __EMSCRIPTEN__ GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); #endif GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); @@ -137,7 +137,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glEnable(GL_SCISSOR_TEST); - #ifndef __EMSCRIPTEN_BUILD__ + #ifndef __EMSCRIPTEN__ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); #endif @@ -225,7 +225,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); - #ifndef __EMSCRIPTEN_BUILD__ + #ifndef __EMSCRIPTEN__ glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); #endif glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); From ffed96517d6372231145853897cb46d0e7bb14cb Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Fri, 13 Jul 2018 13:13:21 +0200 Subject: [PATCH 6/8] replace GLFW_INCLUDE_ES3 with direct header --- examples/imgui_impl_opengl3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 44668d0ee39f..444949d25f75 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -53,7 +53,7 @@ #include #ifdef __EMSCRIPTEN__ - #define GLFW_INCLUDE_ES3 + #include #include #else #include // This example is using gl3w to access OpenGL functions. You may use another OpenGL loader/header such as: glew, glext, glad, glLoadGen, etc. From 66cb0f5984f339cc0817981dbf9576d8f1a23a50 Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Fri, 13 Jul 2018 13:41:12 +0200 Subject: [PATCH 7/8] removing useless glfw include --- examples/imgui_impl_opengl3.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index 444949d25f75..a27c294af866 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -54,7 +54,6 @@ #ifdef __EMSCRIPTEN__ #include - #include #else #include // This example is using gl3w to access OpenGL functions. You may use another OpenGL loader/header such as: glew, glext, glad, glLoadGen, etc. #endif From 56fa2b56ba4b0fcdde9f630b116bd6fadfceaa61 Mon Sep 17 00:00:00 2001 From: Omar Sherif Fathy Date: Fri, 13 Jul 2018 14:18:07 +0200 Subject: [PATCH 8/8] Making call to glPolygonMode() optional --- examples/imgui_impl_opengl3.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/imgui_impl_opengl3.cpp b/examples/imgui_impl_opengl3.cpp index a27c294af866..ea3645a3be24 100644 --- a/examples/imgui_impl_opengl3.cpp +++ b/examples/imgui_impl_opengl3.cpp @@ -113,7 +113,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler); GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer); GLint last_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array); - #ifndef __EMSCRIPTEN__ + #ifdef GL_POLYGON_MODE GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); #endif GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); @@ -136,7 +136,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glEnable(GL_SCISSOR_TEST); - #ifndef __EMSCRIPTEN__ + #ifdef glPolygonMode glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); #endif @@ -224,7 +224,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST); - #ifndef __EMSCRIPTEN__ + #ifdef glPolygonMode glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); #endif glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);