【发布时间】:2011-09-13 13:12:21
【问题描述】:
我使用 Cocoa 编写了一个 3D 查看器。 OpenGL 渲染在一个单独的线程中执行,该线程创建自己的 NSOpenGLContext。
在没有图层处理的情况下,3D 视图 drawRect 方法在刷新时被调用,OpenGL 线程进行刷新,一切都完美运行...
现在,我必须使用 Cocoa 层来实现应用程序。创建 3D NSView 时,会创建 NSOpenGLLayer 的子类并将其附加到视图。方法
(void)drawInOpenGLContext:NSOpenGLContext *)ctx
pixelFormat:(NSOpenGLPixelFormat *)pixelFormat
forLayerTime:(CFTimeInterval)timeInterval
displayTime:(const CVTimeStamp *)timeStamp;
由 Cocoa 调用,但我无法让我的 OpenGL 线程渲染任何内容。
我曾尝试在 OpenGL 线程中使用传递给 drawInOpenGLContext 的 OpenGL 上下文,我尝试过这样做
[layer setOpenGLContext:ctx]
在 OpenGL 线程中使用线程中创建的 OpenGL 上下文,依此类推,但没有任何效果。
【问题讨论】:
标签: multithreading cocoa opengl calayer