【发布时间】:2011-08-13 17:53:55
【问题描述】:
我有一些使用 OpenGL 和 Core Video 的项目设置。我渲染到 FBO 并将其用作程序其他部分的纹理,但以 CVOpenGLTextureRef 的形式传递此纹理引用会更好。但我找不到任何有用的文档说明如何从纹理名称和目标创建此数据类型(无需复制任何数据)。
【问题讨论】:
标签: cocoa opengl core-video
我有一些使用 OpenGL 和 Core Video 的项目设置。我渲染到 FBO 并将其用作程序其他部分的纹理,但以 CVOpenGLTextureRef 的形式传递此纹理引用会更好。但我找不到任何有用的文档说明如何从纹理名称和目标创建此数据类型(无需复制任何数据)。
【问题讨论】:
标签: cocoa opengl core-video
据我了解,要从 OpenGL 上下文中读取数据,您需要使用 CVOpenGLBufferRef(CVImageBufferRef 的一种类型)。文档声称这些包装 pbuffers,但我猜它们与 FBO 一起使用。我没试过。
要渲染来自CVOpenGLBufferRef 的数据,您需要使用CVOpenGLTextureCacheRef 将其绘制到纹理,该CVOpenGLTextureCacheRef 管理一组CVOpenGLTextureRefs。
如果您只想绘制未修改的缓冲区内容,则在 OpenGL 中工作可能更有效。 (请注意,如有必要,您可以使用共享组在上下文之间共享纹理/缓冲区。)
如果您确实需要在上下文之间移动缓冲区,并且不希望使用 Core Video 获得的所有蓬松的高级抽象和有用的文档,您可能需要研究 IOSurface 和 CGLIOSurface。
【讨论】:
CVOpenGLBufferAttach() 将使您渲染到指定 OpenGL 上下文中的任何内容都被绘制到您的 CVOpenGLBufferRef。