标题几乎解释了这一切.昨天我在浏览Stack时第一次听说OpenGL Loader Generator项目,我查看了它以研究它对GLEW的优势.在项目网站上,他们声明:
此加载程序生成系统用于创建OpenGL标头并根据您的特定需求加载代码.而不是将每个扩展和核心枚举器/功能都集中在一个大型标题中,而是只获得您真正想要和要求的内容.
虽然我理解这种方法肯定比GLEW更简洁,但我不明白这种方法如何改善编译时间,应用程序性能或与OpenGL驱动程序的交互.此外,似乎使用它的过程需要更多维护,因为每次需要使用额外的扩展时都必须重新生成扩展源.我在使用GLEW时没有注意到任何性能损失(与不使用它相比),所以我很好奇为什么这个项目的开发人员觉得他们有问题需要解决.我错过了什么吗?
Nic*_*las 13
为了充分披露,我编写了OpenGL Loader Generator.
虽然我理解这种方法肯定比GLEW更简洁,但我不明白这种方法如何改善编译时间,应用程序性能或与OpenGL驱动程序的交互.
这是一个OpenGL函数加载库.随着可能的内嵌转发功能的异常"功能CPP"风格,它只是调用函数指针.就像GLEW一样.
两者之间唯一可能的性能差异在于加载这些功能所需的时间(即:初始化例程).由于这是一个初始化函数,它的一次性性能无关紧要,除非它的速度非常慢.
简而言之,提高"应用程序性能或与OpenGL驱动程序的交互" 并不是工具的目的.它的存在是干净的标题,只包含您打算使用的OpenGL部分.此外,它可以让您轻松使用GLEW或GLee风格的函数初始化,如您所见.
至于"编译时间"性能,我认为编译100KB标头比800KB标头更便宜.但由于GLEW和我的工具都不使用元编程或模板等高级C++技术,因此任何编译时节省的成本都很低.
此外,似乎使用它的过程需要更多维护,因为每次需要使用额外的扩展时都必须重新生成扩展源.
这当然是使用该工具的一种方式.使用该工具的另一种方法是提前确定哪些扩展适合您并只使用它们.
一般来说,当您编写真正的OpenGL应用程序时,您可以针对特定的OpenGL版本编写该代码.此版本由您希望支持的最低硬件决定.如果你想支持从过时的英特尔945"GPU"到AMD和NVIDIA最新高端产品的所有东西,你必须写反对GL 1.4(也许2.1,如果你真的很勇敢并愿意做很多测试英特尔驱动程序).如果您想支持更新的硬件,您可以针对其中一个OpenGL 3.x版本3.1编写代码,具体取决于您希望为英特尔GPU提供多少支持.
从那里,您可以决定要支持的更高版本的可选功能,或者只是硬件特定的功能.您有一个打算使用的东西列表,因此您需要检查这些扩展并有条件地使用或不使用它.
这就是这个工具的用途:当您确定了一组特定的扩展和OpenGL版本时.如果您想要更灵活,您可以生成包含更多扩展名的标题,即使您不使用它们也是如此.或者你可以使用GLEW; 我的工具是一个选项,而不是一个要求.
该工具并不适合每个人.它的意思是,谁知道自己想要什么的人,谁希望有头不包括千字节 废话的 扩展 ,他们 将 永远不会使用.
它也适用于自动完成等.有了一个干净的标题,你必须筛选远远少于你无意打电话的垃圾.哦,它有助于防止您意外地使用您忘记检查的扩展程序中的内容.因为它不在您的标题中,所以任何调用此类函数或使用这些枚举的尝试都将导致编译器错误.
这是有益的另一件事是易用性.看看这个网站上关于GLEW和"未解决的外部"的问题有多少.这部分是因为GLEW可以编译为静态或动态库.因此,您必须#define在代码中使用a 来在它们之间切换(在Windows上).那很糟.
使用生成器,您只需在常规构建中粘贴标题和源代码即可.没有要构建或链接的库.只需几个额外的标题和源文件.
这就是我编写工具的原因.
| 归档时间: |
|
| 查看次数: |
2750 次 |
| 最近记录: |