3

我正在为 Mac OS X 开发一个基于文档的应用程序。它是一种媒体播放器,但不是播放音频或视频文件,而是应该打开包含指定 OpenGL 动画的元数据的文本文件。我想模仿 Apple 的 QuickTime X 窗口样式。这意味着,我必须自己完成所有的窗口绘图,因为 Cocoa 没有合适的窗口样式。

有一件事让我很头疼:圆角通常出现在 Mac OS X 窗口上。我尝试使用无边框窗口掩码并使用一些 CGS 魔法 - 有一些允许窗口整形的私有 Apple 标头,但它们当然没有记录。我能够在我的窗户边缘切出矩形孔,但我不知道苹果是如何实现圆角的。

创建一个透明窗口并自己绘制框架不起作用,因为 OpenGL 视口始终是矩形的,而改变它的唯一方法是打开 NSOpenGLCPSurfaceOpacity 以获得 alpha 透明度并使用模板缓冲区或着色器来切掉边缘,这似乎有很多开销。

如果我将 OpenGLView 放入带有标题栏的标准 Cocoa 窗口中,则底部边缘是圆形的。这似乎发生在视图层次结构的 NSThemeFrame 阶段。任何想法如何做到这一点?

4

2 回答 2

1

使用支持图层的视图,并在CALayer不可见的窗口中进行绘图。图层包括圆角和边框的自动处理。


背景CALayerCore Animation Programming Guide中。要为其创建图层NSView,您需要调用[view setWantsLayer:YES]. 您将创建 aCAOpenGLLayer并将其分配给使用setLayer:.

有关演示如何在其他层类型中使用的示例代码,请参阅CALayerEssentials 。CAOpenGLLayer

于 2011-12-07T13:47:14.600 回答
0

由于 Rob 的建议没有奏效,并且没有其他人参与讨论,我决定使用模板缓冲区来裁剪窗口角落。我通过从 windows 背景创建纹理并将其渲染到模板缓冲区中来做到这一点,丢弃所有透明像素。看起来不错,但调整窗口大小时速度很慢:/

于 2011-12-08T21:51:07.310 回答