glUniform*fv 是不是保留传递的缓冲区?

Posted

技术标签:

【中文标题】glUniform*fv 是不是保留传递的缓冲区?【英文标题】:Does glUniform*fv retains passed buffer?glUniform*fv 是否保留传递的缓冲区? 【发布时间】:2016-03-12 06:04:18 【问题描述】:

当我打电话给glUniform2fv 时会发生什么?

它是同步复制传递的缓冲区还是只是接受指针并稍后使用该数据?是否保留缓冲区?

换句话说:在函数中传递本地创建的或非保留的缓冲区是否安全,或者由我决定是否保持该缓冲区处于活动状态?

我在 ios/Mac 上使用 Objective-c 和/或 Swift 使用 OpenGL,我担心 GC (ARC) 会在发送到 GPU 之前吃掉我的缓冲区。

【问题讨论】:

When does OpenGL get finished with pointers in functions?的可能重复 【参考方案1】:

它是安全的,但是文档对此并不清楚,至少在https://www.opengl.org/sdk/docs/man/html/glUniform.xhtml找到的版本

它们保留通过调用 glUniform 分配给它们的值,直到 下一个成功的链接操作发生在程序对象上

【讨论】:

所以他们不抄袭?【参考方案2】:

glUniform 不使用任何缓冲区(如果我错了,请纠正我)。 根据https://www.opengl.org/sdk/docs/man/html/glUniform.xhtml,glUniform 调用修改了着色器程序中的变量。 在我看来,您可以将 Uniform 调用视为 C 中的“=”符号,例如 a=b;其中 a 是着色器程序中的统一,b 是程序中的变量。 (如果我的解释不恰当,请随时纠正我)

【讨论】:

以上是关于glUniform*fv 是不是保留传递的缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

将 glUniform 函数作为参数传递 (C++)

OpenGL 着色器错误 1282

是否可以将 Mat4 作为 rust 'glam' crate 中的浮点指针传递给 Opengl 调用 gl::UniformMatrix4fv?

带有顶点缓冲区的“访问冲突读取位置”

使用 Android 上的 OpenGL ES 2.0,在帧缓冲区上渲染时是不是可以保留多重采样?

OpenGL统一名称指针作为字符串[重复]