0

私はいくつかの簡単な 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();
}

この例は、mingw を使用して Windows 7 で完全にコンパイルおよびリンクされますが、実行するとかなり見苦しくなります。最初に画面が暗くなり、白く点滅します。次に、画面が再描画され、ウィンドウが表示されます。アプリケーションをシャットダウンしても同じことが起こります。

描画コードを削除しようとしましたが、同じことが起こり、外側のウィンドウから gl ウィンドウを削除しましたが、それでも発生します。したがって、実際の描画には影響しません。だから私の疑いは、opengl コンテキストの作成がこれを引き起こしているということです。ウィンドウが「静かに」表示されるようになったため、gl ウィンドウの作成を削除すると、この仮説が支持されます。

Fl_Gl_Window を Windows でうまく再生する方法を知っている人はいますか?

4

1 に答える 1

0

draw() 関数では、

    if (!valid())
    {
        valid(1);
        glLoadIdentity();
        glViewport(0,0,w(),h());
        ortho();
    }

何よりも先に。OpenGLの機能だと思います。ここに printf ステートメントを入れると、最初の描画とサイズ変更時に呼び出されることがわかります。

おそらく、この質問と関係があります: Valid OpenGL context ?

于 2013-07-09T16:57:46.983 に答える