BsD3D11RenderWindow.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #pragma once
  2. #include "BsD3D11Prerequisites.h"
  3. #include "BsRenderWindow.h"
  4. namespace BansheeEngine
  5. {
  6. /**
  7. * @brief Render window implementation for Windows and DirectX 11.
  8. */
  9. class BS_D3D11_EXPORT D3D11RenderWindow : public RenderWindow
  10. {
  11. public:
  12. ~D3D11RenderWindow();
  13. /**
  14. * @copydoc RenderWindow::move
  15. */
  16. void move(INT32 left, INT32 top);
  17. /**
  18. * @copydoc RenderWindow::resize
  19. */
  20. void resize(UINT32 width, UINT32 height);
  21. /**
  22. * @copydoc RenderWindow::setHidden
  23. */
  24. void setHidden(bool hidden);
  25. /**
  26. * @copydoc RenderWindow::setActive
  27. */
  28. void setActive(bool state);
  29. /**
  30. * @copydoc RenderWindow::setFullscreen(UINT32, UINT32, float, UINT32)
  31. */
  32. void setFullscreen(UINT32 width, UINT32 height, float refreshRate = 60.0f, UINT32 monitorIdx = 0);
  33. /**
  34. * @copydoc RenderWindow::setFullscreen(const VideoMode&)
  35. */
  36. void setFullscreen(const VideoMode& mode);
  37. /**
  38. * @copydoc RenderWindow::setWindowed
  39. */
  40. void setWindowed(UINT32 width, UINT32 height);
  41. /**
  42. * @copydoc RenderWindow::copyContentsToMemory
  43. */
  44. void copyToMemory(const PixelData &dst, FrameBuffer buffer);
  45. /**
  46. * @copydoc RenderWindow::swapBuffers
  47. */
  48. void swapBuffers();
  49. /**
  50. * @copydoc RenderWindow::isClosed
  51. */
  52. bool isClosed() const { return mClosed; }
  53. /**
  54. * @copydoc RenderWindow::isHidden
  55. */
  56. bool isHidden() const { return mHidden; }
  57. /**
  58. * @copydoc RenderWindow::screenToWindowPos
  59. */
  60. Vector2I screenToWindowPos(const Vector2I& screenPos) const;
  61. /**
  62. * @copydoc RenderWindow::windowToScreenPos
  63. */
  64. Vector2I windowToScreenPos(const Vector2I& windowPos) const;
  65. /**
  66. * @copydoc RenderWindow::getCustomAttribute
  67. */
  68. void getCustomAttribute(const String& name, void* pData) const;
  69. /**
  70. * @copydoc RenderWindow::requiresTextureFlipping
  71. */
  72. bool requiresTextureFlipping() const { return false; }
  73. /**
  74. * @copydoc RenderWindow::_windowMovedOrResized
  75. */
  76. void _windowMovedOrResized();
  77. /**
  78. * @brief Returns presentation parameters used for creating the window swap chain.
  79. */
  80. DXGI_SWAP_CHAIN_DESC* _getPresentationParameters() { return &mSwapChainDesc; }
  81. /**
  82. * @brief Returns internal window handle.
  83. */
  84. HWND _getWindowHandle() const { return mHWnd; }
  85. protected:
  86. friend class D3D11RenderWindowManager;
  87. /**
  88. * @copydoc RenderWindow::RenderWindow
  89. */
  90. D3D11RenderWindow(const RENDER_WINDOW_DESC& desc, D3D11Device& device, IDXGIFactory* DXGIFactory);
  91. /**
  92. * @brief Creates internal resources dependent on window size.
  93. */
  94. void createSizeDependedD3DResources();
  95. /**
  96. * @brief Destroys internal resources dependent on window size.
  97. */
  98. void destroySizeDependedD3DResources();
  99. /**
  100. * @brief Queries the current DXGI device. Make sure to release the returned object when done with it.
  101. */
  102. IDXGIDevice* queryDxgiDevice();
  103. /**
  104. * @brief Creates a swap chain for the window.
  105. */
  106. void createSwapChain();
  107. /**
  108. * @brief Resizes all buffers attached to the swap chain to the specified size.
  109. */
  110. void resizeSwapChainBuffers(UINT32 width, UINT32 height);
  111. /**
  112. * @copydoc RenderWindow::initialize_internal
  113. */
  114. void initialize_internal();
  115. /**
  116. * @copydoc RenderWindow::destroy_internal
  117. */
  118. void destroy_internal();
  119. protected:
  120. D3D11Device& mDevice;
  121. IDXGIFactory* mDXGIFactory;
  122. bool mIsExternal;
  123. bool mSizing;
  124. bool mClosed;
  125. bool mIsChild;
  126. DXGI_SAMPLE_DESC mMultisampleType;
  127. bool mVSync;
  128. UINT32 mVSyncInterval;
  129. UINT32 mRefreshRateNumerator;
  130. UINT32 mRefreshRateDenominator;
  131. ID3D11Texture2D* mBackBuffer;
  132. ID3D11RenderTargetView* mRenderTargetView;
  133. TextureViewPtr mDepthStencilView;
  134. TexturePtr mDepthStencilBuffer;
  135. IDXGISwapChain* mSwapChain;
  136. DXGI_SWAP_CHAIN_DESC mSwapChainDesc;
  137. HWND mHWnd;
  138. };
  139. }