【发布时间】:2019-01-16 23:34:52
【问题描述】:
我想创建一个完全透明且可用于绘图的窗口(屏幕显示)。创建这样一个窗口实际上很简单,只需将opaque 属性设置为false 并用清晰的颜色填充相应的视图。之后,CGImage 可以使用图形上下文来绘制以更新视图,并且具有 alpha 通道的相应区域将是透明/半透明的。
我决定做同样的事情,但使用 Metal API,即我用 MTKView 替换了我的视图,并使用纹理而不是 CGImage 来绘制到窗口上。我从Apple Documentation阅读了相应的章节,然后我拿了一个例子(“基本纹理”)并决定对其进行修改以测试它是否有效:
- 我修改了示例,将窗口的
opaque属性设置为NO。 - 在
drawInMTKView函数的第一行中,我按以下方式更改了clearColor:view.clearColor = MTLClearColorMake(0.0, 0.0, 0.0, 0.0);(如文档中的“设备和命令”教程所示)。 - 然后我将
AAPLImage.h中加载图像的alpha通道值从dstImageData[dstPixelIndex + 3] = 255;更改为dstImageData[dstPixelIndex + 3] = 125;。
在所有这些更改之后,我希望我的视图是完全透明的(清晰的颜色是完全透明的颜色)并且具有 Alpha 通道的纹理部分将具有相应的透明度级别。但是默认情况下视图是黑色的,我不能使部分视图(或整个视图)透明。
我可能假设我必须向渲染管道添加一些额外的配置才能使其正常工作。但是,Metal 可能无法实现这样的事情,但我不确定。
我也尝试遵循 Metal MTLTexture replaces semi-transparent areas with black when alpha values that aren't 1 or 0 的建议,但不幸的是它没有帮助。
【问题讨论】:
标签: objective-c swift macos metal metalkit