【发布时间】:2011-12-07 13:27:38
【问题描述】:
我正在为 Mac OS X 开发一个基于文档的应用程序。它是一种媒体播放器,但它不是播放音频或视频文件,而是应该打开包含指定 OpenGL 动画的元数据的文本文件。我想模仿 Apple 的 QuickTime X 窗口样式。这意味着,我必须自己完成所有窗口绘图,因为 Cocoa 没有合适的窗口样式。
有一件事让我很头疼:圆角通常出现在 Mac OS X 窗口上。我尝试使用无边框窗口掩码并使用一些 CGS 魔法 - 有一些允许窗口整形的私有 Apple 标头,但它们当然没有记录。我能够在窗户边缘切出矩形孔,但我不知道 Apple 是如何实现圆角的。
创建一个透明窗口并自己绘制框架不起作用,因为 OpenGL 视口始终是矩形的,而改变它的唯一方法是打开 NSOpenGLCPSurfaceOpacity 以获得 alpha 透明度,并使用模板缓冲区或着色器来切出边缘,这似乎是一大笔开销。
如果我将 OpenGLView 放入带有标题栏的标准 Cocoa 窗口中,则底部边缘是圆形的。这似乎发生在视图层次结构的 NSThemeFrame 阶段。任何想法如何做到这一点?
【问题讨论】:
-
您为什么认为走
NSOpenGLCPSurfaceOpacity路线会导致性能问题?对我来说似乎完全合理。永远不要假设。测试和配置文件。 -
@Rob 因为我在发布我的问题之前做了一些研究。事实证明,还有其他人似乎无法正确处理圆角。人们已经尝试过
NSOpenGLSurfaceOpacity,他们报告性能大幅下降。但我想我别无选择。 -
@cargath 仅仅因为其他人发帖说他们无法让某些东西工作并不能使它成为福音真理,你怎么知道他们正在做的其他事情没有错,你怎么知道没有成千上万的其他人没有遇到问题,只是没有发布他们的成功?就像 Rob 说的,测试和分析自己!
-
@JarrodRoberson 我做到了。在为模板缓冲区创建纹理以裁剪角落时,调整大小变得非常缓慢。这并不奇怪。当然我不能在调整大小时重绘 OpenGL,但这也不是一个理想的选择。
标签: cocoa quartz-graphics nswindow nsopenglview