我目前有两个独立的程序:(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所描述的错误。 )
答案 0 :(得分:2)
标准解决方案是使用LablGTK的OpenGL支持。我知道没有绑定到其他解决方案,如gtkglext。如果你想编写自己的绑定,一般来说它并不过分困难,需要做一些工作和思考。您至少需要了解足够的底层C库以安全地与OCaml桥接,这与库的界面有很大不同。由于GtkGLExt是基于Glib的,因此您将拥有能够利用绑定的GLib / GTK库在社区中构建现有经验的祝福和诅咒,并且需要充分了解Lablgtk2如何使绑定与其集成。这是可能的,但并非完全无关紧要,我不记得有任何关于绑定新GTK库的好文档,以帮助您入门。
您在其他问题中的错误看起来像是在尝试手工编译 - 您是否尝试在启用OpenGL的情况下为lablgtk构建GODI包?它可能有补丁和/或构建选项以使其工作。或者,看起来你在/opt/local
路径中使用的MacPorts是否有OCaml和lablgtk包?
另一个选项:当我需要访问未绑定库中的工具时,我常用另一个选项。我不是为库编写绑定,而是在C中编写需要该库的逻辑,并将最小的接口暴露回我的OCaml代码。在GtkGLExt的情况下,它可能只是创建初始化,拆除和启动/停止上下文调用,它们使用C API执行底层工作并返回OpenGL上下文或任何必要的内容。你仍然需要做一些工作来弄清楚如何从OCaml对象中获取正确的GTK对象,以及如何传回LablGL所需的任何工作,但它通常比创建真正的绑定更容易。