14 WebGL 着色器编程语言GLSL ES的预处理指令

GLSL ES支持预处理指令。预处理指令用来在真正编译之前对代码进行预处理,都以井号(#)开始。下面就是我们曾使用的预处理指令。

#ifdef GL_ES
    precision mediump float;
#endif
这段代码检查了是否已经定义了GL_ES宏,如果是,那就执行#ifdef和#endif之间的部分。这个预处理指令的格式和C语言或JavaScript中的if语句很类似。

下面是我们在GLSL ES中可能用到的三种预处理指令。

你可以使用#define指令进行宏定义。和C语言中的宏不同,GLSL ES中的宏没有宏参数:

#define 宏名 宏内容
你可以使用#undef指令解除宏定义:

#undef 宏名
你可以使用#else指令配合#ifdef(就像C语言或JavaScript中if语句中的else),比如:

宏的名称可以任意起,只要不和预定义的内置宏名称(表6.17)相同即可。


所以,我们可以这样使用宏来进行精度限定:

#ifdef GL_ES
    #ifdef GL_FRAGMENT_PRECISION_HIGH
        precision highp float; //支持高精度,限定浮点型为高精度
    #else
        precision mediump float; //不支持高精度,限定浮点型为中精度
    #endif
#endif
可以使用#version来指定着色器使用的GLSL ES版本:

#version number
可以接受的版本包括100(GLSL ES 1.00)和101(GLSL ES 1.01)。如果不适用#version 指令,着色器将默认GLSL ES的版本是1.00。指定1.01版本的代码如下:

#version 101
#version指令必须在着色器顶部,在它之前只能有注释和空白。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值