我偶然发现了一个基本的 OpenGL 驱动程序错误,我不确定在哪里报告它们。
以下是驱动程序如何识别自己以及我们如何创建 RC:
OpenGL vendor: X.Org
OpenGL renderer: AMD CARRIZO (DRM 3.26.0, 4.18.0-13-generic, LLVM 7.0.0)
OpenGL version: 4.4 (Compatibility Profile) Mesa 18.2.2
v - using GL version 2.0 (core)
它的扩展列表中有 ARB_gpu_shader5,但没有 EXT_gpu_shader4。
此着色器无法编译
#version 120
#extension GL_EXT_gpu_shader4: enable
...
uniform usampler2D u_stencilTexture;
出现此错误:
interaction VFWARNING:CompileShader(glprogs/interaction.fs): FAILED
0:2(12): warning: extension `GL_EXT_gpu_shader4' unsupported in fragment shader
0:27(20): error: syntax error, unexpected NEW_IDENTIFIER, expecting '{'
所以我的问题是:如何获得带有 usampler 扩展的 120 版着色器,以在看似支持 Opengl-4.4 的 GPU/驱动程序上构建?
最好以跨平台、跨供应商的方式。
请注意,相同的着色器可以在 Linux 和 Windows 上的各种设备/驱动程序上正常编译。
您的问题是您正在标记#Version 120,即 GLS 1.20 或 OpenGL 2.0。理想情况下,您应该至少使用#version 400
该扩展在技术上是为 GLSL 4.0.x 及更高版本和 OpenGL 4.0 设计的。它在 OpenGL 4.0 的修订版本和 4.2 的核心版本中是可选的。为了确保支持,您应该使用 GLSL 版本 4.20(即 #version 420 而不是 #version 120)。它可以在 130+ 的前向兼容性兼容着色器中运行,但这不能保证,因为它是特定于实现的。
截至最近的芯片和 Mesa 支持,您可以在http://www.mesamatrix.net上查看概述
如您所见,除了freedrino、非常老的nVidia 芯片和非常老的intel 芯片之外的所有东西都至少支持GLSL 4.20 版
我强烈建议您安全使用它并为您的着色器使用#version 420,除非您计划与较旧的 Mac 共享代码。