bloom.lua 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. local Bloom = {}
  2. Bloom.code = 'bloom'
  3. local g = love.graphics
  4. function Bloom:init()
  5. self:resize()
  6. end
  7. function Bloom:update()
  8. --
  9. end
  10. function Bloom:render(fn)
  11. data.media.shaders.threshold:send('threshold', 0.9)
  12. g.pop()
  13. g.setShader(data.media.shaders.threshold)
  14. g.push()
  15. g.scale(.25)
  16. ctx.view:worldPush()
  17. self.canvas:renderTo(fn)
  18. self.working:renderTo(fn)
  19. g.pop()
  20. g.pop()
  21. ctx.view:worldPush()
  22. g.setShader()
  23. end
  24. function Bloom:applyEffect(source, target)
  25. g.setCanvas(self.canvas)
  26. data.media.shaders.horizontalBlur:send('amount', .005)
  27. data.media.shaders.verticalBlur:send('amount', .005)
  28. g.setColor(255, 255, 255)
  29. for i = 1, 6 do
  30. g.setShader(data.media.shaders.horizontalBlur)
  31. self.working:renderTo(function()
  32. g.draw(self.canvas)
  33. end)
  34. g.setShader(data.media.shaders.verticalBlur)
  35. self.canvas:renderTo(function()
  36. g.draw(self.working)
  37. end)
  38. end
  39. g.setShader()
  40. g.setCanvas(target)
  41. g.draw(source)
  42. love.graphics.setColor(255, 255, 255, 120)
  43. g.setBlendMode('additive')
  44. g.draw(self.canvas, 0, 0, 0, 4, 4)
  45. g.setBlendMode('alpha')
  46. g.setCanvas()
  47. self.canvas:clear()
  48. self.working:clear()
  49. end
  50. function Bloom:resize()
  51. local w, h = g.getDimensions()
  52. self.canvas = g.newCanvas(w / 4, h / 4)
  53. self.working = g.newCanvas(w / 4, h / 4)
  54. end
  55. return Bloom