BsRenderWindow.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "BsRenderWindow.h"
  2. #include "BsCoreThread.h"
  3. #include "BsRenderWindowManager.h"
  4. #include "BsViewport.h"
  5. #include "BsPlatform.h"
  6. namespace BansheeEngine
  7. {
  8. void RenderWindowProperties::copyFrom(const RenderTargetProperties& other)
  9. {
  10. const RenderWindowProperties& windowProps = static_cast<const RenderWindowProperties&>(other);
  11. *this = windowProps;
  12. }
  13. RenderWindowCore::RenderWindowCore(RenderWindow* parent, RenderWindowProperties* properties)
  14. :RenderTargetCore(parent, properties)
  15. {
  16. }
  17. void RenderWindowCore::setHidden(bool hidden)
  18. {
  19. THROW_IF_NOT_CORE_THREAD;
  20. }
  21. void RenderWindowCore::_windowMovedOrResized()
  22. {
  23. THROW_IF_NOT_CORE_THREAD;
  24. }
  25. void RenderWindowCore::_windowFocusReceived()
  26. {
  27. THROW_IF_NOT_CORE_THREAD;
  28. RenderWindowProperties* properties = static_cast<RenderWindowProperties*>(mProperties);
  29. properties->mHasFocus = true;
  30. markCoreDirty();
  31. }
  32. void RenderWindowCore::_windowFocusLost()
  33. {
  34. THROW_IF_NOT_CORE_THREAD;
  35. RenderWindowProperties* properties = static_cast<RenderWindowProperties*>(mProperties);
  36. properties->mHasFocus = false;
  37. markCoreDirty();
  38. }
  39. RenderWindow* RenderWindowCore::getNonCore() const
  40. {
  41. return static_cast<RenderWindow*>(mParent);
  42. }
  43. void RenderWindow::initialize(const RENDER_WINDOW_DESC& desc)
  44. {
  45. mDesc = desc;
  46. mProperties = createProperties();
  47. RenderWindowProperties* properties = static_cast<RenderWindowProperties*>(mProperties);
  48. properties->mWidth = desc.videoMode.getWidth();
  49. properties->mHeight = desc.videoMode.getHeight();
  50. properties->mHwGamma = desc.gamma;
  51. properties->mVSync = desc.vsync;
  52. properties->mVSyncInterval = desc.vsyncInterval;
  53. properties->mMultisampleCount = desc.multisampleCount;
  54. properties->mLeft = desc.left;
  55. properties->mTop = desc.top;
  56. properties->mIsFullScreen = desc.fullscreen;
  57. properties->mHidden = desc.hidden;
  58. properties->mIsModal = desc.modal;
  59. properties->mIsWindow = true;
  60. properties->mRequiresTextureFlipping = requiresTextureFlipping();
  61. RenderTarget::initialize();
  62. }
  63. void RenderWindow::destroy()
  64. {
  65. Platform::resetNonClientAreas(*this);
  66. RenderWindowManager::instance().windowDestroyed(this);
  67. RenderTarget::destroy();
  68. }
  69. const RenderWindowProperties& RenderWindow::getProperties() const
  70. {
  71. THROW_IF_CORE_THREAD;
  72. return static_cast<const RenderWindowProperties&>(RenderTarget::getProperties());
  73. }
  74. RenderWindowCore* RenderWindow::getCore() const
  75. {
  76. return static_cast<RenderWindowCore*>(mCore);
  77. }
  78. RenderTargetCore* RenderWindow::createCore()
  79. {
  80. RenderWindowProperties* coreProperties = bs_new<RenderWindowProperties>();
  81. RenderWindowProperties* myProperties = static_cast<RenderWindowProperties*>(mProperties);
  82. *coreProperties = *myProperties;
  83. return createCore(coreProperties, mDesc);
  84. }
  85. RenderWindowPtr RenderWindow::create(RENDER_WINDOW_DESC& desc, RenderWindowPtr parentWindow)
  86. {
  87. return RenderWindowManager::instance().create(desc, parentWindow);
  88. }
  89. }