GPU图形与shader:[6]CG表达式与控制语句

按照操作符的功能可以划分为:关系操作符、逻辑操作符、条件操作
符。

关系操作符

  • 01

    关系操作符,用于比较同类型数据(不同类型的基础数据需要进行类型转换,不同长度的向量,不能进行比较)之间的大小关系或者等价关系。 Cg中有6种关系操作符,如表 1所示, 关系操作符运 bool类型。

  • 02

    关系操作符  功能  用法 <  小于  expr < expr <=  小于或等于  expr <= expr !=  不等于  expr != expr ==  等于  expr == expr >=  大于或等于  expr >= expr >  大于  expr > expr

  • 03

    Cg语言表达式允许对向量使用所有的boolean operator,如果 则被操作的两个向量的长度必须一致。表达式中向量的每个分量 运 bool类型的向量,长度和操作数向 float3 a = float4(0.5, 0.0, 1.0); float3 b = float4(0.6, -0.1, 0.9); bool3 c = a<b; 运 c的结果为float3(true, false, true);

逻辑运算符

  • 01

    Cg语言中有3种逻辑操作符(也被称为boolean Operators),如表 2所示,逻辑操作符运bool类型。 逻辑操作符  功能  用法 &&  逻辑与  expr && expr ||  逻辑或  expr || expr !  逻辑非  !expr 表 2 逻辑操作符

  • 02

    有一点需要注意:Cg中的逻辑与(&&)和逻辑或(||)不存在C中的短路现象(shortcircuiting,即只用计算一个操作数的bool值即可),而是参与运算的操作数据都进行bool分析。

数学操作符

  • 01

    cg语言对向量的数学操作提供了内置的支持  Cg中的数学操作符有:*乘法/除法;-取反+加法; %求余;++; *=;/=;+=;-=;后面四运算被归纳到赋值运算符 不过它们实际上进行数学计算,然后进行赋值,所以这里也放入数学操作符中进行说明。

  • 02

    需要注意的是:求余操作符%。只能在int类型数据间进行,否则编译器会提 示错误信息: error C1021: operands to “%” must be integral.

    移位操作符

    • 01

      Cg语言中的移位操作符,功能和C语言中的一样,也可以作用在向量上,但 是向量类型必须是int类型。例如: int2 a = int2(0.0,0.0); int2 b = a>>1;

    Swizzle操作符

    • 01

      可以使用Cg语言中的swizzle操作符(.)将一个向量的成员取出组成一个新 的向量。swizzle操作符被GPU硬件高效支持。swizzle操作符后接x、y、z、w, 分别表示原始向量的第一个、第二个、第三个、第四个元素;swizzle操作符后接 r、g、b和a的含义与前者等同。不过为了程序的易读性,建议对于表示颜色值的 向量,使用swizzle操作符后接r、g、b和a的方式。 举例如下: float4(a, b, c, d).xyz    等价于  float3(a, b, c) float4(a, b, c, d).xyy    等价于  float3(a, b, b) float4(a, b, c, d).wzyx   等价于  float4(d, c, b, a) float4(a, b, c, d).w      等价于  float d

    • 02

      要从数组中取值要用[]符号。例如: float a[3] = {1.0,1.0,0.0}; float b = a[0]; //正确 float c = a.x; //编译会

      条件操作符

      • 01

        条件操作符的语法格式为: expr1 ? expr2 : expr3; expr1的计算结果为true或者flase,如果是true,则expr2执行运算,否则 expr3 被计算。

        运算符优先级

        • 01

          Cg语言中操作符的优先顺序如表 3所示,从上到下表示从高级到低级的优 先级;同一行的操作符具有同等优先级。该表参考了Cg教程_可编程实时图形权 威指南第3.3.1节。 操作符  结合律  功能 () [] -> .  从左到右  函数调用、数组引 用、结构引用、成员 选择 ! ~ ++ - + - * &  从右到左  一元操作符:取反、 (type) sizeof  增加、减少、正号、 负号、间接、地址、 转换 * / %  从左到右  乘法、除法、余数 + -   从左到右  加法、减法 <<  >>  从左到右  移位操作符 < >= > >=  从左到右  关系操作符 ==  !=  从左到右  等于,不等 &  从左到右  位操作符与 ^  从左到右  位操作符异或 |  从左到右  位操作符或 &&  从左到右  逻辑与 ||  从左到右  逻辑或 ?:  从右到左  条件表达式 = += -= *= /= %=  从右到左  赋值、赋值表达式 &= ^= != <<= >>= ,  从左到右  逗号操作符

        控制流语句

        • 01

          程序最小的独立单元是语句(statement),语句一般由分号结尾,缺省情况 下,语句是顺序执行的,但是当涉及逻辑判断控制时,就要求有控制流程序语句。 控制流程序语句分为条件语句和循环语句,在C语言中,条件语句有if、if-else、 switch等,而循环过程则由while、do-while和for语句支持。Cg中的控制流语句和 循环语句与C语言类似:条件语句有:if、if-else;循环语句有:while、for。break 语句可以和在for语句中使用。

        • 02

          Cg语言中的控制流语句要求其中的条件表达式返回值都是bool类型,这一点 是与C语言不同之处(C语言中,条件表达式返回值可以是0、1) vs_2_x, vp30和vp40这些profile支持分支指令(又称转移指令,branch instruction),for和while循环指令在这些profile中被完全支持。在文献【3】中提 到:

        • 03

          profiles中,for和while循环只有当确切的知道循环次数时才能被使用”。但经过试验,如果使用“ fp40和ps_3_0之前的”片段profiles编译含义for, while语句时会出现错误提 error c6003:instruction limit of exceeded……。因此,如果没有确切的把握,不要在低级的profiles中使用循环控制语句。 同样,return只能作为最后一条语句出现。函数的递归调用(recursion)在 Cg语言中是被禁止的。Switch 、case和default在Cg中作为保留关键字存在,但 是它们目前不被任何profile所支持。

        (0)

        相关推荐

        • gpu turbo如何开启

          gpu turbo如何开启呢?下面就跟小编一起来看一看吧. 操作方法 01 首先手机官方宣布,GPU Turbo技术用户招募开启,想体验GPU Turbo技术可以前往花粉俱乐部报名. 02 它打通EM ...

        • 菜鸟成长手册:帮你认识常见显卡基本参数

          显卡现在已经成为了电脑配件中最为重要的部分,特别对于热衷游戏的玩家而言,一张性能不错的显卡更是电脑的必备硬件。而在我们选购一张显卡之时,往往会看到许多相关的显卡信息,从显卡参数上反映出来,显卡参数成为 ...

        • 用好IE9浏览器 您必须要知道的九件事情

          全新的 IE9 为我们带来了新 JavaScript 引擎、GPU 硬件加速、子系统优化、全面支持最新网络标准、整合更多开发工具等等这些让人耳目一新的功能,但是你看到这些是不是觉得一头雾水?不知道说的 ...

        • 什么是Haswell

          英特尔于2013年6月4日在2013年第33届台北国际电脑展发布了第四代使用酷睿技术的处理器,代号为“Haswell”。Haswell处理器具备更强大的计算性能,与此同时功耗较此前三代的酷睿处理器产品 ...

        • 什么是Haswell?Haswell的新特性介绍

          英特尔于 2013年6月4日在2013年第33届台北国际电脑展发布了第四代使用酷睿技术的处理器,代号为“Haswell”。Haswell处理器具备更强大的计算性能,与此同时功耗较此前三代的酷睿处理器产 ...

        • 突破传统游戏性能 AMD平台联想G50-75m评测

          计算机发展到了今天,它已经不再是当初那个身材巨大、只限于政府部门享有的大家伙了。如今的它小巧却性能强劲、时尚且不乏完美细节,最具代表性的产品就是笔记本电脑。外观设计、结构材质、键盘接口等都在数十年的时 ...

        • 四核平板哪款好 4款新上市超值四核平板电脑推荐

          和手机一样,平板电脑在2012年也迎来了一次硬件升级高潮.其中,处理器是升级的"重头戏".在Nvidia等移动芯片制造商的鼎力支持下,Nvidia Tegra 3等型号的四核处理器 ...

        • 3000元A10-7890K网游娱乐电脑DIY配置推荐

          今天推荐的是一套旗舰APU方案,具备低功耗,性能够用特点,具体配置单如下. 一个APU顶俩 3000元A10-7890K网游娱乐电脑配置推荐 配件名称 品牌型号 参考价格 处理器 AMD APU A1 ...

        • 3000元最强APU电脑配置推荐 玩核显还是AMD好些

          玩核显还是AMD好些 3000元最强APU电脑配置推荐 配件名称品牌型号参考价格 处理器 AMD APU A10-7890K(盒)¥929 散热器 盒装自带-- 显卡 Radeon R7独显核心-- ...