Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Создаем фильтр обзёрвера цветов текстуры
- private lazy var patchColors:ColorObserver = {
- let f = ColorObserver(context: self.context)
- //
- // Размер прямоугольной (квадратной) области по которой мы интерполируем
- // (на самом деле усредняем) цвет текстуры
- //
- f.regionSize = 20
- //
- // Добавляем к фильтру обработку событий пересчета целевой тектстуры,
- // которая на самом деле не пересчитывается и читает в шейдере в буфер её RGB-смеплы
- //
- f.addObserver(destinationUpdated: { (destination) in
- //
- // Поскольку мы читаем только одну область то берем первый элемент массива
- // прочитаных семполов цветов
- //
- var rgb = f.colors[0]
- // представление [0-1] в NSColor
- let color = NSColor(color: float4(rgb.r,rgb.g,rgb.b,1))
- // инвертируем цвет
- let inverted_rgb = float3(1) - rgb
- let inverted_color = NSColor(color: float4(inverted_rgb.r,inverted_rgb.g,inverted_rgb.b,1))
- // для отображения в textfield переведем в 8-битное представление
- rgb = rgb * float3(255)
- DispatchQueue.main.async {
- // просто рисуем
- self.patch.strokeColor = inverted_color
- self.colorLabel.backgroundColor = color
- self.colorLabel.stringValue = String(format: "%3.0f, %3.0f, %3.0f", rgb.r, rgb.g, rgb.b)
- }
- })
- return f
- }()
Add Comment
Please, Sign In to add comment