【问题标题】:How to Create a CVOpenGLTextureRef from a OpenGL Texture如何从 OpenGL 纹理创建 CVOpenGLTextureRef
【发布时间】:2011-08-13 17:53:55
【问题描述】:

我有一些使用 OpenGL 和 Core Video 的项目设置。我渲染到 FBO 并将其用作程序其他部分的纹理,但以 CVOpenGLTextureRef 的形式传递此纹理引用会更好。但我找不到任何有用的文档说明如何从纹理名称和目标创建此数据类型(无需复制任何数据)。

【问题讨论】:

    标签: cocoa opengl core-video


    【解决方案1】:

    据我了解,要从 OpenGL 上下文中读取数据,您需要使用 CVOpenGLBufferRef(CVImageBufferRef 的一种类型)。文档声称这些包装 pbuffers,但我猜它们与 FBO 一起使用。我没试过。

    要渲染来自CVOpenGLBufferRef 的数据,您需要使用CVOpenGLTextureCacheRef 将其绘制到纹理,该CVOpenGLTextureCacheRef 管理一组CVOpenGLTextureRefs。

    如果您只想绘制未修改的缓冲区内容,则在 OpenGL 中工作可能更有效。 (请注意,如有必要,您可以使用共享组在上下文之间共享纹理/缓冲区。)

    如果您确实需要在上下文之间移动缓冲区,并且不希望使用 Core Video 获得的所有蓬松的高级抽象和有用的文档,您可能需要研究 IOSurface 和 CGLIOSurface。

    【讨论】:

    • 嗯,是的,这就是我真正卡住的地方。如何告诉 CVOpenGlBufferRef 或 CVImageBuffer 引用由 (GlUint) 纹理名称指示的 OpenGl 纹理?例如 CIImage 就有这样的方法。问候
    • 那你为什么不问这个呢? CVOpenGLBufferAttach() 将使您渲染到指定 OpenGL 上下文中的任何内容都被绘制到您的 CVOpenGLBufferRef。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2011-01-28
    相关资源
    最近更新 更多