Prechádzať zdrojové kódy

WIP: macOS port
- Fixing Windows build after macOS render window changes

BearishSun 7 rokov pred
rodič
commit
bbffb1f92e

+ 1 - 1
Source/BansheeD3D11RenderAPI/BsD3D11RenderAPI.cpp

@@ -112,7 +112,7 @@ namespace bs { namespace ct
 
 
 		// Create render window manager
 		// Create render window manager
 		bs::RenderWindowManager::startUp<bs::D3D11RenderWindowManager>(this);
 		bs::RenderWindowManager::startUp<bs::D3D11RenderWindowManager>(this);
-		RenderWindowManager::startUp<D3D11RenderWindowManager>(this);
+		RenderWindowManager::startUp();
 
 
 		// Create & register HLSL factory		
 		// Create & register HLSL factory		
 		mHLSLFactory = bs_new<D3D11HLSLProgramFactory>();
 		mHLSLFactory = bs_new<D3D11HLSLProgramFactory>();

+ 14 - 0
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.cpp

@@ -74,6 +74,20 @@ namespace bs
 		mProperties = getCore()->mSyncedProperties;
 		mProperties = getCore()->mSyncedProperties;
 	}
 	}
 
 
+	SPtr<ct::CoreObject> D3D11RenderWindow::createCore() const
+	{
+		ct::RenderAPI* rs = ct::RenderAPI::instancePtr();
+		auto d3d11rs = static_cast<ct::D3D11RenderAPI*>(rs);
+
+		// Create the window
+		RENDER_WINDOW_DESC desc = mDesc;
+		SPtr<ct::CoreObject> coreObj = bs_shared_ptr_new<ct::D3D11RenderWindow>(desc, mWindowId, 
+			d3d11rs->getPrimaryDevice(), d3d11rs->getDXGIFactory());
+		coreObj->_setThisPtr(coreObj);
+
+		return coreObj;
+	}
+
 	namespace ct
 	namespace ct
 	{
 	{
 	D3D11RenderWindow::D3D11RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, D3D11Device& device, IDXGIFactory* DXGIFactory)
 	D3D11RenderWindow::D3D11RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, D3D11Device& device, IDXGIFactory* DXGIFactory)

+ 3 - 0
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.h

@@ -45,6 +45,9 @@ namespace bs {
 		/** @copydoc RenderWindow::syncProperties */
 		/** @copydoc RenderWindow::syncProperties */
 		void syncProperties() override;
 		void syncProperties() override;
 
 
+		/** @copydoc RenderWindow::createCore */
+		SPtr<ct::CoreObject> createCore() const override;
+
 		/**	Retrieves internal window handle. */
 		/**	Retrieves internal window handle. */
 		HWND getHWnd() const;
 		HWND getHWnd() const;
 
 

+ 0 - 26
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindowManager.cpp

@@ -31,30 +31,4 @@ namespace bs
 			d3d11rs->getPrimaryDevice(), d3d11rs->getDXGIFactory());
 			d3d11rs->getPrimaryDevice(), d3d11rs->getDXGIFactory());
 		return bs_core_ptr<D3D11RenderWindow>(renderWindow);
 		return bs_core_ptr<D3D11RenderWindow>(renderWindow);
 	}
 	}
-
-	namespace ct
-	{
-	D3D11RenderWindowManager::D3D11RenderWindowManager(D3D11RenderAPI* renderSystem)
-		:mRenderSystem(renderSystem)
-	{
-		assert(mRenderSystem != nullptr);
-	}
-
-	SPtr<RenderWindow> D3D11RenderWindowManager::createInternal(RENDER_WINDOW_DESC& desc, UINT32 windowId)
-	{
-		RenderAPI* rs = RenderAPI::instancePtr();
-		D3D11RenderAPI* d3d11rs = static_cast<D3D11RenderAPI*>(rs);
-
-		// Create the window
-		D3D11RenderWindow* renderWindow = new (bs_alloc<D3D11RenderWindow>()) D3D11RenderWindow(desc, windowId, 
-			d3d11rs->getPrimaryDevice(), d3d11rs->getDXGIFactory());
-
-		SPtr<D3D11RenderWindow> renderWindowPtr = bs_shared_ptr<D3D11RenderWindow>(renderWindow);
-		renderWindowPtr->_setThisPtr(renderWindowPtr);
-
-		windowCreated(renderWindow);
-
-		return renderWindowPtr;
-	}
-	}
 }
 }

+ 0 - 17
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindowManager.h

@@ -26,22 +26,5 @@ namespace bs
 		ct::D3D11RenderAPI* mRenderSystem;
 		ct::D3D11RenderAPI* mRenderSystem;
 	};
 	};
 
 
-	namespace ct
-	{
-	/** @copydoc RenderWindowManager */
-	class D3D11RenderWindowManager : public RenderWindowManager
-	{
-	public:
-		D3D11RenderWindowManager(D3D11RenderAPI* renderSystem);
-
-	protected:
-		/** @copydoc RenderWindowManager::createInternal */
-		SPtr<RenderWindow> createInternal(RENDER_WINDOW_DESC& desc, UINT32 windowId) override;
-
-	private:
-		D3D11RenderAPI* mRenderSystem;
-	};
-	}
-
 	/** @} */
 	/** @} */
 }
 }

+ 1 - 5
Source/BansheeGLRenderAPI/Win32/BsWin32GLSupport.cpp

@@ -41,14 +41,10 @@ namespace bs { namespace ct
 		return SPtr<bs::RenderWindow>(window, &bs::CoreObject::_delete<bs::Win32RenderWindow, GenAlloc>);
 		return SPtr<bs::RenderWindow>(window, &bs::CoreObject::_delete<bs::Win32RenderWindow, GenAlloc>);
 	}
 	}
 
 
-	SPtr<RenderWindow> Win32GLSupport::newWindowCore(RENDER_WINDOW_DESC& desc, UINT32 windowId)
+	void Win32GLSupport::_notifyWindowCreated(Win32RenderWindow* window)
 	{
 	{
-		Win32RenderWindow* window = new (bs_alloc<Win32RenderWindow>()) Win32RenderWindow(desc, windowId, *this);
-
 		if (!mInitialWindow)
 		if (!mInitialWindow)
 			mInitialWindow = window;
 			mInitialWindow = window;
-
-		return bs_shared_ptr<Win32RenderWindow>(window);
 	}
 	}
 
 
 	void Win32GLSupport::start()
 	void Win32GLSupport::start()

+ 3 - 3
Source/BansheeGLRenderAPI/Win32/BsWin32GLSupport.h

@@ -21,9 +21,6 @@ namespace bs { namespace ct
 		/** @copydoc GLSupport::newWindow */
 		/** @copydoc GLSupport::newWindow */
 		SPtr<bs::RenderWindow> newWindow(RENDER_WINDOW_DESC& desc, UINT32 windowId, SPtr<bs::RenderWindow> parentWindow) override;
 		SPtr<bs::RenderWindow> newWindow(RENDER_WINDOW_DESC& desc, UINT32 windowId, SPtr<bs::RenderWindow> parentWindow) override;
 
 
-		/** @copydoc GLSupport::newWindowCore */
-		SPtr<RenderWindow> newWindowCore(RENDER_WINDOW_DESC& desc, UINT32 windowId) override;
-
 		/** @copydoc GLSupport::start */
 		/** @copydoc GLSupport::start */
 		void start() override;
 		void start() override;
 
 
@@ -61,6 +58,9 @@ namespace bs { namespace ct
 		/** @copydoc GLSupport::getVideoModeInfo */
 		/** @copydoc GLSupport::getVideoModeInfo */
 		SPtr<VideoModeInfo> getVideoModeInfo() const override;
 		SPtr<VideoModeInfo> getVideoModeInfo() const override;
 
 
+		/** Notifies the manager that a new window has been created. */
+		void _notifyWindowCreated(Win32RenderWindow* window);
+
 	private:
 	private:
 		/**	Initializes windows specific OpenGL extensions needed for advanced context creation. */
 		/**	Initializes windows specific OpenGL extensions needed for advanced context creation. */
 		void initialiseWGL();
 		void initialiseWGL();

+ 10 - 0
Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.cpp

@@ -69,6 +69,16 @@ namespace bs
 		return std::static_pointer_cast<ct::Win32RenderWindow>(mCoreSpecific);
 		return std::static_pointer_cast<ct::Win32RenderWindow>(mCoreSpecific);
 	}
 	}
 
 
+	SPtr<ct::CoreObject> Win32RenderWindow::createCore() const
+	{
+		RENDER_WINDOW_DESC desc = mDesc;
+		SPtr<ct::Win32RenderWindow> coreObj = bs_shared_ptr_new<ct::Win32RenderWindow>(desc, mWindowId, mGLSupport);
+		coreObj->_setThisPtr(coreObj);
+
+		mGLSupport._notifyWindowCreated(coreObj.get());
+		return coreObj;
+	}
+
 	void Win32RenderWindow::syncProperties()
 	void Win32RenderWindow::syncProperties()
 	{
 	{
 		ScopedSpinLock lock(getCore()->mLock);
 		ScopedSpinLock lock(getCore()->mLock);

+ 3 - 0
Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.h

@@ -46,6 +46,9 @@ namespace bs
 		/** @copydoc RenderWindow::syncProperties */
 		/** @copydoc RenderWindow::syncProperties */
 		void syncProperties() override;
 		void syncProperties() override;
 
 
+		/** @copydoc RenderWindow::createCore */
+		SPtr<ct::CoreObject> createCore() const override;
+
 		/**	Retrieves internal window handle. */
 		/**	Retrieves internal window handle. */
 		HWND getHWnd() const;
 		HWND getHWnd() const;
 
 

+ 11 - 0
Source/BansheeVulkanRenderAPI/Win32/BsWin32RenderWindow.cpp

@@ -69,6 +69,17 @@ namespace bs
 		mProperties = getCore()->mSyncedProperties;
 		mProperties = getCore()->mSyncedProperties;
 	}
 	}
 
 
+	SPtr<ct::CoreObject> Win32RenderWindow::createCore() const
+	{
+		ct::VulkanRenderAPI& rapi = static_cast<ct::VulkanRenderAPI&>(ct::RenderAPI::instance());
+
+		RENDER_WINDOW_DESC desc = mDesc;
+		SPtr<ct::CoreObject> coreObj = bs_shared_ptr_new<ct::Win32RenderWindow>(desc, mWindowId, rapi);
+		coreObj->_setThisPtr(coreObj);
+
+		return coreObj;
+	}
+
 	namespace ct
 	namespace ct
 	{
 	{
 		Win32RenderWindow::Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, VulkanRenderAPI& renderAPI)
 		Win32RenderWindow::Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, VulkanRenderAPI& renderAPI)

+ 3 - 0
Source/BansheeVulkanRenderAPI/Win32/BsWin32RenderWindow.h

@@ -48,6 +48,9 @@ namespace bs
 		/** @copydoc RenderWindow::syncProperties */
 		/** @copydoc RenderWindow::syncProperties */
 		void syncProperties() override;
 		void syncProperties() override;
 
 
+		/** @copydoc RenderWindow::createCore */
+		SPtr<ct::CoreObject> createCore() const override;
+
 	private:
 	private:
 		RenderWindowProperties mProperties;
 		RenderWindowProperties mProperties;
 	};
 	};