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 是不是保留传递的缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 Mat4 作为 rust 'glam' crate 中的浮点指针传递给 Opengl 调用 gl::UniformMatrix4fv?