OpenGLES---GLSL学习

{GLSL
	0:GLSL介绍
	1:常用的数据类型
	2:修饰符
	3:内置变量/函数
	4:表达式
		1:操作符
		2:数组访问
		3:构造函数
		4:成分选择
	5:控制流
		1:循环(for,while,dowhile)
		2:条件(if/else)
		3:退出片段着色器(discard)
	6:函数
}

{0:GLSL介绍
	三大主流高级编程语言
		HLSL 基于DirctX(High Level Shading Language)
		GLSL 基于OpenGL(OpenGL Shading Language)
		CG 基于NVIDIA公司和C for Graphic简称
}

{1:常用的数据类型

	bool 布尔变量
	int  整形(代表至少包含16位的有符号的整数。可以是十进制的,十六进制的,八进制的。)
	float 单精度浮点数
	double 双精度浮点数

	向量:包含n个布尔
	bvec2 包含2个布尔成分的向量
	bvec3 包含3个布尔成分的向量
	bvec4 包含4个布尔成分的向量

	向量:包含n个整型
	ivec2 {x,y} 包含2个整型成分的向量
	ivec3 {x,y,z}包含3个整型成分的向量
	ivec4 {x,y,z,w}包含4个整型成分的向量

	向量:包含n个整型
	vec2 {x,y} 包含2个整型成分的向量
	vec3 {x,y,z} 包含3个整型成分的向量
	vec4 {x,y,z,w} 包含4个整型成分的向量
		{x,y,z,w}
		{r,g,b,a}
		{s,t,p,q}

	矩阵:
	mat2x2  mat2x2(2x2的浮点数矩阵类型)
	mat2x3  mat2x3 2列3行的浮点矩阵(OpenGL的矩阵是列主顺序的)
	mat2x4  mat2x4 2列4行的浮点矩阵

	矩阵:
	mat3x2  mat3x2 3列2行的浮点矩阵
	mat3x3  或者mat3x3(3x3的浮点数矩阵类型)
	mat3x4  mat3x4 3列4行的浮点矩阵

	mat4x2  mat4x2 4列2行的浮点矩阵
	mat4x3  mat4x3 4列3行的浮点矩阵
	mat4x4  mat4x4 4x4的浮点矩阵

	sampler1D 用于内建的纹理函数中引用指定的1D纹理的句柄。只可以作为一致变量或者函数参数使用
	sampler2D 二维纹理句柄
	sampler3D 三维纹理句柄
	samplerCube cube map纹理句柄(立体图,例如看镜子上的图片就是立体图)
	sampler1DShadow 一维深度纹理句柄
	sampler2DShadow 二维深度纹理句柄
}

{2:修饰符

变量的声明可以使用如下的修饰符

	precision 浮点精度
		lowp 低精度 
		mediump 中精度
		highp 高精度
	例如:
	precision  lowp  float //浮点精度低精度 float


	修饰符        描述
	const      常量值必须在声明是初始化。它是只读的不可修改的。
	attribute  表示只读的顶点数据,只用在顶点着色器中。数据来自当前的顶点状态或者顶点数组。它必须是全局范围声明的,不能再函数内部。
				一个attribute可以是浮点数类型的标量,向量,或者矩阵。不可以是数组或则结构体
	uniform  一致变量。在着色器执行期间一致变量的值是不变的。
			与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。
			一致变量在顶点着色器和片段着色器之间是共享的。它也只能在全局范围进行声明

	varying   顶点着色器的输出。例如颜色或者纹理坐标,(插值后的数据)作为片段着色器的只读输入数据。
				必须是全局范围声明的全局变量。可以是浮点数类型的标量,向量,矩阵,不能是数组或者结构体。
	centorid varying  在没有多重采样的情况下,与varying是一样的意思。在多重采样时,
						centorid varying 在光栅化的图形内部进行求值而不是在片段中心的固定位置求值。

	invariant (不变量)用于表示顶点着色器的输出和任何匹配片段着色器的输入,在不同的着色器中计算产生的值必须是一致的。
				所有的数据流和控制流,写入一个invariant变量的是一致的。编译器为了保证结果是完全一致的,需要放弃那些可能会导致不一致值的潜在的优化。
				除非必要,不要使用这个修饰符。在多通道渲染中避免z-fighting可能会使用到。

	in  	用在函数的参数中,表示这个参数是输入的,在函数中改变这个值,并不会影响对调用的函数产生副作用。
			相当于C语言的传值),这个是函数参数默认的修饰符
	out 	用在函数的参数中,表示该参数是输出参数,值是会改变的
	inout 	用在函数的参数,表示这个参数即是输入参数也是输出参数


个人总结:
	变量修饰符
		uniform 全局变量(由外部程序传递给vertex和fragment Shader的变量)
		attribute 局部变量(只能在顶点Shader中用)
			可以 	浮点数类型的标量,向量,或者矩阵。float,vec2,mat
			不可以   数组或则结构体

		varying 共享变量(vs和fs共享用)
			可以 	浮点数类型的标量,向量,或者矩阵。float,vec2,mat
			不可以   数组或则结构体
			
			以下是例子:
				const char* vs  = {
						...
					"attribute  vec4    _color;\n"
					"varying    vec4    _outColor;\n"
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值