Gar*_*orn 15 opengl 3d performance opengl-3 opengl-4
我知道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_subroutine和sample_shading
- separate_shader_objects
- 增加纹理/渲染缓冲区所需的大小
- 64位浮点顶点属性
- get_program_binary
- +2 Tesselation着色器
Nic*_*las 11
如果您的问题是"工作流程如何在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驱动程序(我正在看着你,英特尔).