|
|
|
@ -176,22 +176,13 @@ |
|
|
|
|
#define GL_VERTEX_ARRAY_BINDING GL_VERTEX_ARRAY_BINDING_OES |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL 2.0+ has glPolygonMode() which GL ES and WebGL don't have.
|
|
|
|
|
#ifdef GL_POLYGON_MODE |
|
|
|
|
#define IMGUI_IMPL_HAS_POLYGON_MODE |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have.
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_2) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL 3.3+ and GL ES 3.0+ have glBindSampler()
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && (defined(IMGUI_IMPL_OPENGL_ES3) || defined(GL_VERSION_3_3)) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER |
|
|
|
|
// Desktop GL 2.0+ has extension and glPolygonMode() which GL ES and WebGL don't have..
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_HAS_EXTENSIONS // has glGetIntegerv(GL_NUM_EXTENSIONS)
|
|
|
|
|
#define IMGUI_IMPL_OPENGL_HAS_POLYGON_MODE // has glPolygonMode()
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL and GL ES 3.0+ have glBindBuffer() with GL_PIXEL_UNPACK_BUFFER target.
|
|
|
|
|
// Desktop GL 2.1+ and GL ES 3.0+ have glBindBuffer() with GL_PIXEL_UNPACK_BUFFER target.
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_BUFFER_PIXEL_UNPACK |
|
|
|
|
#endif |
|
|
|
@ -201,9 +192,14 @@ |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_PRIMITIVE_RESTART |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL use extension detection
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS |
|
|
|
|
// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have.
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) && defined(GL_VERSION_3_2) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// Desktop GL 3.3+ and GL ES 3.0+ have glBindSampler()
|
|
|
|
|
#if !defined(IMGUI_IMPL_OPENGL_ES2) && (defined(IMGUI_IMPL_OPENGL_ES3) || defined(GL_VERSION_3_3)) |
|
|
|
|
#define IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// [Debugging]
|
|
|
|
@ -364,7 +360,7 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version) |
|
|
|
|
|
|
|
|
|
// Detect extensions we support
|
|
|
|
|
bd->HasClipOrigin = (bd->GlVersion >= 450); |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_EXTENSIONS |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_HAS_EXTENSIONS |
|
|
|
|
GLint num_extensions = 0; |
|
|
|
|
glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); |
|
|
|
|
for (GLint i = 0; i < num_extensions; i++) |
|
|
|
@ -416,7 +412,7 @@ static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_wid |
|
|
|
|
if (bd->GlVersion >= 310) |
|
|
|
|
glDisable(GL_PRIMITIVE_RESTART); |
|
|
|
|
#endif |
|
|
|
|
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_HAS_POLYGON_MODE |
|
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -505,7 +501,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_USE_VERTEX_ARRAY |
|
|
|
|
GLuint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&last_vertex_array_object); |
|
|
|
|
#endif |
|
|
|
|
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_HAS_POLYGON_MODE |
|
|
|
|
GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); |
|
|
|
|
#endif |
|
|
|
|
GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); |
|
|
|
@ -644,7 +640,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) |
|
|
|
|
if (bd->GlVersion >= 310) { if (last_enable_primitive_restart) glEnable(GL_PRIMITIVE_RESTART); else glDisable(GL_PRIMITIVE_RESTART); } |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifdef IMGUI_IMPL_HAS_POLYGON_MODE |
|
|
|
|
#ifdef IMGUI_IMPL_OPENGL_HAS_POLYGON_MODE |
|
|
|
|
// Desktop OpenGL 3.0 and OpenGL 3.1 had separate polygon draw modes for front-facing and back-facing faces of polygons
|
|
|
|
|
if (bd->GlVersion <= 310 || bd->GlProfileIsCompat) |
|
|
|
|
{ |
|
|
|
@ -655,7 +651,7 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) |
|
|
|
|
{ |
|
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); |
|
|
|
|
} |
|
|
|
|
#endif // IMGUI_IMPL_HAS_POLYGON_MODE
|
|
|
|
|
#endif // IMGUI_IMPL_OPENGL_HAS_POLYGON_MODE
|
|
|
|
|
|
|
|
|
|
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]); |
|
|
|
|