GLES2.0中文API-glUniform
名称
glUniform - 指定当前程序对象的统一变量的值
C规范
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);
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);
void glUniformMatrix2fv( GLint location,GLsizei countM,GLboolean transpose,const GLfloat *valueM);
void glUniformMatrix3fv( GLint location,GLsizei countM,GLboolean transpose,const GLfloat *valueM);
void glUniformMatrix4fv( GLint location,GLsizei countM,GLboolean transpose, const GLfloat *valueM);
参数
location
指定要修改的统一变量的位置。
v0,v1,v2,v3
指定要用于指定统一变量的新值。
count
指定要修改的元素数。 如果目标统一变量不是数组,则此值应为1;如果是数组,则应为1或更大。
value
指定指向将用于更新指定统一变量的count值数组的指针。
countM
指定要修改的矩阵数。 如果目标统一变量不是矩阵数组,则该值应为1;如果是矩阵数组,则应为1或更大。
transpose
指定在将值加载到统一变量时是否转置矩阵。 必须是GL_FALSE。
valueM
指定指向将用于更新指定统一变量的countM值数组的指针。
描述
glUniform修改统一变量或统一变量数组的值。要被修改值的location是由glGetUniformLocation返回的值。glUniform通过调用glUseProgram对程序对象进行操作,该程序对象是当前状态的一部分。
命令glUniform {1 | 2 | 3 | 4} {f | i}用于使用作为参数传递的值来更改由location指定的统一变量的值。命令中指定的数字应该与指定的统一变量的数据类型中的组件数相匹配(例如,1表示float,int,bool; 2表示vec2,ivec2,bvec2等)。后缀f表示正在传递浮点值;后缀i表示正在传递整数值,并且此类型还应与指定的统一变量的数据类型匹配。应使用此函数的i变体为定义为int,ivec2,ivec3,ivec4或这些变量的数组提供统一变量的值。f变量应该用于为float,vec2,vec3,vec4或这些类型的数组的统一变量提供值。 i或f变体可用于为bool,bvec2,bvec3,bvec4或这些的数组的均匀变量提供值。如果输入值为0或0.0f,则uniform变量将设置为false,否则将设置为true。
程序对象成功链接时,程序对象中定义的所有活动统一变量都初始化为0。它们保留通过调用glUniform分配给它们的值,直到程序对象上的下一个成功链接操作再次初始化为0时为止。
命令glUniform {1 | 2 | 3 | 4} {f | i} v可用于修改单个统一变量或统一变量数组。这些命令将个数和指针传递给要加载到统一变量或统一变量数组中的值。如果修改单个统一变量的值,则应使用1的计数,并且可以使用1或更大的计数来修改整个数组或数组的一部分。当从均匀变量数组中的任意位置m开始加载n个元素时,数组中的元素m + n-1将被替换为新值。如果m + n - 1大于统一变量数组的大小,则将忽略超出数组末尾的所有数组元素的值。命令名称中指定的数字表示每个元素的值的组件数,它应该与指定的统一变量的数据类型中的组件数相匹配(例如,1表示float,int,bool; 2表示vec2,ivec2,bvec2等)。命令名称中指定的数据类型必须与指定的统一变量的数据类型匹配,如前面对glUniform {1 | 2 | 3 | 4} {f | i}所述。
对于统一变量数组,数组的每个元素都被认为是命令名称中指示的类型(例如,glUniform3f或glUniform3fv可用于加载vec3类型的统一变量数组)。要修改的统一变量数组的元素数由count指定
命令glUniformMatrix {2 | 3 | 4} fv用于修改矩阵或矩阵数组。命令名称中的数字被解释为矩阵的维度。数字2表示2×2矩阵(即4个值),数字3表示3×3矩阵(即9个值),数字4表示4×4矩阵(即16个值)。假设每个矩阵按列主要顺序提供。 countM参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用计数1,并且可以使用大于1的计数来修改矩阵数组.
注意
glUniform1i和glUniform1iv是唯一可用于加载定义为采样器类型的统一变量的两个函数。使用任何其他函数加载采样器将导致GL_INVALID_OPERATION错误。
如果count\countM大于1且指示的统一变量不是数组,则会生成GL_INVALID_OPERATION错误,并且指定的统一变量将保持不变。
除了前面的异常之外,如果着色器中定义的统一变量的类型和大小与用于加载其值的命令名称中指定的类型和大小不匹配,则将生成GL_INVALID_OPERATION错误并生成指定的统一变量将保持不变。
如果location是一个非-1的值,并且它不表示当前程序对象中的有效统一变量位置,则将生成错误,并且不会对当前程序对象的统一变量存储进行任何更改。如果location等于-1,则将默认忽略传入的数据,并且不会更改指定的统一变量。
错误
GL_INVALID_OPERATION:没有当前程序对象
GL_INVALID_OPERATION:着色器中声明的统一变量的大小与glUniform命令指示的大小不匹配
GL_INVALID_OPERATION :如果此函数的整数变量之一用于加载float,vec2,vec3,vec4或其数组的统一变量,或者如果使用此函数的某个浮点变量来加载统一int,ivec2,ivec3或ivec4类型的变量,或者这些变量的数组。
GL_INVALID_VALUE:count<0
GL_INVALID_VALUE:transpose不是GL_FALSE
GL_INVALID_OPERATION:count大于1且指示的统一变量不是数组变量
GL_INVALID_OPERATION:使用glUniform1i和glUniform1iv之外的命令加载采样器
相关Gets
glGet 参数GL_CURRENT_PROGRAM
glGetActiveUniform 带有程序对象的句柄和活动的统一变量的索引
glGetUniform 程序对象的句柄和统一变量的位置
glGetUniformLocation 包含程序对象的句柄和统一变量的名称
另见
glLinkProgram,glUseProgram
版权
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glUniform.xml
https://blog.csdn.net/flycatdeng
Copyright © 1991-2006 Silicon Graphics, Inc.本文档的许可是根据SGI Free Software B License.详见http://oss.sgi.com/projects/FreeB/.
GLES2.0中文API-glUniform相关推荐
- GLES2.0中文API-glGet
名称 glGet - 返回所选参数的值 C规范 void glGetBooleanv( GLenum pname, GLboolean * params); void glGetFlo ...
- GLES2.0中文API-glGetActiveUniform
名称 glGetActiveUniform - 返回有关活动统一变量的信息 C规范 void glGetActiveUniform(GLuint program, GLuint index, GLsi ...
- GLES2.0中文API-glGetUniformLocation
名称 glGetUniformLocation- 返回统一变量的位置 C规范 GLint glGetUniformLocation(GLuint program,const GLchar *name) ...
- GLES2.0中文API-glUseProgram
名称 glUseProgram- 使用程序对象作为当前渲染状态的一部分 C规范 void glUseProgram(GLuint program); 参数 program 指定程序对象的句柄,该程序对 ...
- GLES2.0中文API-glTexImage2D
名称 glTexImage2D- 指定一个二维的纹理图片 C规范 void glTexImage2D(GLenum target, GLint level, GLint internalformat, ...
- GLES2.0中文API-glReadPixels
名称 glReadPixels - 从帧缓冲区中读取一个像素块 C规范 void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei heigh ...
- GLES2.0中文API-glCopyTexImage2D
名称 glCopyTexImage2D - 将像素复制到2D纹理图像中 C规范 void glCopyTexImage2D( GLenum target, GLint level, ...
- GLES2.0中文API-glTexParameter
名称 glTexParameter - 设置纹理参数 C规范 void glTexParameterf(GLenum target,GLenum pname,GLfloat param); void ...
- GLES2.0中文API-glFramebufferTexture2D
名称 glFramebufferTexture2D - 将纹理图像附加到帧缓冲对象 C规范 void glFramebufferTexture2D(GLenum target, GLenum atta ...
最新文章
- css 文字过长 省略号,css实现文字过长显示省略号的方法
- python tablewidget综合实例_python – 仅通过单击行标题选择QTableWidget行
- 架构设计器_MySQL:数据库结构优化、高可用架构设计、数据库索引优化
- opencv 采用 matplot 显示图片
- ModuleNotFoundError: No module named 'tinymce
- PHP json_encode
- ue4 后期处理景深_珠宝摄影教程——后期修图景深合成(如何完全把珠宝全部拍清晰)...
- 单链表(线性表的链式存储)---C语言版
- n-3000系列串口服务器,串口转网络,网络转串口
- 原生js和jquery 获取文档高度
- 强制退出Mac程序的六种方法
- 2023年安徽省职业院校“磐云杯”网络安全竞赛任务书
- vue文件如何引入icon图标并使用
- powerdesigner CDM中联系理解
- u盘显示有内存点开却什么都没有?
- 用PanDownload出现无法下载文件,资源分配失败
- Jlink的SW下载模式
- Git教程 - 密钥配置
- Fegin远程调用示例实战
- Python:Matplotlib库绘制散点图和折线图
热门文章
- 地下水位监测预警方案 | 助力城市排水信息化
- 微信小程序电商实战项目
- 页面不调转改变浏览器地址栏的方法
- ps切图(6)——参考线及辅助
- 1. oralce数据库安装以及简单的SQL语句
- java课程设计atm机_java课程设计报告-自动取款机模拟程序.doc
- css简单样式(旋转正方形、纸片旋转、轮播图3D、简单轮播图)
- 【二开】【JeecgBoot】修改分页参数
- PHP设置文本框背景透明度,话说半透明文本框!(不透明度可以任意调节,可以实现全透明)...
- 并发编程后记_什么是后记? 它与我的打印机有什么关系?