Przeglądaj źródła

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

BearishSun 7 lat temu
rodzic
commit
3cc7bbaf45

+ 10 - 10
Source/BansheeCore/Private/Win32/BsWin32Platform.cpp

@@ -609,14 +609,14 @@ namespace bs
 		case WM_SETFOCUS:
 		case WM_SETFOCUS:
 			{
 			{
 				if (!win->getProperties().hasFocus)
 				if (!win->getProperties().hasFocus)
-					win->_windowFocusReceived();
+					win->_notifyWindowEvent(WindowEventType::FocusReceived);
 
 
 				return 0;
 				return 0;
 			}
 			}
 		case WM_KILLFOCUS:
 		case WM_KILLFOCUS:
 			{
 			{
 				if (win->getProperties().hasFocus)
 				if (win->getProperties().hasFocus)
-					win->_windowFocusLost();
+					win->_notifyWindowEvent(WindowEventType::FocusLost);
 
 
 				return 0;
 				return 0;
 			}
 			}
@@ -625,20 +625,20 @@ namespace bs
 				return 0;
 				return 0;
 			break;
 			break;
 		case WM_MOVE:
 		case WM_MOVE:
-			win->_windowMovedOrResized();
+			win->_notifyWindowEvent(WindowEventType::Moved);
 			return 0;
 			return 0;
 		case WM_DISPLAYCHANGE:
 		case WM_DISPLAYCHANGE:
-			win->_windowMovedOrResized();
+			win->_notifyWindowEvent(WindowEventType::Resized);
 			break;
 			break;
 		case WM_SIZE:
 		case WM_SIZE:
-			win->_windowMovedOrResized();
+			win->_notifyWindowEvent(WindowEventType::Resized);
 
 
 			if (wParam == SIZE_MAXIMIZED)
 			if (wParam == SIZE_MAXIMIZED)
-				win->_notifyMaximized();
+				win->_notifyWindowEvent(WindowEventType::Maximized);
 			else if (wParam == SIZE_MINIMIZED)
 			else if (wParam == SIZE_MINIMIZED)
-				win->_notifyMinimized();
+				win->_notifyWindowEvent(WindowEventType::Minimized);
 			else if (wParam == SIZE_RESTORED)
 			else if (wParam == SIZE_RESTORED)
-				win->_notifyRestored();
+				win->_notifyWindowEvent(WindowEventType::Restored);
 
 
 			return 0;
 			return 0;
 		case WM_SETCURSOR:
 		case WM_SETCURSOR:
@@ -699,7 +699,7 @@ namespace bs
 			break;
 			break;
 		case WM_CLOSE:
 		case WM_CLOSE:
 			{
 			{
-				win->_notifyCloseRequested();
+			win->_notifyWindowEvent(WindowEventType::CloseRequested);
 
 
 				return 0;
 				return 0;
 			}
 			}
@@ -758,7 +758,7 @@ namespace bs
 				mData->mIsTrackingMouse = false; // TrackMouseEvent ends when this message is received and needs to be re-applied
 				mData->mIsTrackingMouse = false; // TrackMouseEvent ends when this message is received and needs to be re-applied
 
 
 				Lock lock(mData->mSync);
 				Lock lock(mData->mSync);
-				win->_notifyMouseLeft();
+				win->_notifyWindowEvent(WindowEventType::MouseLeft);
 			}
 			}
 			return 0;
 			return 0;
 		case WM_LBUTTONUP:
 		case WM_LBUTTONUP:

+ 22 - 18
Source/BansheeCore/RenderAPI/BsRenderWindow.cpp

@@ -243,29 +243,31 @@ namespace bs
 		{
 		{
 			case WindowEventType::Resized:
 			case WindowEventType::Resized:
 			{
 			{
+				_windowMovedOrResized();
+
 				{
 				{
 					ScopedSpinLock lock(coreWindow->mLock);
 					ScopedSpinLock lock(coreWindow->mLock);
 					syncProps.width = props.width;
 					syncProps.width = props.width;
 					syncProps.height = props.height;
 					syncProps.height = props.height;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
-				bs::RenderWindowManager::instance().notifyMovedOrResized(coreWindow);
-				_windowMovedOrResized();
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifyMovedOrResized(coreWindow);
 
 
 				break;
 				break;
 			}
 			}
 			case WindowEventType::Moved:
 			case WindowEventType::Moved:
 			{
 			{
+				_windowMovedOrResized();
+
 				{
 				{
 					ScopedSpinLock lock(coreWindow->mLock);
 					ScopedSpinLock lock(coreWindow->mLock);
 					syncProps.top = props.top;
 					syncProps.top = props.top;
 					syncProps.left = props.left;
 					syncProps.left = props.left;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
-				bs::RenderWindowManager::instance().notifyMovedOrResized(coreWindow);
-				_windowMovedOrResized();
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifyMovedOrResized(coreWindow);
 
 
 				break;
 				break;
 			}
 			}
@@ -276,8 +278,8 @@ namespace bs
 					syncProps.hasFocus = true;
 					syncProps.hasFocus = true;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
-				bs::RenderWindowManager::instance().notifyFocusReceived(coreWindow);
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifyFocusReceived(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::FocusLost:
 			case WindowEventType::FocusLost:
@@ -287,8 +289,8 @@ namespace bs
 					syncProps.hasFocus = false;
 					syncProps.hasFocus = false;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
-				bs::RenderWindowManager::instance().notifyFocusLost(coreWindow);
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifyFocusLost(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::Minimized:
 			case WindowEventType::Minimized:
@@ -298,7 +300,7 @@ namespace bs
 					syncProps.isMaximized = false;
 					syncProps.isMaximized = false;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::Maximized:
 			case WindowEventType::Maximized:
@@ -308,7 +310,7 @@ namespace bs
 					syncProps.isMaximized = true;
 					syncProps.isMaximized = true;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::Restored:
 			case WindowEventType::Restored:
@@ -318,17 +320,17 @@ namespace bs
 					syncProps.isMaximized = false;
 					syncProps.isMaximized = false;
 				}
 				}
 
 
-				bs::RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
+				RenderWindowManager::instance().notifySyncDataDirty(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::MouseLeft:
 			case WindowEventType::MouseLeft:
 			{
 			{
-				bs::RenderWindowManager::instance().notifyMouseLeft(coreWindow);
+				RenderWindowManager::instance().notifyMouseLeft(coreWindow);
 				break;
 				break;
 			}
 			}
 			case WindowEventType::CloseRequested:
 			case WindowEventType::CloseRequested:
 			{
 			{
-				bs::RenderWindowManager::instance().notifyCloseRequested(coreWindow);
+				RenderWindowManager::instance().notifyCloseRequested(coreWindow);
 				break;
 				break;
 			}
 			}
 		}
 		}
@@ -369,7 +371,7 @@ namespace bs
 
 
 	void RenderWindow::_notifyWindowEvent(WindowEventType type)
 	void RenderWindow::_notifyWindowEvent(WindowEventType type)
 	{
 	{
-		THROW_IF_CORE_THREAD;
+		THROW_IF_NOT_CORE_THREAD;
 
 
 		RenderWindowProperties& syncProps = getSyncedProperties();
 		RenderWindowProperties& syncProps = getSyncedProperties();
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
@@ -378,6 +380,8 @@ namespace bs
 		{
 		{
 			case WindowEventType::Resized:
 			case WindowEventType::Resized:
 			{
 			{
+				_windowMovedOrResized();
+
 				{
 				{
 					ScopedSpinLock lock(mLock);
 					ScopedSpinLock lock(mLock);
 					syncProps.width = props.width;
 					syncProps.width = props.width;
@@ -386,12 +390,13 @@ namespace bs
 
 
 				bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 				bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 				bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 				bs::RenderWindowManager::instance().notifyMovedOrResized(this);
-				_windowMovedOrResized();
 
 
 				break;
 				break;
 			}
 			}
 			case WindowEventType::Moved:
 			case WindowEventType::Moved:
 			{
 			{
+				_windowMovedOrResized();
+
 				{
 				{
 					ScopedSpinLock lock(mLock);
 					ScopedSpinLock lock(mLock);
 					syncProps.top = props.top;
 					syncProps.top = props.top;
@@ -400,7 +405,6 @@ namespace bs
 
 
 				bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 				bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 				bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 				bs::RenderWindowManager::instance().notifyMovedOrResized(this);
-				_windowMovedOrResized();
 
 
 				break;
 				break;
 			}
 			}

+ 2 - 2
Source/BansheeCore/Scene/BsSceneManager.cpp

@@ -50,10 +50,10 @@ namespace bs
 		GameObjectManager::instance().destroyQueuedObjects();
 		GameObjectManager::instance().destroyQueuedObjects();
 
 
 		HSceneObject newRoot = SceneObject::createInternal("SceneRoot");
 		HSceneObject newRoot = SceneObject::createInternal("SceneRoot");
-		_setRootNode(newRoot);
+		setRootNode(newRoot);
 	}
 	}
 
 
-	void SceneManager::_setRootNode(const HSceneObject& root)
+	void SceneManager::setRootNode(const HSceneObject& root)
 	{
 	{
 		if (root == nullptr)
 		if (root == nullptr)
 			return;
 			return;

+ 0 - 2
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.cpp

@@ -636,8 +636,6 @@ namespace bs
 			props.top = mWindow->getTop();
 			props.top = mWindow->getTop();
 			props.left = mWindow->getLeft();
 			props.left = mWindow->getLeft();
 		}
 		}
-
-		RenderWindow::_windowMovedOrResized();
 	}
 	}
 
 
 	void D3D11RenderWindow::createSwapChain()
 	void D3D11RenderWindow::createSwapChain()

+ 16 - 3
Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.cpp

@@ -316,6 +316,17 @@ namespace bs
 		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.left, props.top, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
 		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.left, props.top, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
 
 
 		_windowMovedOrResized();
 		_windowMovedOrResized();
+
+		{
+			ScopedSpinLock lock(mLock);
+			mSyncedProperties.top = props.top;
+			mSyncedProperties.left = props.left;
+			mSyncedProperties.width = props.width;
+			mSyncedProperties.height = props.height;
+		}
+
+		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 	}
 
 
 	void Win32RenderWindow::setFullscreen(const VideoMode& mode)
 	void Win32RenderWindow::setFullscreen(const VideoMode& mode)
@@ -369,14 +380,18 @@ namespace bs
 		SetWindowPos(mWindow->getHWnd(), HWND_NOTOPMOST, left, top, winWidth, winHeight,
 		SetWindowPos(mWindow->getHWnd(), HWND_NOTOPMOST, left, top, winWidth, winHeight,
 			SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOACTIVATE);
 			SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOACTIVATE);
 
 
+		_windowMovedOrResized();
+
 		{
 		{
 			ScopedSpinLock lock(mLock);
 			ScopedSpinLock lock(mLock);
+			mSyncedProperties.top = props.top;
+			mSyncedProperties.left = props.left;
 			mSyncedProperties.width = props.width;
 			mSyncedProperties.width = props.width;
 			mSyncedProperties.height = props.height;
 			mSyncedProperties.height = props.height;
 		}
 		}
 
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
-		_windowMovedOrResized();
+		bs::RenderWindowManager::instance().notifyMovedOrResized(this);
 	}
 	}
 
 
 	void Win32RenderWindow::move(INT32 left, INT32 top)
 	void Win32RenderWindow::move(INT32 left, INT32 top)
@@ -580,8 +595,6 @@ namespace bs
 			props.width = mWindow->getWidth();
 			props.width = mWindow->getWidth();
 			props.height = mWindow->getHeight();
 			props.height = mWindow->getHeight();
 		}
 		}
-
-		RenderWindow::_windowMovedOrResized();
 	}
 	}
 
 
 	HWND Win32RenderWindow::_getHWnd() const
 	HWND Win32RenderWindow::_getHWnd() const

+ 5 - 5
Source/BansheeUtility/Private/Win32/BsWin32Window.h

@@ -80,8 +80,8 @@ namespace bs
 		/**	Returns the native window handle. */
 		/**	Returns the native window handle. */
 		HWND getHWnd() const;
 		HWND getHWnd() const;
 
 
-        /**	Hide or show the window. */
-        void setHidden(bool hidden);
+		/**	Hide or show the window. */
+		void setHidden(bool hidden);
 
 
 		/**	Restores or minimizes the window. */
 		/**	Restores or minimizes the window. */
 		void setActive(bool state);
 		void setActive(bool state);
@@ -95,10 +95,10 @@ namespace bs
 		/**	Restores the window to original position and size if it is minimized or maximized. */
 		/**	Restores the window to original position and size if it is minimized or maximized. */
 		void restore();
 		void restore();
 
 
-        /**	Change the size of the window. */
-        void resize(UINT32 width, UINT32 height);
+		/**	Change the size of the window. */
+		void resize(UINT32 width, UINT32 height);
 
 
-        /**	Reposition the window. */
+		/**	Reposition the window. */
 		void move(INT32 left, INT32 top);
 		void move(INT32 left, INT32 top);
 
 
 		/**	Converts screen position into window local position. */
 		/**	Converts screen position into window local position. */

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

@@ -574,8 +574,6 @@ namespace bs
 
 
 		mSwapChain->rebuild(presentDevice, mSurface, props.width, props.height, props.vsync, mColorFormat, mColorSpace, 
 		mSwapChain->rebuild(presentDevice, mSurface, props.width, props.height, props.vsync, mColorFormat, mColorSpace, 
 			mDesc.depthBuffer, mDepthFormat);
 			mDesc.depthBuffer, mDepthFormat);
-
-		RenderWindow::_windowMovedOrResized();
 	}
 	}
 
 
 	void Win32RenderWindow::syncProperties()
 	void Win32RenderWindow::syncProperties()

+ 1 - 1
Source/SBansheeEngine/BsPlayInEditorManager.cpp

@@ -55,7 +55,7 @@ namespace bs
 
 
 			gSceneManager().setComponentState(ComponentState::Stopped);
 			gSceneManager().setComponentState(ComponentState::Stopped);
 			mSavedScene->_instantiate();
 			mSavedScene->_instantiate();
-			gSceneManager()._setRootNode(mSavedScene);
+			gSceneManager().setRootNode(mSavedScene);
 
 
 			mSavedScene = nullptr;
 			mSavedScene = nullptr;
 		}
 		}

+ 1 - 1
Source/SBansheeEngine/Wrappers/BsScriptScene.cpp

@@ -62,7 +62,7 @@ namespace bs
 			if (prefab->isScene())
 			if (prefab->isScene())
 			{
 			{
 				HSceneObject root = prefab->instantiate();
 				HSceneObject root = prefab->instantiate();
-				gSceneManager()._setRootNode(root);
+				gSceneManager().setRootNode(root);
 			}
 			}
 			else
 			else
 			{
 			{