【发布时间】:2016-10-03 17:28:03
【问题描述】:
我最近向here 和here 提出了一些关于我正在开发的程序的问题,该程序为分子、原子系统提供了可视化界面……如这些先前的消息中所述,我确实有 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) 之间的处理方式不同,甚至 (c)如果在这种情况下我只得到一个黑屏(但这是另一个问题),这是我如何准备(d)GtkWidget(s)和相应的信号,请注意我以后只介绍 GTK+ 相关命令:
-
(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):一次
- (b) : 5 次
- (c) : 5 次
(a) 是 GTK+2,(b) 和 (c) 是 GTK+3 ...现在我的问题将相当明显,但是我该如何更改或者我应该说正确的 GTK+3 版本从 OpenGL 渲染的角度来看,我的程序使其与 GTK+2 版本一样平滑,或者如果您更喜欢使用 GTK+3 只发射一次信号而不是 5 次?
提前致谢!
【问题讨论】: