BsRenderWindow.cpp 2.8 KB

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