前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8.3 入口函数

8.3 入口函数

作者头像
代码咖啡
发布2018-09-29 15:06:20
1K0
发布2018-09-29 15:06:20
举报
文章被收录于专栏:程序员叨叨叨程序员叨叨叨

文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至简书平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

8.3 入口函数

所谓入口函数,即一个程序执行的入口,例如 C\C++程序中的 main()函数。

通常高级语言程序中只有一个入口函数,不过由于着色程序分为顶点程序片断程序,两者对应着图形流水线上的不同阶段,所以这两个程序都各有一个入口函数。

顶点程序和片段程序有且只有一个入口函数,当程序进行编译时,需要指定入口函数名称(参阅 4.4 节 CG 编译),除非入口函数名为 main。当我们编写或阅读 Cg 代码时,如何区分哪个函数是入口函数呢?或者哪个入口函数对应着顶点程序或片段程序?事实上,顶点程序和片段程序的入口函数形式,已经完全由它们在渲染管线中所处的阶段所决定。在前面已经阐述过,顶点程序接收应用程序传递的顶点数据(通常位于模型坐标空间),然后进行坐标空间转换和光照处理,后输出投影坐标和计算得到的光照颜色;而片段程序接收从顶点程序输出的数据,并进行像素颜色计算。在片段程序中往往涉及到纹理颜色的处理,其输入参数中常有纹理形参的声明。所以通过观察程序的输入输出语义绑定(参阅 7.5 节语义词与语义绑定),就可以区分入口函数对应到顶点程序还是片段程序。而内部函数则忽略任何应用到形参上的语义,通常也没有人会在内部函数使用语义词,除非他\她的目的是练习打字速度。

下面的代码展示了一个顶点程序的入口函数,名称为 C2E1v_green,这个顶点着色程序接收二维顶点数据,然后转换为齐次坐标(请思考,顶点和向量的齐次坐标有什么不同?齐次坐标的本质是什么?),并将该顶点设置为绿色,最后使用 return 语句输出。如果电脑安装了 Cg,该程序文件位于“NVIDIA Corporation\Cg\examples\OpenGL\basic\ 01_vertex_program\C2E1v_green.cg”目录下。

代码语言:javascript
复制
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;
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 8.3 入口函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档