摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”

语义绑定方法

入口函数输入\ 输出数据的绑定语义有4 四种方法(文献【3 】第260 页)

1.        绑定语义放在函数的参数列表的参数声明后面中:

[const] [in | out | inout]<type><identifier> [ : <binding-semantic>][=<initializer>]

其中, const 作为可选项,修辞形参数据; in 、 out 、 inout 作为可选项,说明数据的调用方式; type 是必选项,声明数据的类型; identifier 是必选项,形参变量名;一个冒号 “ : ” 加上一个绑定语义,是可选项;最后是初始化参数,是可选项。如下代码所示。形参列表中的参数一、参数二绑定到输入语义;参数三、参数四绑定到输出语义;尽管参数一和参数 3 的绑定语义词一样,但前者是输入语义,后者是输出语义,所以这两个参数数据所对应的硬件位置是不一样的。

void mian_v(float4 position_obj : POSITION,

float3 normal_obj : NORMAL,

out float4 oPosition : POSITION,

out float4 oColor  : COLOR,

uniform float4x4 modelViewProj)

{

………………

}

2.        绑定语义可以放在结构体( struct )的成员变量后面:

struct <struct-tag>

{

<type><identifier> [:<binding-semantic >];

};

举例如下,结构 C2E1v_Outpu 中的 2 个成员变量分别绑定到语义 POSITION 和 COLOR ,然后在 C2E1v_green 顶点程序入口函数中输出,所以 C2E1v_Outpu 中的语义是输出语义。

struct C2E1v_Output {

float4 position : POSITION;

float3 color   : COLOR;

};

C2E1v_Output C2E1v_green(float2 position : POSITION)

{

C2E1v_Output OUT;

OUT.position = float4(position,0,1);

OUT.color = float3(0,1,0);

return OUT;

}

3.        绑定语义词可以放在函数声明的后面,其形式为:

<type> <identifier> (<parameter-list>) [:<binding-semantic]

{

<body>

}

如下代码所示,顶点入口函数的声明后带有“ COLOR ”语义词,表示该函数需要反馈一个颜色值,所以函数的返回类型为 float4 ,函数体也必须以 return 语句结束。

float4 main_v(float4 position: POSITION,

out float4 oposition : POSITION,

uniform float4x4 modelViewProj):COLOR

{

oposition = mul(modelViewProj,position);

float4 ocolor = float4(1.0,0,0,0);

return ocolor;

}

4.        最后一种语义绑定的方法是,将绑定语义词放在全局非静态变量的声明后面。其形式为:

<type> <identifier> [:<binding-semantic>][=<initializer>];

这种形式的结构很不紧凑,也不利于代码的维护和阅读,所以并不常见,不建议读者使用。事实上,我在学习和研究过程中也很少碰到这种形式。

Cg(C for Graphic)语言语义绑定方法(转)的更多相关文章

  1. Cg(C for Graphic)语言语义词与语义绑定详述 (转)

    摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人” 语义词( Semantic )与语义绑定 ...

  2. 面向对象之(非)绑定方法,反射,isinstance与issubclass

    isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是类 cls 的对象 class Foo(object): pa ...

  3. Python编程-绑定方法、软件开发

    一.绑定方法与非绑定方法 1.绑定方法 绑定给谁,谁来调用就自动将它本身当作第一个参数传入 (1)绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_method( ...

  4. 完美的jquery事件绑定方法on()

    在讲on()方法之前,我们先讲讲在on()方法出现前的那些事件绑定方法: .live() jQuery 1.3新增的live()方法,使用方法例如以下: $("#info_table td& ...

  5. Python面向对象-类、实例的绑定属性、绑定方法和__slots__

    绑定属性 从之前的文章中,我们知道python是动态语言——实例可以绑定任意属性. 那如果实例绑定的属性和类的属性名一样的话,会是什么情况呢? >>> class Student(o ...

  6. python面向编程;类的绑定与非绑定方法、反射、内置方法

    一.类的绑定与非绑定方法 ''' 类中定义函数分为了两大类: 1. 绑定方法 特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法: 在类中定义函数没有被任何 ...

  7. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  8. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  9. Python绑定方法,未绑定方法,类方法,实例方法,静态方法

    >>> class foo(): clssvar=[1,2] def __init__(self): self.instance=[1,2,3] def hehe(self): pr ...

随机推荐

  1. SolidEdge 如何绘制零件图的剖视图

    1 点击检视-剖面,然后选择剖切面   2 比如要全剖,则绘制好方框之后点返回,选择方向.   选择剖切深度,然后预览即可   一个零件可以进行多次剖切

  2. poj1870--Bee Breeding(模拟)

    题目链接:点击打开链接 题目大意:给出一个蜂窝,也就是有六边形组成,从内向外不断的循环(如图).给出两个数的值u,v按六边形的走法,由中心向六个角走.问由u到v的的最小步数. 首先处理处每个数的坐标, ...

  3. 数组遍历 map()、forEach() 及 字符串切割 split() / 字符串截取 slice()、substring()、substr()

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...

  4. Json实现异步请求(提交评论)

    主要将代码粘贴,通过阅读代码理解当中的相关逻辑. html代码: <form id="form1" runat="server"> <p> ...

  5. 不是技术牛人,如何拿到国内IT巨头的Offer--转

    http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,N ...

  6. Oracle RAC cache fusion原理測试

    Oracle RAC cache fusion是RAC最核心的工作机制.他把全部实例的SGA虚拟成一个大的SGA区,每当不同的实例请求同样的数据块,这个数据块就须要在实例间进行传递. 那究竟什么时候传 ...

  7. openwrt 模拟i2c驱动(一)

    一:加载i2c driver kmod-i2c-core................................................ I2C support kmod-i2c-al ...

  8. [攻防实战]CTF大赛准备(手动注入sql)

    一.IIS write漏洞利用 先用工具扫描,再上传小马,使用菜刀连接即可. 思考点: 如何获知是一台IIS站点? 本例中上传的一句话木马是什么意思? <%eval request(" ...

  9. Flume接收器组的指数退避上限

    指数退避 agent.sinkgroups.sg1.sinks=k1,k2,k3agent.sinkgroups.sg1.processor.type=failoveragent.sinkgroups ...

  10. 搭建双系统后没有windows的引导程序

    因为安装linux系统前没有安装引导程序,导致安装了linux系统后进入linux系统没有windows的引导程序,网上找了很多解决办法,也不能说是不好使,只是作为新手小白来说有点难以理解,最后无意中 ...