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

    文章

    6511

    浏览量

    87600
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112

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

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

收藏 人收藏

    评论

    相关推荐

    全局变量数据传递

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

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

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

    labview中若事件结构之间变量传递,应该怎么弄

    大家好,我在labview编程中遇到了一个问题,求帮助!!!!我设置了两个按钮,需要执行两个事件,可这两个事件之间需要变量传递,应该怎么解决这个问题?谢谢大神指点
    发表于 09-11 15:48

    共享变量 数据传递

    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

    Windows -编程-变量和常量之间的差异

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

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

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

    变量和常量之间的差异

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

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

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

    浅析python的变量类型

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

    C语言如何定义结构体类型变量

    在定义了结构体变量后,系统会为之分配内存单元。根据结构体类型中包含的成员情况,在Visual C++中占63个字节。 * 这种声明方式是声明类型和定义变量分离,在声明
    的头像 发表于 03-10 15:35 871次阅读