Using Integer Varying Variables in GLSL
We now can transfer varying variables between vertex shader and fragment shader in GLSL via 'GL_EXT_gpu_shader4' extension. But there's one thing important should be noticed: integer or unsigned integer(including according vectors and matrix) varying vaiables cannot be interpolated .
If we declare an integer varying variable like this:
01.varying uvec4 polygonID;
We will get a shader program link error.
So we should add a prefix 'flat' before to tell the shader do not interpolate them:
01.flat varying uvec4 polygonID;
We all know that we can use glShadeModel() to determine the flat color shade or smooth color shade. But this OpenGL API function can only affect the build-in varying variables like gl_FrontColor etc.. For user defined varying variables we shoud add 'flat' prefix in shader manually for the same purpose.
GLSL中运用整数型易变变量
通过'GL_EXT_gpu_shader4'扩展,我们能够在GPU的顶点着色器和片元着色器之间传递整数型易变变量(包括有符号和无符号),但是在实际应用中,有一点特别需要注意:整数型易变变量在管线中是无法进行插值计算的。
如果我们在shader中这样定义一个整型易变变量:
01.varying uvec4 polygonID;
我们会得到一个shader program 的连接错误(Link Error)。
因此我们需要在shader中的整型易变变量前加上'flat'的前缀,老告诉shader不对其进行插值计算:
01.flat varying uvec4 polygonID;
我们都知道可以通过glShadeModel()来决定是单色渲染(GL_FLAT)还是平滑渲染(GL_SMOOTH),但是这个API函数只会影响内建的颜色相关易变变量,如 gl_FrontColor 等。而对于用户自定义的易变变量,则需要在shader中,易变变量前加上'flat'前缀来关闭其插值计算。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wwybj/archive/2010/06/09/5659624.aspx