|
@@ -18,7 +18,8 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
-// 2020-01-23: OpenGL: Explicitly backup, setup and restore GL_TEXTURE_ENV to increase compatibility with legacy OpenGL applications.
|
|
|
+// 2021-01-03: OpenGL: Backup, setup and restore GL_SHADE_MODAL state, disable GL_STENCIL_TEST and disable GL_NORMAL_ARRAY client state to increase compatibility with legacy OpenGL applications.
|
|
|
+// 2020-01-23: OpenGL: Backup, setup and restore GL_TEXTURE_ENV to increase compatibility with legacy OpenGL applications.
|
|
|
// 2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
|
|
|
// 2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display.
|
|
|
// 2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
|
|
@@ -82,23 +83,29 @@ static void ImGui_ImplOpenGL2_SetupRenderState(ImDrawData* draw_data, int fb_wid
|
|
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
|
glDisable(GL_CULL_FACE);
|
|
|
glDisable(GL_DEPTH_TEST);
|
|
|
+ glDisable(GL_STENCIL_TEST);
|
|
|
glDisable(GL_LIGHTING);
|
|
|
glDisable(GL_COLOR_MATERIAL);
|
|
|
glEnable(GL_SCISSOR_TEST);
|
|
|
glEnableClientState(GL_VERTEX_ARRAY);
|
|
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
|
glEnableClientState(GL_COLOR_ARRAY);
|
|
|
+ glDisableClientState(GL_NORMAL_ARRAY);
|
|
|
glEnable(GL_TEXTURE_2D);
|
|
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
|
|
+ glShadeModel(GL_SMOOTH);
|
|
|
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
|
|
|
|
|
// If you are using this code with non-legacy OpenGL header/contexts (which you should not, prefer using imgui_impl_opengl3.cpp!!),
|
|
|
- // you may need to backup/reset/restore current shader using the lines below. DO NOT MODIFY THIS FILE! Add the code in your calling function:
|
|
|
- // GLint last_program;
|
|
|
- // glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
|
|
|
- // glUseProgram(0);
|
|
|
- // ImGui_ImplOpenGL2_RenderDrawData(...);
|
|
|
- // glUseProgram(last_program)
|
|
|
+ // you may need to backup/reset/restore other state, e.g. for current shader using the commented lines below.
|
|
|
+ // (DO NOT MODIFY THIS FILE! Add the code in your calling function)
|
|
|
+ // GLint last_program;
|
|
|
+ // glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
|
|
|
+ // glUseProgram(0);
|
|
|
+ // ImGui_ImplOpenGL2_RenderDrawData(...);
|
|
|
+ // glUseProgram(last_program)
|
|
|
+ // There are potentially many more states you could need to clear/setup that we can't access from default headers.
|
|
|
+ // e.g. glBindBuffer(GL_ARRAY_BUFFER, 0), glDisable(GL_TEXTURE_CUBE_MAP).
|
|
|
|
|
|
// Setup viewport, orthographic projection matrix
|
|
|
// Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps.
|
|
@@ -128,6 +135,7 @@ void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data)
|
|
|
GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
|
|
|
GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
|
|
|
GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
|
|
|
+ GLint last_shade_model; glGetIntegerv(GL_SHADE_MODEL, &last_shade_model);
|
|
|
GLint last_tex_env_mode; glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &last_tex_env_mode);
|
|
|
glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
|
|
|
|
|
@@ -196,6 +204,7 @@ void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data)
|
|
|
glPolygonMode(GL_FRONT, (GLenum)last_polygon_mode[0]); glPolygonMode(GL_BACK, (GLenum)last_polygon_mode[1]);
|
|
|
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]);
|
|
|
+ glShadeModel(last_shade_model);
|
|
|
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, last_tex_env_mode);
|
|
|
}
|
|
|
|