OpenGL 4.1 和 3.1+,主要区别是啥? [关闭]

Posted

技术标签:

【中文标题】OpenGL 4.1 和 3.1+,主要区别是啥? [关闭]【英文标题】:OpenGL 4.1 and 3.1+, What are key differences? [closed]OpenGL 4.1 和 3.1+,主要区别是什么? [关闭] 【发布时间】:2011-06-16 09:17:08 【问题描述】:

我知道 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 编程步骤。另一个是要渲染到的多个视口。 我相信新的详细程度功能会改变我正在使用的工作流程,也许还会改变其他很多,尽管我没有深入研究过这个功能。

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

主题演讲(在 meta 上提问时,显然已从答案中删除。. 临时参考实际答案是什么。)

Appendix G - K For OpenGL 3.1 features through OpenGL 4.1 features

Khronos Group Release Of OpenGL 4.0 可能“更容易阅读”:)

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

texture_cube_map_array 和 texture_gather

GLSL 4.0动态 LOD

shader_subroutinesample_shading separate_shader_objects 增加纹理/渲染缓冲区所需的大小 64 位浮点数 顶点属性 get_program_binary +2 镶嵌着色器

【问题讨论】:

那里有很多问题,每个问题都可能需要更深入的答案。但是,是的,如果以正确的方式使用,我会说这些是相当关键的性能提升器 【参考方案1】:

如果您的问题是“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 驱动程序上松懈了(我在看着你,英特尔)。

【讨论】:

“4.x 并不是要提供让事情变得更快的硬件功能。它更多的是能够以与以前不同的方式进行渲染。”当我谈论工作流程时,这就是我所追求的。如果您是从头开始构建渲染系统,则应该有一个不同的攻击点,让生活变得更简单。 并非如此。不适用于 OpenGL 4.x。就像我说的,最大的便利功能是程序二进制文件和程序分离。而且这些都不限于 4.x 硬件。所以我坚持我的结论:没有什么会影响 OpenGL 4.x 中的渲染系统“让生活更简单”。

以上是关于OpenGL 4.1 和 3.1+,主要区别是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

OPENGL是啥?

我的OpenGL学习进阶之旅关于3D模型知识之:什么是obj文件和mtl文件

我的OpenGL学习进阶之旅关于3D模型知识之:什么是obj文件和mtl文件

在 OpenGL 中绘制形状的标准(常用)方法是啥?

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (上)

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (上)