BsRenderWindow.cpp 2.7 KB

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