BsSpriteTexture.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. Vector2 SpriteTexture::transformUV(const Vector2& uv) const
  16. {
  17. return mUVOffset + uv * mUVScale;
  18. }
  19. const HSpriteTexture& SpriteTexture::dummy()
  20. {
  21. static HSpriteTexture dummyTex = create(Texture::dummy());
  22. return dummyTex;
  23. }
  24. bool SpriteTexture::checkIsLoaded(const HSpriteTexture& tex)
  25. {
  26. return tex != nullptr && tex.isLoaded() && tex->getTexture() != nullptr && tex.isLoaded();
  27. }
  28. UINT32 SpriteTexture::getWidth() const
  29. {
  30. return Math::roundToInt(mAtlasTexture->getProperties().getWidth() * mUVScale.x);
  31. }
  32. UINT32 SpriteTexture::getHeight() const
  33. {
  34. return Math::roundToInt(mAtlasTexture->getProperties().getHeight() * mUVScale.y);
  35. }
  36. void SpriteTexture::getResourceDependencies(Vector<HResource>& dependencies) const
  37. {
  38. if (mAtlasTexture != nullptr)
  39. dependencies.push_back(mAtlasTexture);
  40. }
  41. void SpriteTexture::getCoreDependencies(Vector<SPtr<CoreObject>>& dependencies)
  42. {
  43. if (mAtlasTexture.isLoaded())
  44. dependencies.push_back(mAtlasTexture.getInternalPtr());
  45. }
  46. HSpriteTexture SpriteTexture::create(const HTexture& texture)
  47. {
  48. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  49. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), texture));
  50. texturePtr->_setThisPtr(texturePtr);
  51. texturePtr->initialize();
  52. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  53. }
  54. HSpriteTexture SpriteTexture::create(const Vector2& uvOffset, const Vector2& uvScale, const HTexture& texture)
  55. {
  56. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  57. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(uvOffset, uvScale, texture));
  58. texturePtr->_setThisPtr(texturePtr);
  59. texturePtr->initialize();
  60. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  61. }
  62. SpriteTexturePtr SpriteTexture::createEmpty()
  63. {
  64. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  65. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), Texture::dummy()));
  66. texturePtr->_setThisPtr(texturePtr);
  67. texturePtr->initialize();
  68. return texturePtr;
  69. }
  70. RTTITypeBase* SpriteTexture::getRTTIStatic()
  71. {
  72. return SpriteTextureRTTI::instance();
  73. }
  74. RTTITypeBase* SpriteTexture::getRTTI() const
  75. {
  76. return SpriteTexture::getRTTIStatic();
  77. }
  78. }