我最近問了一些問題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次發射信號?
在此先感謝!