GLSL中几个修饰符的简单讲解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GLSL中几个修饰符的简单讲解相关的知识,希望对你有一定的参考价值。

参考技术A uniform
attribute
varying

Uniform 外部application传递给vertex/fragment shader变量修饰。
A。他是通过 glUniform**()
B. 在Uniform、vertex, fragment shader程序内部,Uniform和contst类型,不能被shader修改

注意
1.被uniform修饰的变量,只能被shader使用,不能写入
2.如果uniform在vertex/fragment 两者的声明方式一样,则他们可以被vertex/fragment共享。理解为:

uniform float a; 在顶点着色器和片源着色器写的一模一样

使用场景:
1.变换矩阵、材质、光照、颜色等

使用:

uniform:修饰符 mat4:类型 viewProjMatrix:变量名
uniform mat4 viewProjMatrix; // 投影与视图模型矩阵
uniform mat4 viewMatrix; // 模型视图矩阵
uniform mat4 lightPosition; // 光源位置

1.attribute变量,只能在vertex Shader中使用。(不能在片源着色器中使用和声明)
2.在application中glBindAttribLocation()函数,来绑定每个变量的位置,
然后再使用glVertexAttribPointer()为变量赋值,
可以使用glGetAttribLocation来获取变量

使用场景:
1.顶点坐标、法线、纹理坐标、顶点颜色等等

使用:
attribute vec4 a_position;

gl_position = a_position * viewProjMatrix;

varying:是vertex与fragment shader之间做数据传递使用。如果需要做传递,则必须保证vertex shader与 fragment shader中两者的声明
必须保持一直(修饰符,类型,变量名)否则,不可以实现数据传递。

使用场景:
1.纹理坐标、顶点颜色等等

以上是关于GLSL中几个修饰符的简单讲解的主要内容,如果未能解决你的问题,请参考以下文章

Java中各种(类方法属性)访问修饰符与修饰符的简单说明

java 方法可以包含的修饰符的最大数量是多少?

C++ const修饰符的简单介绍

__weak 修饰符

swift中填充修饰符的默认值是多少?

访问修饰符与可选修饰符static的使用