我最近问了一些问题here和here有关我正在开发的一个程序,并提供了分子,原子系统的可视化界面......在前面的这些消息中提到我确实有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次发射信号?
在此先感谢!