2011-08-20 55 views
3

我一直想弄明白这一点,但这是我想要做的与我的NSOpenGLView。目前,NSOpenGLView覆盖了窗口的整个区域,我想在NSOpenGLView上添加按钮,nsviews和图像。我浏览网页,发现[myOpenGLView setWantsLayer:YES];可以让我做像[myOpenGLView addSubView:someView]这样的事情。嗯,这是我得到的结果:-setWantsLayer导致NSOpenGLView失真?

enter image description here

(有点坏榜样,因为我是看家庭盖伊,但证明了一个事实,即视频内存缓冲区抵达该处拦截)

正如你所看到的,它将一些视频内存缓冲区扭曲到窗口上。现在我正在做一些调试,问题在于-setWantsLayer。一旦我在我的代码中注释掉该行,所有的OpenGL东西都会正确显示。

enter image description here (这是我应该得到......)

所以我的问题是我怎么能正确地显示我的OpenGL视图,并在同一时间-addSubViews

苹果有这方面的工作被称为“LayerBackedOpenGLView”(http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html)的一个很好的例子项目,我一直在寻找它的好时机,我不知道我在里面做什么不同。我注意到的一件事是,不使用NSOpenGLView,Apple使用NSView并将类更改为子类NSOpenGLView的自定义类,同时我使用NSOpenGLView并将该类更改为自定义类,该类自动再次对NSOpenGLView进行子类化。不知道这是否会导致任何问题,但如果将其更改为NSView,我仍然会遇到同样的问题。

任何帮助,非常感谢!

+2

嫁给我和IIIII会买youuuu cheeeewwwwwwing guuum! ;-) –

回答

2

我自己也有同样的问题,但通过阅读示例代码ReadMe解决了这个问题。您需要在您的NSOpenGLView子类中实现-drawRect:。没有它,层支持不被支持。

因此,执行-drawRect并在那里执行绘制。一个令人讨厌的事情是,你可能更好地将场景从openglview中分离出来。这就是他们在示例代码中所做的。