vala 无法编译简单示例 glfw gl not found

vala can't compile simple example glfw gl not found

编辑:这不是 header 链接或包丢失的问题

我正在尝试编译来自以下来源的 Vala 示例程序:

https://wiki.gnome.org/Projects/Vala/OpenGLSamples

我在 Arch Linux.

我有两个错误:

Vala API can't be found
Package `GL` not found
Package `GLFW' not found

您链接到的示例存在几个问题:

  1. 它是用旧 libglfw.vapi 文件编写的。
  2. ListOfBindings 页面上的所有 gl.vapi 链接都已失效。

我已经尝试重写 glfw3.vapi 的示例:

using GL;

int show_triangle () {
    // Open an OpenGL window (you can also try Mode.FULLSCREEN)
    var win = new GLFW.Window(640, 480, "My example window");
    if (win == null)
        return 1;
    // Making the context current is required before calling any gl* function
    win.make_context_current ();
    // Main loop, exit when the user closes the window (e.g. via ALT + F4 or close button)
    while (!win.should_close) {
        // OpenGL rendering goes here...
        glClear (GL_COLOR_BUFFER_BIT);
        glBegin (GL_TRIANGLES);
            glVertex3f ( 0.0f, 1.0f, 0.0f);
            glVertex3f (-1.0f,-1.0f, 0.0f);
            glVertex3f ( 1.0f,-1.0f, 0.0f);
        glEnd ();

        // Swap front and back rendering buffers
        win.swap_buffers ();
        // Poll events, otherwise should_close will always be false
        GLFW.poll_events ();
    }
    return 0;
}

int main () {
    // Initialize GLFW
    if (!GLFW.init ())
        return 1;
    int exit_code = show_triangle ();
    // Terminate GLFW
    GLFW.terminate ();
    // Exit program
    return exit_code;
}

您必须引用作为 vala-extra-vapis 包一部分的 glfw3.vapi 文件:

https://wiki.gnome.org/action/show/Projects/Vala/ListOfBindings

https://git.gnome.org/browse/vala-extra-vapis/tree/glfw3.vapi

问题 2 可以通过使用来自其他地方的 gl.vapi 来解决,例如:

https://github.com/mikesmullin/Vala-Genie-OpenGL/blob/master/gl.vapi

您还必须安装包含 glfw3 开发文件的分发包。 (例如 Debian 上的 libglfw3-dev)

如果您将 vapi 文件和示例源代码都放在您的工作目录中,您可以编译:

valac --vapidir=. --pkg gl --pkg glfw3 test.vala

编辑: 我使用此处 glfw 快速入门教程中的一些信息改进了我的代码:

http://www.glfw.org/docs/latest/quick.html