@ -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"
@ -57,7 +57,11 @@
# include <stdint.h> // intptr_t
# 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 <glext.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_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 ) ;
# 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_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 ) ;
@ -135,7 +141,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 ) ;
# ifdef glPolygonMode
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.
@ -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_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 ] ) ;
# 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 ] ) ;
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 "
" } \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 =
" #ifdef GL_ES \n "
" precision mediump float; \n "
@ -362,10 +401,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 "
" 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
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 ;