#ifndef Fl_Gl_Window_Driver_H
#define Fl_Gl_Window_Driver_H
#include <FL/Fl_Gl_Window.H>
#include <FL/gl.h>
class Fl_Gl_Choice;
class Fl_Font_Descriptor;
class Fl_Gl_Window_Driver {
protected:
GLint current_prog;
Fl_Gl_Window *pWindow;
public:
static Fl_Window* cached_window;
static int nContext;
static GLContext *context_list;
static Fl_Gl_Choice *first;
static int copy;
static float gl_scale;
static GLContext gl_start_context;
Fl_Gl_Choice* g() {return pWindow->g;}
void g(Fl_Gl_Choice *c) {pWindow->g = c;}
int mode() {return pWindow->mode_;}
void mode(int m) { pWindow->mode_ = m;}
const int *alist() {return pWindow->alist;}
void alist(const int *l) { pWindow->alist = l;}
void* overlay() {return pWindow->overlay;}
void draw_overlay() {pWindow->draw_overlay();}
Fl_Gl_Window_Driver(Fl_Gl_Window *win) : pWindow(win) {current_prog=0;}
virtual ~Fl_Gl_Window_Driver() {}
static Fl_Gl_Window_Driver *newGlWindowDriver(Fl_Gl_Window *w);
static Fl_Gl_Window_Driver *global();
virtual float pixels_per_unit() {return 1;}
virtual void before_show(int&) {}
virtual void after_show() {}
virtual void invalidate();
virtual int mode_(int , const int * ) {return 0;}
virtual void make_current_before() {}
virtual void make_current_after() {}
virtual void swap_buffers() {}
virtual void resize(int , int , int ) {}
virtual char swap_type();
virtual void swap_interval(int) { }
virtual int swap_interval() const { return -1; }
virtual int flush_begin(char&) {return 0;}
virtual void gl_hide_before(void *&) {} static Fl_Gl_Choice *find_begin(int m, const int *alistp);
static void add_context(GLContext ctx);
static void del_context(GLContext ctx);
virtual Fl_Gl_Choice *find(int , const int * ) {return NULL;}
virtual GLContext create_gl_context(Fl_Window*, const Fl_Gl_Choice*) {return 0;}
virtual void set_gl_context(Fl_Window*, GLContext) {}
virtual void delete_gl_context(GLContext) {}
virtual void make_overlay(void* &o);
virtual void hide_overlay() {} virtual void make_overlay_current() {}
virtual void redraw_overlay() {}
virtual int can_do_overlay() {return 0;}
virtual void waitGL() {} virtual void gl_visual(Fl_Gl_Choice*); virtual void gl_start() {} virtual void* GetProcAddress(const char *procName); virtual void draw_string_legacy(const char* str, int n); void draw_string_legacy_get_list(const char* str, int n); static void draw_string_legacy_glut(const char* str, int n); virtual void get_list(Fl_Font_Descriptor*, int) {} virtual void gl_bitmap_font(Fl_Font_Descriptor *) {} virtual int overlay_color(Fl_Color) {return 0;} static void draw_string_with_texture(const char* str, int n); virtual char *alpha_mask_for_string(const char *str, int n, int w, int h, Fl_Fontsize fs);
virtual int genlistsize() { return 0; } virtual Fl_Font_Descriptor** fontnum_to_fontdescriptor(int fnum);
virtual Fl_RGB_Image* capture_gl_rectangle(int x, int y, int w, int h);
static inline Fl_Gl_Window_Driver* driver(const Fl_Gl_Window *win) {return win->pGlWindowDriver;}
virtual bool need_scissor() { return false; }
virtual void switch_to_GL1();
virtual void switch_back();
};
#endif