如果我使用标准的 NSWindow
来托管扩展所有窗口框架的 NSOpenGLView
,则窗口的两个底角会自动圆化。
当切换到NSBorderlessWindowMask
时,我必须自己处理圆角。
我已经实现了一个透明的自定义 NSWindow
和一个圆形的自定义 NSView
,它们都工作得很好。
之后,我通过将 NSOpenGLCPSurfaceOpacity
设置为 0 来实现透明的 NSOpenGLContext
。
如果我为 OpenGL 上下文设置颜色背景,则 View 会正确绘制,并且我会获得所需的圆角。
但是,由于该应用程序是一个电影播放器,因此我需要绘制与每个电影帧相对应的纹理。
当我这样做时(使用glTexCoord2f
和glVertex2f
),纹理被绘制到角落,因此图像被绘制到圆角之外,并且我松开了圆角我的 window 的侧面。
当窗口是标准的且我似乎无法重现的非NSBorderlessWindowMask
时,系统会做什么?
将纹理绘制到帧缓冲区时圆角的最佳方法是什么?
最佳答案
您可以将纹理应用于具有圆角的几何体,在具有圆角的影片纹理上使用额外的 Alpha mask ,或者使用模板测试来圆化视口(viewport)的角。
关于 cocoa OpenGL : draw texture and round corners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7685467/