我如何阅读OpenGL依赖项?

时间:2014-01-23 17:06:41

标签: opengl

我对OpenGL依赖项有疑问。例如,对于ARB_shader_atomic_counters,依赖项部分说明了这一点:

  

依赖关系

     

此扩展是针对OpenGL 4.1(核心)规范编写的   和GLSL 4.10.6规范。

     

需要OpenGL 3.0。

如何阅读此信息?显卡和/或驱动程序是否需要支持OpenGL 4.1或OpenGL 3.0?

official docs说:

  

可以针对特定规范版本编写扩展,但可以在较旧的OpenGL版本上实现扩展。有些扩展甚至可以在OpenGL 1.1上实现,而其他扩展有更高的基本版本。扩展程序可以出现的最低版本使用文本“X are required”

指定

这只是一种理论上的可能性,很少(如果有的话)驱动程序会实现它吗?或者某些驱动程序会在OpenGL 3硬件上提供此功能吗?我怎样才能知道它是否已实施?

1 个答案:

答案 0 :(得分:2)

如果你能提供帮助,你真的不应该读太多。该信息对普通开发人员没有特别帮助。您可能永远不会遇到实现此扩展的GL 3.0实现,因为它是围绕Shader Model 5.0(DX 11)硬件功能设计的。从理论上讲,没有什么能阻止它在3.0中实现,但实际上没有实现此扩展的硬件/驱动程序组合将自己限制在3.0。

如果您要实现扩展或设计一些替代解决方案,那么了解必要的绝对最低API版本将非常有帮助。

当它表示它是针对特定版本的规范编写的时,这意味着任何时候扩展规范都会说明的效果“将以下语言添加到X部分,第Y段,...... “,您将在该特定规格中找到原始未展开的文字。版。这也意味着扩展对事物的行为做出了某些假设。

例如,如果版本X表示点被光栅化为六边形而版本Y表示它们被光栅化为圆形,并且扩展名是针对版本Y编写的,则扩展可以自由地假设点被光栅化为圆形。如果这个假设成为一个争议点,你会在“问题”部分找到一个关于它的模糊。


至于确定扩展是否已实现(从您的角度来看这是最重要的一点),这就是GL_EXTENSIONS字符串的用途。但请注意,多年来您查询此字符串的方式已发生变化:

在兼容性配置文件上下文或GL 3.1或更早版本中:

// Returns a massive null terminated string containing every extension the 
//   implementation supports.
//
// ... do a string search to find your extension.
const GLchar* exts = glGetString (GL_EXTENSIONS);

在核心配置文件上下文中:

GLint num_exts;
glGetIntegerv (GL_NUM_EXTENSIONS, &num_exts);

for (int i = 0; i < num_exts; i++) {
  // Returns a null terminated string containing only one extension
  const GLchar* ext = glGetStringi (GL_EXTENSIONS, i);
}

如果您尝试在核心配置文件中执行前者,则GL将生成GL_INVALID_ENUM错误,而不执行任何其他操作。如果您在核心配置文件中使用GLEW,则在调用glewExperimental = GL_TRUE之前需要glewInit (...)这一原因。