Browse Source

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

Marko Pintera 7 years ago
parent
commit
75a17b8393

+ 1 - 4
Source/BansheeCore/Managers/BsRenderWindowManager.cpp

@@ -263,14 +263,11 @@ namespace bs
 		mDirtyProperties.clear();
 	}
 
-	UINT32 RenderWindowManager::windowCreated(RenderWindow* window)
+	void RenderWindowManager::windowCreated(RenderWindow* window)
 	{
-		UINT32 id = mNextWindowId.fetch_add(1, std::memory_order_relaxed);
 		Lock lock(mWindowMutex);
 
 		mCreatedWindows.push_back(window);
-
-		return id;
 	}
 
 	void RenderWindowManager::windowDestroyed(RenderWindow* window)

+ 1 - 1
Source/BansheeCore/Managers/BsRenderWindowManager.h

@@ -121,7 +121,7 @@ namespace bs
 		friend class bs::RenderWindowManager;
 
 		/**	Called whenever a window is created. */
-		UINT32 windowCreated(RenderWindow* window);
+		void windowCreated(RenderWindow* window);
 
 		/**	Called by the core thread when window is destroyed. */
 		void windowDestroyed(RenderWindow* window);

+ 3 - 3
Source/BansheeCore/RenderAPI/BsRenderWindow.cpp

@@ -332,10 +332,10 @@ namespace bs
 
 	namespace ct
 	{
-	RenderWindow::RenderWindow(const RENDER_WINDOW_DESC& desc)
-		:mDesc(desc), mWindowId(0)
+	RenderWindow::RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId)
+		:mDesc(desc), mWindowId(windowId)
 	{
-		mWindowId = RenderWindowManager::instance().windowCreated(this);
+		RenderWindowManager::instance().windowCreated(this);
 	}
 
 	RenderWindow::~RenderWindow()

+ 1 - 1
Source/BansheeCore/RenderAPI/BsRenderWindow.h

@@ -252,7 +252,7 @@ namespace bs
 	class BS_CORE_EXPORT RenderWindow : public RenderTarget
 	{
 	public:
-		RenderWindow(const RENDER_WINDOW_DESC& desc);
+		RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId);
 		virtual ~RenderWindow();
 
 		/** 

+ 0 - 7
Source/BansheeGLRenderAPI/Linux/BsLinuxGLSupport.cpp

@@ -95,13 +95,6 @@ namespace bs { namespace ct
 		return SPtr<bs::RenderWindow>(window, &bs::CoreObject::_delete<bs::LinuxRenderWindow, GenAlloc>);
 	}
 
-	SPtr<RenderWindow> LinuxGLSupport::newWindowCore(RENDER_WINDOW_DESC& desc, UINT32 windowId)
-	{
-		LinuxRenderWindow* window = new (bs_alloc<LinuxRenderWindow>()) LinuxRenderWindow(desc, windowId, *this);
-
-		return bs_shared_ptr<LinuxRenderWindow>(window);
-	}
-
 	void LinuxGLSupport::start()
 	{
 		// Retrieve all essential extensions

+ 0 - 3
Source/BansheeGLRenderAPI/Linux/BsLinuxGLSupport.h

@@ -72,9 +72,6 @@ namespace bs { namespace ct
 		/** @copydoc GLSupport::newWindow */
 		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 */
 		void start() override;
 

+ 9 - 0
Source/BansheeGLRenderAPI/Linux/BsLinuxRenderWindow.cpp

@@ -57,6 +57,15 @@ namespace bs
 		return std::static_pointer_cast<ct::LinuxRenderWindow>(mCoreSpecific);
 	}
 
+	SPtr<ct::CoreObject> LinuxRenderWindow::createCore() const
+	{
+		RENDER_WINDOW_DESC desc = mDesc;
+		SPtr<ct::CoreObject> coreObj = bs_shared_ptr_new<ct::LinuxRenderWindow>(desc, mWindowId, mGLSupport);
+		coreObj->_setThisPtr(coreObj);
+
+		return coreObj;
+	}
+
 	void LinuxRenderWindow::syncProperties()
 	{
 		ScopedSpinLock lock(getCore()->_getPropertiesLock());

+ 3 - 0
Source/BansheeGLRenderAPI/Linux/BsLinuxRenderWindow.h

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

+ 2 - 1
Source/BansheeGLRenderAPI/MacOS/BsMacOSRenderWindow.h

@@ -119,7 +119,8 @@ namespace bs
 		class MacOSRenderWindow : public RenderWindow
 		{
 		public:
-			MacOSRenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 cocoaWindowId, const SPtr<MacOSContext>& context);
+			MacOSRenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 renderWindowId, UINT32 cocoaWindowId,
+							  const SPtr<MacOSContext>& context);
 
 			/** @copydoc RenderWindow::move */
 			void move(INT32 left, INT32 top) override;

+ 7 - 4
Source/BansheeGLRenderAPI/MacOS/BsMacOSRenderWindow.mm

@@ -84,7 +84,10 @@ namespace bs
 	SPtr<ct::CoreObject> MacOSRenderWindow::createCore() const
 	{
 		RENDER_WINDOW_DESC desc = mDesc;
-		return bs_shared_ptr_new<ct::MacOSRenderWindow>(desc, mWindow->_getWindowId(), mContext);
+		SPtr<ct::CoreObject> obj = bs_shared_ptr_new<ct::MacOSRenderWindow>(
+				desc, mWindowId, mWindow->_getWindowId(), mContext);
+		obj->_setThisPtr(obj);
+		return obj;
 	}
 
 	void MacOSRenderWindow::resize(UINT32 width, UINT32 height)
@@ -414,10 +417,10 @@ namespace bs
 
 	namespace ct
 	{
-		MacOSRenderWindow::MacOSRenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 cocoaWindowId,
+		MacOSRenderWindow::MacOSRenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 renderWindowId, UINT32 cocoaWindowId,
 			const SPtr<MacOSContext>& context)
-			: RenderWindow(desc), mShowOnSwap(desc.hideUntilSwap), mCocoaWindowId(cocoaWindowId), mProperties(desc)
-			, mSyncedProperties(desc)
+			: RenderWindow(desc, renderWindowId), mShowOnSwap(desc.hideUntilSwap), mCocoaWindowId(cocoaWindowId)
+			, mProperties(desc), mSyncedProperties(desc)
 		{
 			mContext = context;
 		}

+ 1 - 1
Source/BansheeVulkanRenderAPI/BsVulkanRenderAPI.cpp

@@ -258,7 +258,7 @@ namespace bs { namespace ct
 
 		// Create render window manager
 		bs::RenderWindowManager::startUp<bs::VulkanRenderWindowManager>();
-		RenderWindowManager::startUp<VulkanRenderWindowManager>(*this);
+		RenderWindowManager::startUp();
 
 		// Create query manager 
 		QueryManager::startUp<VulkanQueryManager>(*this);

+ 11 - 0
Source/BansheeVulkanRenderAPI/Linux/BsLinuxRenderWindow.cpp

@@ -60,6 +60,17 @@ namespace bs
 		return std::static_pointer_cast<ct::LinuxRenderWindow>(mCoreSpecific);
 	}
 
+	SPtr<ct::CoreObject> LinuxRenderWindow::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::LinuxRenderWindow>(desc, mWindowId, rapi);
+		coreObj->_setThisPtr(coreObj);
+
+		return coreObj;
+	}
+
 	void LinuxRenderWindow::syncProperties()
 	{
 		ScopedSpinLock lock(getCore()->_getPropertiesLock());

+ 3 - 0
Source/BansheeVulkanRenderAPI/Linux/BsLinuxRenderWindow.h

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

+ 0 - 26
Source/BansheeVulkanRenderAPI/Managers/BsVulkanRenderWindowManager.cpp

@@ -31,30 +31,4 @@ namespace bs
 		return bs_core_ptr<LinuxRenderWindow>(renderWindow);
 #endif
 	}
-
-	namespace ct
-	{
-		VulkanRenderWindowManager::VulkanRenderWindowManager(VulkanRenderAPI& renderAPI)
-		:mRenderAPI(renderAPI)
-	{ }
-
-	SPtr<RenderWindow> VulkanRenderWindowManager::createInternal(RENDER_WINDOW_DESC& desc, UINT32 windowId)
-	{
-		// Create the window
-#if BS_PLATFORM == BS_PLATFORM_WIN32
-		Win32RenderWindow* renderWindow =
-			new (bs_alloc<Win32RenderWindow>()) Win32RenderWindow(desc, windowId, mRenderAPI);
-		SPtr<Win32RenderWindow> renderWindowPtr = bs_shared_ptr<Win32RenderWindow>(renderWindow);
-#elif BS_PLATFORM == BS_PLATFORM_LINUX
-		LinuxRenderWindow* renderWindow =
-				new (bs_alloc<LinuxRenderWindow>()) LinuxRenderWindow(desc, windowId, mRenderAPI);
-		SPtr<LinuxRenderWindow> renderWindowPtr = bs_shared_ptr<LinuxRenderWindow>(renderWindow);
-#endif
-
-		renderWindowPtr->_setThisPtr(renderWindowPtr);
-		windowCreated(renderWindow);
-
-		return renderWindowPtr;
-	}
-	}
 }

+ 0 - 15
Source/BansheeVulkanRenderAPI/Managers/BsVulkanRenderWindowManager.h

@@ -22,20 +22,5 @@ namespace bs
 		SPtr<RenderWindow> createImpl(RENDER_WINDOW_DESC& desc, UINT32 windowId, const SPtr<RenderWindow>& parentWindow) override;
 	};
 
-	namespace ct
-	{
-	/** @copydoc RenderWindowManager */
-	class VulkanRenderWindowManager : public RenderWindowManager
-	{
-	public:
-		VulkanRenderWindowManager(VulkanRenderAPI& renderAPI);
-
-	protected:
-		/** @copydoc RenderWindowManager::createInternal */
-		SPtr<RenderWindow> createInternal(RENDER_WINDOW_DESC& desc, UINT32 windowId) override;
-
-		VulkanRenderAPI& mRenderAPI;
-	};
-	}
 	/** @} */
 }