BsGUIRenderTexture.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsGUIRenderTexture.h"
  4. #include "BsGUIManager.h"
  5. #include "BsRenderTexture.h"
  6. #include "BsSpriteTexture.h"
  7. namespace BansheeEngine
  8. {
  9. const String& GUIRenderTexture::getGUITypeName()
  10. {
  11. static String name = "RenderTexture";
  12. return name;
  13. }
  14. GUIRenderTexture::GUIRenderTexture(const String& styleName, const RenderTexturePtr& texture, bool transparent,
  15. const GUIDimensions& dimensions)
  16. :GUITexture(styleName, HSpriteTexture(), GUIImageScaleMode::StretchToFit, false, dimensions), mTransparent(transparent)
  17. {
  18. setRenderTexture(texture);
  19. }
  20. GUIRenderTexture::~GUIRenderTexture()
  21. {
  22. if (mSourceTexture != nullptr)
  23. GUIManager::instance().setInputBridge(mSourceTexture.get(), nullptr);
  24. }
  25. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, bool transparent, const String& styleName)
  26. {
  27. return new (bs_alloc<GUIRenderTexture>()) GUIRenderTexture(styleName, texture, transparent, GUIDimensions::create());
  28. }
  29. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, bool transparent, const GUIOptions& options,
  30. const String& styleName)
  31. {
  32. return new (bs_alloc<GUIRenderTexture>()) GUIRenderTexture(styleName, texture, transparent, GUIDimensions::create(options));
  33. }
  34. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, const String& styleName)
  35. {
  36. return new (bs_alloc<GUIRenderTexture>()) GUIRenderTexture(styleName, texture, false, GUIDimensions::create());
  37. }
  38. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, const GUIOptions& options, const String& styleName)
  39. {
  40. return new (bs_alloc<GUIRenderTexture>()) GUIRenderTexture(styleName, texture, false, GUIDimensions::create(options));
  41. }
  42. void GUIRenderTexture::setRenderTexture(const RenderTexturePtr& texture)
  43. {
  44. if (mSourceTexture != nullptr)
  45. GUIManager::instance().setInputBridge(mSourceTexture.get(), nullptr);
  46. mSourceTexture = texture;
  47. if (mSourceTexture != nullptr)
  48. {
  49. if (mSourceTexture->getProperties().requiresTextureFlipping())
  50. {
  51. mDesc.uvOffset = Vector2(0.0f, 1.0f);
  52. mDesc.uvScale = Vector2(1.0f, -1.0f);
  53. }
  54. setTexture(SpriteTexture::create(texture->getBindableColorTexture()));
  55. GUIManager::instance().setInputBridge(mSourceTexture.get(), this);
  56. }
  57. else
  58. {
  59. setTexture(SpriteTexture::create(HTexture()));
  60. }
  61. _markLayoutAsDirty();
  62. }
  63. void GUIRenderTexture::updateRenderElementsInternal()
  64. {
  65. if(mActiveTexture != nullptr && mActiveTexture.isLoaded())
  66. {
  67. mDesc.texture = mActiveTexture.getInternalPtr();
  68. }
  69. mDesc.width = mLayoutData.area.width;
  70. mDesc.height = mLayoutData.area.height;
  71. mDesc.transparent = mTransparent;
  72. mDesc.color = getTint();
  73. mImageSprite->update(mDesc, (UINT64)_getParentWidget());
  74. GUIElement::updateRenderElementsInternal();
  75. }
  76. }