2016-06-22 185 views
0

CAMetalLayer背景色为黑色,即使我指定新的颜色作为backgroundColor财产。变化CAMetalLayer背景颜色

我错过了什么?谢谢!

链接到原项目:

https://github.com/audiokit/MetalParticles

+0

可以添加你的代码有更好的理解这是怎么回事 –

+1

如果你做任何渲染,你还需要设置你的渲染过程描述符的主附色清晰的色彩。例如:'renderPassDescriptor.colorAttachments [0] .clearColor = MTLClearColorMake(1,1,1,1); renderPassDescriptor.colorAttachments [0] .loadAction = MTLLoadActionClear;' – warrenm

+0

hey @warrenm!据我所知,它使用计算而不是渲染。我几乎迷失在代码中。为了您的方便,我附上了原始项目! –

回答

1

本项目以一个相当非常规的方式来每帧清除可绘制的质地:它用零的阵列的尺寸与相同的纹理代替纹理内容(宽度×高度×4)。随后,它编码实际绘制粒子的一些计算工作。这几乎肯定不会达到这种效果的最有效方法,但如果你想能够工作(而不是与使代码尽可能高效试验)最小化,只需填写blankBitmapRawData阵列所需清晰的颜色(靠近ParticleLab.swift的第82行)。

+0

嘿warrenm。你永远是这样的耐心和真棒导师!我试图理解我怎么能做到这一点,blankBitmapRawData期望[UInt8]。我试着分配它[1,1,1,1](RGBA)。但它并不奏效。你能指导我如何为blankBitmapRawData提供清晰/白色的颜色吗? –

+0

由于组件是'UInt8's,因此您需要指定范围为0-255,而不是0.0-1.0。 – warrenm

+0

我试过[255,255,255,255]和[255,255,255],结果是:http://prntscr.com/bk6fq4 ..啊:\我们错过了什么吗? –

0

我已经通过您的代码了,不能看到你设置背景颜色的地方。

该金属层添加作为子层,所以必须显式地设置它。

ParticialLab类的init方法的末尾添加此行,看看它是否工作。

self.backgroundColor = UIColor.redColor().CGColor 
+0

仍然是黑色..作为warrenm建议,它可能与呈现/计算的子层有关,但我不明白我应该在哪里放置renderPassDescriptor。 (请参阅他对上述问题的评论) –

+0

他建议创建一个renderPassDescriptor并设置颜色附件,然后通过在 –

+0

https://developer.apple.com/library/prerelease/content/documentation/中传递renderPassDescriptor创建一个MTLRenderCommandEncoder Miscellaneous/Conceptual/MetalProgrammingGuide/Render-Ctx/Render-Ctx.html –