【问题标题】:Using OpenGL core profile with Mesa 10 and GLFW3在 Mesa 10 和 GLFW3 中使用 OpenGL 核心配置文件
【发布时间】:2013-12-23 05:50:03
【问题描述】:

我在配备 Intel HD 3000 GPU 的 HP 笔记本电脑上运行带有 Mesa 10 的 Arch Linux。 (还有一个 ATI 卡,但我在启动时将其关闭。)我正在尝试使用核心配置文件运行 OpenGL 代码。根据 glxinfo 应该支持 OpenGL 3.1 和 GLSL 1.4:

-> % glxinfo | grep version
OpenGL core profile version string: 3.1 (Core Profile) Mesa 10.0.1
OpenGL core profile shading language version string: 1.40
OpenGL version string: 3.0 Mesa 10.0.1
OpenGL shading language version string: 1.3

但是,当我编译 GLFW 程序时,尝试强制核心配置文件,并要求 OpenGL 版本,如下所示:

#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main(void)
{
    // Use OpenGL 3.1 core profile
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
    glfwWindowHint(GLFW_CONTEXT_REVISION, 0);

    // Create opengl context
    int window_width = 1024;
    int window_height = 768;
    GLFWwindow* window = initialize_glfw(window_width, window_height);
    if (!window)
    {
        glfwTerminate();
        std::exit(EXIT_FAILURE);
    }

    // Display OpenGL version
    int major, minor, rev, client, forward, profile;
    glfwGetVersion(&major, &minor, &rev);
    std::cout << "OpenGL - " << major << "." << minor << "." << rev << std::endl;
}

以及使用 GLSL #version 140 编译着色器,这是打印输出:

-> % ./main
OpenGL - 3.0.3
Shader compilation failed with this message:
0:1(10): error: GLSL 1.40 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

因此,似乎应该支持 OpenGL 3.1 和 GLSL 1.4,但它们没有在我的 GLFW 程序中使用。谁能告诉我可能出了什么问题?

【问题讨论】:

  • 嗯,支持的着色语言是 1.3,核心配置文件是 1.40。我不知道为什么会这样,因为应该支持 3.30。我的系统(Archlinux)也有同样的问题。您可能应该在 mesa-dev 邮件列表中询问。
  • GLFW_CONTEXT_REVISION 不是窗口提示。

标签: opengl glfw mesa


【解决方案1】:

重新阅读文档后,似乎出现了两个问题。一个,正如 elminreda 所指出的,在生成窗口提示之后调用 init 会将窗口提示设置回它们的默认值,因此必须首先调用 init。

其次,我使用的是 OpenGL 3.1,而 GLFW 文档say“如果请求 OpenGL 版本低于 3.2,则必须使用 GLFW_OPENGL_ANY_PROFILE。”我试图使用 GLFW_OPENGL_CORE_PROFILE。

【讨论】:

    【解决方案2】:

    在调用其他函数之前,您需要initialize GLFW。在调用函数之前,您还需要使 OpenGL 上下文处于当前状态。

    【讨论】:

    • 我在初始化函数中使上下文成为当前的。我还尝试将这个初始化函数移到窗口提示上方(这样顺序是:初始化、使窗口、使上下文成为当前、窗口提示),但这没有效果。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    相关资源
    最近更新 更多