У меня есть простой код fltk:
#include <FL/Fl.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/gl.h>
class MyWin : public Fl_Gl_Window {
public:
MyWin(int x,int y, int w,int h, const char*l = 0) :
Fl_Gl_Window(x,y,w,h,l)
{
}
void draw();
void resize(int X,int Y,int W,int H) {
Fl_Gl_Window::resize(X,Y,W,H);
glLoadIdentity();
glViewport(0,0,W,H);
glOrtho(-W,W,-H,H,-1,1);
redraw();
}
};
void MyWin::draw() {
ortho();
glBegin(GL_QUADS);
glColor3d(1,0,0);
glVertex3f(10,10,0);
glColor3d(0,1,0);
glVertex3f(w()-10,10,0);
glColor3d(0,0,1);
glVertex3f(w()-10,h()-10,0);
glColor3d(1,1,0);
glVertex3f(10,h()-10,0);
glEnd();
}
int main(int argc,char* argv[]) {
Fl_Window win(500,500, "OpenGL");
MyWin window(10,10,win.w()-20,win.h()-20);
win.end();
win.resizable(window);
win.show(argc,argv);
return Fl::run();
}
Этот пример прекрасно компилируется и связывается для меня в Windows 7 с использованием mingw, но когда я его запускаю, он становится довольно уродливым. Сначала экран становится темным и мигает белым. Затем экран перерисовывается и появляется мое окно. То же самое происходит, когда я закрываю приложение.
Я попытался удалить код рисования, происходит то же самое, затем я удалил окно gl из внешнего окна, и это все еще происходит. Так что это не зависит от фактического рисунка. Поэтому я подозреваю, что создание контекста opengl вызывает это. Удаление создания окна gl поддерживает эту гипотезу, поскольку окно теперь отображается «тихо».
Кто-нибудь знает, как я могу заставить Fl_Gl_Window хорошо играть в Windows?
В функции draw () я использую
if (!valid())
{
valid(1);
glLoadIdentity();
glViewport(0,0,w(),h());
ortho();
}
прежде всего Я думаю, что это функция OpenGL. Если вы поместите здесь оператор printf, вы увидите, что он вызывается при первом рисовании и любом изменении размера.
Возможно, это как-то связано с этим вопросом: Действительный контекст OpenGL ?
Других решений пока нет …