zoukankan      html  css  js  c++  java
  • Cg(C for Graphic)语言语义绑定方法(转)

    摘抄“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>];

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

  • 相关阅读:
    《白骨精学习法》 21世纪职场必备学习技巧
    英雄不问出处
    整理ArcSDE 安装过程出现问题以及解决方法系列
    ArcEngine9.1结合VS2005开发技巧2则
    推荐一界面控件DotNetBar(含附件)
    常用易忘记Oracle命令(待续)
    ArcSDE中间件技术的生命力(蔡晓兵)
    ArcSDE 的存储机制
    (收藏)ITPUB的ORACLE之常用FAQ V1.0
    ORA01691错误
  • 原文地址:https://www.cnblogs.com/eangulee/p/3623032.html
Copyright © 2011-2022 走看看