1

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

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

4

1 回答 1

4

如果它是 OpenGL 3.2 或更高的兼容性配置文件,那么可以,您可以将即时模式调用与适当的渲染混合使用。你是否应该是另一回事(你可能不应该在生产代码中,但它对调试很有用)。使用核心配置文件,您将无法使用已弃用的 API。

请注意,在 3.2 之前,没有配置文件的概念,因此在 3.0/3.1 上下文中,事情会更加复杂(参见上面的链接),但实际上,定位 3.0/3.1 并没有太大用处,因为几乎任何 3.0有能力的硬件在 3.2 中就可以了。

于 2013-11-14T03:58:52.213 回答