OpenGL 4.1和3.1+;,关键区别是什么?

OpenGL 4.1和3.1+;,关键区别是什么?,opengl,3d,performance,opengl-3,opengl-4,Opengl,3d,Performance,Opengl 3,Opengl 4,我知道OpenGL4和OpenGL3非常相似,尤其是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提供了哪些关键区别,可以保证它被归类为新的主要版本 奖励:在任何情况下,与

我知道OpenGL4和OpenGL3非常相似,尤其是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相比,这些差异是否都能提高性能,或者仅仅提高可访问性

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


OpenGL3.3是对OpenGL4.0的补充,它将尽可能多的功能集成到旧硬件中。在OpenGL3和4之间选择,3.3有时可能是更好的选择。4.1增加了GL ES 2.0兼容性和一些不错的功能


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

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

基调(显然在询问meta时从答案中删除)。。 作为实际答案的临时参考。)

可能“更容易阅读”:

  • 采样器对象
  • 实例化数组和着色器
  • 纹理\u立方体\u贴图\u数组和纹理\u聚集

  • GLSL 4.0动态LOD

  • 着色器_子例程示例_着色
  • 分离着色器对象
  • 增加纹理/渲染缓冲区所需的大小
  • 64位浮点顶点属性
  • 获取程序二进制文件
  • +2细分着色器

您可以从中获取所有更改

附录G-K回顾了从OpenGL 3.1到OpenGL 4.1的所有更改,包括新功能、不推荐的内容、完全删除的内容等

此外,可能“更容易阅读”:

如果您的问题是“4.1中的工作流如何才能更好”,那么这根本不是4.1的内容

首先,快速定义,确保我们谈论的是同一件事。对我来说,“工作流”意味着API的改进和使性能更好的东西。这些不允许硬件做任何你以前做不到的事情;它们只是让程序员更容易,或者让您获得更快的性能

绝大多数API改进(不基于新特性的改进)都作为核心扩展提供给3.3实现。因为它们是核心扩展,所以在4.1代码中使用它们时,您甚至不必更改代码来删除3.3代码中的“ARB”后缀。这一切都很有效。特别是,我谈论的是程序分离(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)将是一个很好的加速。文明V已经展示了使用GPGPU技术(他们使用DXCompute,但你也可以使用OpenCL)解压纹理的价值;这对加载性能有很大帮助,因为您不必从磁盘加载那么多数据

如果您想真正扩展性能改进的定义,可以将细分视为性能增强。您可以使用它发送较小的网格,或者使用较低的LOD网格靠近摄影机。或者,你可以认为它是一种比以前更高的多边形网格的方法。


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


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

这里有很多问题,每个问题都应该得到更深入的答案。但是,是的,我想说这些是相当关键的性能提升,如果用在正确的方式没有回答这个问题。“你能对其中任何一个进行详细阐述吗?你会说这些都是公平的吗