【发布时间】:2011-03-18 17:17:48
【问题描述】:
我一直遇到问题,在花了一周时间尝试各种解决方案并扯掉我的头发之后,我来到这里看看是否有人可以帮助我。
我正在为 Mac 开发一个 3D 浏览器插件(我有一个可以在 Windows 上运行的插件)。唯一完全硬件加速的方法是使用 CAOpenGLLayer(或继承自它的东西)。如果创建了 NSWindow 并将图层附加到该窗口的 NSView ,则一切正常。但是,由于某种原因,当将图层传递到浏览器时,我只能获得特定数量的帧 (16) 来渲染。
Cocoa 调用我层的前 16 帧的 drawInCGLContext。然后,由于某种未知的原因,它停止调用它。 16 似乎是一个非常具体且程序化的帧数,所以我想知道是否有人对为什么在 16 帧后不会调用 drawInCGLContext 有任何见解?
我有理由确定这不是因为我将图层传递到浏览器 - 我创建了一个非常小的示例插件,它使用 CAOpenGLLayer 呈现旋转四边形,并且确实有效。但是完整的插件比这复杂得多,我只是不知道去哪里找了。我只是不知道为什么 drawInCGLContext 停止被调用。我尝试使用 CATransaction 强制它,它肯定会发送 setNeedsDisplay 消息 - 但 drawInCGLContext 永远不会被调用。 OpenGL 也不报告任何错误(我目前正在检查所有 OpenGL 调用的结果)。我糊涂了!帮忙?
【问题讨论】:
标签: cocoa macos opengl core-animation