图纸QT&x27;用OpenGL实现两次纹理分割

图纸QT&x27;用OpenGL实现两次纹理分割,opengl,quicktime,nsopenglview,openglcontext,Opengl,Quicktime,Nsopenglview,Openglcontext,我目前正在使用OpenGL在NSOpenGL视图中显示我的电影的帧。 为此,我使用以下代码创建纹理上下文: // Called from a subclass of NSOpenGLView QTOpenGLTextureContextCreate(kCFAllocatorDefault, (CGLContextObj)[[self openGLContext] CGLContextObj],

我目前正在使用OpenGL在NSOpenGL视图中显示我的电影的帧。 为此,我使用以下代码创建纹理上下文:

// Called from a subclass of NSOpenGLView
QTOpenGLTextureContextCreate(kCFAllocatorDefault,
                             (CGLContextObj)[[self openGLContext] CGLContextObj],
                             (CGLPixelFormatObj)[[self pixelFormat] CGLPixelFormatObj],
                             NULL, &_textureContext);
然后,我将视觉上下文指定给电影,以便它将帧绘制到该上下文中。 我用这一点得到了实际的帧:

OSStatus status = QTVisualContextCopyImageForTime(_textureContext, kCFAllocatorDefault,
                                                      NULL, &_currentFrameTex);
其中
\u currentFrameTex
是一个CVOpenGLTextureRef

所有这些都适用于一个视图,但我想在第二个视图上绘制相同的框架,我无法想象如何做到这一点


最简单的方法是什么?当然,它也应该被执行,因为它被称为每秒60次(至少)。

我建议您在创建NSOpenGLView时使用上下文共享

不幸的是,我对cocoa(NeXTSTEP)OpenGL窗口系统界面没有太多经验(我使用CGL/AGL),所以我不能确切地告诉您如何做到这一点。但是,的API参考可能会为您指明正确的方向

我建议上下文共享的原因是,您可以重复使用
CVOpenGLTextureRef
NSOpenGLView
实例中提供的纹理句柄。否则,您可能必须根据上下文(视图)获取
CVOpenGLTextureRef


在每个上下文中执行此操作的开销可能没有您想象的那么高,Core Video不必通过系统内存复制视频内容来为您提供OpenGL纹理-它在GPU上已经有了一个可以复制/参考的表面。

谢谢!成功了。虽然这听起来很简单,但我花了几个小时才把它修好,并使用了所有必要的锁。我仍然有一个问题,就是只要调整窗口的大小,显示器就不会更新帧。当我放开鼠标时,它又开始工作了。你知道我该怎么做才能让这一切顺利吗?