将OpenGL 2.0与现代OpenGL混合使用

时间:2013-11-14 03:42:00

标签: opengl opengl-4 opengl-2.0

是否可以在一个程序中同时使用新旧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();

这样的函数,用于纹理和渲染:(新)

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);

或者是否使用使用vao / vbo的较新版本会使包含glBegin / glEnd的函数过时?

我希望这是有道理的。请原谅天真。

1 个答案:

答案 0 :(得分:3)

如果它是OpenGL 3.2或更高版本compatibility profile则是,您可以将立即模式调用与正确渲染混合。是否应该是另一回事(您可能不应该在生产代码中,但它可以用于调试)。使用核心配置文件,您将无法使用已弃用的API。

请注意,在3.2之前,没有配置文件的概念,因此在3.0 / 3.1上下文中,事情更复杂(参见上面的链接),但实际上在定位3.0 / 3.1时没有多大用处,因为只是任何3.0版本的硬件都可以使用3.2。