面向 GTK+ 3 的 GtkGLExt 现状

自 GTK+ 3.0 发布后,GtkGLExt 一直没有支持它,并且这个项目已沉寂了很久。最近 GtkGLExt 邮件列表中 Thomas Zimmermann 的三封邮件,让这件事情看上去有了一些眉目。

继续阅读

C 库的编写 [2]

这是有关 C 库编写经验的一系列文档的第二部分,讲述了事件处理、主循环、同步与异步 I/O 等功能的实现经验。原文见:http://davidz25.blogspot.com/2011/06/writing-c-library-part-2.html

本文只是对原文的不完全翻译及意译,对其中所有错误不负任何责任。

继续阅读

C 库的编写 [1]

这是有关 C 库编写经验的一系列文档的一部分,原文见:http://davidz25.blogspot.com/2011/06/writing-c-library-part-1.html

本文只是对原文的不完全翻译及意译,对其中所有错误不负任何责任。

继续阅读

GObject 信号机制——信号连接

文档 [1, 2] 讲述了 GObject 信号注册的相关细节,本文进一步分析信号与闭包的关联问题,即信号连接。

继续阅读

在 X11 中实现 GTK+ 3 的 OpenGL 支持

最近,开始思考 GTK+ 3.0 的 OpenGL 支持的问题。由于 GtkGLExt 现在还不支持 GTK+ 3.0,其维护者对此没有任何表示。现在最务实的办法是使用 clutter-gtk 库,通过 Clutter 的底层库 Cogl(OpenGL 的面向对象封装)在 GTK+ 3 的 Widget 中绘制 OpenGL 图形。但是,目前 Cogl 功能尚不完善,例如不支持用户自定义帧缓存格式,缺乏光照支持,以及图形渲染方式过于单调,仅支持顶点缓存(Vertex Buffer)渲染。考虑到 GTK+ 在 X11 是通过封装 xlib 实现的,而 xlib 可通过 GLX 实现 OpenGL 支持[1]。因此,通过 xlib 与 GLX 结合的途径,理论上必然可实现 X11 环境中 GTK+ 3.0 的 OpenGL 支持。

继续阅读

矩形选择

本来是灵机一动,考虑在 gtkglext widget 上使用 cairo 在窗口中动态绘制一个矩形框表示所选的 OpenGL 三空间中的局部区域,然后将这个矩形框映射到 OpenGL 三维空间中得到三维选区,并将 OpenGL 的视景体调整为这个三维选区,从而实现 OpenGL 图形的放大效果。可惜,这个灵机一动没成功,cairo 所绘制的矩形框被 gtkglext 的双缓冲区里的图形淹没了。

尽管如此,我还是要将这个 cairo 效果拿出来展展,用于揭示虽然我一直都喜欢 gtk+,但是这实际上是我第一个具有现实意义的 gtk+ 程序 :)

继续阅读

有关 GObject 的几份文档

这几日心甘情愿地放着正事不做而被 GObject 虐,又看了一遍 GObject 参考手册,结果还是一头雾水,感觉这个手册不是写给像我这般愚蠢的人看的。

发现对岸那边有人用 OOo 制作了 4 份演示文档,并提供了一些较具说明性的示例代码,可从其项目主页下载。演示文档做的很是言简意赅,提供的示例也很有代表性。

最后,比较值得阅读的资料是 cloverprince 写的一系列笔记,不过是英文的,内容上自下向上的分析了 GObject 的一些重要的知识点。

建议想学习 GObject 的同学,最好是先阅读以上笔记,然后再去阅读官方的 GObject 参考手册。