FLTK widgets in OpenGL 3 windows: rewrite for driver system.

This commit is contained in:
ManoloFLTK 2022-09-30 19:25:23 +02:00
parent bb6072ad82
commit 0627213a82
4 changed files with 24 additions and 10 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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();

View File

@ -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, &current_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