gpt4 book ai didi

opengl - 使用 OpenGL Loader Generator 相对于 GLEW 有何性能优势?

转载 作者:行者123 更新时间:2023-12-02 07:06:35 25 4
gpt4 key购买 nike

标题几乎说明了一切。我第一次听说OpenGL Loader Generator昨天在浏览 Stack 时,我检查了该项目,以调查它相对于 GLEW 有何优势。 。他们在项目网站上声明:

This loader generation system is used to create OpenGL headers and loading code for your specific needs. Rather than getting every extension and core enumerator/function all in one massive header, you get only what you actually want and ask for.

虽然我知道这种方法肯定比 GLEW 更简洁,但我不明白这种方法如何改进编译时间、应用程序性能或与 OpenGL 驱动程序的交互。此外,使用它的过程似乎需要更多的维护,因为每次需要使用额外的扩展时都必须重新生成扩展源。我从未注意到使用 GLEW 时有任何性能影响(与不使用它相比),所以我很好奇为什么这个项目的开发人员觉得他们有问题需要解决。我错过了什么吗?

最佳答案

为了充分披露,我编写了 OpenGL Loader Generator。

While I understand that this approach is definitely more succinct than GLEW, I do not understand how this approach improves compilation time, application performance, or interaction with OpenGL drivers.

这是一个OpenGL函数加载库。除了 "Function CPP" 中的内联转发函数可能异常(exception)。风格,它只是调用函数指针。就像 GLEW 一样。

两者之间唯一可能的性能差异在于加载这些函数(即:初始化例程)所需的时间。由于这是一个初始化函数,因此它的一次性性能是无关紧要的,除非它明显很慢。

简而言之,该工具的目的不是提高“应用程序性能或与 OpenGL 驱动程序的交互”。它的存在是为了拥有干净的 header ,其中准确且仅包含您打算使用的 OpenGL 部分。此外,它还可以让您轻松使用 GLEW 或 GLee 风格的函数初始化,只要您认为合适。

至于“编译时间”性能,我认为编译 100KB header 比编译 800KB header 更便宜。但由于 GLEW 和我的工具都不使用元编程或模板等高级 C++ 技术,因此编译时间节省的可能性很小。

Furthermore, it seems that the process of using it requires more maintenance as you have to regenerate the extension source every time you need to utilize an additional extension.

这当然是使用该工具的一种方式。使用该工具的另一种方法是提前弄清楚哪些扩展适合您,然后使用它们。

一般来说,当您编写真正的 OpenGL 应用程序时,您会针对特定的 OpenGL 版本编写代码。该版本由您想要支持的最低硬件决定。如果您想支持从过时的 Intel 945“GPU”到 AMD 和 NVIDIA 的最新高端产品的所有内容,您必须针对 GL 1.4(也许是 2.1,如果您感觉真的勇敢的话)编写并愿意针对英特尔驱动程序进行大量测试)。如果您想支持更新的硬件,您可以针对 OpenGL 3.x 版本之一(3.1)编写代码,具体取决于您想要为 Intel GPU 提供多少支持。

从那里,您可以决定您打算支持后续版本的哪些可选功能,或者只是特定于硬件的功能。您有一个打算使用的内容列表,因此您检查这些扩展并根据需要有条件地使用或不使用它。

这就是这个工具的用途:当您确定了一组特定的扩展和 OpenGL 版本时。如果您想要更灵活,您可以生成一个包含更多扩展的 header ,即使您不使用它们。或者你可以使用GLEW;我的工具是一个选项,而不是必需的。

该工具并不适合所有人。它适用于那些知道自己想要什么、想要不包含 kilobytes 的标题的人。 of crap extensions that they will never use .

它也有利于自动完成等。使用干净 header ,您必须筛选的垃圾要少得多,您无意调用。哦,它还可以帮助您防止意外使用您忘记检查的扩展程序中的某些内容。因为它不在您的 header 中,所以任何调用此类函数或使用这些枚举的尝试都将导致编译器错误。

这的另一个好处是易于使用。看看how many questions there are on this site about GLEW and "unresolved externals" 。出现这种情况的部分原因是 GLEW 可以编译为静态或动态库。因此,您必须在代码中使用 #define 在它们之间进行切换(在 Windows 上)。这很糟糕。

使用生成器,您只需将 header 和源代码粘贴到常规构建中即可。没有可构建或链接的库。只需几个额外的 header 和源文件。

这就是我编写该工具的原因。

关于opengl - 使用 OpenGL Loader Generator 相对于 GLEW 有何性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15739005/

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