2016-06-20 16 views
1

この関数を使用すると奇妙な結果が得られるので、glGetString(GL_VERSION)が返すものを理解しようとしています。これは、私のGPUでサポートされている最大OpenGLバージョンまたは作成された現在のコンテキストのoepnglバージョンを返しますか? Which version does glGetString(GL_VERSION) get?によると、これは作成された現在のコンテキストのOpenGLバージョンを返しますが、私はそうではないと思います。 OpenGLコンテキスト3.1(順方向互換)、OpenGLコンテキスト2.0、およびOpenGLコンテキスト1.1を強制的に作成したい。以下は私の所見ですglGetString(GL_VERSION)が要求されたバージョンと一致しません

ケース1:wglCreateContextAttribsARBを使ってコンテキストを作成する。

int attribs[] = 
{ 
    WGL_CONTEXT_MAJOR_VERSION_ARB, 3, 
    WGL_CONTEXT_MINOR_VERSION_ARB, 3, 
    WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB, 
    0 
}; 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 

サブケース2:

int attribs[] = 
{ 
    WGL_CONTEXT_MAJOR_VERSION_ARB, 3, 
    WGL_CONTEXT_MINOR_VERSION_ARB, 1, 
    WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, 
    0 
}; 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 

サブケース3:

int attribs[] = 
{ 
    WGL_CONTEXT_MAJOR_VERSION_ARB, 2, 
    WGL_CONTEXT_MINOR_VERSION_ARB, 0, 
    0 
}; 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 

サブケース4:

int attribs[] = 
{ 
    WGL_CONTEXT_MAJOR_VERSION_ARB, 1, 
    WGL_CONTEXT_MINOR_VERSION_ARB, 1, 
    0 
}; 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 
私はそれが最高のOpenGLコンテキストのバージョン サブケース1を返していると思います

ケース2:使用

glutInitContextVersion (3, 1); 
glutInitContextFlags (GLUT_FORWARD_COMPATIBLE); 
//glGetString(GL_VERSION) returns "3.1.0 - Build 10.18.14.4264" 

サブケース2:

glutInitContextVersion (2, 0); 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 

サブケース3:

glutInitContextVersion (1, 1); 
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264" 

誰かがこの動作を説明でき

にサブケース1をOpenGLのコンテキストを作成するための供給過剰。コンテキストを作成する場所に完全なコードを投稿できます。 誰かが私に案内してくれますか?glglとwglCreateContextAttribsARBの両方を使ってOpenGL 3.1(フォワード互換コンテキスト)、OpenGL 2.0コンテキスト、およびOpenGL 1.1コンテキストを作成するにはどうしたらいいですか?

+1

。0)あなたのビデオカードの最大OpenGLバージョンを返します。しかし、最新のOpenGLでは、プロファイルを設定できます。つまり、最新の機能のみを使用することも、選択したOpenGLバージョンの機能だけを使用することもできます。この場合、選択したバージョンが返されます。 – Unick

+0

しかし、私はwglCreateContextAttribsARB属性を3.1前方互換性のあるコンテキストで使用すると、 "4.3.0 - Build 10.18.14.4264"を出力します。あなたが言ったことは、opengl 2.0とopengl 1.1にとって理にかなっています。私はまた、OpenGL 3.3のコアコンテキストを作成しようとしましたが、OpenGLバージョン4.3を示しています。私は私の質問を更新しました。どうぞご覧ください –

+1

ケース1ではwglCreateContextAttribsが間違っていると思います。私は glutが正しく3.1を作成するのを見ているので。コードを追加してください。 – Unick

答えて

2

glGetString(GL_VERSION)は、現在のコンテキストのバージョンを返します。これはしばしばサポートされている最高のバージョン(常にそうとは限りません)です。

この理由は、OpenGLの仕様である:

属性名WGL_CONTEXT_MAJOR_VERSION_ARBと WGL_CONTEXT_MINOR_VERSION_ARB要求 APIの指定されたバージョンをサポートするOpenGLコンテキスト。成功した場合、返されるコンテキスト は、要求されたコンテキストと下位互換性がなければなりません。

それは、あなたが3.0以下のバージョンを要求した場合、それは文脈が3.2以上、彼らは互換性のプロファイルであることを提供するバージョンであることができるという状態に進みます。それは動作するはずなので、あなたに4.3.0を与えています。

3.1をリクエストした場合、3.2以前のGLのコアバージョンを提供することもできます。 3.2以上をリクエストした場合、削除されていない機能があれば、それ以降のバージョンを提供することもできます。現在のところ、これは私が知っている限りどれもありません。私は<3(古いOpenGLのコンテキストのために理解してどのように

https://www.opengl.org/registry/specs/ARB/wgl_create_context.txt

+0

あなたが言っていることは事を説明しています。あなたは、あなたが今述べたことのための任意のOpenGL仕様へのリンクをお願いしますか? –

+1

@PankajBansal:彼はあなたにリンクをくれました。彼のポストの一番下にあります。 –

+0

@NicolBolas私は実際には気付きましたが、コメントを変更できませんでした –

関連する問題