OpenGL版本(截至2014年底)

OpenGL version to start with (as of late 2014)

本文关键字:2014年底 截至 版本 OpenGL      更新时间:2023-10-16

我对OpenGL一无所知,但事实证明,我正在研究的东西可能需要它(之所以能解决这个问题,只是因为我想要一些需要快速绘制的视觉效果-硬件加速)。

因此,我非常担心从目前开始为哪个版本的OpenGL进行编码?(2014年9月供未来读者阅读)。

到目前为止,我已经读到OpenGL 3.x是最可用的(读作:支持)版本,即使是在非常旧的硬件上(即为Windows XP设计的)。但是,如果我为OpenGL 4.x开发,我的应用程序会向后兼容3.x支持的硬件吗?或者它只是在那里中断,只在4.x(以及未来?)支持的硬件上运行?

我使用OpenGL不是为了视频游戏或类似的东西,所以我可能永远不需要高级功能(到目前为止,我无法说出任何一个我可能永远不会使用的示例,我希望有经验的OpenGL人员能够理解我的观点)。然而,我不认为这会以任何方式降低所需的驾驶员支持,对吗?

请注意,我可能使用了错误的术语,我想开始学习OpenGL,这让我无法很好地理解我是否需要这个那个功能和/或可能的要求-我需要真正的建议来开始并找到解决方案。

我相信这个答案跳过了很多细节和异常(所以请谨慎对待,如果你不同意或有什么要添加的,请留下评论:p),但是。。。每个OpenGL版本大多只是添加了一些功能,所以如果你开始使用新的功能,它可能会限制你运行应用程序的硬件(因此这个问题引起了反对票,而它本应该引起解释)。

基本绘图几乎保持不变,有一个非常大的例外:所有在版本3中被弃用并在3.1中删除的东西。

旧的,<GL 3:

我们过去可以做一些事情,比如:

glEnable(GL_LIGHTING); //fixed-pipeline lighting. replaced with shaders
glEnable(GL_TEXTURE_2D); //fixed texturing
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(...); //builtin matrices
glBegin(GL_TRIANGLES); glVertex3f(...) ...; glEnd(); //immediate mode with per-vertex calls
glVertexPointer(..., myArray); glDrawArrays(...); //immediate mode with client side array

但即使在那时,我们仍然有GLSL着色器和VBO。有相当多的重叠,GL3的弃用并没有立即取代一切:

glBufferData(...); //buffer mesh data to bound VBO
...
glVertexAttribPointer(...); //attach data to myCustomVar (either VBO or immediate mode local array)
...
attribute vec3 myCustomVar;
varying vec3 myVarying;
...
gl_Position = gl_ProjectionMatrix * gl_ModelviewMatrix * gl_Vertex;
...
gl_FragColor = vec4(1, 0, 0, 1);

新建,>=GL 3:

新的绘图方式删除了即时模式和许多内置功能,因此您可以从头开始做很多工作,添加一些功能和语法更改。您必须使用VBO和着色器:

glBufferData(...); //buffer mesh data
...
glVertexAttribPointer(...); //attach VBOs, but have to set your own position etc too
...
#version 150 //set GLSL version number
out vec3 myVarying; //replaces "varying"
gl_Position = myProjection * myModelview * myPosition;
...
in vec3 myVarying;
out vec4 fragColour; //have to define your own fragment shader output
...
fragColour = vec4(1, 0, 0, 1);

为了回答你的问题,这完全是我的观点,我会开始学习GLES2.0(afaik几乎是GL3的子集),因为它现在得到了很好的支持。GL2/立即模式作为一个学习步骤当然不会有什么坏处,而且还有很多东西没有被弃用。如果你发现自己需要GL4功能,你可以随时使用它们,但正如所说,基本功能实际上只在上述版本之间发生了变化。即使您使用了不推荐使用的功能,您也必须尽力获得一个纯GL3.2(例如)上下文,该上下文不允许某些调用/功能。我并不提倡它,但它完全有可能将非常旧的和非常新的混合,大多数司机似乎都允许它

TLDR:1。使用VBO,2。使用着色器。只是为了学习,不要为显式的版本上下文而烦恼。

另请参阅:

  • http://www.opengl.org/wiki/History_of_OpenGL
  • http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts
  • 不推荐使用的OpenGL功能列表