GL_SHADING_LANGUAGE_VERSION returns 一种语言

GL_SHADING_LANGUAGE_VERSION returns a single language

当在枚举 GL_SHADING_LANGUAGE_VERSION 上使用 glGetString 时,我只得到一个 return 的值,而我期望 space 分隔值与 glGetString(GL_EXTENSIONS) 一样。

更令人困惑的是,当我使用 glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, *);我得到一个大于 1 的数字,当我使用 glGetStringi(GL_SHADING_LANGUAGE_VERSION, i) 并迭代它们时,我可以获得所有值。那么,为什么我不用 glGetString(GL_SHADING_LANGUAGE_VERSION) 获取所有值呢?我只得到一个值

之所以这样,是因为这就是该功能最初的定义方式。所有 GLSL 版本都向后兼容以前的版本,所以如果你有一个 1.10 着色器,你可以将它提供给任何接受 1.10 或更高版本的实现。

但是随着核心和兼容性之间的断裂,这变得站不住脚了。让核心实现默认支持包含已删除构造的 GLSL 着色器是没有意义的。因此,必须有一种方法可以让实现准确指定它支持的 GLSL 版本。但是他们无法更改现有版本字符串的定义,因此他们(最终)只是添加了一个新的 indexed-based 查询。