首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gtk+和OpenGL绑定

Gtk+和OpenGL绑定
EN

Stack Overflow用户
提问于 2010-09-28 18:13:51
回答 1查看 8.2K关注 0票数 7

简单而简短:--什么是GTK+的最高级的OpenGL绑定?--我更喜欢一个小部件,它允许我使用它,类似于QGLWidget。

注意:我偶然发现了gtkglext,gtkglarea和杂乱。我读到前两个有缺点/严重的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-28 21:53:16

更新:

Gtk+-3.16 not 以来,请使用以下任何一种!

如果您想使用当前的技术,顶点/像素着色器,您应该使用最新的gnome,并依赖它的上限:

广泛覆盖在https://www.bassi.io/articles/2015/02/17/using-opengl-with-gtk/

好吧,我在过去的两个小时里读了很多,我的结果是:

  • gtkglext将用OpenGL完全取代后端,这不是我的意图。
  • 杂波将所有本机gl调用装箱到对象中,并且根本不支持本机gl调用,尽管它提供了许多经过改进的筛选器和有趣的内容。
  • gtkglarea看起来很好,它的设计很可爱。它在Qt中具有与QGLWidget相同的用法风格(据我所知) gtkglarea的简单演示: # #include #include int init (GtkWidget *小部件){ if (gtk_gl_area_make_current (GTK_GL_AREA(小部件){ glViewport(0,0,小部件->分配高度);glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0,100,100,0,-1,1);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}返回TRUE;} int绘图(GtkWidget *小部件,GdkEventExpose *事件){ if (事件->计数> 0)返回真;if (gtk_gl_area_make_current (GTK_GL_AREA(小部件){ glClearColor(0,0,0,1);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1,1);glBegin(GL_TRIANGLES);glVertex2f(10,10);glVertex2f(10,90);glVertex2f(90,90);glEnd();gtk_gl_area_swap_buffers (GTK_GL_AREA(小部件));}返回真;} int重塑(GtkWidget *小部件,GdkEventConfigure *事件){ if (gtk_gl_area_make_current (GTK_GL_AREA(小部件) glViewport(0,0,小部件->分配宽度,小部件->分配高度);返回真;} int main (int argc,char **argv) { GtkWidget *窗口,*glarea;int attrlist[] ={ GDK_GL_RGBA,GDK_GL_RED_SIZE,1,GDK_GL_GREEN_SIZE,1,GDK_GL_BLUE_SIZE,1,GDK_GL_DOUBLEBUFFER,GDK_GL_NONE };gtk_init (&argc,&argv);if (gdk_gl_query () == FALSE)返回0;window = gtk_window_new (GTK_WINDOW_TOPLEVEL);gtk_window_set_title (GTK_WINDOW(窗口),"Simple");gtk_container_set_border_width (GTK_CONTAINER(窗口),10);g_signal_connect (窗口,"delete_event",G_CALLBACK (gtk_main_quit),NULL);/*,您应该在退出之前删除gtk_gl_area小部件,否则GLX上下文就会被删除,这可能会在某些系统中造成问题(=core )。对象的销毁方法不会在退出时自动调用。您需要手动启用此功能。对所有顶级窗口执行gtk_quit_add_destroy(),除非您确信它们通过其他方式获得破坏信号。*/ gtk_quit_add_destroy (1,GTK_OBJECT(窗口));glarea = GTK_WIDGET(gtk_gl_area_new (吸引表));gtk_widget_set_size_request (GTK_WIDGET(glarea),100,100);gtk_widget_set_events (glarea(Glarea),GDK_EXPOSURE_MASK \ GDK_BUTTON_PRESS_MASK);g_signal_connect (glarea,"expose_event",G_CALLBACK(draw),NULL);g_signal_connect (釉区,"configure_event",G_CALLBACK(重塑),空);g_signal_connect (釉区,“实现”,G_CALLBACK(init),空);gtk_container_add (窗口),GTK_WIDGET(釉区);gtk_widget_show (釉区);gtk_widget_show (GTK_WIDGET(窗口));gtk_main ();返回0};

注意: gtkglarea仍然存在一些问题,比如出口处的堆芯(至少1.99)。

Note2:版本2.0.1修复了这个问题

编辑:对于那些只寻求2D的人来说,开罗似乎是最合适的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3815806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档