zoukankan      html  css  js  c++  java
  • GLSL 变量属性

    1. attribute变量
    为这个attribute变量指定一个位置(用无符号值表示):glBindAttribLocation
    利用这个“位置”来指定需要传给shader里的attribue变量的数据:glVertexAttribPointer

    2.uniform变量

    Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。首先,uniform是全局的(Global)。全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。第二,无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。

    我们通常在shaderProgram链接后获取一个uniform变量的位置,然后向这个位置传送数据(glGetUniformLocation/glUniform)。但是要特别注意的一点是:我们只有在启用了一个shaderProgram后,才能做这样的事情

    如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,导致最后编译出的版本中并不会包含它,这可能导致几个非常麻烦的错误

    注意,查询uniform地址不要求你之前使用过着色器程序,但是更新一个unform之前你必须先使用程序(调用glUseProgram),因为它是在当前激活的着色器程序中设置unform的。

    3.varying变量
    这个就是shader之间传递的变量类型了。传值时类型、名称相同

    当类型和名字都一样的时候,OpenGL就会把两个变量链接到一起,它们之间就能发送数据了(这是在链接程序对象时完成的)。

  • 相关阅读:
    rpmdb open failed 的解决办法
    centos7 搭建vsftpd服务并锁定用户的家目录
    centos7 搭建samba服务
    python检测是否为数字
    python的random模块
    利用python编写一个简单的猜数字游戏
    在centos7中利用kvm创建虚拟机并设置为桥接模式
    支付宝提现
    冒泡排序(数组排序)
    全选获取对应值
  • 原文地址:https://www.cnblogs.com/nanqiang/p/10205056.html
Copyright © 2011-2022 走看看