BsSpriteTexture.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "BsSpriteTexture.h"
  2. #include "BsSpriteTextureRTTI.h"
  3. #include "BsTexture.h"
  4. #include "BsResources.h"
  5. #include "BsBuiltinResources.h"
  6. namespace BansheeEngine
  7. {
  8. SpriteTexture::SpriteTexture(const Vector2& uvOffset, const Vector2& uvScale, const HTexture& texture)
  9. :Resource(false), mUVOffset(uvOffset), mUVScale(uvScale), mAtlasTexture(texture)
  10. {
  11. }
  12. const HTexture& SpriteTexture::getTexture() const
  13. {
  14. return mAtlasTexture;
  15. }
  16. void SpriteTexture::setTexture(const HTexture& texture)
  17. {
  18. mAtlasTexture = texture;
  19. markDependenciesDirty();
  20. }
  21. Vector2 SpriteTexture::transformUV(const Vector2& uv) const
  22. {
  23. return mUVOffset + uv * mUVScale;
  24. }
  25. const HSpriteTexture& SpriteTexture::dummy()
  26. {
  27. return BuiltinResources::instance().getDummySpriteTexture();
  28. }
  29. bool SpriteTexture::checkIsLoaded(const HSpriteTexture& tex)
  30. {
  31. return tex != nullptr && tex.isLoaded() && tex->getTexture() != nullptr && tex.isLoaded();
  32. }
  33. UINT32 SpriteTexture::getWidth() const
  34. {
  35. return Math::roundToInt(mAtlasTexture->getProperties().getWidth() * mUVScale.x);
  36. }
  37. UINT32 SpriteTexture::getHeight() const
  38. {
  39. return Math::roundToInt(mAtlasTexture->getProperties().getHeight() * mUVScale.y);
  40. }
  41. void SpriteTexture::getResourceDependencies(FrameVector<HResource>& dependencies) const
  42. {
  43. if (mAtlasTexture != nullptr)
  44. dependencies.push_back(mAtlasTexture);
  45. }
  46. void SpriteTexture::getCoreDependencies(Vector<CoreObject*>& dependencies)
  47. {
  48. if (mAtlasTexture.isLoaded())
  49. dependencies.push_back(mAtlasTexture.get());
  50. }
  51. HSpriteTexture SpriteTexture::create(const HTexture& texture)
  52. {
  53. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture>
  54. (new (bs_alloc<SpriteTexture>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), texture));
  55. texturePtr->_setThisPtr(texturePtr);
  56. texturePtr->initialize();
  57. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  58. }
  59. HSpriteTexture SpriteTexture::create(const Vector2& uvOffset, const Vector2& uvScale, const HTexture& texture)
  60. {
  61. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture>
  62. (new (bs_alloc<SpriteTexture>()) SpriteTexture(uvOffset, uvScale, texture));
  63. texturePtr->_setThisPtr(texturePtr);
  64. texturePtr->initialize();
  65. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  66. }
  67. SpriteTexturePtr SpriteTexture::createEmpty()
  68. {
  69. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture>
  70. (new (bs_alloc<SpriteTexture>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), HTexture()));
  71. texturePtr->_setThisPtr(texturePtr);
  72. texturePtr->initialize();
  73. return texturePtr;
  74. }
  75. RTTITypeBase* SpriteTexture::getRTTIStatic()
  76. {
  77. return SpriteTextureRTTI::instance();
  78. }
  79. RTTITypeBase* SpriteTexture::getRTTI() const
  80. {
  81. return SpriteTexture::getRTTIStatic();
  82. }
  83. }