BsWin32RenderWindow.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsWin32Prerequisites.h"
  5. #include "BsRenderWindow.h"
  6. namespace BansheeEngine
  7. {
  8. class Win32RenderWindow;
  9. /**
  10. * @brief Contains various properties that describe a render window.
  11. */
  12. class BS_RSGL_EXPORT Win32RenderWindowProperties : public RenderWindowProperties
  13. {
  14. public:
  15. Win32RenderWindowProperties(const RENDER_WINDOW_DESC& desc);
  16. virtual ~Win32RenderWindowProperties() { }
  17. private:
  18. friend class Win32RenderWindowCore;
  19. friend class Win32RenderWindow;
  20. };
  21. /**
  22. * @brief Render window implementation for Windows.
  23. *
  24. * @note Core thread only.
  25. */
  26. class BS_RSGL_EXPORT Win32RenderWindowCore : public RenderWindowCore
  27. {
  28. public:
  29. Win32RenderWindowCore(const RENDER_WINDOW_DESC& desc, UINT32 windowId, Win32GLSupport &glsupport);
  30. ~Win32RenderWindowCore();
  31. /**
  32. * @copydoc RenderWindowCore::setFullscreen(UINT32, UINT32, float, UINT32)
  33. */
  34. void setFullscreen(UINT32 width, UINT32 height, float refreshRate = 60.0f, UINT32 monitorIdx = 0) override;
  35. /**
  36. * @copydoc RenderWindowCore::setFullscreen(const VideoMode&)
  37. */
  38. void setFullscreen(const VideoMode& mode) override;
  39. /**
  40. * @copydoc RenderWindowCore::setWindowed
  41. */
  42. void setWindowed(UINT32 width, UINT32 height) override;
  43. /**
  44. * @copydoc RenderWindowCore::setHidden
  45. */
  46. void setHidden(bool hidden) override;
  47. /**
  48. * @copydoc RenderWindowCore::minimize
  49. */
  50. void minimize() override;
  51. /**
  52. * @copydoc RenderWindowCore::maximize
  53. */
  54. void maximize() override;
  55. /**
  56. * @copydoc RenderWindowCore::restore
  57. */
  58. void restore() override;
  59. /**
  60. * @copydoc RenderWindowCore::move
  61. */
  62. void move(INT32 left, INT32 top) override;
  63. /**
  64. * @copydoc RenderWindowCore::resize
  65. */
  66. void resize(UINT32 width, UINT32 height) override;
  67. /**
  68. * @copydoc RenderWindowCore::copyContentsToMemory
  69. */
  70. void copyToMemory(PixelData &dst, FrameBuffer buffer);
  71. /**
  72. * @copydoc RenderWindowCore::swapBuffers
  73. */
  74. void swapBuffers() override;
  75. /**
  76. * @copydoc RenderWindowCore::getCustomAttribute
  77. */
  78. void getCustomAttribute(const String& name, void* pData) const override;
  79. /**
  80. * @copydoc RenderWindowCore::setActive
  81. */
  82. virtual void setActive(bool state) override;
  83. /**
  84. * @copydoc RenderWindowCore::_windowMovedOrResized
  85. */
  86. void _windowMovedOrResized() override;
  87. /**
  88. * @brief Returns handle to device context associated with the window.
  89. */
  90. HDC _getHDC() const { return mHDC; }
  91. /**
  92. * @brief Returns internal window handle.
  93. */
  94. HWND _getHWnd() const;
  95. protected:
  96. friend class Win32GLSupport;
  97. /**
  98. * @copydoc CoreObjectCore::initialize
  99. */
  100. virtual void initialize() override;
  101. /**
  102. * @copydoc RenderWindowCore::getProperties
  103. */
  104. const RenderTargetProperties& getPropertiesInternal() const override { return mProperties; }
  105. /**
  106. * @copydoc RenderWindowCore::getSyncedProperties
  107. */
  108. RenderWindowProperties& getSyncedProperties() override { return mSyncedProperties; }
  109. /**
  110. * @copydoc RenderWindowCore::syncProperties
  111. */
  112. void syncProperties() override;
  113. protected:
  114. friend class Win32RenderWindow;
  115. Win32Window* mWindow;
  116. Win32GLSupport& mGLSupport;
  117. HDC mHDC;
  118. bool mIsChild;
  119. char* mDeviceName;
  120. int mDisplayFrequency;
  121. bool mShowOnSwap;
  122. SPtr<Win32Context> mContext;
  123. Win32RenderWindowProperties mProperties;
  124. Win32RenderWindowProperties mSyncedProperties;
  125. };
  126. /**
  127. * @brief Render window implementation for Windows.
  128. *
  129. * @note Sim thread only.
  130. */
  131. class BS_RSGL_EXPORT Win32RenderWindow : public RenderWindow
  132. {
  133. public:
  134. ~Win32RenderWindow() { }
  135. /**
  136. * @copydoc RenderWindow::screenToWindowPos
  137. */
  138. void getCustomAttribute(const String& name, void* pData) const override;
  139. /**
  140. * @copydoc RenderWindow::screenToWindowPos
  141. */
  142. Vector2I screenToWindowPos(const Vector2I& screenPos) const override;
  143. /**
  144. * @copydoc RenderWindow::windowToScreenPos
  145. */
  146. Vector2I windowToScreenPos(const Vector2I& windowPos) const override;
  147. /**
  148. * @copydoc RenderWindow::getCore
  149. */
  150. SPtr<Win32RenderWindowCore> getCore() const;
  151. protected:
  152. friend class GLRenderWindowManager;
  153. friend class Win32GLSupport;
  154. friend class Win32RenderWindowCore;
  155. Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, Win32GLSupport& glsupport);
  156. /**
  157. * @copydoc RenderWindow::getProperties
  158. */
  159. const RenderTargetProperties& getPropertiesInternal() const override { return mProperties; }
  160. /**
  161. * @copydoc RenderWindow::syncProperties
  162. */
  163. void syncProperties() override;
  164. /**
  165. * @brief Retrieves internal window handle.
  166. */
  167. HWND getHWnd() const;
  168. private:
  169. Win32GLSupport& mGLSupport;
  170. Win32RenderWindowProperties mProperties;
  171. };
  172. }