【发布时间】:2016-07-19 11:01:57
【问题描述】:
为什么有这么多设置制服的功能?
glUniform1f glUniform2f glUniform3f glUniform4f
glUniform1fv glUniform2fv glUniform3fv glUniform4fv
glUniform1i glUniform2i glUniform3i glUniform4i
glUniform1iv glUniform2iv glUniform3iv glUniform4iv
glUniform1ui glUniform2ui glUniform3ui glUniform4ui
glUniform1uiv glUniform2uiv glUniform3uiv glUniform4uiv
glUniformMatrix2fv glUniformMatrix2x3fv glUniformMatrix2x4fv
glUniformMatrix3fv glUniformMatrix3x2fv glUniformMatrix3x4fv
glUniformMatrix4fv glUniformMatrix4x2fv glUniformMatrix4x3fv
我认为数据上传到顶点和元素缓冲区的方式更好,因为我不必为不同的类型调用不同的函数。 为什么制服会出现这种情况?有没有可能只使用一个函数,我可以只传递一个指针?
【问题讨论】:
-
因为C不支持函数重载。
-
@LogicStuff 我认为 OP 在问为什么它不像
glUniform_(location, GL_FVEC4, 1, pointer),而是glUniform4fv(location, 1, pointer)。实现这一点不需要函数重载。 -
@HolyBlackCat 完全正确!
-
@HolyBlackCat:但它有这个功能。
glUniform4fv可以做你所做的。它只需要一个值:一个数组计数,对于非数组类型(或长度为 1 的数组)必须为 1。所以目前还不清楚 OP 在抱怨什么。 -
@NicolBolas:不只有一个
glUniform(GLint location, GLenum datatype, GLsizei count, const GLvoid *data)调用基于datatype执行“正确的事情”。因此,如果您想加载一个包含两个 vec4 的数组,您可以执行glUniform(loc, GL_FLOAT_VEC4, 2, ptr);之类的操作(其中ptr指向 8 个浮点数)。
标签: c++ opengl glsl shader uniform