2016-06-22 226 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 –