我将3D纹理上传到着色器(请参阅下面的代码)。我需要对该纹理执行一些按位操作以获得逐位数据。我编写的片段着色器在Linux下工作,NVIDIA驱动程序为
OpenGL version string: 4.5.0 NVIDIA 367.57
但不适用于另一台采用Intel集成GPU和Mesa驱动程序的计算机,版本信息由以下人员提供:
OpenGL version string: 3.0 Mesa 11.2.0
OpenGL shading language version string: 1.30
这不能在该系统上运行的原因是什么?
我知道它支持version 130
,编译不会产生错误。
可能有什么问题,或者,如何将此着色器更改为不需要version 130
?
以下是代码:
// Fragment Shader
#version 130 \n
\n
in vec4 texcoord;\n
\n
uniform uint width;\n
uniform uint height;\n
uniform usampler3D textureA;\n
\n
void main() {\n
uint x = uint(texcoord.x * float(width));\n
uint y = uint(texcoord.y * float(height));\n
uint shift = x % 8u;\n
uint mask = 1u << shift;\n
uint octet = texelFetch(textureA, ivec3(x / 8u, y % 256u, y /256u), 0).r;
uint value = (octet & mask) >> shift;\n
if (value > 0u)\n
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n
else\n
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n
}