3

openglの学習を開始するこのチュートリアルに続いて、次のソースコードがあります。

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glfw.h>
#include <glm/glm.hpp>

using namespace glm;

int
main(void){
    if(!glfwInit())
    {
        fprintf( stderr, "Failed to initialize GLFW\n" );
        return -1;
    }

    glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); // 4x antialiasing
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // We want OpenGL 3.1
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 1);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL

    // Open a window and create its OpenGL context
    if(!glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW))
    {
        int a = glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW);
          fprintf( stderr, "Failed to open GLFW window\n" );
          glfwTerminate();
          return 1;
    }

}

これにより、常に「GLFWウィンドウを開くことができませんでした」というエラーが発生します。GLFW_OPENGL_VERSION_MINORソースコードをダウンロードして、それがコンパイルされるかどうかを確認し、違いを変数に絞り込みました。

マイナーが2または3に設定されている場合、プログラムはコンパイルされて正常に実行されますが、1に設定されている場合は正常に実行されません。これはGLFWのバグですか、それともここで何か面白いことが起こっていますか?

glfwソースのwindow.cの487行目は次のように述べています。

if( wndconfig.glProfile &&
    ( wndconfig.glMajor < 3 || ( wndconfig.glMajor == 3 && wndconfig.glMinor < 2 ) ) )
{
    // Context profiles are only defined for OpenGL version 3.2 and above
    return GL_FALSE;
}

これが原因である場合(そしてそれがそうであるように見える)、これは正確には何を意味し、なぜウィンドウの作成を停止するのですか?

4

1 に答える 1

7

ソースのコメントメッセージを読んでください。それは言う:

コンテキストプロファイルは、OpenGLバージョン3.2以降でのみ定義されています

コアプロファイル の概念は、 OpenGL3.1には存在しません。したがって、バージョン3.1を要求する場合、これを行うことはできません。

glfwOpenWindowHint(GLFW_OPENGL_PROFILE、GLFW_OPENGL_CORE_PROFILE);

あなたは単に存在しない何かを求めているので、GLFWはあなたにそれをさせません。

コアプロファイルが必要な場合は、GL3.2以降を要求してください。より低いGLバージョンを要求する場合は、コアプロファイルの要求を停止します。

于 2012-06-03T05:36:07.443 に答える