码迷,mamicode.com
首页 > 其他好文 > 详细

关于GLSL中的限定符的一些记录

时间:2015-01-24 17:09:38      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

      glsl是什么就不多说了。这里只介绍一下glsl中一些限定符。

  glsl中包含两类具有定义性质的符号,一类是和c++中定义变量的一样的符号,用来说明存放数据的类型,如float,int,bool。还有一类是的功能类似于c++中的private,protect,public,是用来说明变量被访问的方式,glsl中常用的限定符包含三个,uniform,attribute 以及 varying,称为限定符(还有一个const,就不多说了)。

      uniform限定了该变量是随着图元变化而变化的,也就是说在一个图元被光栅化过程中是不会变的。

  attribute限定了该变量是随着顶点变化而变化的,如,一个三角形图元,三个顶点的都可以绑定不同的attribute属性,但是三个顶点只能使用一个uniform属性。

  其中,attribute只能在 vertex shader中使用,而不能在 fragment shader中使用。uniform能在两种类型的shader中使用。但是,着两种限定符修饰的变量都是只读,不可写的。

  varying变量比较特殊了,这个限定符号修饰的变量作用主要是在vertex shader 和 fragment shader 之间进行传输数据的,在vertex shader中是读写都没有问题,但是在fragment  shader中只读不可写。并且,在从vertex shader到 fragment shader之间,要被固定流水线进行插值(个人感觉是在光栅化阶段进行插值的),并且插值方式采用的是透视校正方式完成的(和透视纹理映射一样),而不是线性插值。所以,varying变量不但被vertex shader改变,而且被固定流水线改变。

     可以看出来,三种限定符从图元角度来看是越来越精细的,uniform是对整个图元(面片)而言,attribute是对图元(面片)上的几个关键点而言,varying则精细到了图元(面片)中的任何一个点。同时,在glsl中也使用上述三种限定符定义了一些内置的变量,免去了很多麻烦。

     这里提一下,在glsl中定义了两个gl_color变量,一个是attribute修饰,只在vertex shader中使用,还有一个是varying修饰的,只在fragment shader中使用,所以不冲突,并且varying修饰的gl_color是由gl_frontColor 和gl_backColor自动转变的。

关于GLSL中的限定符的一些记录

标签:

原文地址:http://www.cnblogs.com/BlackWalnut/p/4246029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!