1

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 プログラムでは使用されていません。誰が何が間違っているのか教えてもらえますか?

4

2 に答える 2

1

ドキュメントを読み直した後、2 つの問題があったようです。1 つは、elmindreda が指摘したように、ウィンドウ ヒントを作成した後に init を呼び出すと、ウィンドウ ヒントがデフォルトに戻されるため、最初に init を呼び出す必要があることです。

次に、私は OpenGL 3.1 を使用しています。GLFW ドキュメントに、「3.2 より前の OpenGL バージョンを要求する場合は、GLFW_OPENGL_ANY_PROFILE を使用する必要があります」と記載されています。GLFW_OPENGL_CORE_PROFILE を使用しようとしていました。

于 2014-03-20T16:16:39.393 に答える
0

他の関数を呼び出す前に、GLFWを初期化する必要があります。また、関数を呼び出す前に、OpenGL コンテキストを最新にする必要があります。

于 2014-03-20T09:20:16.063 に答える