【发布时间】:2018-02-11 00:00:43
【问题描述】:
对于我的应用程序,我需要一个渲染器。渲染器使用 OpenGL 3.3 核心配置文件作为基础。在较新的 OpenGL 版本中,有一些简洁的功能,也可以通过扩展获得。如果可用,我想使用基于最新 OpenGL 版本的更新功能。由于测试可用版本和调整加载器是一团糟,我决定留在核心 3.3 并在可用的地方使用扩展(因为这是扩展,对吧?)。
在较新的 OpenGL 版本中,扩展是否与相同的功能一样快?
让我们使用GL_ARB_direct_state_access-extension。从 4.5 开始,它通过 Direct State Access 在核心中可用。后者比前者快吗? IE。新版本中实现的功能是否比扩展更快?还是驱动程序链接到相同的功能?
E:这不是关于软件设计的问题,而是关于如何处理扩展(主要是?)以及关于性能的问题。
【问题讨论】:
-
我会选择一个版本并坚持下去。我也不会使用“花式”扩展。如果您需要更高版本提供的功能,请使用更高版本并将其作为基线。从长远来看,它将为您提供更多可维护的代码。我发现直接状态访问使得将 GL 对象包装为 C++ 对象变得更加容易,并且状态更改更少。几乎可以肯定也更快(更少的调用)。
-
感谢您的回复,但这不是关于可维护代码的问题。
-
@Robinson:“我也不会使用“花式”扩展。“什么是“花式”扩展?虽然我通常同意您对 specific 扩展的看法(为 DSA 和非 DSA 实现编写具有单独代码路径的代码绝对没有意义),但有很多原因可能会导致有条件地使用某些功能. 硬件功能,而不是 API 便利功能。
-
GL_ARB_direct_state_access不管驱动是否支持4.5核心都是同一个扩展,所以应该是同一个实现,但由驱动决定。