gpt4 book ai didi

OpenGL 4.1 和 3.1+,主要区别是什么?

转载 作者:行者123 更新时间:2023-12-03 20:19:27 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




我知道 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 或仅可访问性的任何情况下提供了性能提升?

Edit: Some extra findings based on answers



OpenGL 3.3 was made to compliment OpenGL 4.0 to incorporate as much of the functionality as they could into older hardware. Choosing between OpenGL 3 and 4, 3.3 may be a better choice sometimes. 4.1 has added GL ES 2.0 compatibility however and some nice features.



One of the bigger workflow differences would be added GPU programing steps in the pipeline via the new tessellation shaders. Another would be multiple viewports to render to. I believe the new level of detail feature would change the workflow I'm using and perhaps other quite a bit, though I have not looked into this feature in depth.



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

Keynotes (apparently removed from answer while asking on meta.. For temporary reference of what the actual answer was.)

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

Khronos Group Release Of OpenGL 4.0 may be "easier to read" :)

  • Sampler Objects
  • Instanced Arrays and Shaders
  • texture_cube_map_array and texture_gather

  • GLSL 4.0 and dynamic LOD

  • shader_subroutine and sample_shading
  • separate_shader_objects
  • Increase required sizes for texture/renderbuffers
  • 64 bit floating point vertex attributes
  • get_program_binary
  • +2 Tesselation shaders

最佳答案

如果您的问题是“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 芯片。

主要的异常(exception)是着色器子例程,它仅限于 4.x 硬件。然而,这个规范的规定太差了,我不确定任何人都可以使用它,更不用说应该使用了。它令人费解,有些令人困惑。

没有太多东西可以轻松用于提高 4.1 独有的性能。无绑定(bind)渲染 (GL_NV_vertex_buffer_unified_memory) 可能是最大的性能增强,如果这对您来说是一个瓶颈。正如您可能从名称中注意到的那样,它是 NVIDIA 扩展而不是核心。我确信 ARB 正在为 future 规范中的核心功能开发一些与此完全不同的东西。 Bindless 并不是 4.x 硬件所独有的。再一次,NVIDIA 将其一直延伸到 GeForce 6xxx 芯片。

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

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

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

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

关于OpenGL 4.1 和 3.1+,主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com