对 GtkGLExt 的粗浅认识
GtkGLExt 项目主页上对 GtkGLExt 给出的简介如下:“GtkGLExt 是面向 GTK+ 2.0 或其更新版本的 OpenGL 扩展,最初由 Naofumi Yasufuku 所写,它提供了额外的 GDK 对象,用于实现 GTK+ 对 OpenGL 渲染的支持;另外提供了相关的 GtkWidget API,可用于实现兼容 OpenGL 的 GTK+ widget。”
GtkGLExt 的核心工作是实现 GDK 对 OpenGL 3D 渲染支持,换句话说,就是在 GDK 环境中解决了 OpenGL 3D 图形光栅化问题。在使用 X Window 的类 Unix 系统中,这个问题之所以能够解决,应当归功于 GLX (X Window 的 OpenGL 扩展)。
GLX 的接口函数实现了 OpenGL 顶点信息与像素信息向 X Window 系统所能接受的位图数据的转换。在 X Window 系统中,用户可以直接基于 xlib 库与 glx 库实现支持 OpenGL 3D 渲染的窗口程序,只是程序的实现比较繁琐且不便于维护。
GDK 起先是对 xlib 的基本封装,目的是为了提供比较方便、直观的方式来访问 xlib 接口函数。后来由于 Cairo 的日益强大,GDK 便逐渐地转移到 Cairo 层面上了。当然,在 X Window 系统中,Cairo 也是基于 xlib 实现的。现在,GDK 在 Windows、Mac OS 等系统中均有对用系统接口的封装版本。由于 GTK+ 将全部的绘图任务都交给了 GDK,因此只有在 GDK 层面上解决 OpenGL 支持问题,才能算得上是从根本上解决了 GTK+ 的 OpenGL 问题。这个问题,也正是 GtkGLExt项目努力要解决的。
与 GtkGLExt 相比,GtkGLArea 项目做的更上层一些,它提供的是一个 GTK+ 的 Widget,将所有的 OpenGL 3D 渲染都放到这个 Widget 中。这样看起来也没什么不好,只是越位于上层,便越不灵活。最关键的问题不是 GtkGLArea 与 GtkGLExt 孰优孰劣,而是现在连 GtkGLArea 的项目主页似乎都不存在了。GtkGLExt 的作者曾经多次说他可以继续维护 GtkGLArea 项目,将这个项目建立在 GtkGLExt 之上,希望藉此能够让 GtkGLExt 成为 GTK+ 的标准组件,但此建议似乎一直都未被 GTK+ 的开发者们所接受。
下一篇文章,尝试写一个 xlib 和 glx 的程序,来说明采用这种方式是多么的不可行。再下一篇文章,尝试写一个 GtkGLExt 的程序,来说明它是多么的可行。
2009年1月28日 00:39
快写