Ver Fonte

WIP: Linux port
- RenderTargetProperties no longer use getters as it makes it difficult to modify when compiling with Clang/GCC due to different 'friend' class handling

BearishSun há 8 anos atrás
pai
commit
baa1e0d7de
42 ficheiros alterados com 387 adições e 501 exclusões
  1. 6 6
      Source/BansheeCore/Managers/BsRenderWindowManager.cpp
  2. 1 1
      Source/BansheeCore/RenderAPI/BsRenderTarget.cpp
  3. 27 54
      Source/BansheeCore/RenderAPI/BsRenderTarget.h
  4. 6 8
      Source/BansheeCore/RenderAPI/BsRenderTexture.cpp
  5. 2 2
      Source/BansheeCore/RenderAPI/BsRenderTexture.h
  6. 47 57
      Source/BansheeCore/RenderAPI/BsRenderWindow.cpp
  7. 25 37
      Source/BansheeCore/RenderAPI/BsRenderWindow.h
  8. 5 5
      Source/BansheeCore/RenderAPI/BsViewport.cpp
  9. 2 2
      Source/BansheeCore/Scene/BsSceneManager.cpp
  10. 3 3
      Source/BansheeCore/Win32/BsWin32Platform.cpp
  11. 9 9
      Source/BansheeD3D11RenderAPI/BsD3D11RenderAPI.cpp
  12. 65 73
      Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.cpp
  13. 3 15
      Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.h
  14. 1 1
      Source/BansheeEditor/EditorWindow/BsEditorWidget.cpp
  15. 2 2
      Source/BansheeEditor/EditorWindow/BsEditorWidgetManager.cpp
  16. 1 1
      Source/BansheeEditor/EditorWindow/BsEditorWindow.cpp
  17. 5 5
      Source/BansheeEditor/EditorWindow/BsEditorWindowBase.cpp
  18. 1 1
      Source/BansheeEditor/GUI/BsGUIMenuBar.cpp
  19. 1 1
      Source/BansheeEditor/GUI/BsGUIResourceTreeView.cpp
  20. 1 1
      Source/BansheeEditor/GUI/BsGUIWindowFrameWidget.cpp
  21. 2 2
      Source/BansheeEditor/Handles/BsHandleDrawManager.cpp
  22. 3 3
      Source/BansheeEditor/SceneView/BsScenePicking.cpp
  23. 3 3
      Source/BansheeEngine/GUI/BsGUIManager.cpp
  24. 1 1
      Source/BansheeEngine/GUI/BsGUIRenderTexture.cpp
  25. 4 4
      Source/BansheeEngine/GUI/BsGUIViewport.cpp
  26. 7 7
      Source/BansheeGLRenderAPI/BsGLRenderAPI.cpp
  27. 1 1
      Source/BansheeGLRenderAPI/BsGLRenderTexture.cpp
  28. 59 67
      Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.cpp
  29. 7 19
      Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.h
  30. 3 3
      Source/BansheeVulkanRenderAPI/BsVulkanCommandBuffer.cpp
  31. 5 5
      Source/BansheeVulkanRenderAPI/BsVulkanRenderTexture.cpp
  32. 49 60
      Source/BansheeVulkanRenderAPI/Win32/BsWin32RenderWindow.cpp
  33. 3 15
      Source/BansheeVulkanRenderAPI/Win32/BsWin32RenderWindow.h
  34. 3 3
      Source/Examples/ExampleGettingStarted/Main.cpp
  35. 3 3
      Source/Examples/ExamplePhysicallyBasedShading/Main.cpp
  36. 7 7
      Source/RenderBeast/BsPostProcessing.cpp
  37. 1 1
      Source/RenderBeast/BsRenderBeast.cpp
  38. 2 2
      Source/RenderBeast/BsRenderCompositor.cpp
  39. 3 3
      Source/RenderBeast/BsRendererScene.cpp
  40. 2 2
      Source/SBansheeEditor/Wrappers/BsScriptSceneHandles.cpp
  41. 1 1
      Source/SBansheeEngine/Wrappers/BsScriptCamera.cpp
  42. 5 5
      Source/SBansheeEngine/Wrappers/BsScriptRenderTarget.cpp

+ 6 - 6
Source/BansheeCore/Managers/BsRenderWindowManager.cpp

@@ -97,10 +97,10 @@ namespace bs
 			moveResizeData = &mMovedOrResizedWindows.back();
 		}
 		
-		moveResizeData->x = props.getLeft();
-		moveResizeData->y = props.getTop();
-		moveResizeData->width = props.getWidth();
-		moveResizeData->height = props.getHeight();
+		moveResizeData->x = props.left;
+		moveResizeData->y = props.top;
+		moveResizeData->width = props.width;
+		moveResizeData->height = props.height;
 	}
 
 	void RenderWindowManager::notifySyncDataDirty(ct::RenderWindow* coreWindow)
@@ -142,8 +142,8 @@ namespace bs
 				// Need to eliminate non-dirty ones because it's possible we already triggered the resize event
 				// if the resize call originated from the sim thread, so we don't trigger it twice.
 
-				bool isDirty = moveResizeData.x != props.getLeft() || moveResizeData.y != props.getTop()
-					|| moveResizeData.width != props.getWidth() || moveResizeData.height != props.getHeight();
+				bool isDirty = moveResizeData.x != props.left || moveResizeData.y != props.top
+					|| moveResizeData.width != props.width || moveResizeData.height != props.height;
 
 				if (isDirty)
 					movedOrResizedWindows.push_back(moveResizeData);

+ 1 - 1
Source/BansheeCore/RenderAPI/BsRenderTarget.cpp

@@ -54,7 +54,7 @@ namespace bs
 		{
 			RenderTargetProperties& props = const_cast<RenderTargetProperties&>(getProperties());
 
-			props.mPriority = priority;
+			props.priority = priority;
 		}
 
 		const RenderTargetProperties& RenderTarget::getProperties() const

+ 27 - 54
Source/BansheeCore/RenderAPI/BsRenderTarget.h

@@ -68,78 +68,51 @@ namespace bs
 		RenderTargetProperties() { }
 		virtual ~RenderTargetProperties() { }
 
-		/** Returns width of the render target, in pixels. */
-        UINT32 getWidth() const { return mWidth; }
+		/** Width of the render target, in pixels. */
+		UINT32 width = 0;
 
-		/** Returns height of the render target, in pixels. */
-        UINT32 getHeight() const { return mHeight; }
+		/** Height of the render target, in pixels. */
+		UINT32 height = 0;
 
 		/** 
-		 * Returns the number of three dimensional slices of the render target. This will be number of layers for array
+		 * Number of three dimensional slices of the render target. This will be number of layers for array
 		 * textures or number of faces cube textures.
 		 */
-        UINT32 getNumSlices() const { return mNumSlices; }
+		UINT32 numSlices = 0;
 
-		/** Gets the number of samples used for multisampling. (0 or 1 if multisampling is not used). */
-		UINT32 getMultisampleCount() const { return mMultisampleCount; }
+		/**
+		 * Controls in what order is the render target rendered to compared to other render targets. Targets with higher 
+		 * priority will be rendered before ones with lower priority.
+		 */
+		INT32 priority = 0;
 
 		/**
-		 * Returns true if the render target will wait for vertical sync before swapping buffers. This will eliminate 
+		 * True if the render target will wait for vertical sync before swapping buffers. This will eliminate 
 		 * tearing but may increase input latency.
 		 */
-		bool getVSync() const { return mVSync; }
+		bool vsync = false;
 
 		/**
-		 * Returns how often should the frame be presented in respect to display device refresh rate. Normal value is 1 
+		 * Controls how often should the frame be presented in respect to display device refresh rate. Normal value is 1 
 		 * where it will match the refresh rate. Higher values will decrease the frame rate (for example present interval of
 		 * 2 on 60Hz refresh rate will display at most 30 frames per second).
 		 */
-		UINT32 getVSyncInterval() const { return mVSyncInterval; }
-
-		/** Returns true if pixels written to the render target will be gamma corrected. */
-		bool isHwGammaEnabled() const { return mHwGamma; }
-
-		/**
-		 * Returns true if the render target can be used for rendering.
-		 *
-		 * @note	Core thread only.
-		 */
-		bool isActive() const { return mActive; }
-
-		/**
-		 * Controls in what order is the render target rendered to compared to other render targets. Targets with higher 
-		 * priority will be rendered before ones with lower priority.
-		 */
-		INT32 getPriority() const { return mPriority; }
+		UINT32 vsyncInterval = 1;
 
-		/** Returns true if the render target is a render window. */
-		bool isWindow() const { return mIsWindow; }
+		/** True if pixels written to the render target will be gamma corrected. */
+		bool hwGamma = false;
 
 		/**
 		 * Does the texture need to be vertically flipped because of different screen space coordinate systems.	(Determines
 		 * is origin top left or bottom left. Engine default is top left.)
 		 */
-		bool requiresTextureFlipping() const { return mRequiresTextureFlipping; }
-
-	protected:
-		friend class ct::RenderTarget;
-		friend class RenderTarget;
-
-		UINT32 mWidth = 0;
-		UINT32 mHeight = 0;
-		UINT32 mNumSlices = 0;
-		UINT32 mColorDepth = 32;
+		bool requiresTextureFlipping = false;
 
-		INT32 mPriority = 0;
-		UINT32 mVSyncInterval = 1;
+		/** True if the target is a window, false if an offscreen target. */
+		bool isWindow = false;
 
-		bool mActive = true;
-		bool mHwGamma = false;
-		bool mVSync = false;
-		bool mRequiresTextureFlipping = false;
-		bool mIsWindow = false;
-
-		UINT32 mMultisampleCount = 0;
+		/** Controls how many samples are used for multisampling. (0 or 1 if multisampling is not used). */
+		UINT32 multisampleCount = 0;
 	};
 
 	/**
@@ -148,9 +121,9 @@ namespace bs
 	 * @note	
 	 * Sim thread unless noted otherwise. Retrieve core implementation from getCore() for core thread only functionality.
 	 */
-    class BS_CORE_EXPORT RenderTarget : public CoreObject
-    {
-    public:
+	class BS_CORE_EXPORT RenderTarget : public CoreObject
+	{
+	public:
 		RenderTarget();
 		virtual ~RenderTarget() { }
 
@@ -181,12 +154,12 @@ namespace bs
 		 */
 		mutable Event<void()> onResized;
 
-    protected:
+	protected:
 		friend class ct::RenderTarget;
 
 		/**	Returns properties that describe the render target. */
 		virtual const RenderTargetProperties& getPropertiesInternal() const = 0;
-    };
+	};
 
 	/** @} */
 

+ 6 - 8
Source/BansheeCore/RenderAPI/BsRenderTexture.cpp

@@ -90,17 +90,15 @@ namespace bs
 		if (textureProps != nullptr)
 		{
 			PixelUtil::getSizeForMipLevel(textureProps->getWidth(), textureProps->getHeight(), textureProps->getDepth(), 
-										  mipLevel, mWidth, mHeight, mNumSlices);
+										  mipLevel, width, height, numSlices);
 
-			mNumSlices *= numSlices;
-			mColorDepth = bs::PixelUtil::getNumElemBits(textureProps->getFormat());
-			mMultisampleCount = textureProps->getNumSamples();
+			numSlices *= numSlices;
+			multisampleCount = textureProps->getNumSamples();
 		}
 
-		mActive = true;
-		mIsWindow = false;
-		mRequiresTextureFlipping = requiresFlipping;
-		mHwGamma = hwGamma;
+		isWindow = false;
+		requiresTextureFlipping = requiresFlipping;
+		this->hwGamma = hwGamma;
 	}
 
 	SPtr<RenderTexture> RenderTexture::create(const TEXTURE_DESC& desc, 

+ 2 - 2
Source/BansheeCore/RenderAPI/BsRenderTexture.h

@@ -43,8 +43,8 @@ namespace bs
 	 *
 	 * @note	Sim thread only. Retrieve core implementation from getCore() for core thread only functionality.
 	 */
-    class BS_CORE_EXPORT RenderTexture : public RenderTarget
-    {
+	class BS_CORE_EXPORT RenderTexture : public RenderTarget
+	{
 	public:
 		virtual ~RenderTexture() { }
 

+ 47 - 57
Source/BansheeCore/RenderAPI/BsRenderWindow.cpp

@@ -11,19 +11,19 @@ namespace bs
 {
 	RenderWindowProperties::RenderWindowProperties(const RENDER_WINDOW_DESC& desc)
 	{
-		mWidth = desc.videoMode.getWidth();
-		mHeight = desc.videoMode.getHeight();
-		mHwGamma = desc.gamma;
-		mVSync = desc.vsync;
-		mVSyncInterval = desc.vsyncInterval;
-		mMultisampleCount = desc.multisampleCount;
-		mLeft = desc.left;
-		mTop = desc.top;
-		mIsFullScreen = desc.fullscreen;
-		mHidden = desc.hidden;
-		mIsModal = desc.modal;
-		mIsWindow = true;
-		mRequiresTextureFlipping = false;
+		width = desc.videoMode.getWidth();
+		height = desc.videoMode.getHeight();
+		hwGamma = desc.gamma;
+		vsync = desc.vsync;
+		vsyncInterval = desc.vsyncInterval;
+		multisampleCount = desc.multisampleCount;
+		left = desc.left;
+		top = desc.top;
+		isFullScreen = desc.fullscreen;
+		isHidden = desc.hidden;
+		isModal = desc.modal;
+		isWindow = true;
+		requiresTextureFlipping = false;
 	}
 
 	void RenderWindow::destroy()
@@ -47,13 +47,13 @@ namespace bs
 			renderWindow->resize(width, height);
 		};
 
-		getMutableProperties().mWidth = width;
-		getMutableProperties().mHeight = height;
+		getMutableProperties().width = width;
+		getMutableProperties().height = height;
 
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mWidth = width;
-			getCore()->getSyncedProperties().mHeight = height;
+			getCore()->getSyncedProperties().width = width;
+			getCore()->getSyncedProperties().height = height;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -70,13 +70,13 @@ namespace bs
 			renderWindow->move(left, top);
 		};
 
-		getMutableProperties().mLeft = left;
-		getMutableProperties().mTop = top;
+		getMutableProperties().left = left;
+		getMutableProperties().top = top;
 
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mLeft = left;
-			getCore()->getSyncedProperties().mTop = top;
+			getCore()->getSyncedProperties().left = left;
+			getCore()->getSyncedProperties().top = top;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -91,10 +91,10 @@ namespace bs
 			renderWindow->setHidden(true);
 		};
 
-		getMutableProperties().mHidden = true;
+		getMutableProperties().isHidden = true;
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mHidden = true;
+			getCore()->getSyncedProperties().isHidden = true;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -109,10 +109,10 @@ namespace bs
 			renderWindow->setHidden(false);
 		};
 
-		getMutableProperties().mHidden = false;
+		getMutableProperties().isHidden = false;
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mHidden = false;
+			getCore()->getSyncedProperties().isHidden = false;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -127,10 +127,10 @@ namespace bs
 			renderWindow->minimize();
 		};
 
-		getMutableProperties().mIsMaximized = false;
+		getMutableProperties().isMaximized = false;
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mIsMaximized = false;
+			getCore()->getSyncedProperties().isMaximized = false;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -145,10 +145,10 @@ namespace bs
 			renderWindow->maximize();
 		};
 
-		getMutableProperties().mIsMaximized = true;
+		getMutableProperties().isMaximized = true;
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mIsMaximized = true;
+			getCore()->getSyncedProperties().isMaximized = true;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -163,10 +163,10 @@ namespace bs
 			renderWindow->restore();
 		};
 
-		getMutableProperties().mIsMaximized = false;
+		getMutableProperties().isMaximized = false;
 		{
 			ScopedSpinLock lock(getCore()->mLock);
-			getCore()->getSyncedProperties().mIsMaximized = false;
+			getCore()->getSyncedProperties().isMaximized = false;
 		}
 
 		ct::RenderWindowManager::instance().notifySyncDataDirty(getCore().get());
@@ -253,10 +253,10 @@ namespace bs
 
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 
-		props.mHidden = hidden;
+		props.isHidden = hidden;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mHidden = hidden;
+			getSyncedProperties().isHidden = hidden;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -265,16 +265,6 @@ namespace bs
 	void RenderWindow::setActive(bool state)
 	{
 		THROW_IF_NOT_CORE_THREAD;
-
-		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
-
-		props.mActive = state;
-		{
-			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mActive = state;
-		}
-
-		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
 	}
 
 	void RenderWindow::_windowMovedOrResized()
@@ -284,10 +274,10 @@ namespace bs
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mTop = props.mTop;
-			getSyncedProperties().mLeft = props.mLeft;
-			getSyncedProperties().mWidth = props.mWidth;
-			getSyncedProperties().mHeight = props.mHeight;
+			getSyncedProperties().top = props.top;
+			getSyncedProperties().left = props.left;
+			getSyncedProperties().width = props.width;
+			getSyncedProperties().height = props.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -299,10 +289,10 @@ namespace bs
 		THROW_IF_NOT_CORE_THREAD;
 
 		RenderWindowProperties& properties = const_cast<RenderWindowProperties&>(getProperties());
-		properties.mHasFocus = true;
+		properties.hasFocus = true;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mHasFocus = true;
+			getSyncedProperties().hasFocus = true;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -314,10 +304,10 @@ namespace bs
 		THROW_IF_NOT_CORE_THREAD;
 
 		RenderWindowProperties& properties = const_cast<RenderWindowProperties&>(getProperties());
-		properties.mHasFocus = false;
+		properties.hasFocus = false;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mHasFocus = false;
+			getSyncedProperties().hasFocus = false;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -330,10 +320,10 @@ namespace bs
 
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 
-		props.mIsMaximized = true;
+		props.isMaximized = true;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mIsMaximized = true;
+			getSyncedProperties().isMaximized = true;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -345,10 +335,10 @@ namespace bs
 
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 
-		props.mIsMaximized = false;
+		props.isMaximized = false;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mIsMaximized = false;
+			getSyncedProperties().isMaximized = false;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -360,10 +350,10 @@ namespace bs
 
 		RenderWindowProperties& props = const_cast<RenderWindowProperties&>(getProperties());
 
-		props.mIsMaximized = false;
+		props.isMaximized = false;
 		{
 			ScopedSpinLock lock(mLock);
-			getSyncedProperties().mIsMaximized = false;
+			getSyncedProperties().isMaximized = false;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);

+ 25 - 37
Source/BansheeCore/RenderAPI/BsRenderWindow.h

@@ -54,47 +54,35 @@ namespace bs
 		RenderWindowProperties(const RENDER_WINDOW_DESC& desc);
 		virtual ~RenderWindowProperties() { }
 
-		/**	Gets the horizontal origin of the window in pixels. */
-		INT32 getLeft() const { return mLeft; }
+		/**	True if window is running in fullscreen mode. */
+		bool isFullScreen = false;
 
-		/**	Gets the vertical origin of the window in pixels. */
-		INT32 getTop() const { return mTop; }
+		/**	Horizontal origin of the window in pixels. */
+		INT32 left = 0;
 
-		/**	Indicates whether the window currently has keyboard focus. */
-		bool hasFocus() const { return mHasFocus; }
-
-		/**	Returns true if window is running in fullscreen mode. */
-		bool isFullScreen() const { return mIsFullScreen; }
+		/**	Vertical origin of the window in pixels. */
+		INT32 top = 0;
 
-		/**	Returns true if the window is modal (blocks interaction with any non-modal window until closed). */
-		bool isModal() const { return mIsModal; }
+		/**	Indicates whether the window currently has keyboard focus. */
+		bool hasFocus = false;
 
-		/**	Returns true if the window is hidden. */
-		bool isHidden() const { return mHidden; }
+		/**	True if the window is hidden. */
+		bool isHidden = false;
 
-		/**	Returns true if the window is maximized. */
-		bool isMaximized() const { return mIsMaximized; }
+		/**	True if the window is modal (blocks interaction with any non-modal window until closed). */
+		bool isModal = false;
 
-	protected:
-		friend class ct::RenderWindow;
-		friend class RenderWindow;
-
-		bool mIsFullScreen = false;
-		INT32 mLeft = 0;
-		INT32 mTop = 0;
-		bool mHasFocus = false;
-		bool mHidden = false;
-		bool mIsModal = false;
-		bool mIsMaximized = false;
+		/**	True if the window is maximized. */
+		bool isMaximized = false;
 	};
 
 	/**
 	 * Operating system window with a specific position, size and style. Each window serves as a surface that can be
 	 * rendered into by RenderAPI operations.
 	 */
-    class BS_CORE_EXPORT RenderWindow : public RenderTarget
-    {
-    public:
+	class BS_CORE_EXPORT RenderWindow : public RenderTarget
+	{
+	public:
 		virtual ~RenderWindow() { }
 
 		/**	Converts screen position into window local position. */
@@ -192,7 +180,7 @@ namespace bs
 		 */
 		static SPtr<RenderWindow> create(RENDER_WINDOW_DESC& desc, SPtr<RenderWindow> parentWindow = nullptr);
 
-    protected:
+	protected:
 		friend class RenderWindowManager;
 
 		RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId);
@@ -209,7 +197,7 @@ namespace bs
 	protected:
 		RENDER_WINDOW_DESC mDesc;
 		UINT32 mWindowId;
-    };
+	};
 
 	/** @} */
 
@@ -253,8 +241,8 @@ namespace bs
 		 */
 		virtual void setWindowed(UINT32 width, UINT32 height) { }
 
-        /**	Hide or show the window. */
-        virtual void setHidden(bool hidden);
+		/**	Hide or show the window. */
+		virtual void setHidden(bool hidden);
 
 		/**
 		 * Makes the render target active or inactive. (for example in the case of a window, it will hide or restore the
@@ -271,11 +259,11 @@ namespace bs
 		/**	Restores the window to original position and size if it is minimized or maximized. */
 		virtual void restore() { }
 
-        /**	Change the size of the window. */
-        virtual void resize(UINT32 width, UINT32 height) = 0;
+		/**	Change the size of the window. */
+		virtual void resize(UINT32 width, UINT32 height) = 0;
 
-        /**	Reposition the window. */
-        virtual void move(INT32 left, INT32 top) = 0;
+		/**	Reposition the window. */
+		virtual void move(INT32 left, INT32 top) = 0;
 
 		/**	Returns properties that describe the render window. */
 		const RenderWindowProperties& getProperties() const;

+ 5 - 5
Source/BansheeCore/RenderAPI/BsViewport.cpp

@@ -111,8 +111,8 @@ namespace bs
 
 	UINT32 Viewport::getTargetWidth() const
 	{
-		if(mTarget != nullptr)
-			return mTarget->getProperties().getWidth();
+		if (mTarget != nullptr)
+			return mTarget->getProperties().width;
 
 		return 0;
 	}
@@ -120,7 +120,7 @@ namespace bs
 	UINT32 Viewport::getTargetHeight() const
 	{
 		if(mTarget != nullptr)
-			return mTarget->getProperties().getHeight();
+			return mTarget->getProperties().height;
 
 		return 0;
 	}
@@ -229,7 +229,7 @@ namespace bs
 	UINT32 Viewport::getTargetWidth() const
 	{
 		if (mTarget != nullptr)
-			return mTarget->getProperties().getWidth();
+			return mTarget->getProperties().width;
 
 		return 0;
 	}
@@ -237,7 +237,7 @@ namespace bs
 	UINT32 Viewport::getTargetHeight() const
 	{
 		if (mTarget != nullptr)
-			return mTarget->getProperties().getHeight();
+			return mTarget->getProperties().height;
 
 		return 0;
 	}

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

@@ -285,7 +285,7 @@ namespace bs
 		if (rt != nullptr)
 		{
 			auto& rtProps = rt->getProperties();
-			aspect = rtProps.getWidth() / (float)rtProps.getHeight();
+			aspect = rtProps.width / (float)rtProps.height;
 		}
 
 		for (auto& entry : mMainCameras)
@@ -594,7 +594,7 @@ namespace bs
 	void SceneManager::onMainRenderTargetResized()
 	{
 		auto& rtProps = mMainRT->getProperties();
-		float aspect = rtProps.getWidth() / (float)rtProps.getHeight();
+		float aspect = rtProps.width / (float)rtProps.height;
 
 		for (auto& entry : mMainCameras)
 			entry.camera->setAspectRatio(aspect);

+ 3 - 3
Source/BansheeCore/Win32/BsWin32Platform.cpp

@@ -500,7 +500,7 @@ namespace bs
 			if (newWindow != nullptr)
 			{
 				const RenderWindowProperties& props = newWindow->getProperties();
-				if (!props.isHidden())
+				if (!props.isHidden)
 					ShowWindow(hWnd, SW_SHOWNOACTIVATE);
 			}
 			else
@@ -517,14 +517,14 @@ namespace bs
 		{
 		case WM_SETFOCUS:
 			{
-				if (!win->getProperties().hasFocus())
+				if (!win->getProperties().hasFocus)
 					win->_windowFocusReceived();
 
 				return 0;
 			}
 		case WM_KILLFOCUS:
 			{
-				if (win->getProperties().hasFocus())
+				if (win->getProperties().hasFocus)
 					win->_windowFocusLost();
 
 				return 0;

+ 9 - 9
Source/BansheeD3D11RenderAPI/BsD3D11RenderAPI.cpp

@@ -146,7 +146,7 @@ namespace bs { namespace ct
 		RenderAPI::initializeWithWindow(primaryWindow);
 	}
 
-    void D3D11RenderAPI::destroyCore()
+	void D3D11RenderAPI::destroyCore()
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
@@ -943,8 +943,8 @@ namespace bs { namespace ct
 			Rect2I clearArea((int)mViewport.TopLeftX, (int)mViewport.TopLeftY, (int)mViewport.Width, (int)mViewport.Height);
 
 			bool clearEntireTarget = clearArea.width == 0 || clearArea.height == 0;
-			clearEntireTarget |= (clearArea.x == 0 && clearArea.y == 0 && clearArea.width == rtProps.getWidth() && 
-				clearArea.height == rtProps.getHeight());
+			clearEntireTarget |= (clearArea.x == 0 && clearArea.y == 0 && clearArea.width == rtProps.width && 
+				clearArea.height == rtProps.height);
 
 			if (!clearEntireTarget)
 			{
@@ -1131,15 +1131,15 @@ namespace bs { namespace ct
 		const RenderTargetProperties& rtProps = mActiveRenderTarget->getProperties();
 
 		// Set viewport dimensions
-		mViewport.TopLeftX = (FLOAT)(rtProps.getWidth() * mViewportNorm.x);
-		mViewport.TopLeftY = (FLOAT)(rtProps.getHeight() * mViewportNorm.y);
-		mViewport.Width = (FLOAT)(rtProps.getWidth() * mViewportNorm.width);
-		mViewport.Height = (FLOAT)(rtProps.getHeight() * mViewportNorm.height);
+		mViewport.TopLeftX = (FLOAT)(rtProps.width * mViewportNorm.x);
+		mViewport.TopLeftY = (FLOAT)(rtProps.height * mViewportNorm.y);
+		mViewport.Width = (FLOAT)(rtProps.width * mViewportNorm.width);
+		mViewport.Height = (FLOAT)(rtProps.height * mViewportNorm.height);
 
-		if (rtProps.requiresTextureFlipping())
+		if (rtProps.requiresTextureFlipping)
 		{
 			// Convert "top-left" to "bottom-left"
-			mViewport.TopLeftY = rtProps.getHeight() - mViewport.Height - mViewport.TopLeftY;
+			mViewport.TopLeftY = rtProps.height - mViewport.Height - mViewport.TopLeftY;
 		}
 
 		mViewport.MinDepth = 0.0f;

+ 65 - 73
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.cpp

@@ -20,10 +20,6 @@
 
 namespace bs
 {
-	D3D11RenderWindowProperties::D3D11RenderWindowProperties(const RENDER_WINDOW_DESC& desc)
-		:RenderWindowProperties(desc)
-	{ }
-
 	D3D11RenderWindow::D3D11RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, ct::D3D11Device& device, 
 		IDXGIFactory* DXGIFactory)
 		:RenderWindow(desc, windowId), mProperties(desc), mDevice(device), mDXGIFactory(DXGIFactory)
@@ -88,11 +84,9 @@ namespace bs
 
 	D3D11RenderWindow::~D3D11RenderWindow()
 	{ 
-		D3D11RenderWindowProperties& props = mProperties;
-
-		props.mActive = false;
+		RenderWindowProperties& props = mProperties;
 
-		if (props.isFullScreen())
+		if (props.isFullScreen)
 			mSwapChain->SetFullscreenState(false, nullptr);
 
 		SAFE_RELEASE(mSwapChain);
@@ -111,7 +105,7 @@ namespace bs
 	{
 		ZeroMemory(&mSwapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC));
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
 		mMultisampleType.Count = 1;
 		mMultisampleType.Quality = 0;
@@ -148,9 +142,7 @@ namespace bs
 			windowDesc.external = (HWND)parseUINT64(opt->second);
 
 		mIsChild = windowDesc.parent != nullptr;
-		props.mIsFullScreen = mDesc.fullscreen && !mIsChild;
-		props.mColorDepth = 32;
-		props.mActive = true;
+		props.isFullScreen = mDesc.fullscreen && !mIsChild;
 
 		if (mDesc.videoMode.isCustom())
 		{
@@ -182,19 +174,19 @@ namespace bs
 		if (!windowDesc.external)
 		{
 			mShowOnSwap = mDesc.hideUntilSwap;
-			props.mHidden = mDesc.hideUntilSwap || mDesc.hidden;
+			props.isHidden = mDesc.hideUntilSwap || mDesc.hidden;
 		}
 
 		mWindow = bs_new<Win32Window>(windowDesc);
 
-		props.mWidth = mWindow->getWidth();
-		props.mHeight = mWindow->getHeight();
-		props.mTop = mWindow->getTop();
-		props.mLeft = mWindow->getLeft();
+		props.width = mWindow->getWidth();
+		props.height = mWindow->getHeight();
+		props.top = mWindow->getTop();
+		props.left = mWindow->getLeft();
 
 		createSwapChain();
 
-		if (props.isFullScreen())
+		if (props.isFullScreen)
 		{
 			if (outputInfo != nullptr)
 				mSwapChain->SetFullscreenState(true, outputInfo->getDXGIOutput());
@@ -223,7 +215,7 @@ namespace bs
 
 		if(mDevice.getD3D11Device() != nullptr)
 		{
-			HRESULT hr = mSwapChain->Present(getProperties().getVSync() ? getProperties().getVSyncInterval() : 0, 0);
+			HRESULT hr = mSwapChain->Present(getProperties().vsync ? getProperties().vsyncInterval : 0, 0);
 
 			if( FAILED(hr) )
 				BS_EXCEPT(RenderingAPIException, "Error Presenting surfaces");
@@ -234,19 +226,19 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 		{
 			mWindow->move(left, top);
 
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
 
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mTop = props.mTop;
-				mSyncedProperties.mLeft = props.mLeft;
+				mSyncedProperties.top = props.top;
+				mSyncedProperties.left = props.left;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -257,19 +249,19 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 		{
 			mWindow->resize(width, height);
 
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
 
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mWidth = props.mWidth;
-				mSyncedProperties.mHeight = props.mHeight;
+				mSyncedProperties.width = props.width;
+				mSyncedProperties.height = props.height;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -280,13 +272,13 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 		mWindow->setActive(state);
 
 		if (mSwapChain)
 		{
 			if (state)
-				mSwapChain->SetFullscreenState(props.mIsFullScreen, nullptr);
+				mSwapChain->SetFullscreenState(props.isFullScreen, nullptr);
 			else
 				mSwapChain->SetFullscreenState(FALSE, nullptr);
 		}
@@ -356,19 +348,19 @@ namespace bs
 
 		outputInfo.getDXGIOutput()->FindClosestMatchingMode(&modeDesc, &nearestMode, nullptr);
 
-		mProperties.mIsFullScreen = true;
-		mProperties.mWidth = width;
-		mProperties.mHeight = height;
+		mProperties.isFullScreen = true;
+		mProperties.width = width;
+		mProperties.height = height;
 
 		mSwapChain->ResizeTarget(&nearestMode);
 		mSwapChain->SetFullscreenState(true, outputInfo.getDXGIOutput()); 
 
 		{
 			ScopedSpinLock lock(mLock);
-			mSyncedProperties.mTop = mProperties.mTop;
-			mSyncedProperties.mLeft = mProperties.mLeft;
-			mSyncedProperties.mWidth = mProperties.mWidth;
-			mSyncedProperties.mHeight = mProperties.mHeight;
+			mSyncedProperties.top = mProperties.top;
+			mSyncedProperties.left = mProperties.left;
+			mSyncedProperties.width = mProperties.width;
+			mSyncedProperties.height = mProperties.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -398,19 +390,19 @@ namespace bs
 
 		const D3D11VideoMode& videoMode = static_cast<const D3D11VideoMode&>(mode);
 
-		mProperties.mIsFullScreen = true;
-		mProperties.mWidth = mode.getWidth();
-		mProperties.mHeight = mode.getHeight();
+		mProperties.isFullScreen = true;
+		mProperties.width = mode.getWidth();
+		mProperties.height = mode.getHeight();
 
 		mSwapChain->ResizeTarget(&videoMode.getDXGIModeDesc());
 		mSwapChain->SetFullscreenState(true, outputInfo.getDXGIOutput());
 
 		{
 			ScopedSpinLock lock(mLock);
-			mSyncedProperties.mTop = mProperties.mTop;
-			mSyncedProperties.mLeft = mProperties.mLeft;
-			mSyncedProperties.mWidth = mProperties.mWidth;
-			mSyncedProperties.mHeight = mProperties.mHeight;
+			mSyncedProperties.top = mProperties.top;
+			mSyncedProperties.left = mProperties.left;
+			mSyncedProperties.width = mProperties.width;
+			mSyncedProperties.height = mProperties.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -421,9 +413,9 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		mProperties.mWidth = width;
-		mProperties.mHeight = height;
-		mProperties.mIsFullScreen = false;
+		mProperties.width = width;
+		mProperties.height = height;
+		mProperties.isFullScreen = false;
 
 		mSwapChainDesc.Windowed = true;
 		mSwapChainDesc.BufferDesc.RefreshRate.Numerator = 0;
@@ -445,10 +437,10 @@ namespace bs
 
 		{
 			ScopedSpinLock lock(mLock);
-			mSyncedProperties.mTop = mProperties.mTop;
-			mSyncedProperties.mLeft = mProperties.mLeft;
-			mSyncedProperties.mWidth = mProperties.mWidth;
-			mSyncedProperties.mHeight = mProperties.mHeight;
+			mSyncedProperties.top = mProperties.top;
+			mSyncedProperties.left = mProperties.left;
+			mSyncedProperties.width = mProperties.width;
+			mSyncedProperties.height = mProperties.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -592,7 +584,7 @@ namespace bs
 		mDevice.getImmediateContext()->Map(tempTexture, 0,D3D11_MAP_READ, 0, &mappedTex2D);
 
 		// Copy the the texture to the dest
-		PixelData src(getProperties().getWidth(), getProperties().getHeight(), 1, PF_RGBA8);
+		PixelData src(getProperties().width, getProperties().height, 1, PF_RGBA8);
 		src.setExternalBuffer((UINT8*)mappedTex2D.pData);
 		PixelUtil::bulkPixelConversion(src, dst);
 
@@ -613,19 +605,19 @@ namespace bs
 
 		mWindow->_windowMovedOrResized();
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (props.isFullScreen()) // Fullscreen is handled directly by this object
+		if (props.isFullScreen) // Fullscreen is handled directly by this object
 		{
-			resizeSwapChainBuffers(props.getWidth(), props.getHeight());
+			resizeSwapChainBuffers(props.width, props.height);
 		}
 		else
 		{
 			resizeSwapChainBuffers(mWindow->getWidth(), mWindow->getHeight());
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
 		}
 
 		RenderWindow::_windowMovedOrResized();
@@ -635,17 +627,17 @@ namespace bs
 	{
 		ZeroMemory(&mSwapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC));
 
-		D3D11RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 		IDXGIDevice* pDXGIDevice = queryDxgiDevice();
 
 		ZeroMemory(&mSwapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC));
 		DXGI_FORMAT format = DXGI_FORMAT_R8G8B8A8_UNORM;
 		mSwapChainDesc.OutputWindow = mWindow->getHWnd();
-		mSwapChainDesc.BufferDesc.Width = props.mWidth;
-		mSwapChainDesc.BufferDesc.Height = props.mHeight;
+		mSwapChainDesc.BufferDesc.Width = props.width;
+		mSwapChainDesc.BufferDesc.Height = props.height;
 		mSwapChainDesc.BufferDesc.Format = format;
 
-		if (props.mIsFullScreen)
+		if (props.isFullScreen)
 		{
 			mSwapChainDesc.BufferDesc.RefreshRate.Numerator = mRefreshRateNumerator;
 			mSwapChainDesc.BufferDesc.RefreshRate.Denominator = mRefreshRateDenominator;
@@ -667,7 +659,7 @@ namespace bs
 		mSwapChainDesc.Windowed	= true;
 
 		D3D11RenderAPI* rs = static_cast<D3D11RenderAPI*>(RenderAPI::instancePtr());
-		rs->determineMultisampleSettings(props.mMultisampleCount, format, &mMultisampleType);
+		rs->determineMultisampleSettings(props.multisampleCount, format, &mMultisampleType);
 		mSwapChainDesc.SampleDesc.Count = mMultisampleType.Count;
 		mSwapChainDesc.SampleDesc.Quality = mMultisampleType.Quality;
 		
@@ -708,7 +700,7 @@ namespace bs
 		ZeroMemory( &RTVDesc, sizeof(RTVDesc) );
 
 		RTVDesc.Format = BBDesc.Format;
-		RTVDesc.ViewDimension = getProperties().getMultisampleCount() > 1 ? D3D11_RTV_DIMENSION_TEXTURE2DMS : D3D11_RTV_DIMENSION_TEXTURE2D;
+		RTVDesc.ViewDimension = getProperties().multisampleCount > 1 ? D3D11_RTV_DIMENSION_TEXTURE2DMS : D3D11_RTV_DIMENSION_TEXTURE2D;
 		RTVDesc.Texture2D.MipSlice = 0;
 		hr = mDevice.getD3D11Device()->CreateRenderTargetView(mBackBuffer, &RTVDesc, &mRenderTargetView);
 
@@ -728,7 +720,7 @@ namespace bs
 			texDesc.height = BBDesc.Height;
 			texDesc.format = PF_D32_S8X24;
 			texDesc.usage = TU_DEPTHSTENCIL;
-			texDesc.numSamples = getProperties().getMultisampleCount();
+			texDesc.numSamples = getProperties().multisampleCount;
 
 			mDepthStencilBuffer = Texture::create(texDesc);
 			mDepthStencilView = mDepthStencilBuffer->requestView(0, 1, 0, 1, GVU_DEPTHSTENCIL);
@@ -749,16 +741,16 @@ namespace bs
 	{
 		destroySizeDependedD3DResources();
 
-		UINT Flags = mProperties.isFullScreen() ? DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH : 0;
+		UINT Flags = mProperties.isFullScreen ? DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH : 0;
 		HRESULT hr = mSwapChain->ResizeBuffers(mSwapChainDesc.BufferCount, width, height, mSwapChainDesc.BufferDesc.Format, Flags);
 
 		if(hr != S_OK)
 			BS_EXCEPT(InternalErrorException, "Call to ResizeBuffers failed.");
 
 		mSwapChain->GetDesc(&mSwapChainDesc);
-		mProperties.mWidth = mSwapChainDesc.BufferDesc.Width;
-		mProperties.mHeight = mSwapChainDesc.BufferDesc.Height;
-		mProperties.mIsFullScreen = (0 == mSwapChainDesc.Windowed); // Alt-Enter together with SetWindowAssociation() can change this state
+		mProperties.width = mSwapChainDesc.BufferDesc.Width;
+		mProperties.height = mSwapChainDesc.BufferDesc.Height;
+		mProperties.isFullScreen = (0 == mSwapChainDesc.Windowed); // Alt-Enter together with SetWindowAssociation() can change this state
 
 		createSizeDependedD3DResources();
 

+ 3 - 15
Source/BansheeD3D11RenderAPI/BsD3D11RenderWindow.h

@@ -10,18 +10,6 @@ namespace bs {
 	 *  @{
 	 */
 
-	/**	Contains various properties that describe a render window. */
-	class D3D11RenderWindowProperties : public RenderWindowProperties
-	{
-	public:
-		D3D11RenderWindowProperties(const RENDER_WINDOW_DESC& desc);
-		virtual ~D3D11RenderWindowProperties() { }
-
-	private:
-		friend class D3D11RenderWindow;
-		friend class ct::D3D11RenderWindow;
-	};
-
 	/**
 	 * Render window implementation for Windows and DirectX 11.
 	 *
@@ -63,7 +51,7 @@ namespace bs {
 	private:
 		ct::D3D11Device& mDevice;
 		IDXGIFactory* mDXGIFactory;
-		D3D11RenderWindowProperties mProperties;
+		RenderWindowProperties mProperties;
 	};
 
 	namespace ct
@@ -184,8 +172,8 @@ namespace bs {
 		DXGI_SWAP_CHAIN_DESC mSwapChainDesc;
 		Win32Window* mWindow;
 
-		D3D11RenderWindowProperties mProperties;
-		D3D11RenderWindowProperties mSyncedProperties;
+		RenderWindowProperties mProperties;
+		RenderWindowProperties mSyncedProperties;
 	};
 	
 	/** @} */

+ 1 - 1
Source/BansheeEditor/EditorWindow/BsEditorWidget.cpp

@@ -45,7 +45,7 @@ namespace bs
 		SPtr<RenderWindow> parentRenderWindow = parentWindow->getRenderWindow();
 		const RenderWindowProperties& props = parentRenderWindow->getProperties();
 
-		if (!props.hasFocus())
+		if (!props.hasFocus)
 			return;
 
 		if (parentContainer->getActiveWidget() != this)

+ 2 - 2
Source/BansheeEditor/EditorWindow/BsEditorWidgetManager.cpp

@@ -64,7 +64,7 @@ namespace bs
 				SPtr<RenderWindow> parentRenderWindow = parentWindow->getRenderWindow();
 				const RenderWindowProperties& props = parentRenderWindow->getProperties();
 
-				if (!props.hasFocus())
+				if (!props.hasFocus)
 				{
 					widget->_setHasFocus(false);
 					continue;
@@ -240,7 +240,7 @@ namespace bs
 			}
 		}
 
-		layout->setIsMainWindowMaximized(mainWindow->getRenderWindow()->getProperties().isMaximized());
+		layout->setIsMainWindowMaximized(mainWindow->getRenderWindow()->getProperties().isMaximized);
 
 		return layout;
 	}

+ 1 - 1
Source/BansheeEditor/EditorWindow/BsEditorWindow.cpp

@@ -76,7 +76,7 @@ namespace bs
 
 	void EditorWindow::maximizeClicked()
 	{
-		if (mRenderWindow->getProperties().isMaximized())
+		if (mRenderWindow->getProperties().isMaximized)
 			mRenderWindow->restore();
 		else
 			mRenderWindow->maximize();

+ 5 - 5
Source/BansheeEditor/EditorWindow/BsEditorWindowBase.cpp

@@ -115,26 +115,26 @@ namespace bs
 
 	INT32 EditorWindowBase::getLeft() const
 	{
-		return mRenderWindow->getProperties().getLeft();
+		return mRenderWindow->getProperties().left;
 	}
 
 	INT32 EditorWindowBase::getTop() const
 	{
-		return mRenderWindow->getProperties().getTop();
+		return mRenderWindow->getProperties().top;
 	}
 
 	UINT32 EditorWindowBase::getWidth() const
 	{
-		return (UINT32)mRenderWindow->getProperties().getWidth();
+		return (UINT32)mRenderWindow->getProperties().width;
 	}
 
 	UINT32 EditorWindowBase::getHeight() const
 	{
-		return (UINT32)mRenderWindow->getProperties().getHeight();
+		return (UINT32)mRenderWindow->getProperties().height;
 	}
 
 	bool EditorWindowBase::hasFocus() const
 	{
-		return mRenderWindow->getProperties().hasFocus();
+		return mRenderWindow->getProperties().hasFocus;
 	}
 }

+ 1 - 1
Source/BansheeEditor/GUI/BsGUIMenuBar.cpp

@@ -530,7 +530,7 @@ namespace bs
 
 	void GUIMenuBar::onMaximizeClicked()
 	{
-		if(mParentWindow->getProperties().isMaximized())
+		if(mParentWindow->getProperties().isMaximized)
 			mParentWindow->restore();
 		else
 			mParentWindow->maximize();

+ 1 - 1
Source/BansheeEditor/GUI/BsGUIResourceTreeView.cpp

@@ -455,7 +455,7 @@ namespace bs
 	{
 		GUITreeView::_changeParentWidget(widget);
 
-		if (widget != nullptr && widget->getTarget()->getTarget()->getProperties().isWindow())
+		if (widget != nullptr && widget->getTarget()->getTarget()->getProperties().isWindow)
 		{
 			RenderWindow* parentWindow = static_cast<RenderWindow*>(widget->getTarget()->getTarget().get());
 			setDropTarget(parentWindow, mLayoutData.area.x, mLayoutData.area.y, mLayoutData.area.width, mLayoutData.area.height);

+ 1 - 1
Source/BansheeEditor/GUI/BsGUIWindowFrameWidget.cpp

@@ -38,7 +38,7 @@ namespace bs
 
 	void WindowFrameWidget::ownerWindowFocusChanged()
 	{
-		mWindowFrame->setFocused(mParentWindow->getProperties().hasFocus());
+		mWindowFrame->setFocused(mParentWindow->getProperties().hasFocus);
 
 		CGUIWidget::ownerWindowFocusChanged();
 	}

+ 2 - 2
Source/BansheeEditor/Handles/BsHandleDrawManager.cpp

@@ -318,8 +318,8 @@ namespace bs
 
 			SPtr<RenderTarget> renderTarget = camera.getViewport()->getTarget();
 
-			float width = (float)renderTarget->getProperties().getWidth();
-			float height = (float)renderTarget->getProperties().getHeight();
+			float width = (float)renderTarget->getProperties().width;
+			float height = (float)renderTarget->getProperties().height;
 
 			Rect2 normArea = camera.getViewport()->getNormArea();
 

+ 3 - 3
Source/BansheeEditor/SceneView/BsScenePicking.cpp

@@ -376,7 +376,7 @@ namespace bs
 		rs.setRenderTarget(nullptr);
 		rs.submitCommandBuffer(nullptr);
 
-		if (rtProps.isWindow())
+		if (rtProps.isWindow)
 		{
 			BS_EXCEPT(NotImplementedException, "Picking is not supported on render windows as framebuffer readback methods aren't implemented");
 		}
@@ -409,7 +409,7 @@ namespace bs
 		UINT32 maxWidth = std::min((UINT32)(position.x + area.x), outputPixelData->getWidth());
 		UINT32 maxHeight = std::min((UINT32)(position.y + area.y), outputPixelData->getHeight());
 
-		if (rtProps.requiresTextureFlipping())
+		if (rtProps.requiresTextureFlipping)
 		{
 			UINT32 vertOffset = outputPixelData->getHeight();
 
@@ -479,7 +479,7 @@ namespace bs
 			normalsTexture->readData(*normalsPixelData);
 
 			Vector2I samplePixel = position;
-			if (rtProps.requiresTextureFlipping())
+			if (rtProps.requiresTextureFlipping)
 				samplePixel.y = depthPixelData->getHeight() - samplePixel.y;
 
 			float depth = depthPixelData->getDepthAt(samplePixel.x, samplePixel.y);

+ 3 - 3
Source/BansheeEngine/GUI/BsGUIManager.cpp

@@ -1616,8 +1616,8 @@ namespace bs
 			float x = vecLocalPos.x - (float)bridgeBounds.x;
 			float y = vecLocalPos.y - (float)bridgeBounds.y;
 
-			float scaleX = rtProps.getWidth() / (float)bridgeBounds.width;
-			float scaleY = rtProps.getHeight() / (float)bridgeBounds.height;
+			float scaleX = rtProps.width / (float)bridgeBounds.width;
+			float scaleY = rtProps.height / (float)bridgeBounds.height;
 
 			return Vector2I(Math::roundToInt(x * scaleX), Math::roundToInt(y * scaleY));
 		}
@@ -1683,7 +1683,7 @@ namespace bs
 			if (curTarget == target)
 				return nullptr;
 
-			if (curTarget->getProperties().isWindow())
+			if (curTarget->getProperties().isWindow)
 				return std::static_pointer_cast<RenderWindow>(curTarget);
 		}
 

+ 1 - 1
Source/BansheeEngine/GUI/BsGUIRenderTexture.cpp

@@ -56,7 +56,7 @@ namespace bs
 
 		if (mSourceTexture != nullptr)
 		{
-			if (mSourceTexture->getProperties().requiresTextureFlipping())
+			if (mSourceTexture->getProperties().requiresTextureFlipping)
 			{
 				mDesc.uvOffset = Vector2(0.0f, 1.0f);
 				mDesc.uvScale = Vector2(1.0f, -1.0f);

+ 4 - 4
Source/BansheeEngine/GUI/BsGUIViewport.cpp

@@ -89,10 +89,10 @@ namespace bs
 		SPtr<RenderTarget> renderTarget = viewport->getTarget();
 		const RenderTargetProperties& rtProps = renderTarget->getProperties();
 
-		float x = mLayoutData.area.x / (float)rtProps.getWidth();
-		float y = mLayoutData.area.y / (float)rtProps.getHeight();
-		float width = mLayoutData.area.width / (float)rtProps.getWidth();
-		float height = mLayoutData.area.height / (float)rtProps.getHeight();
+		float x = mLayoutData.area.x / (float)rtProps.width;
+		float y = mLayoutData.area.y / (float)rtProps.height;
+		float width = mLayoutData.area.width / (float)rtProps.width;
+		float height = mLayoutData.area.height / (float)rtProps.height;
 
 		viewport->setArea(x, y, width, height);
 	}

+ 7 - 7
Source/BansheeGLRenderAPI/BsGLRenderAPI.cpp

@@ -832,7 +832,7 @@ namespace bs { namespace ct
 				fbo->bind();
 
 				// Enable / disable sRGB states
-				if (target->getProperties().isHwGammaEnabled())
+				if (target->getProperties().hwGamma)
 					glEnable(GL_FRAMEBUFFER_SRGB);
 				else
 					glDisable(GL_FRAMEBUFFER_SRGB);
@@ -1122,7 +1122,7 @@ namespace bs { namespace ct
 				return;
 
 			const RenderTargetProperties& rtProps = mActiveRenderTarget->getProperties();
-			Rect2I clearRect(0, 0, rtProps.getWidth(), rtProps.getHeight());
+			Rect2I clearRect(0, 0, rtProps.width, rtProps.height);
 
 			clearArea(buffers, color, depth, stencil, clearRect, targetMask);
 		};
@@ -1211,7 +1211,7 @@ namespace bs { namespace ct
 		const RenderTargetProperties& rtProps = mActiveRenderTarget->getProperties();
 
 		bool clearEntireTarget = clearRect.width == 0 || clearRect.height == 0;
-		clearEntireTarget |= (clearRect.x == 0 && clearRect.y == 0 && clearRect.width == rtProps.getWidth() && clearRect.height == rtProps.getHeight());
+		clearEntireTarget |= (clearRect.x == 0 && clearRect.y == 0 && clearRect.width == rtProps.width && clearRect.height == rtProps.height);
 
 		if (!clearEntireTarget)
 		{
@@ -2272,10 +2272,10 @@ namespace bs { namespace ct
 		const RenderTargetProperties& rtProps = mActiveRenderTarget->getProperties();
 
 		// Calculate the "lower-left" corner of the viewport
-		mViewportLeft = (UINT32)(rtProps.getWidth() * mViewportNorm.x);
-		mViewportTop = (UINT32)(rtProps.getHeight() * mViewportNorm.y);
-		mViewportWidth = (UINT32)(rtProps.getWidth() * mViewportNorm.width);
-		mViewportHeight = (UINT32)(rtProps.getHeight() * mViewportNorm.height);
+		mViewportLeft = (UINT32)(rtProps.width * mViewportNorm.x);
+		mViewportTop = (UINT32)(rtProps.height * mViewportNorm.y);
+		mViewportWidth = (UINT32)(rtProps.width * mViewportNorm.width);
+		mViewportHeight = (UINT32)(rtProps.height * mViewportNorm.height);
 
 		glViewport(mViewportLeft, mViewportTop, mViewportWidth, mViewportHeight);
 

+ 1 - 1
Source/BansheeGLRenderAPI/BsGLRenderTexture.cpp

@@ -55,7 +55,7 @@ namespace bs
 			{
 				GLTexture* glColorSurface = static_cast<GLTexture*>(mDesc.colorSurfaces[i].texture.get());
 				GLSurfaceDesc surfaceDesc;
-				surfaceDesc.numSamples = getProperties().getMultisampleCount();
+				surfaceDesc.numSamples = getProperties().multisampleCount;
 
 				if (mColorSurfaces[i]->getNumArraySlices() == 1) // Binding a single texture layer
 				{

+ 59 - 67
Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.cpp

@@ -24,10 +24,6 @@ namespace bs
 {
 	#define _MAX_CLASS_NAME_ 128
 
-	Win32RenderWindowProperties::Win32RenderWindowProperties(const RENDER_WINDOW_DESC& desc)
-		:RenderWindowProperties(desc)
-	{ }
-
 	Win32RenderWindow::Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, ct::Win32GLSupport &glsupport)
 		:RenderWindow(desc, windowId), mGLSupport(glsupport), mProperties(desc)
 	{
@@ -91,7 +87,7 @@ namespace bs
 
 		Win32RenderWindow::~Win32RenderWindow()
 	{ 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
 		if (mWindow != nullptr)
 		{
@@ -101,7 +97,6 @@ namespace bs
 			mWindow = nullptr;
 		}
 
-		props.mActive = false;
 		mHDC = nullptr;
 
 		if (mDeviceName != nullptr)
@@ -113,12 +108,11 @@ namespace bs
 
 	void Win32RenderWindow::initialize()
 	{
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		props.mIsFullScreen = mDesc.fullscreen;
+		props.isFullScreen = mDesc.fullscreen;
 		mIsChild = false;
 		mDisplayFrequency = Math::roundToInt(mDesc.videoMode.getRefreshRate());
-		props.mColorDepth = 32;
 
 		WINDOW_DESC windowDesc;
 		windowDesc.border = mDesc.border;
@@ -161,34 +155,32 @@ namespace bs
 		}
 
 		mIsChild = windowDesc.parent != nullptr;
-		props.mIsFullScreen = mDesc.fullscreen && !mIsChild;
-		props.mColorDepth = 32;
-		props.mActive = true;
+		props.isFullScreen = mDesc.fullscreen && !mIsChild;
 
 		if (!windowDesc.external)
 		{
 			mShowOnSwap = mDesc.hideUntilSwap;
-			props.mHidden = mDesc.hideUntilSwap || mDesc.hidden;
+			props.isHidden = mDesc.hideUntilSwap || mDesc.hidden;
 		}
 
 		mWindow = bs_new<Win32Window>(windowDesc);
 
-		props.mWidth = mWindow->getWidth();
-		props.mHeight = mWindow->getHeight();
-		props.mTop = mWindow->getTop();
-		props.mLeft = mWindow->getLeft();
+		props.width = mWindow->getWidth();
+		props.height = mWindow->getHeight();
+		props.top = mWindow->getTop();
+		props.left = mWindow->getLeft();
 		
 		if (!windowDesc.external)
 		{
-			if (props.mIsFullScreen)
+			if (props.isFullScreen)
 			{
 				DEVMODE displayDeviceMode;
 
 				memset(&displayDeviceMode, 0, sizeof(displayDeviceMode));
 				displayDeviceMode.dmSize = sizeof(DEVMODE);
-				displayDeviceMode.dmBitsPerPel = props.mColorDepth;
-				displayDeviceMode.dmPelsWidth = props.mWidth;
-				displayDeviceMode.dmPelsHeight = props.mHeight;
+				displayDeviceMode.dmBitsPerPel = 32;
+				displayDeviceMode.dmPelsWidth = props.width;
+				displayDeviceMode.dmPelsHeight = props.height;
 				displayDeviceMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
 
 				if (mDisplayFrequency)
@@ -211,32 +203,32 @@ namespace bs
 
 		mHDC = GetDC(mWindow->getHWnd());
 
-		int testMultisample = props.mMultisampleCount;
+		int testMultisample = props.multisampleCount;
 		bool testHwGamma = mDesc.gamma;
-		bool formatOk = mGLSupport.selectPixelFormat(mHDC, props.mColorDepth, testMultisample, testHwGamma, mDesc.depthBuffer);
+		bool formatOk = mGLSupport.selectPixelFormat(mHDC, 32, testMultisample, testHwGamma, mDesc.depthBuffer);
 		if (!formatOk)
 		{
-			if (props.mMultisampleCount > 0)
+			if (props.multisampleCount > 0)
 			{
 				// Try without multisampling
 				testMultisample = 0;
-				formatOk = mGLSupport.selectPixelFormat(mHDC, props.mColorDepth, testMultisample, testHwGamma, mDesc.depthBuffer);
+				formatOk = mGLSupport.selectPixelFormat(mHDC, 32, testMultisample, testHwGamma, mDesc.depthBuffer);
 			}
 
 			if (!formatOk && mDesc.gamma)
 			{
 				// Try without sRGB
 				testHwGamma = false;
-				testMultisample = props.mMultisampleCount;
-				formatOk = mGLSupport.selectPixelFormat(mHDC, props.mColorDepth, testMultisample, testHwGamma, mDesc.depthBuffer);
+				testMultisample = props.multisampleCount;
+				formatOk = mGLSupport.selectPixelFormat(mHDC, 32, testMultisample, testHwGamma, mDesc.depthBuffer);
 			}
 
-			if (!formatOk && mDesc.gamma && (props.mMultisampleCount > 0))
+			if (!formatOk && mDesc.gamma && (props.multisampleCount > 0))
 			{
 				// Try without both
 				testHwGamma = false;
 				testMultisample = 0;
-				formatOk = mGLSupport.selectPixelFormat(mHDC, props.mColorDepth, testMultisample, testHwGamma, mDesc.depthBuffer);
+				formatOk = mGLSupport.selectPixelFormat(mHDC, 32, testMultisample, testHwGamma, mDesc.depthBuffer);
 			}
 
 			if (!formatOk)
@@ -246,8 +238,8 @@ namespace bs
 
 		// Record what gamma option we used in the end
 		// this will control enabling of sRGB state flags when used
-		props.mHwGamma = testHwGamma;
-		props.mMultisampleCount = testMultisample;
+		props.hwGamma = testHwGamma;
+		props.multisampleCount = testMultisample;
 
 		mContext = mGLSupport.createContext(mHDC, nullptr);
 
@@ -272,19 +264,19 @@ namespace bs
 		if (numOutputs == 0)
 			return;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
 		UINT32 actualMonitorIdx = std::min(monitorIdx, numOutputs - 1);
 		const Win32VideoOutputInfo& outputInfo = static_cast<const Win32VideoOutputInfo&>(videoModeInfo.getOutputInfo(actualMonitorIdx));
 
 		mDisplayFrequency = Math::roundToInt(refreshRate);
-		props.mIsFullScreen = true;
+		props.isFullScreen = true;
 
 		DEVMODE displayDeviceMode;
 
 		memset(&displayDeviceMode, 0, sizeof(displayDeviceMode));
 		displayDeviceMode.dmSize = sizeof(DEVMODE);
-		displayDeviceMode.dmBitsPerPel = props.mColorDepth;
+		displayDeviceMode.dmBitsPerPel = 32;
 		displayDeviceMode.dmPelsWidth = width;
 		displayDeviceMode.dmPelsHeight = height;
 		displayDeviceMode.dmDisplayFrequency = mDisplayFrequency;
@@ -302,15 +294,15 @@ namespace bs
 			BS_EXCEPT(RenderingAPIException, "ChangeDisplaySettings failed");
 		}
 
-		props.mTop = monitorInfo.rcMonitor.top;
-		props.mLeft = monitorInfo.rcMonitor.left;
-		props.mWidth = width;
-		props.mHeight = height;
+		props.top = monitorInfo.rcMonitor.top;
+		props.left = monitorInfo.rcMonitor.left;
+		props.width = width;
+		props.height = height;
 
 		SetWindowLong(mWindow->getHWnd(), GWL_STYLE, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
 		SetWindowLong(mWindow->getHWnd(), GWL_EXSTYLE, 0);
 
-		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.mLeft, props.mTop, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
+		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.left, props.top, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
 
 		_windowMovedOrResized();
 	}
@@ -326,14 +318,14 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 			return;
 
-		props.mIsFullScreen = false;
-		props.mWidth = width;
-		props.mHeight = height;
+		props.isFullScreen = false;
+		props.width = width;
+		props.height = height;
 
 		// Drop out of fullscreen
 		ChangeDisplaySettingsEx(mDeviceName, NULL, NULL, 0, NULL);
@@ -368,8 +360,8 @@ namespace bs
 
 		{
 			ScopedSpinLock lock(mLock);
-			mSyncedProperties.mWidth = props.mWidth;
-			mSyncedProperties.mHeight = props.mHeight;
+			mSyncedProperties.width = props.width;
+			mSyncedProperties.height = props.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -380,18 +372,18 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
-		if (!props.mIsFullScreen)
+		RenderWindowProperties& props = mProperties;
+		if (!props.isFullScreen)
 		{
 			mWindow->move(left, top);
 
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
 
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mTop = props.mTop;
-				mSyncedProperties.mLeft = props.mLeft;
+				mSyncedProperties.top = props.top;
+				mSyncedProperties.left = props.left;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -402,18 +394,18 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
-		if (!props.mIsFullScreen)
+		RenderWindowProperties& props = mProperties;
+		if (!props.isFullScreen)
 		{
 			mWindow->resize(width, height);
 
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
 			
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mWidth = props.mWidth;
-				mSyncedProperties.mHeight = props.mHeight;
+				mSyncedProperties.width = props.width;
+				mSyncedProperties.height = props.height;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -455,8 +447,8 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		if ((dst.getRight() > getProperties().getWidth()) ||
-			(dst.getBottom() > getProperties().getHeight()) ||
+		if ((dst.getRight() > getProperties().width) ||
+			(dst.getBottom() > getProperties().height) ||
 			(dst.getFront() != 0) || (dst.getBack() != 1))
 		{
 			BS_EXCEPT(InvalidParametersException, "Invalid box.");
@@ -464,7 +456,7 @@ namespace bs
 
 		if (buffer == FB_AUTO)
 		{
-			buffer = mProperties.isFullScreen() ? FB_FRONT : FB_BACK;
+			buffer = mProperties.isFullScreen ? FB_FRONT : FB_BACK;
 		}
 
 		GLenum format = GLPixelUtil::getGLOriginFormat(dst.getFormat());
@@ -547,13 +539,13 @@ namespace bs
 
 		mWindow->_windowMovedOrResized();
 
-		Win32RenderWindowProperties& props = mProperties;
-		if (!props.mIsFullScreen) // Fullscreen is handled directly by this object
+		RenderWindowProperties& props = mProperties;
+		if (!props.isFullScreen) // Fullscreen is handled directly by this object
 		{
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
 		}
 
 		RenderWindow::_windowMovedOrResized();

+ 7 - 19
Source/BansheeGLRenderAPI/Win32/BsWin32RenderWindow.h

@@ -11,18 +11,6 @@ namespace bs
 	 *  @{
 	 */
 
-	/**	Contains various properties that describe a render window. */
-	class Win32RenderWindowProperties : public RenderWindowProperties
-	{
-	public:
-		Win32RenderWindowProperties(const RENDER_WINDOW_DESC& desc);
-		virtual ~Win32RenderWindowProperties() { }
-
-	private:
-		friend class ct::Win32RenderWindow;
-		friend class Win32RenderWindow;
-	};
-
 	/**
 	 * Render window implementation for Windows.
 	 *
@@ -63,7 +51,7 @@ namespace bs
 
 	private:
 		ct::Win32GLSupport& mGLSupport;
-		Win32RenderWindowProperties mProperties;
+		RenderWindowProperties mProperties;
 	};
 
 	namespace ct
@@ -73,9 +61,9 @@ namespace bs
 	 *
 	 * @note	Core thread only.
 	 */
-    class Win32RenderWindow : public RenderWindow
-    {
-    public:
+	class Win32RenderWindow : public RenderWindow
+	{
+	public:
 		Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId, Win32GLSupport &glsupport);
 		~Win32RenderWindow();
 
@@ -158,9 +146,9 @@ namespace bs
 		int mDisplayFrequency;
 		bool mShowOnSwap;
 		SPtr<Win32Context> mContext;
-		Win32RenderWindowProperties mProperties;
-		Win32RenderWindowProperties mSyncedProperties;
-    };		
+		RenderWindowProperties mProperties;
+		RenderWindowProperties mSyncedProperties;
+	};
 	}
 
 	/** @} */

+ 3 - 3
Source/BansheeVulkanRenderAPI/BsVulkanCommandBuffer.cpp

@@ -812,7 +812,7 @@ namespace bs { namespace ct
 		VulkanFramebuffer* newFB;
 		if(rt != nullptr)
 		{
-			if (rt->getProperties().isWindow())
+			if (rt->getProperties().isWindow)
 			{
 				Win32RenderWindow* window = static_cast<Win32RenderWindow*>(rt.get());
 				window->acquireBackBuffer();
@@ -903,8 +903,8 @@ namespace bs { namespace ct
 		else
 		{
 			mFramebuffer = newFB;
-			mRenderTargetWidth = rt->getProperties().getWidth();
-			mRenderTargetHeight = rt->getProperties().getHeight();
+			mRenderTargetWidth = rt->getProperties().width;
+			mRenderTargetHeight = rt->getProperties().height;
 			mRenderTargetReadOnlyFlags = readOnlyFlags;
 			mRenderTargetLoadMask = loadMask;
 		}

+ 5 - 5
Source/BansheeVulkanRenderAPI/BsVulkanRenderTexture.cpp

@@ -33,10 +33,10 @@ namespace bs
 		RenderTexture::initialize();
 
 		VULKAN_FRAMEBUFFER_DESC fbDesc;
-		fbDesc.width = mProperties.getWidth();
-		fbDesc.height = mProperties.getHeight();
-		fbDesc.layers = mProperties.getNumSlices();
-		fbDesc.numSamples = mProperties.getMultisampleCount() > 1 ? mProperties.getMultisampleCount() : 1;
+		fbDesc.width = mProperties.width;
+		fbDesc.height = mProperties.height;
+		fbDesc.layers = mProperties.numSlices;
+		fbDesc.numSamples = mProperties.multisampleCount > 1 ? mProperties.multisampleCount : 1;
 		fbDesc.offscreen = true;
 
 		for (UINT32 i = 0; i < BS_MAX_MULTIPLE_RENDER_TARGETS; ++i)
@@ -64,7 +64,7 @@ namespace bs
 					LOGERR("Cannot specify array slices when rendering to a 3D texture.");
 
 				surface.arraySlice = 0;
-				surface.numArraySlices = mProperties.getNumSlices();
+				surface.numArraySlices = mProperties.numSlices;
 
 				fbDesc.color[i].baseLayer = 0;
 			}

+ 49 - 60
Source/BansheeVulkanRenderAPI/Win32/BsWin32RenderWindow.cpp

@@ -18,15 +18,9 @@
 
 namespace bs
 {
-	Win32RenderWindowProperties::Win32RenderWindowProperties(const RENDER_WINDOW_DESC& desc)
-		:RenderWindowProperties(desc)
-	{ }
-
 	Win32RenderWindow::Win32RenderWindow(const RENDER_WINDOW_DESC& desc, UINT32 windowId)
 		: RenderWindow(desc, windowId), mProperties(desc)
-	{
-
-	}
+	{ }
 
 	void Win32RenderWindow::getCustomAttribute(const String& name, void* pData) const
 	{
@@ -87,9 +81,6 @@ namespace bs
 		SPtr<VulkanDevice> presentDevice = mRenderAPI._getPresentDevice();
 		presentDevice->waitIdle();
 
-		Win32RenderWindowProperties& props = mProperties;
-		props.mActive = false;
-
 		if (mWindow != nullptr)
 		{
 			bs_delete(mWindow);
@@ -102,7 +93,7 @@ namespace bs
 
 	void Win32RenderWindow::initialize()
 	{
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
 		// Create a window
 		WINDOW_DESC windowDesc;
@@ -149,7 +140,7 @@ namespace bs
 		if (!windowDesc.external)
 		{
 			mShowOnSwap = mDesc.hideUntilSwap;
-			props.mHidden = mDesc.hideUntilSwap || mDesc.hidden;
+			props.isHidden = mDesc.hideUntilSwap || mDesc.hidden;
 		}
 
 		mWindow = bs_new<Win32Window>(windowDesc);
@@ -158,15 +149,13 @@ namespace bs
 		mDisplayFrequency = Math::roundToInt(mDesc.videoMode.getRefreshRate());
 
 		// Update local properties
-		props.mIsFullScreen = mDesc.fullscreen && !mIsChild;
-		props.mColorDepth = 32;
-		props.mActive = true;
-		props.mWidth = mWindow->getWidth();
-		props.mHeight = mWindow->getHeight();
-		props.mTop = mWindow->getTop();
-		props.mLeft = mWindow->getLeft();
-		props.mHwGamma = mDesc.gamma;
-		props.mMultisampleCount = 1;
+		props.isFullScreen = mDesc.fullscreen && !mIsChild;
+		props.width = mWindow->getWidth();
+		props.height = mWindow->getHeight();
+		props.top = mWindow->getTop();
+		props.left = mWindow->getLeft();
+		props.hwGamma = mDesc.gamma;
+		props.multisampleCount = 1;
 
 		// Create Vulkan surface
 		VkWin32SurfaceCreateInfoKHR surfaceCreateInfo;
@@ -287,21 +276,21 @@ namespace bs
 
 		// Create swap chain
 		mSwapChain = bs_shared_ptr_new<VulkanSwapChain>();
-		mSwapChain->rebuild(presentDevice, mSurface, props.mWidth, props.mHeight, props.mVSync, mColorFormat, mColorSpace, 
+		mSwapChain->rebuild(presentDevice, mSurface, props.width, props.height, props.vsync, mColorFormat, mColorSpace, 
 			mDesc.depthBuffer, mDepthFormat);
 
 		// Make the window full screen if required
 		if (!windowDesc.external)
 		{
-			if (props.mIsFullScreen)
+			if (props.isFullScreen)
 			{
 				DEVMODE displayDeviceMode;
 
 				memset(&displayDeviceMode, 0, sizeof(displayDeviceMode));
 				displayDeviceMode.dmSize = sizeof(DEVMODE);
-				displayDeviceMode.dmBitsPerPel = props.mColorDepth;
-				displayDeviceMode.dmPelsWidth = props.mWidth;
-				displayDeviceMode.dmPelsHeight = props.mHeight;
+				displayDeviceMode.dmBitsPerPel = 32;
+				displayDeviceMode.dmPelsWidth = props.width;
+				displayDeviceMode.dmPelsHeight = props.height;
 				displayDeviceMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
 
 				if (mDisplayFrequency)
@@ -385,19 +374,19 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 		{
 			mWindow->move(left, top);
 
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
 
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mTop = props.mTop;
-				mSyncedProperties.mLeft = props.mLeft;
+				mSyncedProperties.top = props.top;
+				mSyncedProperties.left = props.left;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -408,19 +397,19 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 		{
 			mWindow->resize(width, height);
 
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
 
 			{
 				ScopedSpinLock lock(mLock);
-				mSyncedProperties.mWidth = props.mWidth;
-				mSyncedProperties.mHeight = props.mHeight;
+				mSyncedProperties.width = props.width;
+				mSyncedProperties.height = props.height;
 			}
 
 			bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -479,19 +468,19 @@ namespace bs
 		if (numOutputs == 0)
 			return;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
 		UINT32 actualMonitorIdx = std::min(monitorIdx, numOutputs - 1);
 		const Win32VideoOutputInfo& outputInfo = static_cast<const Win32VideoOutputInfo&>(videoModeInfo.getOutputInfo(actualMonitorIdx));
 
 		mDisplayFrequency = Math::roundToInt(refreshRate);
-		props.mIsFullScreen = true;
+		props.isFullScreen = true;
 
 		DEVMODE displayDeviceMode;
 
 		memset(&displayDeviceMode, 0, sizeof(displayDeviceMode));
 		displayDeviceMode.dmSize = sizeof(DEVMODE);
-		displayDeviceMode.dmBitsPerPel = props.mColorDepth;
+		displayDeviceMode.dmBitsPerPel = 32;
 		displayDeviceMode.dmPelsWidth = width;
 		displayDeviceMode.dmPelsHeight = height;
 		displayDeviceMode.dmDisplayFrequency = mDisplayFrequency;
@@ -509,15 +498,15 @@ namespace bs
 			BS_EXCEPT(RenderingAPIException, "ChangeDisplaySettings failed");
 		}
 
-		props.mTop = monitorInfo.rcMonitor.top;
-		props.mLeft = monitorInfo.rcMonitor.left;
-		props.mWidth = width;
-		props.mHeight = height;
+		props.top = monitorInfo.rcMonitor.top;
+		props.left = monitorInfo.rcMonitor.left;
+		props.width = width;
+		props.height = height;
 
 		SetWindowLong(mWindow->getHWnd(), GWL_STYLE, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
 		SetWindowLong(mWindow->getHWnd(), GWL_EXSTYLE, 0);
 
-		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.mLeft, props.mTop, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
+		SetWindowPos(mWindow->getHWnd(), HWND_TOP, props.left, props.top, width, height, SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
 	}
 
 	void Win32RenderWindow::setFullscreen(const VideoMode& mode)
@@ -531,14 +520,14 @@ namespace bs
 	{
 		THROW_IF_NOT_CORE_THREAD;
 
-		Win32RenderWindowProperties& props = mProperties;
+		RenderWindowProperties& props = mProperties;
 
-		if (!props.mIsFullScreen)
+		if (!props.isFullScreen)
 			return;
 
-		props.mIsFullScreen = false;
-		props.mWidth = width;
-		props.mHeight = height;
+		props.isFullScreen = false;
+		props.width = width;
+		props.height = height;
 
 		// Drop out of fullscreen
 		ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
@@ -574,8 +563,8 @@ namespace bs
 
 		{
 			ScopedSpinLock lock(mLock);
-			mSyncedProperties.mWidth = props.mWidth;
-			mSyncedProperties.mHeight = props.mHeight;
+			mSyncedProperties.width = props.width;
+			mSyncedProperties.height = props.height;
 		}
 
 		bs::RenderWindowManager::instance().notifySyncDataDirty(this);
@@ -621,13 +610,13 @@ namespace bs
 
 		mWindow->_windowMovedOrResized();
 
-		Win32RenderWindowProperties& props = mProperties;
-		if (!props.mIsFullScreen) // Fullscreen is handled directly by this object
+		RenderWindowProperties& props = mProperties;
+		if (!props.isFullScreen) // Fullscreen is handled directly by this object
 		{
-			props.mTop = mWindow->getTop();
-			props.mLeft = mWindow->getLeft();
-			props.mWidth = mWindow->getWidth();
-			props.mHeight = mWindow->getHeight();
+			props.top = mWindow->getTop();
+			props.left = mWindow->getLeft();
+			props.width = mWindow->getWidth();
+			props.height = mWindow->getHeight();
 		}
 
 		// Resize swap chain
@@ -638,7 +627,7 @@ namespace bs
 		SPtr<VulkanDevice> presentDevice = mRenderAPI._getPresentDevice();
 		presentDevice->waitIdle();
 
-		mSwapChain->rebuild(presentDevice, mSurface, props.mWidth, props.mHeight, props.mVSync, mColorFormat, mColorSpace, 
+		mSwapChain->rebuild(presentDevice, mSurface, props.width, props.height, props.vsync, mColorFormat, mColorSpace, 
 			mDesc.depthBuffer, mDepthFormat);
 
 		RenderWindow::_windowMovedOrResized();

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

@@ -11,18 +11,6 @@ namespace bs
 	 *  @{
 	 */
 
-	/**	Contains various properties that describe a render window. */
-	class Win32RenderWindowProperties : public RenderWindowProperties
-	{
-	public:
-		Win32RenderWindowProperties(const RENDER_WINDOW_DESC& desc);
-		virtual ~Win32RenderWindowProperties() { }
-
-	private:
-		friend class ct::Win32RenderWindow;
-		friend class Win32RenderWindow;
-	};
-
 	/**
 	 * Render window implementation for Windows and Vulkan.
 	 *
@@ -61,7 +49,7 @@ namespace bs
 		void syncProperties() override;
 
 	private:
-		Win32RenderWindowProperties mProperties;
+		RenderWindowProperties mProperties;
 	};
 
 	namespace ct
@@ -160,8 +148,8 @@ namespace bs
 		VulkanSemaphore* mSemaphoresTemp[BS_MAX_UNIQUE_QUEUES + 1]; // +1 for present semaphore
 		bool mRequiresNewBackBuffer;
 
-		Win32RenderWindowProperties mProperties;
-		Win32RenderWindowProperties mSyncedProperties;
+		RenderWindowProperties mProperties;
+		RenderWindowProperties mSyncedProperties;
 	};	
 	}
 	

+ 3 - 3
Source/Examples/ExampleGettingStarted/Main.cpp

@@ -508,11 +508,11 @@ namespace bs
 
 		if (!fullscreen)
 		{
-			windowResWidth = rwProps.getWidth();
-			windowResHeight = rwProps.getHeight();
+			windowResWidth = rwProps.width;
+			windowResHeight = rwProps.height;
 		}
 
-		sceneCamera->setAspectRatio(rwProps.getWidth() / (float)rwProps.getHeight());
+		sceneCamera->setAspectRatio(rwProps.width / (float)rwProps.height);
 	}
 
 	/** Callback triggered when the user selects a new video mode from the GUI drop down element. */

+ 3 - 3
Source/Examples/ExamplePhysicallyBasedShading/Main.cpp

@@ -375,10 +375,10 @@ namespace bs
 		SPtr<RenderWindow> window = gApplication().getPrimaryWindow();
 		const RenderWindowProperties& rwProps = window->getProperties();
 
-		windowResWidth = rwProps.getWidth();
-		windowResHeight = rwProps.getHeight();
+		windowResWidth = rwProps.width;
+		windowResHeight = rwProps.height;
 
-		sceneCamera->setAspectRatio(rwProps.getWidth() / (float)rwProps.getHeight());
+		sceneCamera->setAspectRatio(rwProps.width / (float)rwProps.height);
 	}
 }
 

+ 7 - 7
Source/RenderBeast/BsPostProcessing.cpp

@@ -591,7 +591,7 @@ namespace bs { namespace ct
 		std::array<float, MAX_BLUR_SAMPLES> sampleWeights;
 
 		POOLED_RENDER_TEXTURE_DESC tempTextureDesc = POOLED_RENDER_TEXTURE_DESC::create2D(srcProps.getFormat(), 
-			dstProps.getWidth(), dstProps.getHeight(), TU_RENDERTARGET);
+			dstProps.width, dstProps.height, TU_RENDERTARGET);
 		SPtr<PooledRenderTexture> tempTexture = GpuResourcePool::instance().get(tempTextureDesc);
 
 		auto updateParamBuffer = [&](Direction direction)
@@ -1152,7 +1152,7 @@ namespace bs { namespace ct
 
 		// Downsampled AO uses a larger AO radius (in higher resolutions this would cause too much cache trashing). This
 		// means if only full res AO is used, then only AO from nearby geometry will be calculated.
-		float viewScale = viewProps.viewRect.width / (float)rtProps.getWidth();
+		float viewScale = viewProps.viewRect.width / (float)rtProps.width;
 
 		// Ramp up the radius exponentially. c^log2(x) function chosen arbitrarily, as it ramps up the radius in a nice way
 		float scale = pow(DOWNSAMPLE_SCALE, Math::log2(viewScale)); 
@@ -1197,8 +1197,8 @@ namespace bs { namespace ct
 		UINT32 rndHeight = rndProps.getHeight();
 
 		//// Multiple of random texture size, rounded up
-		UINT32 scaleWidth = (rtProps.getWidth() + rndWidth - 1) / rndWidth;
-		UINT32 scaleHeight = (rtProps.getHeight() + rndHeight - 1) / rndHeight;
+		UINT32 scaleWidth = (rtProps.width + rndWidth - 1) / rndWidth;
+		UINT32 scaleHeight = (rtProps.height + rndHeight - 1) / rndHeight;
 
 		Vector2 randomTileScale((float)scaleWidth, (float)scaleHeight);
 		gSSAOParamDef.gRandomTileScale.set(mParamBuffer, randomTileScale);
@@ -1302,10 +1302,10 @@ namespace bs { namespace ct
 		const RenderTargetProperties& rtProps = destination->getProperties();
 
 		Vector2 pixelSize;
-		pixelSize.x = 1.0f / rtProps.getWidth();
-		pixelSize.y = 1.0f / rtProps.getHeight();
+		pixelSize.x = 1.0f / rtProps.width;
+		pixelSize.y = 1.0f / rtProps.height;
 
-		float scale = viewProps.viewRect.width / (float)rtProps.getWidth();
+		float scale = viewProps.viewRect.width / (float)rtProps.width;
 
 		gSSAODownsampleParamDef.gPixelSize.set(mParamBuffer, pixelSize);
 		gSSAODownsampleParamDef.gInvDepthThreshold.set(mParamBuffer, (1.0f / depthRange) / scale);

+ 1 - 1
Source/RenderBeast/BsRenderBeast.cpp

@@ -319,7 +319,7 @@ namespace bs { namespace ct
 		// Present render targets with back buffers
 		for (auto& rtInfo : sceneInfo.renderTargets)
 		{
-			if(rtInfo.target->getProperties().isWindow())
+			if(rtInfo.target->getProperties().isWindow)
 				RenderAPI::instance().swapBuffers(rtInfo.target);
 		}
 

+ 2 - 2
Source/RenderBeast/BsRenderCompositor.cpp

@@ -1777,8 +1777,8 @@ namespace bs { namespace ct
 		{
 			const RenderTargetProperties& rtProps = output->renderTexture->getProperties();
 
-			POOLED_RENDER_TEXTURE_DESC desc = POOLED_RENDER_TEXTURE_DESC::create2D(PF_R8, rtProps.getWidth(), 
-				rtProps.getHeight(), TU_RENDERTARGET);
+			POOLED_RENDER_TEXTURE_DESC desc = POOLED_RENDER_TEXTURE_DESC::create2D(PF_R8, rtProps.width, 
+				rtProps.height, TU_RENDERTARGET);
 			SPtr<PooledRenderTexture> blurIntermediateTex = GpuResourcePool::instance().get(desc);
 
 			SSAOBlurMat* blurHorz = SSAOBlurMat::getVariation(true);

+ 3 - 3
Source/RenderBeast/BsRendererScene.cpp

@@ -538,8 +538,8 @@ namespace bs {	namespace ct
 
 		if (viewDesc.target.target != nullptr)
 		{
-			viewDesc.target.targetWidth = viewDesc.target.target->getProperties().getWidth();
-			viewDesc.target.targetHeight = viewDesc.target.target->getProperties().getHeight();
+			viewDesc.target.targetWidth = viewDesc.target.target->getProperties().width;
+			viewDesc.target.targetHeight = viewDesc.target.target->getProperties().height;
 		}
 		else
 		{
@@ -635,7 +635,7 @@ namespace bs {	namespace ct
 			// Sort render targets based on priority
 			auto cameraComparer = [&](const Camera* a, const Camera* b) { return a->getPriority() > b->getPriority(); };
 			auto renderTargetInfoComparer = [&](const RendererRenderTarget& a, const RendererRenderTarget& b)
-			{ return a.target->getProperties().getPriority() > b.target->getProperties().getPriority(); };
+			{ return a.target->getProperties().priority > b.target->getProperties().priority; };
 			std::sort(begin(mInfo.renderTargets), end(mInfo.renderTargets), renderTargetInfoComparer);
 
 			for (auto& camerasPerTarget : mInfo.renderTargets)

+ 2 - 2
Source/SBansheeEditor/Wrappers/BsScriptSceneHandles.cpp

@@ -45,8 +45,8 @@ namespace bs
 		Vector2I windowPos = parentWindow->screenToWindowPos(Cursor::instance().getScreenPosition());
 		const RenderWindowProperties& rwProps = parentWindow->getProperties();
 
-		INT32 maxWidth = std::max(0, (INT32)rwProps.getWidth() - 1);
-		INT32 maxHeight = std::max(0, (INT32)rwProps.getHeight() - 1);
+		INT32 maxWidth = std::max(0, (INT32)rwProps.width - 1);
+		INT32 maxHeight = std::max(0, (INT32)rwProps.height - 1);
 
 		Vector2I offset;
 		if (windowPos.x <= 0)

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

@@ -373,7 +373,7 @@ namespace bs
 		if (target == nullptr)
 			return;
 
-		if (target->getProperties().isWindow())
+		if (target->getProperties().isWindow)
 		{
 			SPtr<RenderWindow> window = std::static_pointer_cast<RenderWindow>(target);
 			*output = window->screenToWindowPos(*value);

+ 5 - 5
Source/SBansheeEngine/Wrappers/BsScriptRenderTarget.cpp

@@ -29,31 +29,31 @@ namespace bs
 	void ScriptRenderTarget::internal_getWidth(ScriptRenderTarget* thisPtr, int* value)
 	{
 		SPtr<RenderTarget> rt = thisPtr->getNativeValue();
-		*value = rt->getProperties().getWidth();
+		*value = rt->getProperties().width;
 	}
 
 	void ScriptRenderTarget::internal_getHeight(ScriptRenderTarget* thisPtr, int* value)
 	{
 		SPtr<RenderTarget> rt = thisPtr->getNativeValue();
-		*value = rt->getProperties().getHeight();
+		*value = rt->getProperties().height;
 	}
 
 	void ScriptRenderTarget::internal_getGammaCorrection(ScriptRenderTarget* thisPtr, bool* value)
 	{
 		SPtr<RenderTarget> rt = thisPtr->getNativeValue();
-		*value = rt->getProperties().isHwGammaEnabled();
+		*value = rt->getProperties().hwGamma;
 	}
 
 	void ScriptRenderTarget::internal_getSampleCount(ScriptRenderTarget* thisPtr, int* value)
 	{
 		SPtr<RenderTarget> rt = thisPtr->getNativeValue();
-		*value = rt->getProperties().getMultisampleCount();
+		*value = rt->getProperties().multisampleCount;
 	}
 
 	void ScriptRenderTarget::internal_getPriority(ScriptRenderTarget* thisPtr, int* value)
 	{
 		SPtr<RenderTarget> rt = thisPtr->getNativeValue();
-		*value = rt->getProperties().getPriority();
+		*value = rt->getProperties().priority;
 	}
 
 	void ScriptRenderTarget::internal_setPriority(ScriptRenderTarget* thisPtr, int value)