0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

shader之间传递值用的变量类型

Dbwd_Imgtec 来源:未知 作者:李倩 2018-04-03 14:39 次阅读

shader的使用流程:

1. 编写vertex Shader和fragment shader源码。

2. 创建两个shader 实例:GLuint glCreateShader(GLenum type); [gl.createShader]

3. 给Shader实例指定源码。 glShaderSource [gl.shaderSource]

4. 编译shaer源码 void glCompileShader(GLuint shader) [gl.compileShader]

5. 创建shader program -- GLuint glCreateProgram(void) [gl.createProgram]

6. 绑定shader到program 。 void glAttachShader(GLuint program, GLuint shader)。每个program必须绑定一个vertex shader 和一个fragment shader。 [gl.attachShader]

7. 链接program 。 void glLinkProgram(GLuint program) [gl.linkProgram]

8. 使用porgram 。 void glUseProgram(GLuint program) [gl.useProgram]

attribute变量

attribute是顶点属性,每个顶点都会有,但只存在于vertex Shader中,由应用程序传入其值。

因为在链接program之前,attribute变量是还没有分配内存的,为了给shader中的attribute变量传值,首先需要将其绑定到program上,并指定他的位置attr_pos,链接program之后,可以通过这个位置attr_pos来给这个变量传值。加入shader中有一个

这样就将attr_name(字符串)绑定到了attr_pos(无符号值)位置。

这样就把vert_data传递给了attribute变量attr_name。

因为每个顶点属性的数据都依托在一个VBO中了,因此要想给一个attrbute变量传递数据,需要先把把数据交给一个VBO对象。

如果我们再链接program之前并没有指定他的位置,我们还可以去查找这个变量。

uniform变量

uniform变量在shader中时只读,随不同图元变化的全局变量,其值也由应用程序传入。

这样就可以给unif_pos设置1个浮点数的值,除glUniform1f之外,还可以使用如下方法:

可以看到,根据参数个数和类型不同,需要使用不同的方法设置。

varying变量

shader之间传递值用的变量类型了。在编写vertex shader 中写入,在fragment shader中只读出

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6876

    浏览量

    88810
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28328

原文标题:shader中的数据是怎么传递的?

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全局变量数据传递

    当两个独立的程序生成EXE文件后,它们之间全局变量就不能传递数据了吗,求解!
    发表于 07-13 13:38

    把局部变量从char或者short类型转换成int类型

    把局部变量从char或者short类型转换成int类型,可以改善性能并减小代码尺寸,其实,这种转换函数类型参数也有同样的效果,看下面的例子,将2个16位的
    发表于 08-14 14:45

    共享变量 数据传递

    labview生成安装程序(里面数据传递共享变量) 在本电脑上可以传递数据,安装到其他电脑上无法传递数据,何解?
    发表于 07-08 13:57

    利用共享变量在主机和RT终端上传递数据 求助求助

    利用共享变量在主机和RT终端上传递数据时,主机可以接受到RT终端上的数据,但在RT终端上接收不到主机传递的数据。但当两个RT终端之间共享
    发表于 11-04 09:52

    Orcad 与 PADs 之间传递

    弱弱的问下,有没有人成功把 Orcad 的 Value (带空格的,如:"10K 1%")传递给 PADs ?我试过只能传没用空格的,如“10K”,如果带空格的话, Orcad 输出网表后,在Pads 导入时会报错。。。无解
    发表于 05-17 19:45

    多个循环之间变量传递问题

    最近有一个项目涉及多个循环之间变量传递问题,在控制的过程中发现用局部变量,两个循环之间进行联锁时,布尔量反应有些延时,这样带来了一些通讯上的
    发表于 08-06 19:11

    如何存储指针类型的数据变量

    和*a的都输出,这时候printf输出的a就是一串数,十进制的,而*a就是b的,这时候我有个疑问,这个指针变量是以什么形式保存,或者说所有
    发表于 11-05 03:40

    Verilog 变量声明与数据类型

    ,wire型变量起到变量之间传递的作用。实例1:modulewire_bridge( inputa,b,ci, output y,co);
    发表于 08-10 14:01

    请问TMOS不同任务消息传递能否全局变量代替?

    TMOS不同任务之间的消息传递完全可以全局变量来代替,为何还要用消息传递的机制?全局
    发表于 08-08 06:04

    详细解读Python变量类型

    变量存储在内存中的。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存
    的头像 发表于 10-17 17:14 2671次阅读
    详细解读Python<b class='flag-5'>变量</b><b class='flag-5'>类型</b>

    变量和常量之间的差异

    Windows -编程-变量和常量之间的差异 无法更改变量可能会让您想起大多数其他语言都有的另一个编程概念:常量。与不可变变量一样,常量
    发表于 10-19 17:24 766次阅读

    STRUCT和UDT类型变量是什么意思

    STRUCT和UDT类型变量是表示一个完整结构或一个结构元素的结构化变量
    的头像 发表于 08-29 11:09 2140次阅读

    什么是变量

    System Verilog提供两组通用的数据类型:网络和变量(nets 和 variables)。网络和变量同时具有类型和数据类型特性。
    的头像 发表于 02-09 14:40 1087次阅读
    什么是<b class='flag-5'>变量</b>?

    浅析python的变量类型

    python不需要事先声明变量。 python的变量类型是在运行过程中自动决定的,不需要代码声明类型
    的头像 发表于 03-10 10:11 777次阅读
    浅析python的<b class='flag-5'>变量</b><b class='flag-5'>类型</b>

    ProConOS和机器人控制器之间的布尔交换

    $SOFTPLCBOOL[] ProConOS和机器人控制器之间的布尔交换 借助Mulitprog库KrcExVarLib的功能块,可以从数组变量中读取单个或多个,也可以将其写入数
    的头像 发表于 06-16 16:10 591次阅读