【问题标题】:Problem: Rendering stops with OpenGL on Mac OS X 10.6问题:在 Mac OS X 10.6 上使用 OpenGL 停止渲染
【发布时间】: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


    【解决方案1】:

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

    不会引发错误,glGetError 也不会返回任何问题。它只是停止渲染。所以如果这发生在你身上——你几乎肯定会犯我犯的同样的错误!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多