|
@@ -37,7 +37,7 @@
|
|
// 3.2 150 "#version 150"
|
|
// 3.2 150 "#version 150"
|
|
// 3.3 330
|
|
// 3.3 330
|
|
// 4.0 400
|
|
// 4.0 400
|
|
-// 4.1 410
|
|
|
|
|
|
+// 4.1 410 "#version 410 core"
|
|
// 4.2 420
|
|
// 4.2 420
|
|
// 4.3 430
|
|
// 4.3 430
|
|
// ES 2.0 100 "#version 100"
|
|
// ES 2.0 100 "#version 100"
|
|
@@ -57,7 +57,11 @@
|
|
#include <stdint.h> // intptr_t
|
|
#include <stdint.h> // intptr_t
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#include <GL/gl3w.h> // 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__
|
|
|
|
+ #include <GLES3/gl3.h>
|
|
|
|
+#else
|
|
|
|
+ #include <GL/gl3w.h> // 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 <glew.h>
|
|
//#include <glew.h>
|
|
//#include <glext.h>
|
|
//#include <glext.h>
|
|
//#include <glad/glad.h>
|
|
//#include <glad/glad.h>
|
|
@@ -114,7 +118,9 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
|
|
GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
|
|
GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
|
|
GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
|
|
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_vertex_array; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
|
|
- GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
|
|
|
|
|
|
+ #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);
|
|
GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
|
|
GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
|
|
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);
|
|
GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
|
|
@@ -135,7 +141,9 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
|
|
glDisable(GL_CULL_FACE);
|
|
glDisable(GL_CULL_FACE);
|
|
glDisable(GL_DEPTH_TEST);
|
|
glDisable(GL_DEPTH_TEST);
|
|
glEnable(GL_SCISSOR_TEST);
|
|
glEnable(GL_SCISSOR_TEST);
|
|
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
|
|
|
|
|
+ #ifdef glPolygonMode
|
|
|
|
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
|
|
|
+ #endif
|
|
|
|
|
|
// Setup viewport, orthographic projection matrix
|
|
// 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.
|
|
// 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.
|
|
@@ -221,7 +229,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_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_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);
|
|
if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
|
|
- glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]);
|
|
|
|
|
|
+ #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]);
|
|
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]);
|
|
glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
|
|
}
|
|
}
|
|
@@ -340,6 +350,35 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects()
|
|
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
|
|
" gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
|
|
"}\n";
|
|
"}\n";
|
|
|
|
|
|
|
|
+ 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"
|
|
|
|
+ "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 =
|
|
const GLchar* fragment_shader_glsl_120 =
|
|
"#ifdef GL_ES\n"
|
|
"#ifdef GL_ES\n"
|
|
" precision mediump float;\n"
|
|
" precision mediump float;\n"
|
|
@@ -362,10 +401,41 @@ bool ImGui_ImplOpenGL3_CreateDeviceObjects()
|
|
" Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
|
|
" Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
|
|
"}\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"
|
|
|
|
+ "layout (location = 0) 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
|
|
// Select shaders matching our GLSL versions
|
|
const GLchar* vertex_shader = NULL;
|
|
const GLchar* vertex_shader = NULL;
|
|
const GLchar* fragment_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;
|
|
vertex_shader = vertex_shader_glsl_120;
|
|
fragment_shader = fragment_shader_glsl_120;
|
|
fragment_shader = fragment_shader_glsl_120;
|