【问题标题】:Mixing OpenGL 2.0 with Modern OpenGL将 OpenGL 2.0 与现代 OpenGL 混合
【发布时间】:2013-11-14 03:41:59
【问题描述】:

是否可以在一个程序中同时使用新旧 OpenGL? 假设我已经理解了其中的区别。

在我使用过的程序中:

WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,

但是,例如,我可以使用包含它的函数来绘制网格吗:(old)

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

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

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

【问题讨论】:

  • 您的目标是哪个平台?如果您放弃兼容性配置文件,OS X 仅允许您访问 OpenGL 3.2、3.3 和 4.1 功能。也就是说,你必须在这个平台上有这些版本的核心配置文件上下文。实际上,OS X 会阻止你混合和匹配(你要么得到 2.1 的旧东西,要么得到 3.2+ 的核心),但许多其他平台让你使用 3.2+ 的兼容性。如果您考虑过移植到 OS X,请稍作思考——OS X 上的很多东西“不同” ;)

标签: opengl opengl-4 opengl-2.0


【解决方案1】:

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

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

【讨论】:

  • 哦,这很有趣。感谢发帖,我现在去看看链接。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多