mirror of https://github.com/fltk/fltk
Fix use of several FLTK widgets above an GL scene.
The code failed with 2 or more widgets when FLTK would trigger partial redraws of the widgets, unless the Fl_Gl_Window was FL_DAMAGE_ALL. This commit also adds a second FLTK widget to example/OpenGL3test to check this multiple widget situation, and fixes an error where operator ! was used instead of ~ .
This commit is contained in:
parent
206d9b17e0
commit
6732044a07
|
@ -163,7 +163,7 @@ public:
|
||||||
add_output("\nThis platform does not support OpenGL V3 :\n"
|
add_output("\nThis platform does not support OpenGL V3 :\n"
|
||||||
"FLTK widgets will appear but the programmed "
|
"FLTK widgets will appear but the programmed "
|
||||||
"rendering pipeline will not run.\n");
|
"rendering pipeline will not run.\n");
|
||||||
mode(mode() & !FL_OPENGL3);
|
mode(mode() & ~FL_OPENGL3);
|
||||||
}
|
}
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
@ -230,18 +230,22 @@ void add_output(const char *format, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void button_cb(Fl_Widget *, void *) {
|
void button_cb(Fl_Widget *widget, void *) {
|
||||||
add_output("run button callback\n");
|
add_output("run %s callback\n", widget->label());
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_widgets(Fl_Gl_Window *g) {
|
void add_widgets(Fl_Gl_Window *g) {
|
||||||
Fl::set_color(FL_FREE_COLOR, 255, 255, 255, 140); // partially transparent white
|
Fl::set_color(FL_FREE_COLOR, 255, 255, 255, 140); // partially transparent white
|
||||||
g->begin();
|
g->begin();
|
||||||
// Create here widgets to go above the GL3 scene
|
// Create here widgets to go above the GL3 scene
|
||||||
Fl_Button* b = new Fl_Button( 0, 170, 60, 30, "button");
|
Fl_Button* b = new Fl_Button( 0, 0, 60, 30, "button");
|
||||||
b->color(FL_FREE_COLOR);
|
b->color(FL_FREE_COLOR);
|
||||||
b->box(FL_BORDER_BOX );
|
b->box(FL_DOWN_BOX );
|
||||||
b->callback(button_cb, NULL);
|
b->callback(button_cb, NULL);
|
||||||
|
Fl_Button* b2 = new Fl_Button( 0, 170, 60, 30, "button2");
|
||||||
|
b2->color(FL_FREE_COLOR);
|
||||||
|
b2->box(FL_BORDER_BOX );
|
||||||
|
b2->callback(button_cb, NULL);
|
||||||
g->end();
|
g->end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -344,6 +344,7 @@ void Fl_Gl_Window::draw_overlay() {}
|
||||||
*/
|
*/
|
||||||
void Fl_Gl_Window::draw_begin() {
|
void Fl_Gl_Window::draw_begin() {
|
||||||
if (mode() & FL_OPENGL3) pGlWindowDriver->switch_to_GL1();
|
if (mode() & FL_OPENGL3) pGlWindowDriver->switch_to_GL1();
|
||||||
|
damage(FL_DAMAGE_ALL); // always redraw all GL widgets above the GL scene
|
||||||
Fl_Surface_Device::push_current( Fl_OpenGL_Display_Device::display_device() );
|
Fl_Surface_Device::push_current( Fl_OpenGL_Display_Device::display_device() );
|
||||||
Fl_OpenGL_Graphics_Driver *drv = (Fl_OpenGL_Graphics_Driver*)Fl_Surface_Device::surface()->driver();
|
Fl_OpenGL_Graphics_Driver *drv = (Fl_OpenGL_Graphics_Driver*)Fl_Surface_Device::surface()->driver();
|
||||||
drv->pixels_per_unit_ = pixels_per_unit();
|
drv->pixels_per_unit_ = pixels_per_unit();
|
||||||
|
|
Loading…
Reference in New Issue