2016-06-22 4 views
0

My 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

эй @warrenm! Насколько я вижу, он использует Computing, а не Rendering. Я очень сильно потерял код. Я приложил оригинальный проект для вашего удобства! –

ответ

1

Этот проект занимает довольно нетрадиционный подход к очистке текстуры в вытяжке в каждый кадр: он заменяет содержимое текстуры с массивом нулей, что имеет тот же размер, как текстура (ширина * высота * 4). Впоследствии он кодирует некоторую вычислительную работу, которая фактически рисует частицы. Это почти наверняка не самый эффективный способ достижения этого эффекта, но если вы хотите сделать наименьшее изменение, которое могло бы работать (в отличие от экспериментов с максимально эффективным кодом), просто заполните массив blankBitmapRawData с помощью желаемого прозрачный цвет (около строки 82 ParticleLab.swift).

+0

Эй, уорренм. Ты всегда такой терпение и потрясающий наставник! Я пытаюсь понять, как я могу достичь этого, blankBitmapRawData ожидает [UInt8]. Я попробовал назначить его [1,1,1,1] (RGBA). Но он не работает. Можете ли вы направить меня, как представить прозрачный/белый цвет для blankBitmapRawData? –

+0

Поскольку компоненты являются 'UInt8', вам нужно указать каждый в диапазоне 0-255, а не 0.0-1.0. – warrenm

+0

Я пробовал оба [255,255,255,255] и [255,255,255], и результаты: http://prntscr.com/bk6fq4 .. ah: \ мы чего-то не хватает? –

0

Я прошел через свой код и не может видеть место, где вы устанавливаете цвет фона.

Металлический слой добавляется как подуровень к нему, поэтому вы должны установить его явно.

Добавьте эту строку в конце вашего метода init в классе ParticialLab и посмотрите, работает ли она.

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

По-прежнему черный .. как предположил Warrenm, это может иметь отношение к подслоям, которые визуализируются/вычисляются, но я не могу понять, где именно я должен разместить renderPassDescriptor. (см. его комментарий по указанному выше вопросу) –

+0

Он предлагает создать рендерингPassDescriptor и установить вложения цветов и после этого создать MTLRenderCommandEncoder, передав renderPassDescriptor в –

+0

https://developer.apple.com/library/prerelease/content/documentation/ Разное/Концептуальные/MetalProgrammingGuide/Render-Ctx/Render-Ctx.html –

Смежные вопросы