Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 使用较新版本而不是扩展时的性能增益?_Opengl_Opengl 3_Opengl 4 - Fatal编程技术网

Opengl 使用较新版本而不是扩展时的性能增益?

Opengl 使用较新版本而不是扩展时的性能增益?,opengl,opengl-3,opengl-4,Opengl,Opengl 3,Opengl 4,对于我的应用程序,我需要一个渲染器。渲染器使用OpenGL 3.3核心配置文件作为基本配置文件。在较新的OpenGL版本中,有一些简洁的特性,也可以通过扩展来使用。如果可用,我希望使用基于最新OpenGL版本的更新功能。由于测试可用版本和调整加载程序是一件很麻烦的事情,我决定留在core 3.3中,在可用的地方使用扩展(因为这是对的扩展) 在较新的OpenGL版本中,扩展是否与相同的功能一样快 我们乘-分机吧。从4.5 via开始,它在core中可用。后者比前者快吗?也就是说,在新版本中实现的功

对于我的应用程序,我需要一个渲染器。渲染器使用OpenGL 3.3核心配置文件作为基本配置文件。在较新的OpenGL版本中,有一些简洁的特性,也可以通过扩展来使用。如果可用,我希望使用基于最新OpenGL版本的更新功能。由于测试可用版本和调整加载程序是一件很麻烦的事情,我决定留在core 3.3中,在可用的地方使用扩展(因为这是对的扩展)

在较新的OpenGL版本中,扩展是否与相同的功能一样快

我们乘-分机吧。从4.5 via开始,它在core中可用。后者比前者快吗?也就是说,在新版本中实现的功能是否比扩展更快?还是驱动程序链接到同一个函数

E:这不是关于软件设计的问题,而是关于如何处理扩展(主要是?)和性能的问题

在较新的OpenGL中,扩展是否与相同的功能一样快 版本

扩展是功能的一种预览。当新版本到来时,标准中包含了许多(大多数?)扩展,因此性能将相同

您应该查看您的目标平台。 当我运行OpenGL Extensions Viewer时,它告诉我HD3000支持3.1、3.2/3.3的70%和4.0的21%的所有功能。 因此,您可以提前检查您所需的功能是否在您的目标平台上通过您想要使用的硬件和驱动程序实现。最新的硬件将支持4.4/4.5,因为它已经存在多年了。这取决于您对向后兼容性的重视程度

从Skylake及其后的英特尔图形技术支持4.4开始,我就可以看到Skylake自2015年8月起就已经出现了。所有AMD/NVidia硬件也将支持4.4/4.5。请注意,操作系统和驱动程序版本之间的支持级别可能非常高。

实际上,具有别名的优良属性。一个GL函数在语法和语义上与另一个GL函数的别名基本相同-当扩展函数升级为核心功能并更改其名称时,经常使用此功能

有一些人实际使用了这些信息。我知道的两个例子是:

  • (glad2目前在GLADE loader generator的开发分支中,但我使用它已经两年了,没有任何问题)。您必须明确启用别名功能。还有一个用于生成所需文件的工具(请注意底部的“别名”按钮)。还可以看一看
有了这样一个加载程序,您不必关心某个特定函数是来自扩展还是来自GL核心功能,只要它们以某种方式可用,您就可以使用它们

还请注意,对于较新的扩展,OpenGL ARB更经常地创建ARB扩展,而在函数和枚举名称上没有
ARB
后缀,这意味着它在任何情况下都描述完全相同的实体。这基本上是针对在将特性合并到核心标准中之后创建的扩展而完成的。他们只是为它创建了一个扩展,这样一个可能无法满足新标准版本某些其他要求的供应商仍然可以提供隔离特性

最早的例子之一是扩展,它本身与问题13中的这一事实有关:

13) 为什么入口点/枚举没有附加
ARB

此功能将直接进入OpenGL 3.2核心 同时,还被定义为对早期>平台的扩展 同时,它也不使用ARB后缀,就像其他类似的后缀一样 直接进入GL核心的新功能

你写道:


让我们使用
GL\u ARB\u direct\u state\u access
-扩展。从4.5版开始,它就可以通过直接状态访问在core中使用。后者比前者快吗?也就是说,在新版本中实现的功能是否比扩展更快?还是驱动程序链接到同一个函数


GL\u ARB\u direct\u state\u access
GL\u ARB\u sync
属于同一类别。总账功能通过名称标识,两个实体具有相同的名称意味着它们引用的是同一事物。(不能在库中导出同名的两个不同函数,
*glGetProcAddress
也只将名称字符串作为输入,因此如果有多个版本,它无法决定要哪个版本)


但是,它仍然取决于您的GL加载机制如何处理这种情况,因为它可能不会尝试加载您获得的GL版本中未暗示的函数。例如,如果您选择glad2生成>=4.5加载程序或支持
GL\u ARB\u direct\u state\u访问
扩展,那么它就可以工作

由于测试可用版本和调整加载程序非常麻烦,[…]


嗯。这在很大程度上取决于您使用的加载程序。正如我所展示的,已经有一些基本上可以使用jsut的选项,不仅对于完全相同的函数名,而且对于别名函数也是如此。

我会选择一个版本并坚持使用它。我也不会使用“花式”扩展。如果您需要更高版本提供的设施,请使用更高版本并将其作为基线。从长远来看,它将为您提供更多可维护的代码。我发现直接的状态访问使得将GL对象封装为C++对象的状态要简单得多,状态变化也较小。几乎可以肯定,速度也更快了(调用更少)。谢谢你的回复,但这不是关于可维护代码的问题。@Robinson:“我也不会使用“花式”扩展。“花式”扩展是什么?虽然我大体上同意您对特定扩展的看法(但编写具有