BsSpriteTexture.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. bool SpriteTexture::areDependenciesLoaded() const
  37. {
  38. return mAtlasTexture.isLoaded();
  39. }
  40. void SpriteTexture::getCoreDependencies(Vector<SPtr<CoreObject>>& dependencies)
  41. {
  42. if (mAtlasTexture.isLoaded())
  43. dependencies.push_back(mAtlasTexture.getInternalPtr());
  44. }
  45. HSpriteTexture SpriteTexture::create(const HTexture& texture)
  46. {
  47. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  48. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), texture));
  49. texturePtr->_setThisPtr(texturePtr);
  50. texturePtr->initialize();
  51. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  52. }
  53. HSpriteTexture SpriteTexture::create(const Vector2& uvOffset, const Vector2& uvScale, const HTexture& texture)
  54. {
  55. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  56. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(uvOffset, uvScale, texture));
  57. texturePtr->_setThisPtr(texturePtr);
  58. texturePtr->initialize();
  59. return static_resource_cast<SpriteTexture>(gResources()._createResourceHandle(texturePtr));
  60. }
  61. SpriteTexturePtr SpriteTexture::createEmpty()
  62. {
  63. SpriteTexturePtr texturePtr = bs_core_ptr<SpriteTexture, PoolAlloc>
  64. (new (bs_alloc<SpriteTexture, PoolAlloc>()) SpriteTexture(Vector2(0.0f, 0.0f), Vector2(1.0f, 1.0f), Texture::dummy()));
  65. texturePtr->_setThisPtr(texturePtr);
  66. texturePtr->initialize();
  67. return texturePtr;
  68. }
  69. RTTITypeBase* SpriteTexture::getRTTIStatic()
  70. {
  71. return SpriteTextureRTTI::instance();
  72. }
  73. RTTITypeBase* SpriteTexture::getRTTI() const
  74. {
  75. return SpriteTexture::getRTTIStatic();
  76. }
  77. }