NSTextField超过NSOpenGLView

Chr*_*cke 11 opengl cocoa nsopenglview

我创建了一个带有NSOpenGLView的窗口,我正在将OpenGL内容渲染到其中.

我想在视图中添加一些按钮和文本字段:我可以使用界面构建器(或代码)添加NSTextFields和NSButton,但它们不会出现.

NSOpenGLView被记录为无法拥有子视图,因此我通过直接从NSView派生并实现代码来创建和使用NSOpenGLContext来创建我自己的CustomGLView.但是子视图仍然没有出现: - OpenGL上下文描绘了它们.

在Windows上,这个问题不存在: - 用于托管OpenGL的Windows必须设置WS_CLIPCHILDRENWS_CHIPSIBLINGS设置样式,以确保OpenGL表面不会遮挡任何对等体或子子视图(视图).

如何在使用OpenGL绘制的NSView上显示子视图?

Mik*_*lah 6

你有2个选择:

  1. 为文本字段创建一个窗口.添加为托管OpenGL视图的窗口的子窗口.主要的缺点是,如果移动Open GL视图,您必须正确管理它的定位.

  2. 像这样设置视图层次结构:

    • 图层支持的视图
      • 层- 托管视图,其层中含有一个OpenGL层
      • 文本域


Fre*_*man 5

只需调用-setWantsLayer:YESNSOpenGLView的子视图.

  • 如果您这样做,请确保您分析您的代码.为NSOpenGLView添加CA层可能会导致巨大的性能损失.额外的内存和渲染时间与NSOpenGLView的大小成正比.对于我的项目(游戏),帧速率减半. (2认同)