16

我知道 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 提供了哪些关键差异,从而保证它被归类为新的主要版本?

奖励:是否有任何差异在 GL3 或仅可访问性的任何情况下提供了性能提升?

编辑:基于答案的一些额外发现


OpenGL 3.3 是对 OpenGL 4.0 的补充,将尽可能多的功能整合到旧硬件中。在 OpenGL 3 和 4 之间进行选择,有时3.3 可能是更好的选择。然而,4.1 增加了 GL ES 2.0 兼容性和一些不错的功能。


更大的工作流程差异之一是通过新的曲面细分着色器在管道中添加 GPU 编程步骤。另一个是要渲染到的多个视口。我相信新的详细程度功能会改变我正在使用的工作流程,也许还会改变其他很多,尽管我没有深入研究过这个功能。

如果您发现任何误解或需要改进的地方,请告诉我。

主题演讲(显然在询问元数据时从答案中删除了。用于临时参考实际答案是什么。)

附录 G - K对于OpenGL 3.1功能到OpenGL 4.1 功能

Khronos Group 发布的 OpenGL 4.0可能“更容易阅读”:)

  • 采样器对象
  • 实例化数组和着色器
  • texture_cube_map_array 和 texture_gather

  • GLSL 4.0动态 LOD

  • shader_subroutinesample_shading
  • 分离着色器对象
  • 增加纹理/渲染缓冲区所需的大小
  • 64位浮点顶点属性
  • get_program_binary
  • +2镶嵌着色器
4

1 回答 1

12

如果您的问题是“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) 可能是最大的性能增强,如果这对您来说是一个瓶颈。正如您可能从名称中注意到的那样,它是 NVIDIA 扩展而不是核心。我确信 ARB 正在为未来规范中的核心功能开发一些与此完全不同的东西。Bindless 并不是 4.x 硬件所独有的。再一次,NVIDIA 将其一直延伸到 GeForce 6xxx 芯片。

4.x 中有一些东西可以增强硬件,但它们最终都围绕着某种形式的 GPGPU 工作。如果您从 OpenCL 生成渲染数据,间接渲染 (GL_ARB_draw_indirect) 将是一个很好的加速。Civilization V 已经展示了使用 GPGPU 技术(他们使用 DXCompute,但您也可以使用 OpenCL)解压缩纹理的价值;这极大地帮助了加载性能,因为您不必从磁盘加载尽可能多的数据。

如果您想真正扩展性能改进的定义,则可以将 Tessellation 视为性能增强。您可以使用它来发送较小的网格,或者使用靠近相机的较低 LOD 网格。或者您可以考虑使用它来渲染比以前更高的多边形网格。

4.x 并不是要提供让事情变得更快的硬件功能。它更多的是能够以与以前不同的方式进行渲染。

还有一件事:3.1 和 3.3 之间没有选择。几乎任何可以运行 3.1 的硬件都可以运行 3.3。如果没有,那是因为硬件制造商在他们的 OpenGL 驱动程序上松懈了(我在看着你,英特尔)。

于 2011-06-14T01:04:43.197 回答