着色器中语义的理解

一、着色器语义只可能出现在3种位置

(1)结构体成员的后面

(2)函数的输入参数列表中,某个参数的后面

(3)函数的输入参数列表的后面,或者可以表述为函数声明的最后来修饰函数返回值的语义

 

二、语义的作用

和c语言不同的是,着色器语言如HLSL语言的入口函数(被API调用的函数)使用捆绑参数作为输入输出的语义(HLSL函数内部调用时忽略语义)。这样,使得捆绑缓冲区数据到Shader,和捆绑输入着色器Shader到输出着色器Shader,都变得更加容易。

说的通俗一点:各个部件各干各的工作,数据的来源和数据的输出全由语义控制,HLSL实际上不关心数据怎么来的和数据如何输出去,HLSL(着色器)只能看到自己内部的运算部件和寄存器。见下图:

由上图可以看出各个部件只关心自己内部的运算,数据的传递部分各个部件自己并不负责,数据传递由流水线根据语义负责。图中可以看出着色器的数据输入到底接收哪些数据由语义决定,到底输出哪些数据到外部的流水线上的寄存器也由语义决定。当然对应的着色器函数必须得有输入用的参数和输出用的函数返回值以表示出来数据的来源和输出。

由此,语义的作用也就体现出来了,比如顶点缓冲区中的数据可能多而乱,那么顶点着色器要怎样从顶点缓冲区中取得相应的数据呢?这就通过语义,从而轻松的从顶点缓冲区获得真正需要的数据。输出也一样,只要语义定义的数据输出,其它的中间运算结果等数据不需要了,就不输出。

 补充通用着色器原理图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值