texelFetch适用于NDIVIA驱动程序,但不适用于Mesa

时间:2016-11-17 19:25:39

标签: linux opengl glsl

我将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
        }

0 个答案:

没有答案