【问题标题】:Transparent window and view using Apple's Metal使用 Apple 的 Metal 的透明窗口和视图
【发布时间】:2019-01-16 23:34:52
【问题描述】:

我想创建一个完全透明且可用于绘图的窗口(屏幕显示)。创建这样一个窗口实际上很简单,只需将opaque 属性设置为false 并用清晰的颜色填充相应的视图。之后,CGImage 可以使用图形上下文来绘制以更新视图,并且具有 alpha 通道的相应区域将是透明/半透明的。

我决定做同样的事情,但使用 Metal API,即我用 MTKView 替换了我的视图,并使用纹理而不是 CGImage 来绘制到窗口上。我从Apple Documentation阅读了相应的章节,然后我拿了一个例子(“基本纹理”)并决定对其进行修改以测试它是否有效:

  1. 我修改了示例,将窗口的opaque 属性设置为NO。
  2. 在drawInMTKView 函数的第一行中,我按以下方式更改了clearColor:view.clearColor = MTLClearColorMake(0.0, 0.0, 0.0, 0.0);(如文档中的“设备和命令”教程所示)。
  3. 然后我将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


    【解决方案1】:

    视图类上还有一个isOpaque 属性可能需要为false。在 iOS (UIView) 中,您可以简单地设置它,但在 macOS (NSView) 中,您需要覆盖它以返回 false。

    【讨论】:

    • 其中“set”表示在子类中覆盖以返回 false。
    • 啊,我会编辑我的答案。我认为在 iOS 中你可以简单地设置它,但在 macOS 中不行。
    • 很遗憾没有解决问题(实际上已经设置为false)。顺便说一句,据我所知,此值默认为 false。
    猜你喜欢
    • 2019-04-24
    • 2012-11-14
    • 1970-01-01
    • 2013-02-21
    • 2011-05-31
    • 2015-08-15
    • 2018-04-23
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多