我如何读取OpenGL依赖关系?

我有一个关于OpenGL依赖关系的问题。 例如,对于ARB_shader_atomic_counters,依赖项部分说:

依赖

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

OpenGL 3.0是必需的。

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

官方文件说:

扩展可能是针对特定的规范版本编写的,但可以在较旧的OpenGL版本上实现扩展。 一些扩展甚至可以在OpenGL 1.1上实现,而另一些扩展则有更高的基本版本。 扩展名可以出现的最低版本由文本“X是必需的”指定

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


如果你能帮上忙的话,你真的不应该太多地读到这些。 这些信息对普通开发人员并不特别有用。 您可能永远不会遇到实现此扩展的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错误,而不会执行其他任何操作。 这是glewExperimental = GL_TRUE在调用glewInit (...)之前必需的原因,如果您在核心配置文件中使用GLEW。

链接地址: http://www.djcxy.com/p/61795.html

上一篇: How do I read OpenGL dependencies?

下一篇: power side of Hybrid Graphics chip