BsRenderable.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "BsRenderable.h"
  2. #include "BsRenderableRTTI.h"
  3. #include "BsSceneObject.h"
  4. #include "BsBuiltinResources.h"
  5. #include "BsMesh.h"
  6. #include "BsMaterial.h"
  7. #include "BsRenderQueue.h"
  8. #include "BsBounds.h"
  9. #include "BsSceneManager.h"
  10. namespace BansheeEngine
  11. {
  12. Renderable::Renderable(const HSceneObject& parent)
  13. :Component(parent), mLastUpdateHash(0)
  14. {
  15. setName("Renderable");
  16. mInternal = RenderableHandler::create();
  17. }
  18. void Renderable::onInitialized()
  19. {
  20. gSceneManager()._registerRenderable(mInternal, sceneObject());
  21. }
  22. Bounds Renderable::getBounds() const
  23. {
  24. updateTransform();
  25. return mInternal->getBounds();
  26. }
  27. void Renderable::updateTransform() const
  28. {
  29. UINT32 curHash = SO()->getTransformHash();
  30. if (curHash != mLastUpdateHash)
  31. {
  32. mInternal->setTransform(SO()->getWorldTfrm());
  33. mLastUpdateHash = curHash;
  34. }
  35. }
  36. void Renderable::update()
  37. {
  38. updateTransform();
  39. if (SO()->getActive() != mInternal->getIsActive())
  40. {
  41. mInternal->setIsActive(SO()->getActive());
  42. }
  43. }
  44. void Renderable::onDestroyed()
  45. {
  46. gSceneManager()._unregisterRenderable(mInternal);
  47. }
  48. RTTITypeBase* Renderable::getRTTIStatic()
  49. {
  50. return RenderableRTTI::instance();
  51. }
  52. RTTITypeBase* Renderable::getRTTI() const
  53. {
  54. return Renderable::getRTTIStatic();
  55. }
  56. }