gpt4 book ai didi

c++ - OpenGL 统一函数 - 为什么这么多?

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:03 25 4
gpt4 key购买 nike

为什么设置Uniforms的函数那么多?

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

我认为数据上传到顶点和元素缓冲区的方式更好,因为我不必为不同的类型调用不同的函数。为什么 uniform 会出现这种情况?有没有可能只使用一个函数,我可以只传递一个指针?

最佳答案

后见之明总是 20/20,做出选择是为了与其他采用各种类型和维度的 vector 数据的函数保持一致。我指的是 glVertex ……当然。现在按值传递的最初原因是,在某些体系结构上,周围有足够的寄存器,这样在寄存器中按值传递更有效。编译器还可以优化前面的操作以在正确的寄存器中结束正确的值。

OpenGL 是 IrixGL 的后代,由 SGI 为其图形工作站和 Irix 操作系统开发。这些工作站使用了 MIPS 架构。 MIPS 的调用约定是 ( https://en.wikipedia.org/wiki/Calling_convention#MIPS )

The most commonly used[5] calling convention for 32 bit MIPS is the O32[6] ABI which passes the first four arguments to a function in the registers $a0-$a3; …

The N32 and N64 ABIs pass the first eight arguments to a function in the registers $a0-$a7; …

现在您已经知道了:在 MIPS 上,按值传递 vec4 元素实际上是一个非常明智的选择。特别是在没有顶点数组的 IrixGL 和 OpenGL-1.0 中,您必须进行大量的 glVertex 调用。

关于c++ - OpenGL 统一函数 - 为什么这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38456694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com