我最近问了一些问题here和here关于我正在研究的程序,它为分子,原子系统提供了一个可视化界面......正如我之前的这些消息所提到的那样我有3个我程序的不同版本:
虽然我仍在研究(c),但在我试图找出(a)和(b)之间某些行为差异的起源时,出现了一些问题。 (b)中的OpenGL渲染明显慢于(a)中的渲染,或者我认为是这种情况。 如果你检查这个link,你会看到我得到了一些帮助,并设法发现GTK + 2信号在GTK + 2(a)和GTK + 3(b)之间没有以相同的方式处理,并且(c )即使我在这种情况下只有一个黑屏(但这是另一个问题),这里是我准备(d)GtkWidget和相应的信号,请注意我此后只提供GTK +相关命令:< / p>
(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工具我在案例(a)中注意到每个OpenGL框架被绘制一次,而在情况(b)和(c)中绘制了5次。然后在回调中添加一个基本计数器,我确认每次“曝光/绘制/渲染”都会发出信号(因此对于同一帧,“绘图区域”会多次渲染):
(a)是GTK + 2,(b)和(c)是GTK + 3 ...现在我的问题会相当明显,但我怎么能改变或者我应该说正确的GTK + 3版本我的程序是在OpenGL渲染的观点上,如GTK + 2版本那样平滑,或者如果你喜欢用GTK + 3而不是5次只发出一次信号?
提前致谢!
答案 0 :(得分:0)
回答我自己的问题,希望能帮助别人避免犯同样的错误。
要重新绘制我正在使用的OpenGL窗口:
void update (GtkWidget * plot)
{
gtk_widget_hide (plot);
gtw_widget_show (plot);
}
相反,我应该一直在使用:
gtk_widget_queue_draw (plot);
所有问题都解决了!