1

1 つのプログラムで古い OpenGL と新しい OpenGL の両方を使用することはできますか? 違いが理解できたとします。

私が使用した私のプログラムでは:

WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,

しかし、たとえば、これを含む関数を使用してグリッドを描画できますか: (古い)

glBegin(GL_LINES);
    glVertex3f(-50, 0, (GLfloat)x);
    glVertex3f( 50, 0, (GLfloat)x);
    glVertex3f((GLfloat)x, 0, -50);
    glVertex3f((GLfloat)x, 0,  50);
glEnd();

そして、何かをテクスチャリングしてレンダリングする、このような関数: (new)

glUseProgram(myShader->handle());
glBindTexture(GL_TEXTURE_2D, texName);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindVertexArray(m_vaoID[0]);          //select first VAO
glDrawArrays(GL_TRIANGLES, 0, 6);       //draw two triangles
glDisable(GL_BLEND);
glUseProgram(0);
glBindVertexArray(0);

または、 / を含む /vaovbomake 関数を使用する新しいバージョンの使用は廃止されますか?glBeginglEnd

それが理にかなっていることを願っています。無礼をお許しください。

4

1 に答える 1

4

OpenGL 3.2 以上の互換性プロファイルの場合は、はい。即時モード呼び出しと適切なレンダリングを混在させることができます。すべきかどうかは別の問題です (おそらく、製品コードではすべきではありませんが、デバッグには役立ちます)。コア プロファイルでは、非推奨の API を使用できません。

3.2 より前はプロファイルの概念がなかったため、3.0/3.1 コンテキストでは状況がより複雑になることに注意してください (上記のリンクを参照)。対応するハードウェアは 3.2 で問題ありません。

于 2013-11-14T03:58:52.213 に答える