2016-10-03 15 views
2

私は最近、私が取り組んでいるプログラムに関して、herehereという質問をしました。私のプログラムの3つの異なるバージョンがあります:GTK + 2とGTK + 3信号の "公開/描画/レンダリング"イベント

  • (a)GTK2 + GtkGlext:素晴らしい作品です!
  • (b)GTK3 + X11:うまく動作します!
  • (C)GTK3 + GtkGLArea:私はまだ(C)に取り組んでいますが、いくつかのものは、私が間にいくつかの動作の違いの起源を見つけるためにしようとしたときに思いついた

:-(動作しません。 (a)と(b)。 (b)ではOpenGLレンダリングが(a)よりもはるかに遅いか、それともそうだと思ったか これをチェックすると、助けを借りてGTK +信号がGTK + 2(a)とGTK + 3(b)の間で同じように処理されなかったこと、(c)その場合に黒い画面しか表示されない場合でもここで私はGtkWidget(s)とそれに対応するシグナルをどのように準備するのですか? Dコマンド:

  • (A)

    GtkWidget * drawing_area = gtk_drawing_area_new(); 
    g_signal_connect (G_OBJECT (drawing_area), "expose-event", G_CALLBACK (on_expose), data); 
    
  • (B)

    GtkWidget * drawing_area = gtk_drawing_area_new(); 
    g_signal_connect (G_OBJECT (drawing_area), "draw", G_CALLBACK(on_expose), data); 
    
  • (C)

    GtkWidget * drawing_area = gtk_gl_area_new(); 
    g_signal_connect (G_OBJECT (drawing_area), "render", G_CALLBACK(on_expose), data); 
    

ツールApitraceを使用して、各OpenGLフレームが(b)と(c)の場合に5回描画されていたのに対し、(a)の場合、各OpenGLフレームが1回描画されていました。次に、コールバックに基本カウンターを追加するだけで、信号が送出された(したがって、同じフレームの「描画領域」が何度もレンダリングされた)ことを確認しました。

  • (A):5回
  • (C):(B)
  • 後5回

(a)は、GTK + 2、(b)および(c)はGTK + 3であります...今私の質問はむしろ明らかになりますが、GTK + 3バージョンのプログラムをOpenGLレンダリングの視点でスムーズにするためにGTを変更したり、 K + 2バージョン、または5回ではなくGTK + 3で1回だけシグナルを発することを希望する場合は、

ありがとうございます!

答えて

0

自分の質問に答えると、私がやったのと同じ間違いを避けるために助けてくれることを願っています。

は私が使っていた私のOpenGLのウィンドウを再描画するには:代わりに私が使用している必要があります

void update (GtkWidget * plot) 
{ 
    gtk_widget_hide (plot); 
    gtw_widget_show (plot); 
} 

:解決

gtk_widget_queue_draw (plot); 

すべての問題を!

関連する問題