问题:在Mac OS X 10.6上使用OpenGL停止渲染

时间:2011-03-18 17:17:48

标签: cocoa macos opengl core-animation

我一直遇到问题,在花了一周时间尝试各种解决方案并撕掉我的头发之后,我来到这里看看是否有人可以帮助我。

我正在研究Mac的3D浏览器插件(我有一个适用于Windows的插件)。唯一完全硬件加速的方法是使用CAOpenGLLayer(或从中继承的东西)。如果创建了NSWindow并将图层附加到该窗口的NSView,则一切正常。但是,出于某种原因,我只能在将图层传递到浏览器时获得特定数量的帧(16)。

Cocoa在前16帧中调用我的图层的drawInCGLContext。然后,由于某种未知的原因,它停止调用它。 16似乎是一个非常具体的 - 程序化的 - 帧数,所以我想知道是否有人有任何理解为什么在16帧之后不会调用drawInCGLContext?

我有理由相信这不是因为我将图层传递到浏览器中 - 我创建了一个非常小的示例插件,它使用CAOpenGLLayer呈现旋转四边形并且实际上有效。但是完整的插件比这复杂得多,我只是不知道在哪里看。我只是不知道为什么drawInCGLContext停止被调用。我尝试使用CATransaction强制它,它肯定会发送setNeedsDisplay消息 - 但永远不会调用drawInCGLContext。 OpenGL也没有报告任何错误(我目前正在检查所有OpenGL调用的结果)。我糊涂了!帮助

1 个答案:

答案 0 :(得分:2)

因此,对于将来遇到此问题的其他人:您正在尝试使用drawInCGLContext之外的OpenGL上下文进行绘制。代码中有一个错误,几乎所有的绘图都是从正确的位置(drawInCGLContext)发生的,但是一个代码路径导致它在那里渲染。

不会引发错误,glGetError也不会返回任何问题。它只是停止渲染。所以,如果你遇到这种情况 - 你几乎肯定会犯同样的错误!

相关问题