[OpenGL]变量限定符-参数限定符-精度限定符

本文详细介绍了OpenGL ES中的变量限定符,包括存储限定符(如const、attribute、uniform、varying和invariant)、参数限定符以及精度限定符。存储限定符用于规定变量在着色器中的行为,如attribute用于顶点着色器输入,uniform用于存储应用程序传递的只读值,varying则在顶点和片段着色器之间传递数据。精度限定符允许开发者控制变量的计算精度,以平衡性能和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储限定符

在声明变量时,应根据需要使用存储限定符来修饰,类似 C 语言中的说明符。GLSL 中支持的存储限定符见下表:

限定符 描述
< none: default > 局部可读写变量,或者函数的参数
const 编译时常量,或只读的函数参数
attribute attribute类型的变量只有Vertex Shader才有。Attribute前辍修饰的变量定义的是每个Vertex的属性变量,包括位置,颜色,法线和纹理坐标,attribute 类型的变量在Vertex Shader中是只读的,只能由外部主机程序传入值。attribute 类型的变量:是为每个被正在画的顶点所指定的数据。在画图前,每个顶点的属性由应用程序输入。(它不能在fragment shader中声明attribute变量,也不能被fragment shader中使用)
uniform 在图元处理过程中其值保持不变,由应用程序传输给着色器;uniform前辍修饰的变量初始值由外部程序赋值。在program中具有统一访问空间,存储空间有限。在Shader中是只读的,只能由外部主机程序传入值。uniform变量可以在vertex和fragment共享使用。(相当于一个被vertex和fragment shader共享的全局变量);一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
varying 由顶点着色器传输给片段着色器中的插值数据;varying变量是vertex和fragment shader之间做数据传递用的。一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。因此varying变量在vertex和fragment shader二者之间的声明必须是一致的。application不能使用此变量。
  • 本地变量和函数参数只能使用 const 限定符,函数返回值和结构体成员不能使用限定符。
  • 数据不能从一个着色器程序传递给下一个阶段的着色器程序,这样会阻止同一个着色器程序在多个顶点或者片段中进行并行计算。
  • 不包含任何限定符或者包含 const 限定符的全局变量可以包含初始化器,这种情况下这些变量会在 main() 函数开始之后第一行代码之前被初始化,这些初始化值必须是常量表达式。
  • 没有任何限定符的全局变量如果没有在定义时初始化或者在程序中被初始化,则其值在进入 main() 函数之后是未定义的。
  • uniform、attribute 和 varying 限定符修饰的变量不能在初始化时被赋值,这些变量的值由 OpenGL ES 计算提供。

默认限定符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值