2016-10-03 40 views
2

我最近问了一些问题herehere有关我正在开发的一个程序,并提供了分子,原子系统的可视化界面......在前面的这些消息中提到我确实有3个不同版本的程序:GTK + 2与GTK + 3信号“曝光/绘制/渲染”事件

  • (a)GTK2 + GtkGlext:很棒!
  • (b)GTK3 + X11:工作得很好!
  • (C)GTK3 + GtkGLArea:不工作:-(

虽然我仍然工作在(c)中,有些事情耽搁了,而我试图找出之间的一些行为差异的根源(a)和(b) (b)中的OpenGL渲染比(a)慢得多,或者我认为是这种情况。 如果您检查link,您会看到我获得了一些帮助并设法发现GTK +信号在GTK + 2(a)和GTK + 3(b)之间没有以同样的方式处理,(c)即使我在这种情况下只有黑屏(但这是另一个问题),这里是我如何准备(d)GtkWidget(s)和相应的信号,请注意,我仅在下文中介绍GTK +相关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); 
    

在(a)情况下,我使用Apitrace工具注意到每个OpenGL框架都被绘制了一次,而在(b)和(c)情况下绘制了5次。然后,只需在回调中添加一个基本计数器,我确认对于每个“曝光/绘制/渲染”信号被发射(并且因此“绘图区域”被渲染多次,对于相同的帧):

  • (A):一旦
  • (b):5次
  • (C):5次

(a)是GTK + 2,(b)和(c)是GTK + 3 ...现在我的问题会变得相当明显,但是我怎么能改变,或者我应该说我的程序正确GTK + 3版本,以使其在OpenGL渲染的角度上更加平滑,就像GT K + 2版本,或者如果您希望仅使用GTK + 3而不是5次发射信号?

在此先感谢!

回答

0

回答我自己的问题,希望能帮助别人避免我犯的同样的错误。

重画我的OpenGL窗口我用:

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

相反,我应该一直在使用:

gtk_widget_queue_draw (plot); 

解决了所有的问题!