OpenGL - 您可以在 3.30 配置文件上渲染 GLSL 1.20 和 GLSL 3.30 的着色器吗?

OpenGL - Can you render shaders from GLSL 1.20 and GLSL 3.30 on a 3.30 profile?

我正在尝试集成 freetype_gl,他们使用的着色器是旧版本的。我可以将它们转换为使用 3.3+,我只是想知道是否可以在屏幕上不显示任何内容。

OpenGL 和 GLSL 版本

自 2.0 以来的每个 OpenGL 版本都发布了相应的 GLSL 版本。但是,GLSL 版本号并不总是与 GL 版本同步。这是一个table:

> OpenGL Version    GLSL Version
> 2.0               1.10
> 2.1               1.20
> 3.0               1.30
> 3.1               1.40
> 3.2               1.50

对于OpenGL 3.3及以上的所有版本,对应的GLSL版本与OpenGL版本相匹配。所以 GL 4.1 使用 GLSL 4.10.

就我而言,我使用的是 glsl 1.30 和 opengl 3.3,但我认为您可能无法在那里使用 glsl 1.2

简答

在 Windows 上,它将起作用。在 OS X 和 Linux/Mesa 上它将不起作用。

长答案

如果您使用的是兼容性配置文件,是的,它会起作用。如果您使用的是核心配置文件,则不支持 1.40 之前的 GLSL 版本。

Windows 上的 OpenGL 实现倾向于对遗留应用程序提供强大的支持,包括兼容性配置文件。其他实现,例如 Mesa 和 OS X 实现,不支持更新版本的兼容性配置文件。对于非核心配置文件,OS X 仅支持 2.1 版本,Mesa 支持 3.0.

这意味着如果您想 运行 您的程序在 Linux/Mesa 或 OS X 上,您将必须至少将着色器移植到 1.40(此时您可能也可以使用 3.30),但如果您只关心 Windows.

,则无需更改任何内容