3

这就是我想用我的 NSOpenGLView 做的事情。目前 NSOpenGLView 覆盖了窗口的整个区域,我想在 NSOpenGLView 之上添加按钮、nsview 和图像。我浏览了网络,发现这[myOpenGLView setWantsLayer:YES];可以让我做类似[myOpenGLView addSubView:someView].

这是我得到的结果:

在此处输入图像描述

(有点不好的例子,因为我在看 Family Guy,但证明了视频内存缓冲区在这里被截获的事实)

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

这是我应该得到的:

在此处输入图像描述

所以我的问题是,如何同时正确显示我的 OpenGL 视图-addSubViews

Apple 有一个非常好的示例项目,名为“LayerBackedOpenGLView”(http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html),我一直在寻找它现在是美好的时光,我不知道我在做什么不同。我确实注意到的一件事是,Apple 没有使用 NSOpenGLView,而是使用 NSView 并将该类更改为子类 NSOpenGLView 的自定义类,而我使用 NSOpenGLView 并将该类更改为再次子类化 NSOpenGLView 的自定义类。不确定这是否会导致任何问题,但如果我将其更改为 NSView,我仍然会遇到同样的问题。

4

1 回答 1

2

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

因此,实施 -drawRect 并在那里进行绘图。一件令人讨厌的事情是,您最好将场景与 openglview 分开。这就是他们在示例代码中所做的。

于 2011-10-02T13:55:24.040 回答