Guest User

Untitled

a guest
May 24th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. /// Создаем фильтр обзёрвера цветов текстуры
  2. private lazy var patchColors:ColorObserver = {
  3. let f = ColorObserver(context: self.context)
  4. //
  5. // Размер прямоугольной (квадратной) области по которой мы интерполируем
  6. // (на самом деле усредняем) цвет текстуры
  7. //
  8. f.regionSize = 20
  9.  
  10. //
  11. // Добавляем к фильтру обработку событий пересчета целевой тектстуры,
  12. // которая на самом деле не пересчитывается и читает в шейдере в буфер её RGB-смеплы
  13. //
  14. f.addObserver(destinationUpdated: { (destination) in
  15.  
  16. //
  17. // Поскольку мы читаем только одну область то берем первый элемент массива
  18. // прочитаных семполов цветов
  19. //
  20. var rgb = f.colors[0]
  21.  
  22. // представление [0-1] в NSColor
  23. let color = NSColor(color: float4(rgb.r,rgb.g,rgb.b,1))
  24.  
  25. // инвертируем цвет
  26. let inverted_rgb = float3(1) - rgb
  27. let inverted_color = NSColor(color: float4(inverted_rgb.r,inverted_rgb.g,inverted_rgb.b,1))
  28.  
  29. // для отображения в textfield переведем в 8-битное представление
  30. rgb = rgb * float3(255)
  31.  
  32. DispatchQueue.main.async {
  33. // просто рисуем
  34. self.patch.strokeColor = inverted_color
  35. self.colorLabel.backgroundColor = color
  36. self.colorLabel.stringValue = String(format: "%3.0f, %3.0f, %3.0f", rgb.r, rgb.g, rgb.b)
  37. }
  38. })
  39. return f
  40. }()
Add Comment
Please, Sign In to add comment