BsSpriteTexture.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "BsSpriteTexture.h"
  2. #include "BsSpriteTextureRTTI.h"
  3. #include "BsTexture.h"
  4. #include "BsResources.h"
  5. namespace BansheeEngine
  6. {
  7. SpriteTexture::SpriteTexture(const Vector2& uvOffset, const Vector2& uvScale, const HTexture& texture)
  8. :Resource(false), mUVOffset(uvOffset), mUVScale(uvScale), mAtlasTexture(texture)
  9. {
  10. }
  11. const HTexture& SpriteTexture::getTexture() const
  12. {
  13. return mAtlasTexture;
  14. }
  15. void SpriteTexture::setTexture(const HTexture& texture)
  16. {
  17. mAtlasTexture = texture;
  18. markDependenciesDirty();
  19. }
  20. Vector2 SpriteTexture::transformUV(const Vector2& uv) const
  21. {
  22. return mUVOffset + uv * mUVScale;
  23. }
  24. const HSpriteTexture& SpriteTexture::dummy()
  25. {
  26. static HSpriteTexture dummyTex = create(Texture::dummy());
  27. return dummyTex;
  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), Texture::dummy()));
  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. }