BsRenderWindow.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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->mMultisampleHint = desc.multisampleHint;
  55. properties->mLeft = desc.left;
  56. properties->mTop = desc.top;
  57. properties->mIsFullScreen = desc.fullscreen;
  58. properties->mHidden = desc.hidden;
  59. properties->mIsModal = desc.modal;
  60. properties->mIsWindow = true;
  61. properties->mRequiresTextureFlipping = requiresTextureFlipping();
  62. RenderTarget::initialize();
  63. }
  64. void RenderWindow::destroy()
  65. {
  66. Platform::resetNonClientAreas(*this);
  67. RenderWindowManager::instance().windowDestroyed(this);
  68. RenderTarget::destroy();
  69. }
  70. const RenderWindowProperties& RenderWindow::getProperties() const
  71. {
  72. THROW_IF_CORE_THREAD;
  73. return static_cast<const RenderWindowProperties&>(RenderTarget::getProperties());
  74. }
  75. RenderWindowCore* RenderWindow::getCore() const
  76. {
  77. return static_cast<RenderWindowCore*>(mCore);
  78. }
  79. RenderTargetCore* RenderWindow::createCore()
  80. {
  81. RenderWindowProperties* coreProperties = bs_new<RenderWindowProperties>();
  82. RenderWindowProperties* myProperties = static_cast<RenderWindowProperties*>(mProperties);
  83. *coreProperties = *myProperties;
  84. return createCore(coreProperties, mDesc);
  85. }
  86. RenderWindowPtr RenderWindow::create(RENDER_WINDOW_DESC& desc, RenderWindowPtr parentWindow)
  87. {
  88. return RenderWindowManager::instance().create(desc, parentWindow);
  89. }
  90. }