zoukankan      html  css  js  c++  java
  • OpenGL ES之glUniform函数

    函数名:

    glUniform

    功能:

    为当前程序对象指定Uniform变量的值。(译者注:注意,由于OpenGL ES由C语言编写,但是C语言不支持函数的重载,所以会有很多名字相同后缀不同的函数版本存在。其中函数名中包含数字(1、2、3、4)表示接受这个数字个用于更改uniform变量的值,i表示32位整形,f表示32位浮点型,ub表示8位无符号byte,ui表示32位无符号整形,v表示接受相应的指针类型。 )

    函数原型:

    void glUniform1f(GLint location,  GLfloat v0); 
    
    void glUniform2f(GLint location,  GLfloat v0,  GLfloat v1); 
    
    void glUniform3f(GLint location,  GLfloat v0,  GLfloat v1,  GLfloat v2);
    
    void glUniform4f(GLint location,  GLfloat v0,  GLfloat v1,  GLfloat v2,  GLfloat v3); 
    
    void glUniform1i(GLint location,  GLint v0); 
    
    void glUniform2i(GLint location,  GLint v0,  GLint v1); 
    
    void glUniform3i(GLint location,  GLint v0,  GLint v1,  GLint v2); 
    
    void glUniform4i(GLint location,  GLint v0,  GLint v1,  GLint v2,  GLint v3);  

    参数列表:

    location:指明要更改的uniform变量的位置

    v0,v1,v2,v3:指明在指定的uniform变量中要使用的新值

    函数原型:

    void glUniform1fv(GLint location,  GLsizei count,  const GLfloat *value); 
    
    void glUniform2fv(GLint location,  GLsizei count,  const GLfloat *value); 
    
    void glUniform3fv(GLint location,  GLsizei count,  const GLfloat *value); 
    
    void glUniform4fv(GLint location,  GLsizei count,  const GLfloat *value); 
    
    void glUniform1iv(GLint location,  GLsizei count,  const GLint *value);
    
     void glUniform2iv(GLint location,  GLsizei count,  const GLint *value);
    
     void glUniform3iv(GLint location,  GLsizei count,  const GLint *value);
    
     void glUniform4iv(GLint location,  GLsizei count,  const GLint *value); 

    参数列表:

    location:指明要更改的uniform变量的位置

    count:指明要更改的元素个数。如果目标uniform变量不是一个数组,那么这个值应该设为1;如果是数组,则应该设置为>=1。

    vlaue:指定一个具有count个数值的数组指针,用来更新指定的uniform变量。

    函数原型:

    void glUniformMatrix2fv(GLint location,  GLsizei count,  GLboolean transpose,  const GLfloat *value); 

    void glUniformMatrix3fv(GLint location,  GLsizei count,  GLboolean transpose,  const GLfloat *value); 

    void glUniformMatrix4fv(GLint location,  GLsizei count,  GLboolean transpose,  const GLfloat *value); 

    参数列表:

    location:指明要更改的uniform变量的位置

    count:指明要更改的矩阵个数

    transpose:指明是否要转置矩阵,并将它作为uniform变量的值。必须为GL_FALSE。

    value:指明一个指向count个元素的指针,用来更新指定的uniform变量。

    描述:

    glUniform更改一个uniform变量或数组的值。要更改的uniform变量的位置由location指定,location的值应该由glGetUniformLocation函数返回。通过调用glUseProgram,glUniform操作的程序对象将成为当前状态的一部分。

    glUniform{1|2|3|4}{f|i}使用传进来的实参,修改通过location指定的uniform变量。

    所有在程序对象中定义的活动uniform变量,在程序对象链接成功后都会被初始化为0.直到下一次程序对象链接成功再一次被初始化为0前,它们将保留通过调用glUniform赋给它们的值。

    glUniform{1|2|3|4}{f|i}v可以用来更改单个uniform变量的值,或者一个uniform变量数组。

    glUniformMatrix{2|3|4}fv用来更改一个矩阵或一个矩阵数组。

    错误:

    GL_INVALID_OPERATION 没有当前程序对象;着色器中的uniform变量的尺寸和glUniform中指明的尺寸不一致;glUniform的整形变体加载float类型的uniform变量,或者float类型的变体加载整形的uniform变量;location不是当前程序对象的有效uniform位置,并且location的值不等于-1;count的值大于1,但是指明的uniform变量不是一个数组;如果采样器不是调用glUniform1i 和glUniform1iv。

    GL_INVALID_VALUE count小于0;transpose不是GL_FALSE。

  • 相关阅读:
    css:chorm调试工具(修改样式、重置缩放比例、错误提示、语法快速生成)
    多线程:线程不安全案例(买票、银行取钱、集合)
    css:选择器(标签、类、ID、通配符)
    多线程:(优先级、守护线程)
    多线程(线程的状态、终止、休眠、礼让、合并)
    html:标签(标题、段落、换行、文本格式化、图像)
    多线程:多线程的应用(网图下载、模拟售票、龟兔赛跑)
    Struts2
    框架、MVC、MVC框架
    html5、css3、BootStrap
  • 原文地址:https://www.cnblogs.com/Anita9002/p/4930341.html
Copyright © 2011-2022 走看看