diff options
Diffstat (limited to 'src/glut_compatibility.cxx')
| -rw-r--r-- | src/glut_compatibility.cxx | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/glut_compatibility.cxx b/src/glut_compatibility.cxx index 0a5a6b30e..011f9290b 100644 --- a/src/glut_compatibility.cxx +++ b/src/glut_compatibility.cxx @@ -30,6 +30,9 @@ # include "Fl_Screen_Driver.H" # include <FL/glut.H> # define MAXWINDOWS 32 +# ifndef GL_CURRENT_PROGRAM +# define GL_CURRENT_PROGRAM 0x8B8D // from glew.h +# endif static Fl_Glut_Window *windows[MAXWINDOWS+1]; @@ -54,6 +57,27 @@ void Fl_Glut_Window::draw() { indraw = 1; if (!valid()) {reshape(pixel_w(),pixel_h()); valid(1);} display(); + if (children()) { + if ((mode() & FL_OPENGL3)) { +#ifndef __APPLE__ + typedef void (*glUseProgram_type)(GLint); + static glUseProgram_type glUseProgram_f = NULL; + if (!glUseProgram_f) { + Fl_Gl_Window_Driver *dr = Fl_Gl_Window_Driver::driver(this); + glUseProgram_f = (glUseProgram_type)dr->GetProcAddress("glUseProgram"); + } + GLint current_prog = 0; + glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_prog); + // Switch from GL3-style to GL1-style drawing; + // good under Windows, X11 and Wayland; impossible under macOS. + glUseProgram_f(0); + // Draw FLTK child widgets + Fl_Gl_Window::draw(); + // Switch back to GL3-style drawing + glUseProgram_f((GLuint)current_prog); +#endif // ! __APPLE__ + } else Fl_Gl_Window::draw(); // Draw FLTK child widgets + } indraw = 0; } |
