【问题标题】:Get supported GLSL versions获取支持的 GLSL 版本
【发布时间】:2014-12-10 17:59:36
【问题描述】:

在使用英特尔显卡的笔记本电脑上开发时,在编译顶点着色器时,我得到了这个:

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

好的,所以我调整着色器以使用版本 300 ES。 同时,我想检查当前驱动程序/卡支持的 GLSL 版本,所以我使用这个:

glGetString ( GL_SHADING_LANGUAGE_VERSION )

令我沮丧的是,它只返回“1.30”。

如何获取完整列表?或者即使它不是完整列表,我如何获得标准 GL 支持版本和 GLES 支持版本?

【问题讨论】:

  • openGL 版本和支持的最大 GLSL 版本之间存在 1-1 映射关系
  • 是的,但我只能找到每个 OpenGL 版本支持的 GLSL 版本。我无法为 GLSL ES 找到相同的对应关系。
  • @RhiakathFlanders:1.00 ES 对应 OpenGL ES 2.0,3.00 ES 对应 OpenGL ES 3.0。当 ES 3.0 发布时,它经历了与 3.3 中的桌面 GL 相同的版本重新编号过程(例如 GLSL 1.50 --> GL 3.2,但从 GL 3.3、GLSL 3.30 --> GL 3.3 开始)。它们与 GLSL 的所有现代实现(桌面和 ES)中的 GL 版本同步。事实上,GL ES 3.1 是在 6 月份发布的,因此它引入的 GLSL ES 版本是3.10 es

标签: opengl opengl-es opengl-es-2.0


【解决方案1】:

在桌面GL中,GL版本与GLSL版本的对应关系如下:

GL version                     GLSL version
2.0                            1.10
2.1                            1.20
3.0                            1.30
3.1                            1.40
3.2                            1.50
3.3                            3.30
4.0                            4.00
4.1                            4.10
4.2                            4.20
4.3                            4.30
4.4                            4.40
4.5                            4.50
...

因此,从 GL 3.3 开始,版本号会“同步”以使生活更轻松。另请注意,没有明确的 1.00 版本。当着色器被开发为 GL 1.x 的扩展时,这是可用的。但是,这从来都不是 OpenGL 的核心功能,因此版本从 1.10 开始(如果您的着色器中没有 #version 指令,这也是默认设置)。如果您请求#version 100,您将获得 GLSL 1.00 ES

请注意,除了需要支持列出的 GLSL 版本外,还需要 GL 实现来支持旧版本。例如,在OpenGL 4.5 core profile specification 中,声明如下(强调我的):

OpenGL 4.5 实现保证支持 4.50 版 OpenGL 着色语言。对该部分的所有引用 规格参考该版本。支持的最新版本 可以按照第 22.2 节中的说明查询着色语言。 该 OpenGL 4.5 的核心配置文件也保证支持所有以前的 OpenGL 着色语言版本回到 1.40 版。 在某些 核心配置文件的实现也可能支持早期版本的 着色语言,并且可能支持兼容性配置文件版本 版本的着色语言 1.40 及更早版本。在这种情况下,使用诸如兼容性配置文件内置的语言功能时会产生错误,而不是 由核心配置文件 API 支持。

对于 OpenGL ES,同样适用:

GLES version                  GLSL version
2.0                            1.00 ES
3.0                            3.00 ES
3.1                            3.10 ES

GLES 3.1 spec 声明

OpenGL ES 3.1 实现保证支持 3.10 版本, OpenGL ES Shading Language 3.00 和 1.00。

现在您可能仍想知道您可以在桌面 GL 中使用哪些 GLSL ES 版本。因此,对于现代 GL,这非常简单。再次引用 GL 4.5 规范:

OpenGL 4.5 实现保证支持 1.00 版本, OpenGL ES 着色语言的 3.00 和 3.10。

对桌面 GL 中特定于 GLES 的功能(如 GLSL 的 ES 变体)的支持通常通过“兼容性”扩展来处理:

现在您的实现可能只提供 GL 3.0 并且仍然支持 ES 兼容性扩展。

自 GL 4.3 起,您可以通过glGetStringi(GL_SHADING_LANGUAGE_VERSION,...) 简单地查询所有受支持的 GLSL 版本的列表。对于之前的版本,您必须检查 GL 版本号和扩展字符串以推断保证支持哪些版本(但实现可能仍支持更多)。

【讨论】:

  • 所以基本上,我必须根据该表“假设”哪些 GLSL 版本可用,即使可能有一些更新的版本可用......(如何在此评论中输入换行符??? ) 所以,如果我在 GL >=4.3 上,有一个简单的方法,但否则,我将不得不对表格进行硬编码?啊!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多