RenderTextureManager.lua 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. local RenderTextureManager = class("RenderTextureManager")
  2. local EVENT_AFTER_UPDATE = "director_after_update"
  3. local RenderTextureInfo = require("render/RenderTextureInfo")
  4. local Queue = requireUtil( "queue" )
  5. function RenderTextureManager:ctor()
  6. self._renderInfos = {}
  7. self._unUseIDQueue = Queue.new()
  8. self._updateHandler = cc.EventListenerCustom:create(EVENT_AFTER_UPDATE, handler(self, self.Tick))
  9. global.Director:getEventDispatcher():addEventListenerWithFixedPriority(self._updateHandler, 1)
  10. --------------RenderTexture部分代码 放在定时器之后执行防止 渲染节点被删了 造成崩溃---------------------------------
  11. end
  12. function RenderTextureManager:Destory()
  13. if RenderTextureManager.instance then
  14. RenderTextureManager.instance:Cleanup()
  15. RenderTextureManager.instance = nil
  16. end
  17. end
  18. function RenderTextureManager:Inst()
  19. if not RenderTextureManager.instance then
  20. RenderTextureManager.instance = RenderTextureManager.new()
  21. end
  22. return RenderTextureManager.instance
  23. end
  24. function RenderTextureManager:Tick()
  25. local dt = global.Director:getDeltaTime()
  26. for id, item in ipairs(self._renderInfos) do
  27. if not item:IsInvalid() then
  28. item:Tick(dt)
  29. end
  30. end
  31. end
  32. function RenderTextureManager:AddDrawFuncOnce(data)
  33. data.count = 1
  34. data.time = data.time or 0
  35. return self:AddDrawFunc(data)
  36. end
  37. --{func,time}
  38. function RenderTextureManager:AddDrawFunc(data)
  39. if not data then
  40. return nil
  41. end
  42. local id
  43. data.count = data.count or -1
  44. data.time = data.time or 0
  45. if self._unUseIDQueue:size() > 0 then
  46. id = self._unUseIDQueue:pop()
  47. data.id = id
  48. self._renderInfos[id]:Reset(data)
  49. return id
  50. end
  51. id = #self._renderInfos + 1
  52. data.id = id
  53. self._renderInfos[id] = RenderTextureInfo.new(data)
  54. return id
  55. end
  56. function RenderTextureManager:RmvDrawFunc(id)
  57. self._unUseIDQueue:push(id)
  58. self._renderInfos[id]:SetInvalid(true)
  59. end
  60. function RenderTextureManager:Cleanup()
  61. self._renderInfos = {}
  62. self._unUseIDQueue:clear()
  63. cc.Director:getInstance():getEventDispatcher():removeEventListener(self._updateHandler)
  64. end
  65. return RenderTextureManager