如何从 OpenGL 纹理创建 CVOpenGLTextureRef
我有一个使用 OpenGL 和 Core Video 的小项目设置。我渲染到 FBO 并将其用作程序其他部分的纹理,但以 CVOpenGLTextureRef 的形式传递此纹理引用会更好。但我找不到任何有用的文档如何从纹理名称和目标创建此数据类型(不复制任何数据)。
I have a little Project setup using OpenGL and Core Video. I render to a FBO and use this as a Texture for other parts of the Programm, but it would be nicer to pass this Texture reference in form of a CVOpenGLTextureRef . But i cant find any Useful doumentation how to create this datatype from a Texture Name and Target (without copying any data).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据我了解,要从 OpenGL 上下文读取数据,您需要使用 CVOpenGLBufferRef(这是一种 CVImageBufferRef 类型)。文档声称这些包装 pbuffer,但我猜它们可以与 FBO 一起使用。我没试过。
要渲染来自
CVOpenGLBufferRef
的数据,您需要使用CVOpenGLTextureCacheRef
将其绘制到纹理,它管理一组CVOpenGLTextureRef
。如果您只想绘制未修改的缓冲区内容,那么在 OpenGL 中工作可能会更有效。 (请注意,如有必要,您可以使用共享组在上下文之间共享纹理/缓冲区。)
如果您确实需要在上下文之间调整缓冲区,并且不希望使用 Core 获得的所有蓬松的高级抽象和有用的文档视频,您可能想了解一下 IOSurface 和 CGLIOSurface。
As I understand it, to read data from an OpenGL context, you need to use a
CVOpenGLBufferRef
(which is a type ofCVImageBufferRef
). The documentation claims that these wrap pbuffers, but I would guess they work with FBOs. I haven’t tried it.To render the data from a
CVOpenGLBufferRef
, you need to draw it to a texture using aCVOpenGLTextureCacheRef
, which manages a set ofCVOpenGLTextureRef
s.If you only want do draw the unmodified buffer contents, it’s probably more efficient to work within OpenGL. (Note that you can share textures/buffers between contexts using share groups, if necessary.)
If you do need to shuffle buffers around between contexts, and don’t want all that fluffy high-level abstraction and helpful documentation that you get with Core Video, you might want to look into IOSurface and CGLIOSurface.