BsGUIRenderTexture.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "BsGUIRenderTexture.h"
  2. #include "BsGUIWidget.h"
  3. #include "BsGUISkin.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, const GUILayoutOptions& layoutOptions)
  15. :GUITexture(styleName, HSpriteTexture(), GUIImageScaleMode::StretchToFit, false, layoutOptions)
  16. {
  17. setRenderTexture(texture);
  18. }
  19. GUIRenderTexture::~GUIRenderTexture()
  20. {
  21. if (mSourceTexture != nullptr)
  22. GUIManager::instance().setInputBridge(mSourceTexture.get(), nullptr);
  23. }
  24. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, const String& styleName)
  25. {
  26. return new (bs_alloc<GUIRenderTexture, PoolAlloc>()) GUIRenderTexture(getStyleName<GUIRenderTexture>(styleName), texture, GUILayoutOptions::create());
  27. }
  28. GUIRenderTexture* GUIRenderTexture::create(const RenderTexturePtr& texture, const GUIOptions& layoutOptions, const String& styleName)
  29. {
  30. return new (bs_alloc<GUIRenderTexture, PoolAlloc>()) GUIRenderTexture(getStyleName<GUIRenderTexture>(styleName), texture, GUILayoutOptions::create(layoutOptions));
  31. }
  32. void GUIRenderTexture::setRenderTexture(const RenderTexturePtr& texture)
  33. {
  34. if (mSourceTexture != nullptr)
  35. GUIManager::instance().setInputBridge(mSourceTexture.get(), nullptr);
  36. mSourceTexture = texture;
  37. if (mSourceTexture != nullptr)
  38. {
  39. if (mSourceTexture->getProperties().requiresTextureFlipping())
  40. {
  41. mDesc.uvOffset = Vector2(0.0f, 1.0f);
  42. mDesc.uvScale = Vector2(1.0f, -1.0f);
  43. }
  44. setTexture(SpriteTexture::create(texture->getBindableColorTexture()));
  45. GUIManager::instance().setInputBridge(mSourceTexture.get(), this);
  46. }
  47. else
  48. {
  49. setTexture(SpriteTexture::create(HTexture()));
  50. }
  51. markContentAsDirty();
  52. }
  53. void GUIRenderTexture::updateRenderElementsInternal()
  54. {
  55. if(mActiveTexture != nullptr && mActiveTexture.isLoaded())
  56. {
  57. mDesc.texture = mActiveTexture.getInternalPtr();
  58. }
  59. mDesc.width = mWidth;
  60. mDesc.height = mHeight;
  61. mDesc.transparent = false;
  62. mImageSprite->update(mDesc, (UINT64)_getParentWidget());
  63. GUIElement::updateRenderElementsInternal();
  64. }
  65. }