【问题标题】:Any OCaml bindings for GtkGlExt? If not, how can I write them?GtkGlExt 的任何 OCaml 绑定?如果没有,我该怎么写?
【发布时间】:2011-03-18 04:24:05
【问题描述】:

我目前有两个独立的程序:(1) GTK GUI; (2) 具有 OpenGL 3D 图形的 Glut 应用程序。但是,我希望将 openGL 部分作为嵌入在我拥有的 GUI 中的一些小部件。

我注意到GtkGlExt 正是我所需要的,但不幸的是,它的网页上没有提到 OCaml 绑定。

我的问题是:

(1) 你知道在网络空间的某个地方是否有任何此类绑定丢失? (我从 2008 年发现了一个类似的 discussion,所以我希望 3 年后会发生一些事情。)

(2) 如果没有任何绑定,那么生成这些绑定会有多困难?从哪里开始比较好?我需要了解多少原始 C 库? (到目前为止,我还没有从 OCaml 进行任何 C 调用。)

(3) 或者,您知道我可以使用任何其他开箱即用的软件包吗? (我曾尝试在 OSX 上安装 gtkglarea,但我遇到了无法解决并放弃的错误。我也尝试安装 lablgtk2-2.14.0+dfsg,但得到了描述为 here 的错误。)

【问题讨论】:

    标签: opengl gtk ocaml


    【解决方案1】:

    标准解决方案是使用 LablGTK 的 OpenGL 支持。我知道没有绑定到其他解决方案,例如 gtkglext。如果您想编写自己的绑定,通常不会太难,确实需要一些工作和思考。您至少需要对底层 C 库有足够的了解才能安全地与 OCaml 桥接,OCaml 随库的接口而变化很大。由于 GtkGLExt 是基于 Glib 的,所以你将有幸和诅咒能够在社区中通过绑定 GLib/GTK 库建立现有经验,并且需要充分了解 Lablgtk2 如何工作以使你的绑定与它集成.这是可能的,但并非微不足道,而且我不记得有任何关于绑定新 GTK 库以帮助您入门的好的文档。

    您在另一个问题中的错误看起来像是您正在尝试手动编译 - 您是否尝试过为启用了 OpenGL 的 lablgtk 构建 GODI 包?它可能有补丁和/或构建选项以使其工作。或者,MacPorts 是否有 OCaml 和 lablgtk 包?

    另一个选项:当我需要访问未绑定库中的设施时,我通常会使用另一个选项。我不会为库编写绑定,而是用 C 语言编写需要该库的逻辑,并将一个最小接口公开回我的 OCaml 代码。在 GtkGLExt 案例中,可能只是创建初始化、拆卸和启动/停止上下文调用的问题,这些调用使用 C API 完成底层工作并返回 OpenGL 上下文或任何必要的内容。您仍然需要做一些工作来弄清楚如何从 OCaml 对象中获取正确的 GTK 对象,以及如何回传 LablGL 工作所需的任何内容,但这通常比创建真正的绑定更容易。

    【讨论】:

    • @MichaelE 我更详细地查看了进行绑定所需的工作,这比我想象的要多得多。所以,我暂时放下它。我使用过 GODI;我首先尝试了 GL 支持,但即使是 GODI 中的简单“测试配置”也会给出:> checking for GTKGL... no > configure: error: gl enforced but no support found > Error: Exec error: File /Users/surikator/godi/build/godi/godi-lablgtk2/./../../mk/bsd.pkg.mk, line 1022: Command returned with non-zero exit code。看来我错过了 GTKGL……这是我在安装 GTK 本身时需要打开的选项吗?
    • @MichaelE 我目前已经用 MacPorts 安装了 GTK-OSX。我不确定如何为这个 GTK 变体使用 GTKGL。这似乎是 GODI 能够在 GL 支持下继续安装 lablgtk2 所缺少的。
    • @Surikator 我认为 LablGTK 支持使用 gtkglarea,但我不是 100% 确定。您还需要安装 LablGL,但 GODI 会处理这些。可能是 gtkglarea 尚未移植到 GTK-OSX。有一段时间有一个错误报告将 GL 支持直接添加到 GTK+,但我认为它还没有太大的吸引力。
    • @Surikator 该错误表明它找不到 GTK+/X11 网桥(这是真的,因为您安装了 GTK+-OSX)。如果可能的话,您要么需要以某种方式告诉 gtkglarea 使用不同的后端,要么使用 GTK+ 的 X11 版本。可能是 gtkglarea 还不支持 OSX/Quartz 后端。它需要特定于后端的支持代码才能知道如何为窗​​口/小部件设置 OpenGL 上下文。
    • @Surikator 我已经用我在这种情况下使用的另一个选项更新了我的答案。我不知道为什么我没有早点想到。基本上,不要编写真正的绑定 - 编写一个最小的接口并在 C 中完成真正的 GtkGLExt 工作。
    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 2010-11-28
    • 2022-11-12
    • 1970-01-01
    • 2017-12-23
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多