diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-30 19:25:23 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2022-09-30 19:25:23 +0200 |
| commit | 0627213a824388321b8b39ff2476f5dc04f56638 (patch) | |
| tree | b83617df45f926f8321109c5b7e668b6acc28e55 /src | |
| parent | bb6072ad8290ae98568ea424cae183939404daca (diff) | |
FLTK widgets in OpenGL 3 windows: rewrite for driver system.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Gl_Choice.cxx | 9 | ||||
| -rw-r--r-- | src/Fl_Gl_Window_Driver.H | 3 | ||||
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx | 20 |
4 files changed, 24 insertions, 10 deletions
diff --git a/src/Fl_Gl_Choice.cxx b/src/Fl_Gl_Choice.cxx index f67ce0a17..5c77e978b 100644 --- a/src/Fl_Gl_Choice.cxx +++ b/src/Fl_Gl_Choice.cxx @@ -33,14 +33,7 @@ # define GL_CURRENT_PROGRAM 0x8B8D #endif -// TODO: remove that from this platform-independent source file -#ifdef _WIN32 -# include <windows.h> // for WINAPI -#else -# define WINAPI -#endif - -typedef void (WINAPI *glUseProgram_type)(GLint); +typedef void (*glUseProgram_type)(GLint); static glUseProgram_type glUseProgram_f = NULL; GLContext *Fl_Gl_Window_Driver::context_list = 0; diff --git a/src/Fl_Gl_Window_Driver.H b/src/Fl_Gl_Window_Driver.H index 5c44a8c32..0580e5250 100644 --- a/src/Fl_Gl_Window_Driver.H +++ b/src/Fl_Gl_Window_Driver.H @@ -34,9 +34,8 @@ class Fl_Font_Descriptor; platform-specific derived class from this class. */ class Fl_Gl_Window_Driver { -private: - GLint current_prog; protected: + GLint current_prog; Fl_Gl_Window *pWindow; public: static GLContext cached_context; diff --git a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H index 3b09c734a..2de50eb44 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H @@ -51,6 +51,8 @@ class Fl_WinAPI_Gl_Window_Driver : public Fl_Gl_Window_Driver { virtual void gl_bitmap_font(Fl_Font_Descriptor *fl_fontsize); virtual void get_list(Fl_Font_Descriptor *fd, int r); virtual int genlistsize(); + virtual void switch_to_GL1(); + virtual void switch_back(); #if HAVE_GL_OVERLAY virtual void gl_hide_before(void *& overlay); virtual int can_do_overlay(); diff --git a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx index 7952dfdc1..ca72d3e92 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx @@ -25,6 +25,10 @@ #include "../GDI/Fl_Font.H" extern void fl_save_dc(HWND, HDC); +#ifndef GL_CURRENT_PROGRAM +# define GL_CURRENT_PROGRAM 0x8B8D // from glew.h +#endif + // STR #3119: select pixel format with composition support // ... and no more than 32 color bits (8 bits/color) // Ref: PixelFormatDescriptor Object @@ -368,6 +372,22 @@ void Fl_WinAPI_Gl_Window_Driver::get_list(Fl_Font_Descriptor *fd, int r) { } +typedef void (WINAPI *glUseProgram_type)(GLint); +static glUseProgram_type glUseProgram_f = NULL; + +void Fl_WinAPI_Gl_Window_Driver::switch_to_GL1() { + if (!glUseProgram_f) { + glUseProgram_f = (glUseProgram_type)GetProcAddress("glUseProgram"); + } + glGetIntegerv(GL_CURRENT_PROGRAM, ¤t_prog); + if (current_prog) glUseProgram_f(0); +} + +void Fl_WinAPI_Gl_Window_Driver::switch_back() { + if (current_prog) glUseProgram_f((GLuint)current_prog); +} + + FL_EXPORT HGLRC fl_win32_glcontext(GLContext rc) { return (HGLRC)rc; } #endif // HAVE_GL |
