T3S*_*STY 7 c++ opengl opengl-es
我对OpenGL一无所知,但事实证明它可能需要我正在研究的东西(想象一下这只是因为我想要一些需要快速绘图的视觉效果 - 硬件加速).
所以我非常担心从当前日期开始编写哪个版本的OpenGL?(2014年9月为未来的读者).
截至目前,我已经阅读过OpenGL 3.x是最常用的(读作:支持)版本,即使在非常旧的硬件上(即专为Windows XP设计).但是,如果我为OpenGL 4.x开发,我的应用程序是否可以与3.x支持的硬件向后兼容?或者它只是在那里打破并且仅在4.x(以及未来?)支持的硬件上运行?
我对OpenGL的使用并不适用于视频游戏或任何类似的东西,因此我可能永远不需要高级功能(截至目前我无法命名为您提供我可能永远不会使用的示例,我希望有经验的OpenGL人员会理解我的观点).但是,我不认为这会以任何方式降低驱动程序支持所需,我是对的吗?
请注意,我可能使用了错误的术语,我想开始学习OpenGL,这使我处于一个不太好理解的位置,无法理解我是否需要这个或那个功能和/或可能的要求 - 我需要真正的建议开始并想出办法.
我确信这个答案会跳过许多细节和例外(所以请加盐,如果你不同意或有什么要补充的话,请发表评论:P),但......每个OpenGL版本大多只是添加功能,所以如果你开始使用新功能可能会限制您可以运行应用程序的硬件(因此问题吸引了一个downvote,相反它应该引起了解释).
基本绘图几乎仍然是一个常量,有一个非常大的例外:版本3中已弃用并在3.1中删除的所有内容.
我们曾经能够做到这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
但即便如此,我们仍然使用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);
Run Code Online (Sandbox Code Playgroud)
新的绘图方式删除了立即模式和许多这些内置功能,因此您可以从头开始做很多事情,添加一些功能和语法更改.您必须使用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);
Run Code Online (Sandbox Code Playgroud)
为了回答你的问题,这完全是我的看法,我开始学习GLES2.0(afaik几乎是GL3的一个子集),因为它现在得到了很好的支持.GL2 /立即模式肯定不会作为一个学习步骤受到伤害,并且还有很多不被弃用的东西.如果您发现需要它们,您可以随时使用GL 4功能,但正如所述,基本功能实际上只在上述版本之间发生了变化.即使您使用已弃用的功能,也必须尽量使用纯粹的GL3.2(例如)上下文来禁止某些调用/功能.我不是在提倡它,但完全有可能将非常旧的和非常新的混合起来,大多数司机似乎都允许它.
TLDR: 1.使用VBO,2.使用着色器.只是为了学习,不要打扰明确的版本上下文.
也可以看看:
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |