OpenGL 4.1和3.1+,它们之间的主要区别是什么?

17

我理解OpenGL 4和3非常相似,特别是3.1和4.1。它们基本上一起发布,很难理解OpenGL 4.0/4.1的原因。

在以前的OpenGL版本中,次要版本逐渐增加,直到积累了足够的变化形成一个新的主要版本。OpenGL 3.x和4.x引入了不兼容的API更改,而OpenGL 3.2和3.3被认为是不向前兼容的3系列的分支,而3.1与4.1+兼容。

与OpenGL 3.1相比,OpenGL 4.1提供了哪些关键差异,使其被归类为一个新的主要版本?

额外信息:根据答案得出的一些额外发现


OpenGL 3.3是为了补充OpenGL 4.0而设计的,以将尽可能多的功能纳入旧硬件中。在OpenGL 3和4之间进行选择时,有时候选择3.3可能更好。但 OpenGL 4.1增加了GL ES 2.0兼容性和一些很好的功能。


其中一个更大的工作流差异是通过新的镶嵌着色器在管线中添加了GPU编程步骤。另一个是多视口渲染。我相信新的细节级别功能会改变我的工作流程,也可能会影响其他人,尽管我没有深入研究过这个功能。

请让我知道是否有任何误解或需要改进的地方。

附录 G - K 包括 OpenGL 3.1 功能到 OpenGL 4.1 功能

Khronos Group 发布了 OpenGL 4.0,可能会“更易读”:)

  • 采样器对象 (Sampler Objects)
  • 实例化数组和着色器 (Instanced Arrays and Shaders)
  • 纹理立方体图数组和纹理采样 (texture_cube_map_array and texture_gather)

  • GLSL 4.0动态 LOD

  • 着色器子例程 (shader_subroutine)采样阴影 (sample_shading)
  • 独立着色器对象 (separate_shader_objects)
  • 增加了 纹理/渲染缓冲区 的必需大小
  • 64 位浮点型 顶点属性
  • get_program_binary
  • +2 镶嵌着色器 (Tesselation shaders)

2
那里有很多问题,每个问题可能都值得更深入的回答。但是,如果以正确的方式使用,我会说这些都是相当重要的性能提升器。 - Shezan Baig
1个回答

13
如果你的问题是“如何在4.1中改进工作流程”,那就完全不是4.1所关注的内容。
首先,快速定义一下,以确保我们谈论的是同一个事物。对我而言,“工作流程”意味着API改进和提升性能的功能。这些并不能让硬件做任何你之前无法做到的事情;它们只是让程序员更容易操作或者让你获得更快的性能。
绝大多数API改进(那些不基于新特性的改进)都可作为核心扩展用于3.3实现。由于它们是核心扩展,你甚至不需要改变你的代码就可以移除3.3代码中的“ARB”后缀并将其应用于4.1代码中。这一切都很顺畅。具体来说,我指的是程序分离(GL_ARB_separate_program_objects)和检索编译程序二进制文件(GL_ARB_get_program_binary)。这两者在3.3硬件上都被支持;甚至NVIDIA将这些扩展一直延伸到GeForce 6xxx芯片。
主要例外是着色器子例程,它只能用于4.x硬件。然而,这个规范非常糟糕地被说明,我甚至不确定是否有人能够使用它,更别提是否应该使用了。它很复杂且有些让人困惑。
在4.1中,没有太多易于使用的东西可以独特地提升性能。如果顶点缓存(GL_NV_vertex_buffer_unified_memory)是一个瓶颈,那么无绑定渲染(Bindless rendering)可能是最大的性能增强。正如你从名称中看到的那样,这是NVIDIA的扩展而不是核心特性。我相信ARB正在为将来的规范中开发类似于此的核心功能。Bindless也并不是独特于4.x硬件;同样地,NVIDIA将其一直延伸到GeForce 6xxx芯片。

在4.x版本中,有一些可以增强硬件性能的东西,但它们最终都围绕着某种形式的GPGPU工作。如果您从OpenCL生成渲染数据,间接渲染(GL_ARB_draw_indirect)将是一个很好的加速选项。而且《文明5》已经展示了使用GPGPU技术(他们使用DXCompute,但您也可以使用OpenCL)来解压缩纹理的价值;这对于加载性能非常有帮助,因为您不必从磁盘加载那么多数据。

如果您想真正扩大性能提升的定义,曲面细分可能被认为是一种性能增强。您可以使用它来发送较小的网格,或在相机附近使用较低的LOD网格。或者您可以将其视为渲染比以往任何时候都更高的多边形网格的一种方式。

4.x版本实际上并不是提供使事物更快的硬件功能。它更多地是能够以不同的方式呈现比以前更多的内容。

还有一件事:没有选择3.1和3.3之间的版本。几乎可以运行3.1的任何硬件都可以运行3.3。如果不行,那就是因为硬件制造商在OpenGL驱动程序方面偷懒了(我在看你,Intel)。


4.x 真正的目标不是提供使事情变得更快的硬件特性。它更多地关注于能够以比以前更多样化的方式进行渲染。当我谈论工作流时,这就是我追求的。如果你要从零开始构建一个渲染系统,应该采取不同的攻击方式,使生活更简单。 - That Realty Programmer Guy
1
不完全是这样。对于OpenGL 4.x来说并非如此。就像我所说的,最大的便利功能是程序二进制文件和程序分离。而且这两个功能都不限于4.x硬件。因此,我的结论仍然成立:在OpenGL 4.x中,没有任何会影响渲染系统“使生活更简单”的东西。 - Nicol Bolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接