From 89207409dfde9b508cb7b578da6046eb6014a477 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sat, 1 Apr 2023 17:52:47 +0200 Subject: [PATCH 01/35] COM: Implemented support for overlays. --- .../Castor3D/Overlay/BorderPanelOverlay.hpp | 89 +++++- include/Core/Castor3D/Overlay/Overlay.hpp | 8 +- .../Core/Castor3D/Overlay/OverlayCategory.hpp | 14 +- include/Core/Castor3D/Overlay/TextOverlay.hpp | 6 +- include/Interop/ComCastor3D/Castor3D.idl | 297 ++++-------------- .../Castor3D/ComBorderPanelOverlay.hpp | 45 +++ .../Interop/ComCastor3D/Castor3D/ComMesh.hpp | 2 - .../ComCastor3D/Castor3D/ComOverlay.hpp | 33 ++ .../Castor3D/ComOverlayCategory.hpp | 38 +++ .../ComCastor3D/Castor3D/ComPanelOverlay.hpp | 41 +++ .../Interop/ComCastor3D/Castor3D/ComPass.hpp | 1 - .../ComCastor3D/Castor3D/ComPhongPass.hpp | 0 .../Castor3D/ComSpecularGlossinessPbrPass.hpp | 0 .../ComCastor3D/Castor3D/ComTextOverlay.hpp | 41 +++ .../Interop/ComCastor3D/ComParameterCast.hpp | 12 + .../Event/UserInput/UserInputListener.cpp | 9 +- .../Castor3D/Gui/Controls/CtrlControl.cpp | 4 +- source/Core/Castor3D/Overlay/TextOverlay.cpp | 2 +- .../Scene/SceneFileParser_Parsers.cpp | 2 +- .../Shader/ShaderBuffers/PassBuffer.cpp | 7 +- source/Interop/ComCastor3D/CMakeLists.txt | 16 +- .../Castor3D/ComBorderPanelOverlay.cpp | 113 +++++++ .../ComCastor3D/Castor3D/ComEngine.cpp | 3 +- .../Castor3D/ComMetallicRoughnessPbrPass.cpp | 0 .../ComCastor3D/Castor3D/ComOverlay.cpp | 0 .../Castor3D/ComOverlayCategory.cpp | 62 ++++ .../ComCastor3D/Castor3D/ComPanelOverlay.cpp | 72 +++++ .../ComCastor3D/Castor3D/ComPhongPass.cpp | 0 .../ComCastor3D/Castor3D/ComRenderWindow.cpp | 14 +- .../ComCastor3D/Castor3D/ComSceneNode.cpp | 3 +- .../Castor3D/ComSpecularGlossinessPbrPass.cpp | 0 .../ComCastor3D/Castor3D/ComTextOverlay.cpp | 62 ++++ .../TreeItems/OverlayTreeItemProperty.cpp | 2 +- 33 files changed, 708 insertions(+), 290 deletions(-) create mode 100644 include/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.hpp create mode 100644 include/Interop/ComCastor3D/Castor3D/ComOverlay.hpp create mode 100644 include/Interop/ComCastor3D/Castor3D/ComOverlayCategory.hpp create mode 100644 include/Interop/ComCastor3D/Castor3D/ComPanelOverlay.hpp delete mode 100644 include/Interop/ComCastor3D/Castor3D/ComPhongPass.hpp delete mode 100644 include/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.hpp create mode 100644 include/Interop/ComCastor3D/Castor3D/ComTextOverlay.hpp create mode 100644 source/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.cpp delete mode 100644 source/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.cpp rename include/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.hpp => source/Interop/ComCastor3D/Castor3D/ComOverlay.cpp (100%) create mode 100644 source/Interop/ComCastor3D/Castor3D/ComOverlayCategory.cpp create mode 100644 source/Interop/ComCastor3D/Castor3D/ComPanelOverlay.cpp delete mode 100644 source/Interop/ComCastor3D/Castor3D/ComPhongPass.cpp delete mode 100644 source/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.cpp create mode 100644 source/Interop/ComCastor3D/Castor3D/ComTextOverlay.cpp diff --git a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp index be9a5a6d5b..407d8f5a45 100644 --- a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp +++ b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp @@ -141,6 +141,41 @@ namespace castor3d return m_relBorderSize; } + bool hasPixelBorderSize()const noexcept + { + return m_pxBorderSize != std::nullopt; + } + + uint32_t getPixelLeftBorderSize()const noexcept + { + CU_Require( hasPixelBorderSize() ); + return getPixelBorderSize()->x; + } + + uint32_t getPixelTopBorderSize()const noexcept + { + CU_Require( hasPixelBorderSize() ); + return getPixelBorderSize()->y; + } + + uint32_t getPixelRightBorderSize()const noexcept + { + CU_Require( hasPixelBorderSize() ); + return getPixelBorderSize()->z; + } + + uint32_t getPixelBottomBorderSize()const noexcept + { + CU_Require( hasPixelBorderSize() ); + return getPixelBorderSize()->w; + } + + castor::Point4ui const & getPixelBorderSize()const noexcept + { + CU_Require( hasPixelBorderSize() ); + return *m_pxBorderSize; + } + MaterialRPtr getBorderMaterial()const noexcept { return m_borderMaterial; @@ -208,13 +243,57 @@ namespace castor3d m_borderChanged = true; } - void setAbsoluteBorderSize( castor::Point4ui const & size )noexcept + void setPixelLeftBorderSize( uint32_t size )noexcept + { + if ( m_pxBorderSize == std::nullopt ) + { + m_pxBorderSize = castor::Point4ui{}; + } + + ( *m_pxBorderSize )->x = size; + m_sizeChanged = true; + m_borderChanged = true; + } + + void setPixelRightBorderSize( uint32_t size )noexcept + { + if ( m_pxBorderSize == std::nullopt ) + { + m_pxBorderSize = castor::Point4ui{}; + } + + ( *m_pxBorderSize )->z = size; + m_sizeChanged = true; + m_borderChanged = true; + } + + void setPixelTopBorderSize( uint32_t size )noexcept + { + if ( m_pxBorderSize == std::nullopt ) + { + m_pxBorderSize = castor::Point4ui{}; + } + + ( *m_pxBorderSize )->y = size; + m_sizeChanged = true; + m_borderChanged = true; + } + + void setPixelBottomBorderSize( uint32_t size )noexcept + { + if ( m_pxBorderSize == std::nullopt ) + { + m_pxBorderSize = castor::Point4ui{}; + } + + ( *m_pxBorderSize )->w = size; + m_sizeChanged = true; + m_borderChanged = true; + } + + void setPixelBorderSize( castor::Point4ui const & size )noexcept { m_pxBorderSize = size; - ( *m_pxBorderSize )->x = std::max( 0u, ( *m_pxBorderSize )->x ); - ( *m_pxBorderSize )->y = std::max( 0u, ( *m_pxBorderSize )->y ); - ( *m_pxBorderSize )->z = std::max( 0u, ( *m_pxBorderSize )->z ); - ( *m_pxBorderSize )->w = std::max( 0u, ( *m_pxBorderSize )->w ); m_sizeChanged = true; m_borderChanged = true; } diff --git a/include/Core/Castor3D/Overlay/Overlay.hpp b/include/Core/Castor3D/Overlay/Overlay.hpp index c60ad7dd9e..237a1ea1f4 100644 --- a/include/Core/Castor3D/Overlay/Overlay.hpp +++ b/include/Core/Castor3D/Overlay/Overlay.hpp @@ -284,22 +284,22 @@ namespace castor3d void setRelativePosition( castor::Point2d const & position ) { - m_category->setRelativePosition( position, false ); + m_category->setRelativePosition( position ); } void setRelativeSize( castor::Point2d const & size ) { - m_category->setRelativeSize( size, false ); + m_category->setRelativeSize( size ); } void setPixelPosition( castor::Position const & position ) { - m_category->setPixelPosition( position, false ); + m_category->setPixelPosition( position ); } void setPixelSize( castor::Size const & size ) { - m_category->setPixelSize( size, false ); + m_category->setPixelSize( size ); } void rename( castor::String const & name ) diff --git a/include/Core/Castor3D/Overlay/OverlayCategory.hpp b/include/Core/Castor3D/Overlay/OverlayCategory.hpp index 20fdbfac58..9671700099 100644 --- a/include/Core/Castor3D/Overlay/OverlayCategory.hpp +++ b/include/Core/Castor3D/Overlay/OverlayCategory.hpp @@ -271,7 +271,7 @@ namespace castor3d return m_pxSize != std::nullopt; } - castor::Position const & getPixelPosition()noexcept + castor::Position const & getPixelPosition()const noexcept { CU_Require( hasPixelPosition() ); return *m_pxPosition; @@ -292,15 +292,13 @@ namespace castor3d * Mutateurs. */ /**@{*/ - void setRelativePosition( castor::Point2d const & value - , bool notify = true )noexcept + void setRelativePosition( castor::Point2d const & value )noexcept { m_relPosition = value; m_positionChanged = true; } - void setRelativeSize( castor::Point2d const & value - , bool notify = true )noexcept + void setRelativeSize( castor::Point2d const & value )noexcept { m_relSize = value; m_relSize->x = std::max( 0.0, m_relSize->x ); @@ -308,15 +306,13 @@ namespace castor3d m_sizeChanged = true; } - void setPixelPosition( castor::Position const & value - , bool notify = true )noexcept + void setPixelPosition( castor::Position const & value )noexcept { m_pxPosition = value; m_positionChanged = true; } - void setPixelSize( castor::Size const & value - , bool notify = true )noexcept + void setPixelSize( castor::Size const & value )noexcept { m_pxSize = value; m_sizeChanged = true; diff --git a/include/Core/Castor3D/Overlay/TextOverlay.hpp b/include/Core/Castor3D/Overlay/TextOverlay.hpp index d11391f5c4..0665d440b3 100644 --- a/include/Core/Castor3D/Overlay/TextOverlay.hpp +++ b/include/Core/Castor3D/Overlay/TextOverlay.hpp @@ -101,7 +101,7 @@ namespace castor3d *\brief Définit la police du texte *\param[in] value La nouvelle valeur */ - C3D_API void setFont( castor::String const & value ); + C3D_API void setFont( castor::String value ); /** *\~english *\name @@ -180,9 +180,9 @@ namespace castor3d * Mutateurs. */ /**@{*/ - void setCaption( std::u32string const & value ) + void setCaption( std::u32string value ) { - m_currentCaption = value; + m_currentCaption = std::move( value ); m_textChanged = true; } diff --git a/include/Interop/ComCastor3D/Castor3D.idl b/include/Interop/ComCastor3D/Castor3D.idl index 240310f7e3..2cb86065e5 100644 --- a/include/Interop/ComCastor3D/Castor3D.idl +++ b/include/Interop/ComCastor3D/Castor3D.idl @@ -398,44 +398,6 @@ typedef enum eVIEWPORT_TYPE_COUNT, } eVIEWPORT_TYPE; -// eANIMATION_TYPE -[ - uuid( 978995A1-5187-477B-B645-66FC3265DEE5 ), - helpstring( "Castor3D Animable objects enumeration." ) -] -typedef enum -{ - eANIMATION_TYPE_MOVABLE, - eANIMATION_TYPE_SKELETON, - eANIMATION_TYPE_MESH, - eANIMATION_TYPE_COUNT -} eANIMATION_TYPE; - -// eANIMATION_STATE -[ - uuid( 7657DCA9-7009-43A9-949D-4A6CE59682CF ), - helpstring( "Castor3D Animation states enumeration." ) -] -typedef enum -{ - eANIMATION_STATE_PLAYING, - eANIMATION_STATE_STOPPED, - eANIMATION_STATE_PAUSED, - eANIMATION_STATE_COUNT -} eANIMATION_STATE; - -// eSKELETON_ANIMATION_OBJECT_TYPE -[ - uuid( BCBC3FF1-78EE-4147-BC16-CEC568D93E81 ), - helpstring( "Castor3D Skeleton animation objects enumeration." ) -] -typedef enum -{ - eSKELETON_ANIMATION_OBJECT_TYPE_NODE, - eSKELETON_ANIMATION_OBJECT_TYPE_BONE, - eSKELETON_ANIMATION_OBJECT_TYPE_COUNT -} eSKELETON_ANIMATION_OBJECT_TYPE; - // eCOMPARISON_FUNC [ uuid( 64B09ACE-F388-40FE-83BE-DB4A85BCB84E ), @@ -534,19 +496,6 @@ typedef enum eCOMPARE_OP_COUNT } eCOMPARE_OP; -// ePASS_TYPE -[ - uuid( F2C5A760-E42D-466D-B6BF-1FF2EEF233B7 ), - helpstring( "Castor3D Pass types enumeration." ) -] -typedef enum -{ - ePASS_TYPE_LEGACY, - ePASS_TYPE_METALLIC_ROUGHNESS, - ePASS_TYPE_SPECULAR_GLOSSINESS, - ePASS_TYPE_COUNT -} ePASS_TYPE; - // eINDEX_MAPPING_TYPE [ uuid( E8CE3C3D-986E-408C-A4A4-558A59588432 ), @@ -685,55 +634,58 @@ typedef enum eKEYBOARD_KEY eKEYBOARD_KEY_NUMPADDIVIDE, } eKEYBOARD_KEY; -interface IRgbaColour; -interface IRgbColour; -interface IHdrRgbaColour; -interface IHdrRgbColour; -interface IVector2D; -interface IVector3D; -interface IVector4D; interface IAngle; +interface ICastorFont; +interface IGlyph; +interface IHdrRgbColour; +interface IHdrRgbaColour; +interface IImage; interface ILength; -interface IQuaternion; +interface ILogger; interface IMatrix4x4; +interface IPixelBuffer; interface IPosition; -interface ISize; +interface IQuaternion; interface IRect; -interface IGlyph; -interface ICastorFont; -interface IPixelBuffer; -interface IImage; -interface ILogger; +interface IRgbColour; +interface IRgbaColour; +interface ISize; +interface IVector2D; +interface IVector3D; +interface IVector4D; -interface ISubmesh; -interface IMesh; -interface IMovableObject; -interface ILightCategory; -interface IDirectionalLight; -interface IPointLight; -interface ISpotLight; +interface IBorderPanelOverlay; interface ICamera; -interface ILight; +interface IColourBackground; +interface IDirectionalLight; +interface IEngine; interface IGeometry; -interface ISceneNode; +interface IImageBackground; +interface IIndexMapping; +interface ILight; +interface ILightCategory; +interface ILineMapping; +interface IMaterial; +interface IMesh; +interface IMovableObject; +interface IOverlay; interface IOverlayCategory; interface IPanelOverlay; -interface IBorderPanelOverlay; +interface IPass; +interface IPointLight; +interface IRenderTarget; +interface IRenderWindow; +interface ISampler; +interface IScene; +interface ISceneBackground; +interface ISceneNode; +interface ISkyboxBackground; +interface ISpotLight; +interface ISubmesh; interface ITextOverlay; -interface IOverlay; -interface IAnimable; -interface IAnimatedObject; -interface IAnimatedObjectGroup; -interface ITextureImage; interface ITextureLayout; interface ITextureUnit; -interface IPass; -interface IMaterial; -interface IEngine; -interface IAnimation; -interface IBone; -interface ISkeleton; -interface IScene; +interface ITriFaceMapping; // IRgbaColour [ @@ -1286,7 +1238,6 @@ interface IPass [propput, id( 7 ), helpstring( "The pass blend alpha function" )] HRESULT BlendAlphaFunc( [in] eCOMPARISON_FUNC val ); [propget, id( 8 ), helpstring( "The pass alpha reference value" )] HRESULT AlphaRefValue( [out, retval] float * pVal ); [propput, id( 8 ), helpstring( "The pass alpha reference value" )] HRESULT AlphaRefValue( [in] float val ); - [propget, id( 9 ), helpstring( "The pass type" )] HRESULT Type( [out, retval] UINT * pVal ); [propget, id( 10 ), helpstring( "Retrieves the texture units count" )] HRESULT TextureUnitCount( [out, retval] unsigned int * pVal ); [id( 11 ), helpstring( "Creates a texture unit" )] HRESULT CreateTextureUnit( [out, retval] ITextureUnit ** pVal ); [id( 12 ), helpstring( "Retrieves the texture unit at given index" )] HRESULT GetTextureUnitByIndex( [in] unsigned int index, [out, retval] ITextureUnit ** pVal ); @@ -1519,30 +1470,6 @@ interface IScene [id( 22 ), helpstring( "Removes the mesh with the given name" )] HRESULT RemoveMesh( [in] IMesh * mesh ); }; -// IAnimation -[ - uuid( 242D6D0F-1470-4F0A-A7D0-9288E1D8856C ), - helpstring( "Castor3D Animation interface" ), - dual, - oleautomation -] -interface IAnimation - : IDispatch -{ -}; - -// ISkeleton -[ - uuid( B9815090-EE8B-4FEB-91EE-B7D29C963B38 ), - helpstring( "Castor3D Skeleton interface" ), - dual, - oleautomation -] -interface ISkeleton - : IDispatch -{ -}; - // IMovableObject [ uuid( C0B3C2C4-365F-4E66-9520-FD95D45CA96C ), @@ -1714,16 +1641,14 @@ interface IOverlayCategory : IDispatch { [propget, id( 1 ), helpstring( "The overlay type" )] HRESULT Type( [out, retval] eOVERLAY_TYPE * pVal ); - [propget, id( 2 ), helpstring( "The overlay position, relative to its parent" )] HRESULT Position( [out, retval] IVector2D ** pVal ); - [propput, id( 2 ), helpstring( "The overlay position, relative to its parent" )] HRESULT Position( [in] IVector2D * val ); - [propget, id( 3 ), helpstring( "The overlay size, relative to its parent" )] HRESULT Size( [out, retval] IVector2D ** pVal ); - [propput, id( 3 ), helpstring( "The overlay size, relative to its parent" )] HRESULT Size( [in] IVector2D * val ); + [propget, id( 2 ), helpstring( "The overlay position, relative to its parent" )] HRESULT Position( [out, retval] IPosition ** pVal ); + [propput, id( 2 ), helpstring( "The overlay position, relative to its parent" )] HRESULT Position( [in] IPosition * val ); + [propget, id( 3 ), helpstring( "The overlay size, relative to its parent" )] HRESULT Size( [out, retval] ISize ** pVal ); + [propput, id( 3 ), helpstring( "The overlay size, relative to its parent" )] HRESULT Size( [in] ISize * val ); [propget, id( 4 ), helpstring( "The overlay visibility" )] HRESULT Visible( [out, retval] boolean * pVal ); - [propput, id( 4 ), helpstring( "The overlay visibility" )] HRESULT Visible( [in] boolean * val ); - [propget, id( 5 ), helpstring( "The overlay z-index" )] HRESULT ZIndex( [out, retval] int * pVal ); - [propput, id( 5 ), helpstring( "The overlay z-index" )] HRESULT ZIndex( [in] int val ); - [propget, id( 6 ), helpstring( "The overlay material" )] HRESULT Material( [out, retval] IMaterial ** pVal ); - [propput, id( 6 ), helpstring( "The overlay material" )] HRESULT Material( [in] IMaterial * val ); + [propput, id( 4 ), helpstring( "The overlay visibility" )] HRESULT Visible( [in] boolean val ); + [propget, id( 5 ), helpstring( "The overlay material" )] HRESULT Material( [out, retval] IMaterial ** pVal ); + [propput, id( 5 ), helpstring( "The overlay material" )] HRESULT Material( [in] IMaterial * val ); }; // IPanelOverlay @@ -1748,14 +1673,14 @@ interface IPanelOverlay interface IBorderPanelOverlay : IOverlayCategory { - [propget, id( 11 ), helpstring( "The bottom border width" )] HRESULT LeftBorderSize( [out, retval] float * pVal ); - [propput, id( 11 ), helpstring( "The bottom border width" )] HRESULT LeftBorderSize( [in] float val ); - [propget, id( 12 ), helpstring( "The right border width" )] HRESULT RightBorderSize( [out, retval] float * pVal ); - [propput, id( 12 ), helpstring( "The right border width" )] HRESULT RightBorderSize( [in] float val ); - [propget, id( 13 ), helpstring( "The top border width" )] HRESULT TopBorderSize( [out, retval] float * pVal ); - [propput, id( 13 ), helpstring( "The top border width" )] HRESULT TopBorderSize( [in] float val ); - [propget, id( 14 ), helpstring( "The bottom border width" )] HRESULT BottomBorderSize( [out, retval] float * pVal ); - [propput, id( 14 ), helpstring( "The bottom border width" )] HRESULT BottomBorderSize( [in] float val ); + [propget, id( 11 ), helpstring( "The bottom border width" )] HRESULT LeftBorderSize( [out, retval] unsigned int * pVal ); + [propput, id( 11 ), helpstring( "The bottom border width" )] HRESULT LeftBorderSize( [in] unsigned int val ); + [propget, id( 12 ), helpstring( "The right border width" )] HRESULT RightBorderSize( [out, retval] unsigned int * pVal ); + [propput, id( 12 ), helpstring( "The right border width" )] HRESULT RightBorderSize( [in] unsigned int val ); + [propget, id( 13 ), helpstring( "The top border width" )] HRESULT TopBorderSize( [out, retval] unsigned int * pVal ); + [propput, id( 13 ), helpstring( "The top border width" )] HRESULT TopBorderSize( [in] unsigned int val ); + [propget, id( 14 ), helpstring( "The bottom border width" )] HRESULT BottomBorderSize( [out, retval] unsigned int * pVal ); + [propput, id( 14 ), helpstring( "The bottom border width" )] HRESULT BottomBorderSize( [in] unsigned int val ); [propget, id( 15 ), helpstring( "The border material" )] HRESULT BorderMaterial( [out, retval] IMaterial ** pVal ); [propput, id( 15 ), helpstring( "The border material" )] HRESULT BorderMaterial( [in] IMaterial * val ); }; @@ -1787,77 +1712,10 @@ interface IOverlay : IDispatch { [propget, id( 1 ), helpstring( "The overlay name" )] HRESULT Name( [out, retval] BSTR * pVal ); - [propput, id( 1 ), helpstring( "The overlay name" )] HRESULT Name( [in] BSTR val ); [propget, id( 2 ), helpstring( "The panel overlay category" )] HRESULT PanelOverlay( [out, retval] IPanelOverlay ** pVal ); [propget, id( 3 ), helpstring( "The border panel overlay category" )] HRESULT BorderPanelOverlay( [out, retval] IBorderPanelOverlay ** pVal ); [propget, id( 4 ), helpstring( "The text overlay category" )] HRESULT TextOverlay( [out, retval] ITextOverlay ** pVal ); - [id( 5 ), helpstring( "Retrieves the childs count" )] HRESULT GetChildsCount( [in] unsigned int * pVal ); - [id( 6 ), helpstring( "Adds a child" )] HRESULT AddChild( [in] IOverlay * overlay, [in] int zindex ); -}; - -// IAnimable -[ - uuid( 18CB2526-98C6-4E19-932C-25264D419FFA ), - helpstring( "Castor3D Animable interface" ), - dual, - oleautomation -] -interface IAnimable - : IDispatch -{ - [id( 1 ), helpstring( "Retrieves the animation with the given name" )] HRESULT GetAnimation( [in] BSTR name, [out, retval] IAnimation ** anim ); - [id( 2 ), helpstring( "Creates an animation" )] HRESULT CreateAnimation( [in] BSTR name, [out, retval] IAnimation ** anim ); -}; - -// IAnimatedObject -[ - uuid( 6F5C61B7-507C-4C5C-9463-368776C647D1 ), - helpstring( "Castor3D AnimatedObject interface" ), - dual, - oleautomation -] -interface IAnimatedObject - : IDispatch -{ - [propget, id( 1 ), helpstring( "The animable geometry" )] HRESULT Geometry( [out, retval] IGeometry ** pVal ); - [propput, id( 1 ), helpstring( "The animable geometry" )] HRESULT Geometry( [in] IGeometry * val ); - [propget, id( 2 ), helpstring( "The animable mesh" )] HRESULT Mesh( [out, retval] IMesh ** pVal ); - [propput, id( 2 ), helpstring( "The animable mesh" )] HRESULT Mesh( [in] IMesh * val ); - [propget, id( 3 ), helpstring( "The animable skeleton" )] HRESULT Skeleton( [out, retval] ISkeleton ** pVal ); - [propput, id( 3 ), helpstring( "The animable skeleton" )] HRESULT Skeleton( [in] ISkeleton * val ); - [id( 4 ), helpstring( "Retrieves the animation with given name" )] HRESULT getAnimation( [in] BSTR name, [out, retval] IAnimation ** anim ); - [id( 5 ), helpstring( "Starts all the animable animations" )] HRESULT StartAllAnimations(); - [id( 6 ), helpstring( "Stops all the animable animations" )] HRESULT StopAllAnimations(); - [id( 7 ), helpstring( "Pauses all the animable animations" )] HRESULT PauseAllAnimations(); - [id( 8 ), helpstring( "Starts the animation with given name" )] HRESULT StartAnimation( [in] BSTR name ); - [id( 9 ), helpstring( "Stops the animation with given name" )] HRESULT StopAnimation( [in] BSTR name ); - [id( 10 ), helpstring( "Pauses the animation with given name" )] HRESULT PauseAnimation( [in] BSTR name ); -}; - -// IAnimatedObjectGroup -[ - uuid( E369A7E4-0E42-42B9-B541-CD23A20FCDC1 ), - helpstring( "Castor3D AnimatedObjectGroup interface" ), - dual, - oleautomation -] -interface IAnimatedObjectGroup - : IDispatch -{ - [propget, id( 1 ), helpstring( "Retrieves the animsations count" )] HRESULT AnimationCount( [out, retval] unsigned int * pVal ); - [propget, id( 2 ), helpstring( "Retrieves the animable objects count" )] HRESULT ObjectCount( [out, retval] unsigned int * pVal ); - [propget, id( 3 ), helpstring( "Retrieves the scene" )] HRESULT Scene( [out, retval] IScene ** anim ); - [id( 5 ), helpstring( "Retrieves the animable object with given name" )] HRESULT GetAnimableObject( [in] BSTR name, [out, retval] IAnimable ** obj ); - [id( 6 ), helpstring( "Starts all the animable animations" )] HRESULT StartAllAnimations(); - [id( 7 ), helpstring( "Stops all the animable animations" )] HRESULT StopAllAnimations(); - [id( 8 ), helpstring( "Pauses all the animable animations" )] HRESULT PauseAllAnimations(); - [id( 9 ), helpstring( "Starts the animation with given name" )] HRESULT StartAnimation( [in] BSTR name ); - [id( 10 ), helpstring( "Stops the animation with given name" )] HRESULT StopAnimation( [in] BSTR name ); - [id( 11 ), helpstring( "Pauses the animation with given name" )] HRESULT PauseAnimation( [in] BSTR name ); - [id( 12 ), helpstring( "Creates the animable object" )] HRESULT CreateObject( [in] BSTR name, [out, retval] IAnimable ** obj ); - [id( 13 ), helpstring( "Adds an animable object to the group" )] HRESULT AddObject( [in] IAnimable * obj, [out, retval] boolean * pVal ); - [id( 14 ), helpstring( "Adds an animation to the group" )] HRESULT AddAnimation( [in] BSTR name ); - [id( 15 ), helpstring( "Sets the animation loop status" )] HRESULT SetAnimationLooped( [in] BSTR name, [in] boolean val ); + [id( 5 ), helpstring( "Retrieves the childs count" )] HRESULT GetChildrenCount( [in] unsigned int * pVal ); }; // IEngine @@ -2292,33 +2150,6 @@ library Castor3D [default] interface IOverlay; }; - // Animable - [ - uuid( F9185125-9460-4039-A0B0-EB2295AC6AB1 ) - ] - coclass Animable - { - [default] interface IAnimable; - }; - - // AnimatedObject - [ - uuid( F31A778F-F9E5-4619-A35B-2EE8325BF1D2 ) - ] - coclass AnimatedObject - { - [default] interface IAnimatedObject; - }; - - // AnimatedObjectGroup - [ - uuid( 7180F914-17E1-45A1-A2AB-F195F0724AD7 ) - ] - coclass AnimatedObjectGroup - { - [default] interface IAnimatedObjectGroup; - }; - // SceneBackground [ uuid( 5CA94585-1FBC-466A-8A59-90733AD8DF1D ) @@ -2364,24 +2195,6 @@ library Castor3D [default] interface IScene; }; - // Animation - [ - uuid( 5B26DE5C-FFE8-42AE-A07C-837D5164CAFE ) - ] - coclass Animation - { - [default] interface IAnimation; - }; - - // Skeleton - [ - uuid( 53A552B5-8524-4DDD-987C-AC68AA87233E ) - ] - coclass Skeleton - { - [default] interface ISkeleton; - }; - // RenderWindow [ uuid( AD82930D-4682-4CF1-B9E8-EDFD869E7AF7 ) diff --git a/include/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.hpp b/include/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.hpp new file mode 100644 index 0000000000..9b277718cf --- /dev/null +++ b/include/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.hpp @@ -0,0 +1,45 @@ +/* See LICENSE file in root folder */ +#ifndef __COMC3D_BorderPanelOverlay_H__ +#define __COMC3D_BorderPanelOverlay_H__ + +#include "ComCastor3D/ComAtlObject.hpp" + +#include "ComCastor3D/CastorUtils/ComPosition.hpp" +#include "ComCastor3D/CastorUtils/ComSize.hpp" + +#include + +namespace CastorCom +{ + COM_TYPE_TRAITS_PTR( castor3d, BorderPanelOverlay ); + /*! + \~english + \brief This class defines a CBorderPanelOverlay object accessible from COM. + \~french + \brief Cette classe définit un CBorderPanelOverlay accessible depuis COM. + */ + class CBorderPanelOverlay + : public CComAtlObject< BorderPanelOverlay, castor3d::BorderPanelOverlay > + { + public: + COMEX_PROPERTY_GET( Type, eOVERLAY_TYPE, m_internal, &castor3d::BorderPanelOverlay::getType ); + COMEX_PROPERTY( Position, IPosition *, m_internal, &castor3d::BorderPanelOverlay::getPixelPosition, &castor3d::BorderPanelOverlay::setPixelPosition ); + COMEX_PROPERTY( Size, ISize *, m_internal, &castor3d::BorderPanelOverlay::getPixelSize, &castor3d::BorderPanelOverlay::setPixelSize ); + COMEX_PROPERTY( Visible, boolean, m_internal, &castor3d::BorderPanelOverlay::isVisible, &castor3d::BorderPanelOverlay::setVisible ); + + COMEX_PROPERTY( LeftBorderSize, unsigned int, m_internal, &castor3d::BorderPanelOverlay::getPixelLeftBorderSize, &castor3d::BorderPanelOverlay::setPixelLeftBorderSize ); + COMEX_PROPERTY( RightBorderSize, unsigned int, m_internal, &castor3d::BorderPanelOverlay::getPixelRightBorderSize, &castor3d::BorderPanelOverlay::setPixelRightBorderSize ); + COMEX_PROPERTY( TopBorderSize, unsigned int, m_internal, &castor3d::BorderPanelOverlay::getPixelTopBorderSize, &castor3d::BorderPanelOverlay::setPixelTopBorderSize ); + COMEX_PROPERTY( BottomBorderSize, unsigned int, m_internal, &castor3d::BorderPanelOverlay::getPixelBottomBorderSize, &castor3d::BorderPanelOverlay::setPixelBottomBorderSize ); + + STDMETHOD( get_Material )( /* [out, retval] */ IMaterial ** pVal ); + STDMETHOD( put_Material )( /* [in] */ IMaterial * val ); + STDMETHOD( get_BorderMaterial )( /* [out, retval] */ IMaterial ** pVal ); + STDMETHOD( put_BorderMaterial )( /* [in] */ IMaterial * val ); + }; + //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object + //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet + OBJECT_ENTRY_AUTO( __uuidof( BorderPanelOverlay ), CBorderPanelOverlay ); +} + +#endif diff --git a/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp b/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp index 9d9e52d565..6ffb60e809 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp @@ -20,8 +20,6 @@ namespace CastorCom { public: COMEX_PROPERTY_GET( SubmeshCount, unsigned int, getMesh(), &castor3d::Mesh::getSubmeshCount ); - COMEX_PROPERTY_GET( FaceCount, unsigned int, getMesh(), &castor3d::Mesh::getFaceCount ); - COMEX_PROPERTY_GET( VertexCount, unsigned int, getMesh(), &castor3d::Mesh::getVertexCount ); STDMETHOD( GetSubmesh )( /* [in] */ unsigned int val, /* [out, retval] */ ISubmesh ** pVal ); STDMETHOD( CreateSubmesh )( /* [out, retval] */ ISubmesh ** pVal ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComOverlay.hpp b/include/Interop/ComCastor3D/Castor3D/ComOverlay.hpp new file mode 100644 index 0000000000..3f62aa2a3d --- /dev/null +++ b/include/Interop/ComCastor3D/Castor3D/ComOverlay.hpp @@ -0,0 +1,33 @@ +/* See LICENSE file in root folder */ +#ifndef __COMC3D_Overlay_H__ +#define __COMC3D_Overlay_H__ + +#include "ComCastor3D/ComAtlObject.hpp" + +#include + +namespace CastorCom +{ + COM_TYPE_TRAITS_PTR( castor3d, Overlay ); + /*! + \~english + \brief This class defines a COverlay object accessible from COM. + \~french + \brief Cette classe définit un COverlay accessible depuis COM. + */ + class COverlay + : public CComAtlObject< Overlay, castor3d::Overlay > + { + public: + COMEX_PROPERTY_GET( Name, BSTR, m_internal, &castor3d::Overlay::getName ); + COMEX_PROPERTY_GET( PanelOverlay, IPanelOverlay *, m_internal, &castor3d::Overlay::getPanelOverlay ); + COMEX_PROPERTY_GET( BorderPanelOverlay, IBorderPanelOverlay *, m_internal, &castor3d::Overlay::getBorderPanelOverlay ); + COMEX_PROPERTY_GET( TextOverlay, ITextOverlay *, m_internal, &castor3d::Overlay::getTextOverlay ); + COMEX_PROPERTY_GET( GetChildrenCount, unsigned int, m_internal, &castor3d::Overlay::getChildrenCount ); + }; + //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object + //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet + OBJECT_ENTRY_AUTO( __uuidof( Overlay ), COverlay ); +} + +#endif diff --git a/include/Interop/ComCastor3D/Castor3D/ComOverlayCategory.hpp b/include/Interop/ComCastor3D/Castor3D/ComOverlayCategory.hpp new file mode 100644 index 0000000000..a0da8db269 --- /dev/null +++ b/include/Interop/ComCastor3D/Castor3D/ComOverlayCategory.hpp @@ -0,0 +1,38 @@ +/* See LICENSE file in root folder */ +#ifndef __COMC3D_OverlayCategory_H__ +#define __COMC3D_OverlayCategory_H__ + +#include "ComCastor3D/ComAtlObject.hpp" + +#include "ComCastor3D/CastorUtils/ComPosition.hpp" +#include "ComCastor3D/CastorUtils/ComSize.hpp" + +#include + +namespace CastorCom +{ + COM_TYPE_TRAITS_PTR( castor3d, OverlayCategory ); + /*! + \~english + \brief This class defines a COverlayCategory object accessible from COM. + \~french + \brief Cette classe définit un COverlayCategory accessible depuis COM. + */ + class COverlayCategory + : public CComAtlObject< OverlayCategory, castor3d::OverlayCategory > + { + public: + COMEX_PROPERTY_GET( Type, eOVERLAY_TYPE, m_internal, &castor3d::OverlayCategory::getType ); + COMEX_PROPERTY( Position, IPosition *, m_internal, &castor3d::OverlayCategory::getPixelPosition, &castor3d::OverlayCategory::setPixelPosition ); + COMEX_PROPERTY( Size, ISize *, m_internal, &castor3d::OverlayCategory::getPixelSize, &castor3d::OverlayCategory::setPixelSize ); + COMEX_PROPERTY( Visible, boolean, m_internal, &castor3d::OverlayCategory::isVisible, &castor3d::OverlayCategory::setVisible ); + + STDMETHOD( get_Material )( /* [out, retval] */ IMaterial ** pVal ); + STDMETHOD( put_Material )( /* [in] */ IMaterial * val ); + }; + //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object + //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet + OBJECT_ENTRY_AUTO( __uuidof( OverlayCategory ), COverlayCategory ); +} + +#endif diff --git a/include/Interop/ComCastor3D/Castor3D/ComPanelOverlay.hpp b/include/Interop/ComCastor3D/Castor3D/ComPanelOverlay.hpp new file mode 100644 index 0000000000..459569a736 --- /dev/null +++ b/include/Interop/ComCastor3D/Castor3D/ComPanelOverlay.hpp @@ -0,0 +1,41 @@ +/* See LICENSE file in root folder */ +#ifndef __COMC3D_PanelOverlay_H__ +#define __COMC3D_PanelOverlay_H__ + +#include "ComCastor3D/ComAtlObject.hpp" + +#include "ComCastor3D/CastorUtils/ComPosition.hpp" +#include "ComCastor3D/CastorUtils/ComSize.hpp" + +#include + +namespace CastorCom +{ + COM_TYPE_TRAITS_PTR( castor3d, PanelOverlay ); + /*! + \~english + \brief This class defines a CPanelOverlay object accessible from COM. + \~french + \brief Cette classe définit un CPanelOverlay accessible depuis COM. + */ + class CPanelOverlay + : public CComAtlObject< PanelOverlay, castor3d::PanelOverlay > + { + public: + static bool isVisible( castor3d::PanelOverlay const * ov ); + static void setVisible( castor3d::PanelOverlay * ov, bool v ); + + COMEX_PROPERTY_GET( Type, eOVERLAY_TYPE, m_internal, &castor3d::PanelOverlay::getType ); + COMEX_PROPERTY( Position, IPosition *, m_internal, &castor3d::PanelOverlay::getPixelPosition, &castor3d::PanelOverlay::setPixelPosition ); + COMEX_PROPERTY( Size, ISize *, m_internal, &castor3d::PanelOverlay::getPixelSize, &castor3d::PanelOverlay::setPixelSize ); + COMEX_PROPERTY( Visible, boolean, m_internal, isVisible, setVisible ); + + STDMETHOD( get_Material )( /* [out, retval] */ IMaterial ** pVal ); + STDMETHOD( put_Material )( /* [in] */ IMaterial * val ); + }; + //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object + //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet + OBJECT_ENTRY_AUTO( __uuidof( PanelOverlay ), CPanelOverlay ); +} + +#endif diff --git a/include/Interop/ComCastor3D/Castor3D/ComPass.hpp b/include/Interop/ComCastor3D/Castor3D/ComPass.hpp index 2a961911b3..e2b10f2e23 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComPass.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComPass.hpp @@ -67,7 +67,6 @@ namespace CastorCom static float getShininess( castor3d::Pass const * pass ); static void setShininess( castor3d::Pass * pass, float v ); - COMEX_PROPERTY_GET( Type, UINT, m_internal, &castor3d::Pass::getTypeID ); COMEX_PROPERTY_GET( TextureUnitCount, uint32_t, m_internal, &castor3d::Pass::getTextureUnitsCount ); STDMETHOD( CreateTextureUnit )( /* [out, retval] */ ITextureUnit ** pVal ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComPhongPass.hpp b/include/Interop/ComCastor3D/Castor3D/ComPhongPass.hpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/include/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.hpp b/include/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.hpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/include/Interop/ComCastor3D/Castor3D/ComTextOverlay.hpp b/include/Interop/ComCastor3D/Castor3D/ComTextOverlay.hpp new file mode 100644 index 0000000000..33eb525a91 --- /dev/null +++ b/include/Interop/ComCastor3D/Castor3D/ComTextOverlay.hpp @@ -0,0 +1,41 @@ +/* See LICENSE file in root folder */ +#ifndef __COMC3D_TextOverlay_H__ +#define __COMC3D_TextOverlay_H__ + +#include "ComCastor3D/ComAtlObject.hpp" + +#include "ComCastor3D/Castor3D/ComScene.hpp" +#include "ComCastor3D/CastorUtils/ComPosition.hpp" +#include "ComCastor3D/CastorUtils/ComSize.hpp" + +#include + +namespace CastorCom +{ + COM_TYPE_TRAITS_PTR( castor3d, TextOverlay ); + /*! + \~english + \brief This class defines a CTextOverlay object accessible from COM. + \~french + \brief Cette classe définit un CTextOverlay accessible depuis COM. + */ + class CTextOverlay + : public CComAtlObject< TextOverlay, castor3d::TextOverlay > + { + public: + COMEX_PROPERTY_GET( Type, eOVERLAY_TYPE, m_internal, &castor3d::TextOverlay::getType ); + COMEX_PROPERTY( Position, IPosition *, m_internal, &castor3d::TextOverlay::getPixelPosition, &castor3d::TextOverlay::setPixelPosition ); + COMEX_PROPERTY( Size, ISize *, m_internal, &castor3d::TextOverlay::getPixelSize, &castor3d::TextOverlay::setPixelSize ); + COMEX_PROPERTY( Visible, boolean, m_internal, &castor3d::TextOverlay::isVisible, &castor3d::TextOverlay::setVisible ); + COMEX_PROPERTY( Font, BSTR, m_internal, &castor3d::TextOverlay::getFontName, &castor3d::TextOverlay::setFont ); + COMEX_PROPERTY( Caption, BSTR, m_internal, &castor3d::TextOverlay::getCaption, &castor3d::TextOverlay::setCaption ); + + STDMETHOD( get_Material )( /* [out, retval] */ IMaterial ** pVal ); + STDMETHOD( put_Material )( /* [in] */ IMaterial * val ); + }; + //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object + //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet + OBJECT_ENTRY_AUTO( __uuidof( TextOverlay ), CTextOverlay ); +} + +#endif diff --git a/include/Interop/ComCastor3D/ComParameterCast.hpp b/include/Interop/ComCastor3D/ComParameterCast.hpp index 9329b45522..a3a760d044 100644 --- a/include/Interop/ComCastor3D/ComParameterCast.hpp +++ b/include/Interop/ComCastor3D/ComParameterCast.hpp @@ -29,6 +29,7 @@ namespace CastorCom::details || areCompatibleV< SrcT, DstT, eLIGHT_TYPE, castor3d::LightType > || areCompatibleV< SrcT, DstT, eVIEWPORT_TYPE, castor3d::ViewportType > || areCompatibleV< SrcT, DstT, eKEYBOARD_KEY, castor3d::KeyboardKey > + || areCompatibleV< SrcT, DstT, eOVERLAY_TYPE, castor3d::OverlayType > || areCompatibleV< SrcT, DstT, eBORDER_COLOUR, VkBorderColor > || areCompatibleV< SrcT, DstT, eFILTER_MODE, VkFilter > || areCompatibleV< SrcT, DstT, eIMAGE_TYPE, VkImageType > @@ -85,6 +86,17 @@ namespace CastorCom::details return fromBstr( src ); } + template<> + inline BSTR parameterCast< BSTR, castor::U32String >( castor::U32String const & src ) + { + return toBstr( castor::string::stringCast< castor::xchar >( src ) ); + } + template<> + inline castor::U32String parameterCast< castor::U32String, BSTR >( BSTR const & src ) + { + return castor::string::toU32String( fromBstr( src ) ); + } + template<> inline BSTR parameterCast< BSTR, castor::Path >( castor::Path const & src ) { diff --git a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp index 938625a8dc..a57c651176 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp @@ -263,13 +263,18 @@ namespace castor3d void UserInputListener::onCursorAction( MouseCursor cursor )const { - m_onCursorAction( cursor ); + if ( m_onCursorAction ) + { + m_onCursorAction( cursor ); + } } castor::U32String UserInputListener::onClipboardTextAction( bool set , castor::U32String text )const { - return m_onClipboardTextAction( set, std::move( text ) ); + return m_onClipboardTextAction + ? m_onClipboardTextAction( set, std::move( text ) ) + : castor::U32String{}; } void UserInputListener::enableHandler( castor::String const & handler ) diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index c1f9df6e26..b2f1c9282c 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -150,7 +150,7 @@ namespace castor3d { m_borders = doUpdateBorderSize( value ); updateClientRect(); - doGetBackground().setAbsoluteBorderSize( m_borders ); + doGetBackground().setPixelBorderSize( m_borders ); doSetBorderSize( m_borders ); onChanged( *this ); } @@ -301,7 +301,7 @@ namespace castor3d setBackgroundMaterial( m_style->getBackgroundMaterial() ); setBackgroundBorderMaterial( m_style->getForegroundMaterial() ); - doGetBackground().setAbsoluteBorderSize( m_borders ); + doGetBackground().setPixelBorderSize( m_borders ); doCreate(); } diff --git a/source/Core/Castor3D/Overlay/TextOverlay.cpp b/source/Core/Castor3D/Overlay/TextOverlay.cpp index 0e43118e59..f8903ec279 100644 --- a/source/Core/Castor3D/Overlay/TextOverlay.cpp +++ b/source/Core/Castor3D/Overlay/TextOverlay.cpp @@ -367,7 +367,7 @@ namespace castor3d return makeShaderState( device, comp ); } - void TextOverlay::setFont( castor::String const & name ) + void TextOverlay::setFont( castor::String name ) { // Récupération / Création de la police Engine * engine = m_overlay->getEngine(); diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 54a94fd12f..6e63bfd4b3 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -5077,7 +5077,7 @@ namespace castor3d { castor::Point4ui size; params[0]->get( size ); - overlay->getBorderPanelOverlay()->setAbsoluteBorderSize( size ); + overlay->getBorderPanelOverlay()->setPixelBorderSize( size ); } else { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp index 6946c6a78c..a8cb8d4d4e 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp @@ -169,8 +169,11 @@ namespace castor3d for ( auto & buffer : specifics ) { - buffer.second.second->setCount( uint32_t( m_passes.size() ) ); - buffer.second.second->upload( commandBuffer ); + if ( auto & buf = buffer.second.second ) + { + buf->setCount( uint32_t( m_passes.size() ) ); + buf->upload( commandBuffer ); + } } } } diff --git a/source/Interop/ComCastor3D/CMakeLists.txt b/source/Interop/ComCastor3D/CMakeLists.txt index 5ecd87862d..d25c169378 100644 --- a/source/Interop/ComCastor3D/CMakeLists.txt +++ b/source/Interop/ComCastor3D/CMakeLists.txt @@ -45,6 +45,7 @@ if ( MSVC ) source_group( "IDL Files" FILES ${${PROJECT_NAME}_IDL_FILES} ) set( ${PROJECT_NAME}_FOLDER_SRC_FILES + ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComBorderPanelOverlay.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComCamera.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComColourBackground.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComDirectionalLight.cpp @@ -57,10 +58,11 @@ if ( MSVC ) ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComLineMapping.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComMaterial.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComMesh.cpp - ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComMetallicRoughnessPbrPass.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComMovableObject.cpp + ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComOverlay.cpp + ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComOverlayCategory.cpp + ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComPanelOverlay.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComPass.cpp - ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComPhongPass.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComPointLight.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComRenderTarget.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComRenderWindow.cpp @@ -69,14 +71,15 @@ if ( MSVC ) ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSceneBackground.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSceneNode.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSkyboxBackground.cpp - ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSpecularGlossinessPbrPass.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSpotLight.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComSubmesh.cpp + ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComTextOverlay.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComTextureLayout.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComTextureUnit.cpp ${CASTOR_SOURCE_DIR}/source/Interop/${PROJECT_NAME}/Castor3D/ComTriFaceMapping.cpp ) set( ${PROJECT_NAME}_FOLDER_HDR_FILES + ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComBorderPanelOverlay.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComCamera.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComColourBackground.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComDirectionalLight.hpp @@ -89,10 +92,11 @@ if ( MSVC ) ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComLineMapping.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComMaterial.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComMesh.hpp - ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComMetallicRoughnessPbrPass.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComMovableObject.hpp + ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComOverlay.hpp + ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComOverlayCategory.hpp + ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComPanelOverlay.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComPass.hpp - ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComPhongPass.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComPointLight.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComRenderTarget.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComRenderWindow.hpp @@ -101,9 +105,9 @@ if ( MSVC ) ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSceneBackground.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSceneNode.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSkyboxBackground.hpp - ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSpecularGlossinessPbrPass.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSpotLight.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComSubmesh.hpp + ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComTextOverlay.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComTextureLayout.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComTextureUnit.hpp ${CASTOR_SOURCE_DIR}/include/Interop/${PROJECT_NAME}/Castor3D/ComTriFaceMapping.hpp diff --git a/source/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.cpp b/source/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.cpp new file mode 100644 index 0000000000..f2df6aae38 --- /dev/null +++ b/source/Interop/ComCastor3D/Castor3D/ComBorderPanelOverlay.cpp @@ -0,0 +1,113 @@ +#include "ComCastor3D/Castor3D/ComBorderPanelOverlay.hpp" + +#include "ComCastor3D/Castor3D/ComMaterial.hpp" + +namespace CastorCom +{ + namespace bdrovl + { + static const tstring ERROR_UNINITIALISED = _T( "The border panel must be initialised" ); + } + + STDMETHODIMP CBorderPanelOverlay::get_Material( /* [out, retval] */ IMaterial ** pVal )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + if ( pVal ) + { + hr = CMaterial::CreateInstance( pVal ); + + if ( hr == S_OK ) + { + static_cast< CMaterial * >( *pVal )->setInternal( m_internal->getMaterial() ); + } + } + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IPanelOverlay + , _T( "GetMaterial" ) + , bdrovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP CBorderPanelOverlay::put_Material( /* [in] */ IMaterial * val )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + m_internal->setMaterial( static_cast< CMaterial * >( val )->getInternal() ); + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IPanelOverlay + , _T( "SetMaterial" ) + , bdrovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP CBorderPanelOverlay::get_BorderMaterial( /* [out, retval] */ IMaterial ** pVal )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + if ( pVal ) + { + hr = CMaterial::CreateInstance( pVal ); + + if ( hr == S_OK ) + { + static_cast< CMaterial * >( *pVal )->setInternal( m_internal->getBorderMaterial() ); + } + } + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IBorderPanelOverlay + , _T( "GetBorderMaterial" ) + , bdrovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP CBorderPanelOverlay::put_BorderMaterial( /* [in] */ IMaterial * val )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + m_internal->setBorderMaterial( static_cast< CMaterial * >( val )->getInternal() ); + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IBorderPanelOverlay + , _T( "SetBorderMaterial" ) + , bdrovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } +} diff --git a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp index e9ac274306..4433fa212c 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp @@ -79,7 +79,8 @@ namespace CastorCom { m_internal = new castor3d::Engine{ fromBstr( appName ) , castor3d::Version{ ComCastor3D_VERSION_MAJOR, ComCastor3D_VERSION_MINOR, ComCastor3D_VERSION_BUILD } - , enableValidation == TRUE }; + , enableValidation == TRUE + , true }; hr = S_OK; } else diff --git a/source/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.cpp b/source/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.cpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/include/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.hpp b/source/Interop/ComCastor3D/Castor3D/ComOverlay.cpp similarity index 100% rename from include/Interop/ComCastor3D/Castor3D/ComMetallicRoughnessPbrPass.hpp rename to source/Interop/ComCastor3D/Castor3D/ComOverlay.cpp diff --git a/source/Interop/ComCastor3D/Castor3D/ComOverlayCategory.cpp b/source/Interop/ComCastor3D/Castor3D/ComOverlayCategory.cpp new file mode 100644 index 0000000000..ea0dd76a75 --- /dev/null +++ b/source/Interop/ComCastor3D/Castor3D/ComOverlayCategory.cpp @@ -0,0 +1,62 @@ +#include "ComCastor3D/Castor3D/ComOverlayCategory.hpp" + +#include "ComCastor3D/Castor3D/ComMaterial.hpp" + +namespace CastorCom +{ + namespace ovlcat + { + static const tstring ERROR_UNINITIALISED = _T( "The category must be initialised" ); + } + + STDMETHODIMP COverlayCategory::get_Material( /* [out, retval] */ IMaterial ** pVal )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + if ( pVal ) + { + hr = CMaterial::CreateInstance( pVal ); + + if ( hr == S_OK ) + { + static_cast< CMaterial * >( *pVal )->setInternal( m_internal->getMaterial() ); + } + } + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IOverlayCategory + , _T( "GetMaterial" ) + , ovlcat::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP COverlayCategory::put_Material( /* [in] */ IMaterial * val )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + m_internal->setMaterial( static_cast< CMaterial * >( val )->getInternal() ); + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IOverlayCategory + , _T( "SetMaterial" ) + , ovlcat::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } +} diff --git a/source/Interop/ComCastor3D/Castor3D/ComPanelOverlay.cpp b/source/Interop/ComCastor3D/Castor3D/ComPanelOverlay.cpp new file mode 100644 index 0000000000..421f44a012 --- /dev/null +++ b/source/Interop/ComCastor3D/Castor3D/ComPanelOverlay.cpp @@ -0,0 +1,72 @@ +#include "ComCastor3D/Castor3D/ComPanelOverlay.hpp" + +#include "ComCastor3D/Castor3D/ComMaterial.hpp" + +namespace CastorCom +{ + namespace pnlovl + { + static const tstring ERROR_UNINITIALISED = _T( "The panel must be initialised" ); + } + + bool CPanelOverlay::isVisible( castor3d::PanelOverlay const * ov ) + { + return ov->isVisible(); + } + + void CPanelOverlay::setVisible( castor3d::PanelOverlay * ov, bool v ) + { + ov->setVisible( v ); + } + + STDMETHODIMP CPanelOverlay::get_Material( /* [out, retval] */ IMaterial ** pVal )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + if ( pVal ) + { + hr = CMaterial::CreateInstance( pVal ); + + if ( hr == S_OK ) + { + static_cast< CMaterial * >( *pVal )->setInternal( m_internal->getMaterial() ); + } + } + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IPanelOverlay + , _T( "GetMaterial" ) + , pnlovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP CPanelOverlay::put_Material( /* [in] */ IMaterial * val )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + m_internal->setMaterial( static_cast< CMaterial * >( val )->getInternal() ); + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_IPanelOverlay + , _T( "SetMaterial" ) + , pnlovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } +} diff --git a/source/Interop/ComCastor3D/Castor3D/ComPhongPass.cpp b/source/Interop/ComCastor3D/Castor3D/ComPhongPass.cpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp b/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp index 60af5bbc59..d56e7403e9 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp @@ -86,7 +86,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseMove( castor::Position( int32_t( m_oldX ), int32_t( m_oldY ) ) ); + *pVal = inputListener->fireMouseMove( castor::Position( int32_t( m_oldX ), int32_t( m_oldY ) ), false, false, false ); } } catch ( castor::Exception & ) @@ -116,7 +116,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eLeft ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eLeft, false, false, false ); } } catch ( castor::Exception & ) @@ -146,7 +146,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eLeft ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eLeft, false, false, false ); } } catch ( castor::Exception & ) @@ -176,7 +176,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eMiddle ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eMiddle, false, false, false ); } } catch ( castor::Exception & ) @@ -206,7 +206,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eMiddle ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eMiddle, false, false, false ); } } catch ( castor::Exception & ) @@ -236,7 +236,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eRight ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eRight, false, false, false ); } } catch ( castor::Exception & ) @@ -266,7 +266,7 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eRight ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eRight, false, false, false ); } } catch ( castor::Exception & ) diff --git a/source/Interop/ComCastor3D/Castor3D/ComSceneNode.cpp b/source/Interop/ComCastor3D/Castor3D/ComSceneNode.cpp index bafbfe7cc9..7cbdf16c4d 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComSceneNode.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComSceneNode.cpp @@ -1,4 +1,5 @@ #include "ComCastor3D/Castor3D/ComSceneNode.hpp" + #include "ComCastor3D/Castor3D/ComMovableObject.hpp" #include "ComCastor3D/CastorUtils/ComAngle.hpp" #include "ComCastor3D/CastorUtils/ComQuaternion.hpp" @@ -71,7 +72,7 @@ namespace CastorCom if ( m_internal ) { - m_internal->detach(); + m_internal->detach( false ); hr = S_OK; } else diff --git a/source/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.cpp b/source/Interop/ComCastor3D/Castor3D/ComSpecularGlossinessPbrPass.cpp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/source/Interop/ComCastor3D/Castor3D/ComTextOverlay.cpp b/source/Interop/ComCastor3D/Castor3D/ComTextOverlay.cpp new file mode 100644 index 0000000000..82131d8230 --- /dev/null +++ b/source/Interop/ComCastor3D/Castor3D/ComTextOverlay.cpp @@ -0,0 +1,62 @@ +#include "ComCastor3D/Castor3D/ComTextOverlay.hpp" + +#include "ComCastor3D/Castor3D/ComMaterial.hpp" + +namespace CastorCom +{ + namespace txtovl + { + static const tstring ERROR_UNINITIALISED = _T( "The text must be initialised" ); + } + + STDMETHODIMP CTextOverlay::get_Material( /* [out, retval] */ IMaterial ** pVal )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + if ( pVal ) + { + hr = CMaterial::CreateInstance( pVal ); + + if ( hr == S_OK ) + { + static_cast< CMaterial * >( *pVal )->setInternal( m_internal->getMaterial() ); + } + } + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_ITextOverlay + , _T( "GetMaterial" ) + , txtovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } + + STDMETHODIMP CTextOverlay::put_Material( /* [in] */ IMaterial * val )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + m_internal->setMaterial( static_cast< CMaterial * >( val )->getInternal() ); + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_POINTER + , IID_ITextOverlay + , _T( "SetMaterial" ) + , txtovl::ERROR_UNINITIALISED.c_str() + , 0 + , nullptr ); + } + + return hr; + } +} diff --git a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp index 975379e6f4..26ade25b60 100644 --- a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp @@ -96,7 +96,7 @@ namespace GuiCommon , [this]( wxVariant const & var ) { auto & ov = static_cast< castor3d::BorderPanelOverlay & >( *getOverlay() ); - ov.setAbsoluteBorderSize( Point4uiRefFromVariant( var ) ); + ov.setPixelBorderSize( Point4uiRefFromVariant( var ) ); } ); addMaterial( grid, engine, PROPERTY_OVERLAY_BORDER_MATERIAL, m_materials, overlay->getBorderMaterial() , [&overlay]( castor3d::MaterialRPtr material ) { overlay->setBorderMaterial( material ); } ); From 2cc4f4c2f43b5166b64c0b5c04d3a221cb3b6946 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 2 Apr 2023 00:38:11 +0200 Subject: [PATCH 02/35] COM: Added IGuiCallbacks to handle clipboard and mouse cursor events. --- demos/CastorViewerSharp/MainWindow.xaml | 7 +- demos/CastorViewerSharp/MainWindow.xaml.cs | 1070 +++++++++-------- include/Interop/ComCastor3D/Castor3D.idl | 45 +- .../ComCastor3D/Castor3D/ComEngine.hpp | 3 +- .../ComCastor3D/Castor3D/ComLineMapping.hpp | 2 +- .../ComCastor3D/Castor3D/ComRenderWindow.hpp | 14 +- .../Interop/ComCastor3D/Castor3D/ComScene.hpp | 2 +- .../Render/Opaque/DeferredRendering.cpp | 18 +- source/Interop/ComCastor3D/CMakeLists.txt | 75 +- .../ComCastor3D/Castor3D/ComEngine.cpp | 48 + .../ComCastor3D/Castor3D/ComRenderWindow.cpp | 49 +- 11 files changed, 782 insertions(+), 551 deletions(-) diff --git a/demos/CastorViewerSharp/MainWindow.xaml b/demos/CastorViewerSharp/MainWindow.xaml index 361cd8f0df..6f551cf9be 100644 --- a/demos/CastorViewerSharp/MainWindow.xaml +++ b/demos/CastorViewerSharp/MainWindow.xaml @@ -4,11 +4,6 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="CastorViewerSharp.MainWindow" Title="CastorViewer#" Height="600" Width="800" SizeToContent="WidthAndHeight" MinWidth="800" MinHeight="600" WindowStartupLocation="CenterScreen" SizeChanged="OnSizeChanged" Loaded="OnLoaded" KeyUp="OnKeyUp" KeyDown="OnKeyDown"> - - - - - - + diff --git a/demos/CastorViewerSharp/MainWindow.xaml.cs b/demos/CastorViewerSharp/MainWindow.xaml.cs index 00f919bbf3..fab02f38eb 100644 --- a/demos/CastorViewerSharp/MainWindow.xaml.cs +++ b/demos/CastorViewerSharp/MainWindow.xaml.cs @@ -25,476 +25,608 @@ using Castor3D; using System.Windows.Threading; using System.Windows.Input; +using System.Windows; namespace CastorViewerSharp { - /// - /// Logique d'interaction pour MainWindow.xaml - /// - public partial class MainWindow - : System.Windows.Window - { - /// - /// Default constructor - /// - public MainWindow() - { - InitializeComponent(); - } - - #region Private methods - - /// - /// Loads the plug-ins alongside the executable - /// - private void DoLoadPlugins() - { - string path = m_engine.PluginsDirectory; - string[] files = Directory.GetFiles(path, "*.dll"); - - foreach (string file in files) - { - m_engine.LoadPlugin(file); - } - - m_engine.LoadRenderer("vk"); - m_engine.Initialise(1000, 1); - m_engine.StartRendering(); - } - - /// - /// Opens a file selector dialog, to open a scene file. - /// - /// The scene file name - string DoSelectSceneFile() - { - Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); - dlg.FileName = ""; - dlg.DefaultExt = "*.cscn;*.cbsn;*.zip"; - dlg.Filter = "All supported files|*.cscn;*.cbsn;*.zip|Castor3D Text Scene files|*.cscn|Castor3D Binary Scene files|*.cscn|Castor3D zip files|*.zip"; - dlg.Title = "Select a scene file to load"; - bool? result = dlg.ShowDialog(); - string l_return; - - if (result == true) - { - l_return = dlg.FileName; - } - else - { - l_return = ""; - } - - return l_return; - } - - /// - /// Loads the given scene file name - /// - /// The scene file name - private void DoLoadScene(string filename) - { - if (filename.Length > 0) - { - if (m_scene != null) - { - m_engine.PauseRendering(); - DoUnloadScene(); - m_engine.ResumeRendering(); - } - else - { - m_engine.StartRendering(); - } - - m_renderTarget = m_engine.LoadScene(filename); - - if (m_renderTarget != null) - { - m_renderWindow.Initialise(m_renderTarget); - m_scene = m_renderTarget.Scene; - m_nodeState = new NodeState(m_renderTarget.camera.Node); - - m_motionTimer.Start(); - } - } - } - - /// - /// Transforms given window coordinates to camera coordinates - /// - /// The window coordinates - /// The camera coordinates - private Vector2D DoTransform(System.Windows.Point point) - { - Vector2D result = new Vector2D(); - var window = GetWindow(RenderPanel); - double ww = window.Width; - double wh = window.Height; - int cw = (int)m_renderTarget.camera.Width; - int ch = (int)m_renderTarget.camera.Height; - result.Set((float)((point.X * cw) / ww) - , (float)((point.Y * ch) / wh)); - return result; - } - - /// - /// Transforms given window coordinates to camera coordinates - /// - /// The window coordinates - /// The camera coordinates - private void DoUnloadScene() - { - m_motionTimer.Stop(); - m_renderWindow.Cleanup(); - var name = m_scene.Name; - m_renderTarget = null; - m_scene = null; - m_nodeState = null; - m_engine.RemoveScene(name); - } - - private eKEYBOARD_KEY DoConvertKey(Key key) - { - return (eKEYBOARD_KEY)key; - - } - - #endregion - - - #region Overrides - - /// - /// Initializes the engine, loads the plug-ins - /// - /// - protected override void OnInitialized(EventArgs e) - { - base.OnInitialized(e); - base.Show(); - m_engine = new engine(); - m_engine.Create("CastorViewerSharp", 1); - DoLoadPlugins(); - - var window = GetWindow(RenderPanel); - window.Show(); - Size size = new Size(); - size.Set((uint)window.Width, (uint)window.Height); - var handle = new WindowInteropHelper(window).Handle; - m_renderWindow = m_engine.CreateRenderWindow("MainWindow", size, handle); - - m_motionTimer = new DispatcherTimer(); - m_motionTimer.Tick += new EventHandler(OnMotionTimer); - m_motionTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_leftTimer = new DispatcherTimer(); - m_leftTimer.Tick += new EventHandler(OnLeftTimer); - m_leftTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_rightTimer = new DispatcherTimer(); - m_rightTimer.Tick += new EventHandler(OnRightTimer); - m_rightTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_forwardTimer = new DispatcherTimer(); - m_forwardTimer.Tick += new EventHandler(OnForwardTimer); - m_forwardTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_backTimer = new DispatcherTimer(); - m_backTimer.Tick += new EventHandler(OnBackTimer); - m_backTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_upTimer = new DispatcherTimer(); - m_upTimer.Tick += new EventHandler(OnUpTimer); - m_upTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - m_downTimer = new DispatcherTimer(); - m_downTimer.Tick += new EventHandler(OnDownTimer); - m_downTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); - - DoLoadScene(DoSelectSceneFile()); - } - - /// - /// Cleans up the engine - /// - /// - protected override void OnClosed(EventArgs e) - { - m_engine.EndRendering(); - DoUnloadScene(); - - m_motionTimer = null; - m_engine.RemoveWindow(m_renderWindow); - m_renderWindow = null; - m_engine.Cleanup(); - m_engine.Destroy(); - m_engine = null; - base.OnClosed(e); - } - - #endregion - - #region Events - - /// - /// - /// - /// - private void OnKeyUp(object sender, KeyEventArgs e) - { - if (m_renderTarget != null) - { - var key = DoConvertKey(e.Key); - - if (m_renderWindow.OnKeyboardKeyUp(key - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) ? 1 : 0) - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftAlt) || e.KeyboardDevice.IsKeyDown(Key.RightAlt)) ? 1 : 0) - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift)) ? 1 : 0)) == 0 - && m_nodeState != null) - { - switch (e.Key) - { - case Key.Left: - case Key.Q: - m_leftTimer.Stop(); - break; - case Key.Right: - case Key.D: - m_rightTimer.Stop(); - break; - case Key.Up: - case Key.Z: - m_forwardTimer.Stop(); - break; - case Key.Down: - case Key.S: - m_backTimer.Stop(); - break; - case Key.PageUp: - case Key.E: - m_upTimer.Stop(); - break; - case Key.PageDown: - case Key.A: - m_downTimer.Stop(); - break; - } - } - } - } - - /// - /// - /// - /// - private void OnKeyDown(object sender, KeyEventArgs e) - { - if (m_renderTarget != null) - { - var key = DoConvertKey(e.Key); - - if (m_renderWindow.OnKeyboardKeyDown(key - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) ? 1 : 0) - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftAlt) || e.KeyboardDevice.IsKeyDown(Key.RightAlt)) ? 1 : 0) - , (sbyte)((e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift)) ? 1 : 0)) == 0 - && m_nodeState != null) - { - switch (e.Key) - { - case Key.Left: - case Key.Q: - m_leftTimer.Start(); - break; - case Key.Right: - case Key.D: - m_rightTimer.Start(); - break; - case Key.Up: - case Key.Z: - m_forwardTimer.Start(); - break; - case Key.Down: - case Key.S: - m_backTimer.Start(); - break; - case Key.PageUp: - case Key.E: - m_upTimer.Start(); - break; - case Key.PageDown: - case Key.A: - m_downTimer.Start(); - break; - } - } - } - } - - /// - /// Forwards the mouse position to the render window - /// - /// - /// - private void OnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) - { - if (m_renderTarget != null) - { - var newPosition = DoTransform(e.GetPosition(RenderPanel)); - var pos = new Position { }; - pos.Set((int)newPosition.X, (int)newPosition.Y); - - if (m_renderWindow.OnMouseMove(pos) == 0 - && m_nodeState != null - && m_oldPosition != null) - { - var mult = 8.0f; - var deltaX = (m_oldPosition.X - newPosition.X) / mult; - var deltaY = (m_oldPosition.Y - newPosition.Y) / mult; - - if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed) - { - m_nodeState.addAngularVelocity(-deltaY, deltaX); - } - else if (e.RightButton == System.Windows.Input.MouseButtonState.Pressed) - { - m_nodeState.addScalarVelocity(deltaX, -deltaY, 0.0f); - } - } - - m_oldPosition = newPosition; - } - } - - private void OnLeftTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(speed, 0.0f, 0.0f); - } - } - - private void OnRightTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(-speed, 0.0f, 0.0f); - } - } - - private void OnForwardTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(0.0f, 0.0f, speed); - } - } - - private void OnBackTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(0.0f, 0.0f, -speed); - } - } - - private void OnUpTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(0.0f, speed, 0.0f); - } - } - - private void OnDownTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - var speed = 1.0f; - m_nodeState.addScalarVelocity(0.0f, -speed, 0.0f); - } - } - - private void OnMotionTimer(object sender, EventArgs e) - { - if (m_nodeState != null) - { - m_nodeState.update(); - } - } - - /// - /// Forwards the new size to the render window - /// - /// - /// - private void OnSizeChanged(object sender, System.Windows.SizeChangedEventArgs e) - { - if (m_renderTarget != null) - { - Size size = new Size(); - size.Width = (uint)e.NewSize.Width; - size.Height = (uint)e.NewSize.Height; - m_renderWindow.Resize(size); - } - } - - /// - /// Opens a files selector to select a file name, and to load it. - /// - /// - /// - private void OnLoaded(object sender, System.Windows.RoutedEventArgs e) - { - } - - #endregion - - #region Members - - /// - /// The Castor3D engine - /// - private engine m_engine; - /// - /// The render window - /// - private RenderTarget m_renderTarget; - /// - /// The render window - /// - private RenderWindow m_renderWindow; - /// - /// The main scene - /// - private Scene m_scene; - /// - /// The scene node controlled by the mouse - /// - private NodeState m_nodeState; - /// - /// The previous mouse position - /// - private Vector2D m_oldPosition; - /// - /// The motion timer - /// - private DispatcherTimer m_motionTimer; - /// - /// The keyboard timers - /// - private DispatcherTimer m_leftTimer; - private DispatcherTimer m_rightTimer; - private DispatcherTimer m_forwardTimer; - private DispatcherTimer m_backTimer; - private DispatcherTimer m_upTimer; - private DispatcherTimer m_downTimer; - - #endregion - } + /// + /// Logique d'interaction pour MainWindow.xaml + public partial class MainWindow + : System.Windows.Window + , Castor3D.IGuiCallbacks + { + /// + /// Default constructor + /// + public MainWindow() + { + InitializeComponent(); + } + + #region Private methods + + /// + /// Loads the plug-ins alongside the executable + /// + private void DoLoadPlugins() + { + string path = m_engine.PluginsDirectory; + string[] files = Directory.GetFiles(path, "*.dll"); + + foreach (string file in files) + { + m_engine.LoadPlugin(file); + } + + m_engine.LoadRenderer("vk"); + m_engine.Initialise(1000, 1); + m_engine.StartRendering(); + } + + /// + /// Opens a file selector dialog, to open a scene file. + /// + /// The scene file name + string DoSelectSceneFile() + { + Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); + dlg.FileName = ""; + dlg.DefaultExt = "*.cscn;*.cbsn;*.zip"; + dlg.Filter = "All supported files|*.cscn;*.cbsn;*.zip|Castor3D Text Scene files|*.cscn|Castor3D Binary Scene files|*.cscn|Castor3D zip files|*.zip"; + dlg.Title = "Select a scene file to load"; + bool? result = dlg.ShowDialog(); + string l_return; + + if (result == true) + { + l_return = dlg.FileName; + } + else + { + l_return = ""; + } + + return l_return; + } + + /// + /// Loads the given scene file name + /// + /// The scene file name + private void DoLoadScene(string filename) + { + if (filename.Length > 0) + { + if (m_scene != null) + { + m_engine.PauseRendering(); + DoUnloadScene(); + m_engine.ResumeRendering(); + } + else + { + m_engine.StartRendering(); + } + + m_renderTarget = m_engine.LoadScene(filename); + + if (m_renderTarget != null) + { + m_renderWindow.Initialise(m_renderTarget); + m_scene = m_renderTarget.Scene; + m_nodeState = new NodeState(m_renderTarget.camera.Node); + Castor3D.Size size = new Castor3D.Size(); + size.Width = (uint)Width; + size.Height = (uint)Height; + m_renderWindow.Resize(size); + + m_motionTimer.Start(); + } + } + } + + /// + /// Transforms given window coordinates to camera coordinates + /// + /// The window coordinates + /// The camera coordinates + private Vector2D DoTransform(System.Windows.Point point) + { + Vector2D result = new Vector2D(); + var window = GetWindow(RenderPanel); + double ww = window.Width; + double wh = window.Height; + int cw = (int)m_renderTarget.camera.Width; + int ch = (int)m_renderTarget.camera.Height; + result.Set((float)((point.X * cw) / ww) + , (float)((point.Y * ch) / wh)); + return result; + } + + /// + /// Transforms given window coordinates to camera coordinates + /// + /// The window coordinates + /// The camera coordinates + private void DoUnloadScene() + { + m_motionTimer.Stop(); + m_renderWindow.Cleanup(); + var name = m_scene.Name; + m_renderTarget = null; + m_scene = null; + m_nodeState = null; + m_engine.RemoveScene(name); + } + + private eKEYBOARD_KEY DoConvertKey(Key key) + { + return (eKEYBOARD_KEY)key; + + } + + #endregion + + #region Overrides + + string IGuiCallbacks.OnGetClipBoardText() + { + return Clipboard.GetText(); + } + + void IGuiCallbacks.OnSetClipBoardText(string text) + { + Clipboard.SetText(text); + } + + void IGuiCallbacks.OnCursorChange(eMOUSE_CURSOR cursor) + { + switch (cursor) + { + case eMOUSE_CURSOR.eMOUSE_CURSOR_ARROW: + Cursor = Cursors.Arrow; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_HAND: + Cursor = Cursors.Hand; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_TEXT: + Cursor = Cursors.IBeam; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_SIZE_WE: + Cursor = Cursors.SizeWE; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_SIZE_NS: + Cursor = Cursors.SizeNS; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_SIZE_NWSE: + Cursor = Cursors.SizeNWSE; + break; + case eMOUSE_CURSOR.eMOUSE_CURSOR_SIZE_NESW: + Cursor = Cursors.SizeNESW; + break; + default: + Cursor = Cursors.Arrow; + break; + } + } + + /// + /// Initializes the engine, loads the plug-ins + /// + /// + protected override void OnInitialized(EventArgs e) + { + base.OnInitialized(e); + base.Show(); + m_engine = new engine(); + m_engine.Create("CastorViewerSharp", 1); + + DoLoadPlugins(); + + var window = GetWindow(RenderPanel); + window.Show(); + Castor3D.Size size = new Castor3D.Size(); + size.Set((uint)window.Width, (uint)window.Height); + var handle = new WindowInteropHelper(window).Handle; + m_renderWindow = m_engine.CreateRenderWindow("MainWindow", size, handle); + m_engine.RegisterGuiCallbacks(this); + + m_motionTimer = new DispatcherTimer(); + m_motionTimer.Tick += new EventHandler(OnMotionTimer); + m_motionTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_leftTimer = new DispatcherTimer(); + m_leftTimer.Tick += new EventHandler(OnLeftTimer); + m_leftTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_rightTimer = new DispatcherTimer(); + m_rightTimer.Tick += new EventHandler(OnRightTimer); + m_rightTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_forwardTimer = new DispatcherTimer(); + m_forwardTimer.Tick += new EventHandler(OnForwardTimer); + m_forwardTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_backTimer = new DispatcherTimer(); + m_backTimer.Tick += new EventHandler(OnBackTimer); + m_backTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_upTimer = new DispatcherTimer(); + m_upTimer.Tick += new EventHandler(OnUpTimer); + m_upTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + m_downTimer = new DispatcherTimer(); + m_downTimer.Tick += new EventHandler(OnDownTimer); + m_downTimer.Interval = new TimeSpan(0, 0, 0, 0, 30); + + DoLoadScene(DoSelectSceneFile()); + } + + /// + /// Cleans up the engine + /// + /// + protected override void OnClosed(EventArgs e) + { + m_engine.EndRendering(); + DoUnloadScene(); + + m_motionTimer = null; + m_engine.RemoveWindow(m_renderWindow); + m_renderWindow = null; + m_engine.Cleanup(); + m_engine.Destroy(); + m_engine = null; + base.OnClosed(e); + } + + #endregion + + #region Events + + /// + /// + /// + /// + private void OnKeyUp(object sender, KeyEventArgs e) + { + if (m_renderTarget != null) + { + var key = DoConvertKey(e.Key); + + m_isShiftDown = e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift); + m_isCtrlDown = e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl); + m_isAltDown = e.KeyboardDevice.IsKeyDown(Key.LeftAlt) || e.KeyboardDevice.IsKeyDown(Key.RightAlt); + if (m_renderWindow.OnKeyboardKeyUp(key + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)) == 0 + && m_nodeState != null) + { + switch (e.Key) + { + case Key.Left: + case Key.Q: + m_leftTimer.Stop(); + break; + case Key.Right: + case Key.D: + m_rightTimer.Stop(); + break; + case Key.Up: + case Key.Z: + m_forwardTimer.Stop(); + break; + case Key.Down: + case Key.S: + m_backTimer.Stop(); + break; + case Key.PageUp: + case Key.E: + m_upTimer.Stop(); + break; + case Key.PageDown: + case Key.A: + m_downTimer.Stop(); + break; + } + } + } + } + + /// + /// + /// + /// + private void OnKeyDown(object sender, KeyEventArgs e) + { + if (m_renderTarget != null) + { + var key = DoConvertKey(e.Key); + m_isShiftDown = e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift); + m_isCtrlDown = e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl); + m_isAltDown = e.KeyboardDevice.IsKeyDown(Key.LeftAlt) || e.KeyboardDevice.IsKeyDown(Key.RightAlt); + + if (m_renderWindow.OnKeyboardKeyDown(key + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)) == 0 + && m_nodeState != null) + { + switch (e.Key) + { + case Key.Left: + case Key.Q: + m_leftTimer.Start(); + break; + case Key.Right: + case Key.D: + m_rightTimer.Start(); + break; + case Key.Up: + case Key.Z: + m_forwardTimer.Start(); + break; + case Key.Down: + case Key.S: + m_backTimer.Start(); + break; + case Key.PageUp: + case Key.E: + m_upTimer.Start(); + break; + case Key.PageDown: + case Key.A: + m_downTimer.Start(); + break; + } + } + } + } + + private void OnMouseDown(object sender, MouseButtonEventArgs e) + { + if (m_renderTarget != null) + { + var newPosition = DoTransform(e.GetPosition(RenderPanel)); + var pos = new Position { }; + pos.Set((int)newPosition.X, (int)newPosition.Y); + + switch (e.ChangedButton) + { + case MouseButton.Left: + m_renderWindow.OnMouseLButtonDown(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + case MouseButton.Right: + m_renderWindow.OnMouseRButtonDown(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + case MouseButton.Middle: + m_renderWindow.OnMouseMButtonDown(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + } + + m_oldPosition = newPosition; + } + } + + private void OnMouseUp(object sender, MouseButtonEventArgs e) + { + if (m_renderTarget != null) + { + var newPosition = DoTransform(e.GetPosition(RenderPanel)); + var pos = new Position { }; + pos.Set((int)newPosition.X, (int)newPosition.Y); + + switch (e.ChangedButton) + { + case MouseButton.Left: + m_renderWindow.OnMouseLButtonUp(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + case MouseButton.Right: + m_renderWindow.OnMouseRButtonUp(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + case MouseButton.Middle: + m_renderWindow.OnMouseMButtonUp(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)); + break; + } + + m_oldPosition = newPosition; + } + } + + /// + /// Forwards the mouse position to the render window + /// + /// + /// + private void OnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) + { + if (m_renderTarget != null) + { + var newPosition = DoTransform(e.GetPosition(RenderPanel)); + var pos = new Position { }; + pos.Set((int)newPosition.X, (int)newPosition.Y); + + if (m_renderWindow.OnMouseMove(pos + , (sbyte)(m_isCtrlDown ? 1 : 0) + , (sbyte)(m_isAltDown ? 1 : 0) + , (sbyte)(m_isShiftDown ? 1 : 0)) == 0 + && m_nodeState != null + && m_oldPosition != null) + { + var mult = 8.0f; + var deltaX = (m_oldPosition.X - newPosition.X) / mult; + var deltaY = (m_oldPosition.Y - newPosition.Y) / mult; + + if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed) + { + m_nodeState.addAngularVelocity(-deltaY, deltaX); + } + else if (e.RightButton == System.Windows.Input.MouseButtonState.Pressed) + { + m_nodeState.addScalarVelocity(deltaX, -deltaY, 0.0f); + } + } + + m_oldPosition = newPosition; + } + } + + private void OnLeftTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(speed, 0.0f, 0.0f); + } + } + + private void OnRightTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(-speed, 0.0f, 0.0f); + } + } + + private void OnForwardTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(0.0f, 0.0f, speed); + } + } + + private void OnBackTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(0.0f, 0.0f, -speed); + } + } + + private void OnUpTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(0.0f, speed, 0.0f); + } + } + + private void OnDownTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + var speed = 1.0f; + m_nodeState.addScalarVelocity(0.0f, -speed, 0.0f); + } + } + + private void OnMotionTimer(object sender, EventArgs e) + { + if (m_nodeState != null) + { + m_nodeState.update(); + } + } + + /// + /// Forwards the new size to the render window + /// + /// + /// + private void OnSizeChanged(object sender, System.Windows.SizeChangedEventArgs e) + { + if (m_renderTarget != null) + { + Castor3D.Size size = new Castor3D.Size(); + size.Width = (uint)e.NewSize.Width; + size.Height = (uint)e.NewSize.Height; + m_renderWindow.Resize(size); + } + + var window = GetWindow(RenderPanel); + window.Height = e.NewSize.Height; + window.Width = e.NewSize.Width; + } + + /// + /// Opens a files selector to select a file name, and to load it. + /// + /// + /// + private void OnLoaded(object sender, System.Windows.RoutedEventArgs e) + { + } + + #endregion + + #region Members + + /// + /// The Castor3D engine + /// + private engine m_engine; + /// + /// The render window + /// + private RenderTarget m_renderTarget; + /// + /// The render window + /// + private RenderWindow m_renderWindow; + /// + /// The main scene + /// + private Scene m_scene; + /// + /// The scene node controlled by the mouse + /// + private NodeState m_nodeState; + /// + /// The previous mouse position + /// + private Vector2D m_oldPosition; + /// + /// The motion timer + /// + private DispatcherTimer m_motionTimer; + /// + /// The keyboard timers + /// + private DispatcherTimer m_leftTimer; + private DispatcherTimer m_rightTimer; + private DispatcherTimer m_forwardTimer; + private DispatcherTimer m_backTimer; + private DispatcherTimer m_upTimer; + private DispatcherTimer m_downTimer; + + private bool m_isShiftDown; + private bool m_isCtrlDown; + private bool m_isAltDown; + + #endregion + } } diff --git a/include/Interop/ComCastor3D/Castor3D.idl b/include/Interop/ComCastor3D/Castor3D.idl index 2cb86065e5..ef277264f1 100644 --- a/include/Interop/ComCastor3D/Castor3D.idl +++ b/include/Interop/ComCastor3D/Castor3D.idl @@ -634,6 +634,22 @@ typedef enum eKEYBOARD_KEY eKEYBOARD_KEY_NUMPADDIVIDE, } eKEYBOARD_KEY; +// eKEYBOARD_KEY +[ + uuid( 247EB670-043E-46EF-A227-0118412C488B ), + helpstring( "Castor3D mouse cursors enumeration." ) +] +typedef enum eMOUSE_CURSOR +{ + eMOUSE_CURSOR_ARROW, + eMOUSE_CURSOR_HAND, + eMOUSE_CURSOR_TEXT, + eMOUSE_CURSOR_SIZE_WE, + eMOUSE_CURSOR_SIZE_NS, + eMOUSE_CURSOR_SIZE_NWSE, + eMOUSE_CURSOR_SIZE_NESW, +} eMOUSE_CURSOR; + interface IAngle; interface ICastorFont; interface IGlyph; @@ -660,6 +676,7 @@ interface IColourBackground; interface IDirectionalLight; interface IEngine; interface IGeometry; +interface IGuiCallbacks; interface IImageBackground; interface IIndexMapping; interface ILight; @@ -1363,13 +1380,13 @@ interface IRenderWindow [id( 2 ), helpstring( "Initialises the render window" )] HRESULT Initialise( [in] IRenderTarget * target ); [id( 3 ), helpstring( "Cleans the render window up" )] HRESULT Cleanup(); [id( 4 ), helpstring( "Resizes the render window" )] HRESULT Resize( [in] ISize * size ); - [id( 5 ), helpstring( "MouseMove event processing" )] HRESULT OnMouseMove( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 6 ), helpstring( "MouseMouseLButtondown event processing" )] HRESULT OnMouseLButtonDown( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 7 ), helpstring( "MouseMouseLButtonUp event processing" )] HRESULT OnMouseLButtonUp( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 8 ), helpstring( "MouseMouseMButtondown event processing" )] HRESULT OnMouseMButtonDown( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 9 ), helpstring( "MouseMouseLButtonUp event processing" )] HRESULT OnMouseMButtonUp( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 10 ), helpstring( "MouseMouseRButtondown event processing" )] HRESULT OnMouseRButtonDown( [in] IPosition * pos, [out, retval] boolean * pVal ); - [id( 11 ), helpstring( "MouseMouseRButtonUp event processing" )] HRESULT OnMouseRButtonUp( [in] IPosition * pos, [out, retval] boolean * pVal ); + [id( 5 ), helpstring( "MouseMove event processing" )] HRESULT OnMouseMove( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 6 ), helpstring( "MouseMouseLButtondown event processing" )] HRESULT OnMouseLButtonDown( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 7 ), helpstring( "MouseMouseLButtonUp event processing" )] HRESULT OnMouseLButtonUp( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 8 ), helpstring( "MouseMouseMButtondown event processing" )] HRESULT OnMouseMButtonDown( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 9 ), helpstring( "MouseMouseLButtonUp event processing" )] HRESULT OnMouseMButtonUp( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 10 ), helpstring( "MouseMouseRButtondown event processing" )] HRESULT OnMouseRButtonDown( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); + [id( 11 ), helpstring( "MouseMouseRButtonUp event processing" )] HRESULT OnMouseRButtonUp( [in] IPosition * pos, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); [id( 12 ), helpstring( "KeyboardKeyDown event processing" )] HRESULT OnKeyboardKeyDown( [in] eKEYBOARD_KEY key, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); [id( 13 ), helpstring( "KeyboardKeyUp event processing" )] HRESULT OnKeyboardKeyUp( [in] eKEYBOARD_KEY key, [in] boolean isCtrlDown, [in] boolean isAltDown, [in] boolean isShiftDown, [out, retval] boolean * pVal ); [id( 14 ), helpstring( "KeyboardChar event processing" )] HRESULT OnKeyboardChar( [in] eKEYBOARD_KEY key, [in] BSTR c, [out, retval] boolean * pVal ); @@ -1718,6 +1735,19 @@ interface IOverlay [id( 5 ), helpstring( "Retrieves the childs count" )] HRESULT GetChildrenCount( [in] unsigned int * pVal ); }; +// IGuiCallbacks +[ + uuid( C354A03D-9E11-41FB-9C88-C3589C4E599A ), + helpstring( "Castor3D GUI callbacks interface" ) +] +interface IGuiCallbacks + : IUnknown +{ + [id( 1 ), helpstring( "Called when a text clipboard get action is requested" )] HRESULT OnGetClipBoardText( [out, retval] BSTR * text ); + [id( 2 ), helpstring( "Called when a text clipboard set action is requested" )] HRESULT OnSetClipBoardText( [in] BSTR text ); + [id( 3 ), helpstring( "Called when a mouse cursor change is requested" )] HRESULT OnCursorChange( [in] eMOUSE_CURSOR cursor ); +}; + // IEngine [ uuid( 66132C94-BBD3-4C20-BADC-B8EB03E21E11 ), @@ -1750,6 +1780,7 @@ interface IEngine [id( 20 ), helpstring( "Pauses the render loop (threaded rendering only)" )] HRESULT PauseRendering(); [id( 21 ), helpstring( "Resumes the render loop (threaded rendering only)" )] HRESULT ResumeRendering(); [id( 22 ), helpstring( "Ends the render loop (threaded rendering only)" )] HRESULT EndRendering(); + [id( 23 ), helpstring( "Sets callbacks for GUI global events" )] HRESULT RegisterGuiCallbacks( [in] IGuiCallbacks * callbacks ); }; // Castor3DLib diff --git a/include/Interop/ComCastor3D/Castor3D/ComEngine.hpp b/include/Interop/ComCastor3D/Castor3D/ComEngine.hpp index e0e347271d..6c28a19eb6 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComEngine.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComEngine.hpp @@ -42,8 +42,7 @@ namespace CastorCom STDMETHOD( CreateSampler )( /* [in] */ BSTR name, /* [out, retval] */ ISampler ** pVal ); STDMETHOD( RemoveScene )( /* [in] */ BSTR name ); STDMETHOD( LoadScene )( /* [in] */ BSTR name, /* [out, retval] */ IRenderTarget ** pTarget ); - - private: + STDMETHOD( RegisterGuiCallbacks )( /* [in] */ IGuiCallbacks * callbacks ); }; //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object //!\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet diff --git a/include/Interop/ComCastor3D/Castor3D/ComLineMapping.hpp b/include/Interop/ComCastor3D/Castor3D/ComLineMapping.hpp index bda7f108be..5382de67da 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComLineMapping.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComLineMapping.hpp @@ -2,7 +2,7 @@ #ifndef __COMC3D_ComLinesMapping_H__ #define __COMC3D_ComLinesMapping_H__ -#include "ComCastor3D/Castor3D/ComTextureLayout.hpp" +#include "ComCastor3D/Castor3D/ComIndexMapping.hpp" #include #include diff --git a/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp b/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp index 53d7855ac0..c1397e900c 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp @@ -25,13 +25,13 @@ namespace CastorCom STDMETHOD( Initialise )( /* [in] */ IRenderTarget * target ); STDMETHOD( Cleanup )(); STDMETHOD( Resize )( /* [in] */ ISize * size ); - STDMETHOD( OnMouseMove )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseLButtonDown )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseLButtonUp )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseMButtonDown )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseMButtonUp )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseRButtonDown )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); - STDMETHOD( OnMouseRButtonUp )( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseMove )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseLButtonDown )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseLButtonUp )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseMButtonDown )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseMButtonUp )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseRButtonDown )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); + STDMETHOD( OnMouseRButtonUp )( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); STDMETHOD( OnKeyboardKeyDown )( /* [in] */ eKEYBOARD_KEY key, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); STDMETHOD( OnKeyboardKeyUp )( /* [in] */ eKEYBOARD_KEY key, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal ); STDMETHOD( OnKeyboardChar )( /* [in] */ eKEYBOARD_KEY key, /* [in] */ BSTR c, /* [out, retval] */ boolean * pVal ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComScene.hpp b/include/Interop/ComCastor3D/Castor3D/ComScene.hpp index db4ab1137e..f163b17cc1 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComScene.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComScene.hpp @@ -2,8 +2,8 @@ #ifndef __COMC3D_COM_SCENE_H__ #define __COMC3D_COM_SCENE_H__ -#include "ComCastor3D/Castor3D/ComSceneNode.hpp" #include "ComCastor3D/Castor3D/ComSceneBackground.hpp" +#include "ComCastor3D/Castor3D/ComSceneNode.hpp" #include "ComCastor3D/CastorUtils/ComRgbColour.hpp" #include diff --git a/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp b/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp index 223788a9c9..5c1da10433 100644 --- a/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp +++ b/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp @@ -140,10 +140,20 @@ namespace castor3d { for ( auto texture = DsTexture::eMin; texture < DsTexture::eCount; texture = DsTexture( size_t( texture ) + 1u ) ) { - visitor.visit( "Opaque " + getTexName( texture ) - , m_opaquePassResult[texture].sampledViewId - , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL - , TextureFactors{}.invert( true ) ); + if ( texture == DsTexture::eNmlOcc ) + { + visitor.visit( "Opaque " + getTexName( texture ) + , m_opaquePassResult[texture].sampledViewId + , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL + , TextureFactors::tex2D( { 0.5, 0.5f, 0.5 }, { 0.5, 0.5, 0.5 } ).invert( true ) ); + } + else + { + visitor.visit( "Opaque " + getTexName( texture ) + , m_opaquePassResult[texture].sampledViewId + , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL + , TextureFactors::tex2D().invert( true ) ); + } } m_lightingPass->accept( visitor ); diff --git a/source/Interop/ComCastor3D/CMakeLists.txt b/source/Interop/ComCastor3D/CMakeLists.txt index d25c169378..f5d8aa4d85 100644 --- a/source/Interop/ComCastor3D/CMakeLists.txt +++ b/source/Interop/ComCastor3D/CMakeLists.txt @@ -181,65 +181,60 @@ if ( MSVC ) set( RESRC_LIST "" ) set( RESH_LIST "" ) # CastorUtils interfaces + add_interface( "236D0939-4F04-4D7C-A8CD-1415F3CCBA71" RESRC_LIST RESH_LIST RESOURCE_ID "Angle" ) + add_interface( "814FF4F4-8FFC-4048-A972-6EF3DA5314E1" RESRC_LIST RESH_LIST RESOURCE_ID "Font" ) + add_interface( "E8EB965B-EB5E-413D-B119-FADC081C8AD9" RESRC_LIST RESH_LIST RESOURCE_ID "Glyph" ) + add_interface( "097DF712-996C-4E4B-89FB-9C0D06F42BE7" RESRC_LIST RESH_LIST RESOURCE_ID "HdrRgbColour" ) + add_interface( "A25F52A6-5CF2-45F5-BED8-FB0294FCA339" RESRC_LIST RESH_LIST RESOURCE_ID "HdrRgbaColour" ) + add_interface( "032154A9-2E6F-4FEE-A132-5840EEEC21FD" RESRC_LIST RESH_LIST RESOURCE_ID "Image" ) + add_interface( "EEEBC83E-C216-4D5E-84BD-E3462E448A24" RESRC_LIST RESH_LIST RESOURCE_ID "Length" ) + add_interface( "A39A1B4B-9882-4B2E-AB1D-55257AF40727" RESRC_LIST RESH_LIST RESOURCE_ID "Logger" ) + add_interface( "3353741E-3F82-4A99-B8DC-6D6AB0584E04" RESRC_LIST RESH_LIST RESOURCE_ID "Matrix4x4" ) + add_interface( "D2F8DD56-82D0-4467-9AB4-61F3BB228ACC" RESRC_LIST RESH_LIST RESOURCE_ID "PixelBuffer" ) add_interface( "2C6A4321-6187-436B-9B31-4B340D1C6507" RESRC_LIST RESH_LIST RESOURCE_ID "Position" ) - add_interface( "3F1B36E8-4E97-403C-B2F3-25267C23A7FD" RESRC_LIST RESH_LIST RESOURCE_ID "Size" ) + add_interface( "7A301C67-36E2-483D-925A-62E3C5DBE871" RESRC_LIST RESH_LIST RESOURCE_ID "Quaternion" ) add_interface( "A1C8B71D-D5BC-4664-9058-1EE9F964BFF7" RESRC_LIST RESH_LIST RESOURCE_ID "Rect" ) + add_interface( "7D790705-5D16-4D1E-A557-957D6D4E01E7" RESRC_LIST RESH_LIST RESOURCE_ID "RgbColour" ) + add_interface( "22125089-C34A-4C20-B8F9-07907A8AEA0D" RESRC_LIST RESH_LIST RESOURCE_ID "RgbaColour" ) + add_interface( "3F1B36E8-4E97-403C-B2F3-25267C23A7FD" RESRC_LIST RESH_LIST RESOURCE_ID "Size" ) add_interface( "9A7B169B-06DF-4617-A93D-3EF10A4362F7" RESRC_LIST RESH_LIST RESOURCE_ID "Vector2D" ) add_interface( "D406D2D9-865B-40CF-AB98-CA79F00C0797" RESRC_LIST RESH_LIST RESOURCE_ID "Vector3D" ) add_interface( "EF3A4D20-DC85-493C-BBC3-0A17065CF17A" RESRC_LIST RESH_LIST RESOURCE_ID "Vector4D" ) - add_interface( "22125089-C34A-4C20-B8F9-07907A8AEA0D" RESRC_LIST RESH_LIST RESOURCE_ID "RgbaColour" ) - add_interface( "7D790705-5D16-4D1E-A557-957D6D4E01E7" RESRC_LIST RESH_LIST RESOURCE_ID "RgbColour" ) - add_interface( "A25F52A6-5CF2-45F5-BED8-FB0294FCA339" RESRC_LIST RESH_LIST RESOURCE_ID "HdrRgbaColour" ) - add_interface( "097DF712-996C-4E4B-89FB-9C0D06F42BE7" RESRC_LIST RESH_LIST RESOURCE_ID "HdrRgbColour" ) - add_interface( "236D0939-4F04-4D7C-A8CD-1415F3CCBA71" RESRC_LIST RESH_LIST RESOURCE_ID "Angle" ) - add_interface( "EEEBC83E-C216-4D5E-84BD-E3462E448A24" RESRC_LIST RESH_LIST RESOURCE_ID "Length" ) - add_interface( "7A301C67-36E2-483D-925A-62E3C5DBE871" RESRC_LIST RESH_LIST RESOURCE_ID "Quaternion" ) - add_interface( "3353741E-3F82-4A99-B8DC-6D6AB0584E04" RESRC_LIST RESH_LIST RESOURCE_ID "Matrix4x4" ) - add_interface( "E8EB965B-EB5E-413D-B119-FADC081C8AD9" RESRC_LIST RESH_LIST RESOURCE_ID "Glyph" ) - add_interface( "814FF4F4-8FFC-4048-A972-6EF3DA5314E1" RESRC_LIST RESH_LIST RESOURCE_ID "Font" ) - add_interface( "D2F8DD56-82D0-4467-9AB4-61F3BB228ACC" RESRC_LIST RESH_LIST RESOURCE_ID "PixelBuffer" ) - add_interface( "032154A9-2E6F-4FEE-A132-5840EEEC21FD" RESRC_LIST RESH_LIST RESOURCE_ID "Image" ) - add_interface( "A39A1B4B-9882-4B2E-AB1D-55257AF40727" RESRC_LIST RESH_LIST RESOURCE_ID "Logger" ) # Castor3D interfaces + add_interface( "147C4638-20C2-46AC-8765-B67F0128BC4A" RESRC_LIST RESH_LIST RESOURCE_ID "BorderPanelOverlay" ) + add_interface( "823F16E0-606C-46C7-8B22-8B5C907B4E48" RESRC_LIST RESH_LIST RESOURCE_ID "Camera" ) + add_interface( "F75EA477-3EFF-4254-B995-32A606A861F8" RESRC_LIST RESH_LIST RESOURCE_ID "ColourBackground" ) + add_interface( "F0FC01FC-2C13-40C0-A07F-9B913181264B" RESRC_LIST RESH_LIST RESOURCE_ID "DirectionalLight" ) add_interface( "557E0DD9-00E5-48A2-AE26-B78CC6031956" RESRC_LIST RESH_LIST RESOURCE_ID "Engine" ) + add_interface( "0F08578A-FD57-4F6F-8CB5-26E5C1CBA88A" RESRC_LIST RESH_LIST RESOURCE_ID "Geometry" ) + add_interface( "C354A03D-9E11-41FB-9C88-C3589C4E599A" RESRC_LIST RESH_LIST RESOURCE_ID "GuiCallbacks" ) + add_interface( "829D988E-BE04-421D-BE4B-DCE72A6C1E4E" RESRC_LIST RESH_LIST RESOURCE_ID "ImageBackground" ) add_interface( "56FAEA93-D2BC-4845-9F7C-A225044C7626" RESRC_LIST RESH_LIST RESOURCE_ID "IndexMapping" ) - add_interface( "3357AAE2-E50A-47AB-A0FE-83833CE2944C" RESRC_LIST RESH_LIST RESOURCE_ID "TriFaceMapping" ) + add_interface( "7499D2D6-4275-4816-B25E-042CC75C566E" RESRC_LIST RESH_LIST RESOURCE_ID "Light" ) + add_interface( "9C77B39B-EAD2-4EDB-815E-1B74B1F8B5C3" RESRC_LIST RESH_LIST RESOURCE_ID "LightCategory" ) add_interface( "93151A09-8DC0-491F-BCDE-1B58954B97C2" RESRC_LIST RESH_LIST RESOURCE_ID "LinesMapping" ) - add_interface( "E59360F1-2F5B-4011-A61F-32E1A77207C8" RESRC_LIST RESH_LIST RESOURCE_ID "Submesh" ) + add_interface( "A9F3E2A5-A54C-4E4A-8448-0A663BE88E40" RESRC_LIST RESH_LIST RESOURCE_ID "Material" ) add_interface( "C5053069-A376-4E0E-AA0A-5CCE3A78C205" RESRC_LIST RESH_LIST RESOURCE_ID "Mesh" ) add_interface( "C36B1CB1-9623-4DE9-B5D8-108AC6D32D54" RESRC_LIST RESH_LIST RESOURCE_ID "MovableObject" ) - add_interface( "9C77B39B-EAD2-4EDB-815E-1B74B1F8B5C3" RESRC_LIST RESH_LIST RESOURCE_ID "LightCategory" ) - add_interface( "F0FC01FC-2C13-40C0-A07F-9B913181264B" RESRC_LIST RESH_LIST RESOURCE_ID "DirectionalLight" ) - add_interface( "3581BE19-66C5-407B-8E7E-C761424C5974" RESRC_LIST RESH_LIST RESOURCE_ID "PointLight" ) - add_interface( "0819BA84-8671-454B-B9A3-84C8A3C5DB95" RESRC_LIST RESH_LIST RESOURCE_ID "SpotLight" ) - add_interface( "823F16E0-606C-46C7-8B22-8B5C907B4E48" RESRC_LIST RESH_LIST RESOURCE_ID "Camera" ) - add_interface( "7499D2D6-4275-4816-B25E-042CC75C566E" RESRC_LIST RESH_LIST RESOURCE_ID "Light" ) - add_interface( "0F08578A-FD57-4F6F-8CB5-26E5C1CBA88A" RESRC_LIST RESH_LIST RESOURCE_ID "Geometry" ) - add_interface( "665CE022-156D-4C04-B621-35CB66A6D6D4" RESRC_LIST RESH_LIST RESOURCE_ID "SceneNode" ) + add_interface( "CA66D170-B96A-4910-83D5-D622E9A813F7" RESRC_LIST RESH_LIST RESOURCE_ID "Overlay" ) add_interface( "0A9CE856-F576-41EF-A6F0-C27291C6C2D2" RESRC_LIST RESH_LIST RESOURCE_ID "OverlayCategory" ) add_interface( "B5AD045F-0EDE-46F9-8AF0-381FBDB62385" RESRC_LIST RESH_LIST RESOURCE_ID "PanelOverlay" ) - add_interface( "147C4638-20C2-46AC-8765-B67F0128BC4A" RESRC_LIST RESH_LIST RESOURCE_ID "BorderPanelOverlay" ) - add_interface( "287EAF30-2165-49AC-BC96-8CF568D28CAE" RESRC_LIST RESH_LIST RESOURCE_ID "TextOverlay" ) - add_interface( "CA66D170-B96A-4910-83D5-D622E9A813F7" RESRC_LIST RESH_LIST RESOURCE_ID "Overlay" ) - add_interface( "F9185125-9460-4039-A0B0-EB2295AC6AB1" RESRC_LIST RESH_LIST RESOURCE_ID "Animable" ) - add_interface( "F31A778F-F9E5-4619-A35B-2EE8325BF1D2" RESRC_LIST RESH_LIST RESOURCE_ID "AnimatedObject" ) - add_interface( "7180F914-17E1-45A1-A2AB-F195F0724AD7" RESRC_LIST RESH_LIST RESOURCE_ID "AnimatedObjectGroup" ) - add_interface( "5CA94585-1FBC-466A-8A59-90733AD8DF1D" RESRC_LIST RESH_LIST RESOURCE_ID "SceneBackground" ) - add_interface( "F75EA477-3EFF-4254-B995-32A606A861F8" RESRC_LIST RESH_LIST RESOURCE_ID "ColourBackground" ) - add_interface( "829D988E-BE04-421D-BE4B-DCE72A6C1E4E" RESRC_LIST RESH_LIST RESOURCE_ID "ImageBackground" ) - add_interface( "391A6B49-95D3-4B92-ACFC-058083FC06D2" RESRC_LIST RESH_LIST RESOURCE_ID "SkyboxBackground" ) - add_interface( "C2669704-BF96-4D28-9627-7E625EA2EC99" RESRC_LIST RESH_LIST RESOURCE_ID "Scene" ) - add_interface( "5B26DE5C-FFE8-42AE-A07C-837D5164CAFE" RESRC_LIST RESH_LIST RESOURCE_ID "Animation" ) - add_interface( "53A552B5-8524-4DDD-987C-AC68AA87233E" RESRC_LIST RESH_LIST RESOURCE_ID "Skeleton" ) + add_interface( "1B6D6829-C5D7-4B75-8A92-E016C63147B3" RESRC_LIST RESH_LIST RESOURCE_ID "Pass" ) + add_interface( "3581BE19-66C5-407B-8E7E-C761424C5974" RESRC_LIST RESH_LIST RESOURCE_ID "PointLight" ) add_interface( "AD82930D-4682-4CF1-B9E8-EDFD869E7AF7" RESRC_LIST RESH_LIST RESOURCE_ID "RenderTarget" ) add_interface( "68E4373D-24BB-45FE-9717-CB512111A984" RESRC_LIST RESH_LIST RESOURCE_ID "RenderWindow" ) add_interface( "98978C6B-C6FB-447C-A874-15068F900011" RESRC_LIST RESH_LIST RESOURCE_ID "Sampler" ) + add_interface( "C2669704-BF96-4D28-9627-7E625EA2EC99" RESRC_LIST RESH_LIST RESOURCE_ID "Scene" ) + add_interface( "5CA94585-1FBC-466A-8A59-90733AD8DF1D" RESRC_LIST RESH_LIST RESOURCE_ID "SceneBackground" ) + add_interface( "665CE022-156D-4C04-B621-35CB66A6D6D4" RESRC_LIST RESH_LIST RESOURCE_ID "SceneNode" ) + add_interface( "391A6B49-95D3-4B92-ACFC-058083FC06D2" RESRC_LIST RESH_LIST RESOURCE_ID "SkyboxBackground" ) + add_interface( "0819BA84-8671-454B-B9A3-84C8A3C5DB95" RESRC_LIST RESH_LIST RESOURCE_ID "SpotLight" ) + add_interface( "E59360F1-2F5B-4011-A61F-32E1A77207C8" RESRC_LIST RESH_LIST RESOURCE_ID "Submesh" ) + add_interface( "287EAF30-2165-49AC-BC96-8CF568D28CAE" RESRC_LIST RESH_LIST RESOURCE_ID "TextOverlay" ) add_interface( "0FF08968-9937-4771-8949-0E86E3615F98" RESRC_LIST RESH_LIST RESOURCE_ID "TextureLayout" ) add_interface( "E8DD6F29-F296-4687-AADD-F6FD1D0AC670" RESRC_LIST RESH_LIST RESOURCE_ID "TextureUnit" ) - add_interface( "B62FE384-D806-4DA7-B091-A7E260D95D7F" RESRC_LIST RESH_LIST RESOURCE_ID "ShaderProgram" ) - add_interface( "1B6D6829-C5D7-4B75-8A92-E016C63147B3" RESRC_LIST RESH_LIST RESOURCE_ID "Pass" ) - add_interface( "A9F3E2A5-A54C-4E4A-8448-0A663BE88E40" RESRC_LIST RESH_LIST RESOURCE_ID "Material" ) + add_interface( "3357AAE2-E50A-47AB-A0FE-83833CE2944C" RESRC_LIST RESH_LIST RESOURCE_ID "TriFaceMapping" ) # Add RGS files to the sources file( GLOB ${PROJECT_NAME}_RGS_FILES diff --git a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp index 4433fa212c..2e5879f195 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -459,4 +460,51 @@ namespace CastorCom return hr; } + + STDMETHODIMP CEngine::RegisterGuiCallbacks( /* [in] */ IGuiCallbacks * callbacks )noexcept + { + HRESULT hr = E_POINTER; + + if ( m_internal ) + { + auto listener = m_internal->getUserInputListener(); + + if ( callbacks ) + { + listener->registerClipboardTextAction( [callbacks]( bool set + , castor::U32String text ) + { + if ( set ) + { + callbacks->OnSetClipBoardText( toBstr( castor::string::stringCast< castor::xchar >( text ) ) ); + } + else + { + BSTR result; + callbacks->OnGetClipBoardText( &result ); + text = castor::string::toU32String( fromBstr( result ) ); + } + + return text; + } ); + listener->registerCursorAction( [callbacks]( castor3d::MouseCursor cursor ) + { + callbacks->OnCursorChange( eMOUSE_CURSOR( cursor ) ); + } ); + } + else + { + listener->unregisterCursorAction(); + listener->unregisterClipboardTextAction(); + } + + hr = S_OK; + } + else + { + hr = CComError::dispatchError( E_FAIL, IID_IEngine, _T( "RegisterGuiCallbacks" ), ERROR_UNINITIALISED_ENGINE.c_str(), 0, nullptr ); + } + + return hr; + } } diff --git a/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp b/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp index d56e7403e9..c855a84c65 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComRenderWindow.cpp @@ -73,7 +73,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseMove( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseMove( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -86,7 +86,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseMove( castor::Position( int32_t( m_oldX ), int32_t( m_oldY ) ), false, false, false ); + *pVal = inputListener->fireMouseMove( castor::Position( int32_t( m_oldX ), int32_t( m_oldY ) ) + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -103,7 +106,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseLButtonDown( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseLButtonDown( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -116,7 +119,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eLeft, false, false, false ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eLeft + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -133,7 +139,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseLButtonUp( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseLButtonUp( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -146,7 +152,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eLeft, false, false, false ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eLeft + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -163,7 +172,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseMButtonDown( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseMButtonDown( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -176,7 +185,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eMiddle, false, false, false ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eMiddle + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -193,7 +205,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseMButtonUp( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseMButtonUp( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -206,7 +218,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eMiddle, false, false, false ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eMiddle + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -223,7 +238,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseRButtonDown( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseRButtonDown( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -236,7 +251,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eRight, false, false, false ); + *pVal = inputListener->fireMouseButtonPushed( castor3d::MouseButton::eRight + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) @@ -253,7 +271,7 @@ namespace CastorCom return hr; } - STDMETHODIMP CRenderWindow::OnMouseRButtonUp( /* [in] */ IPosition * pos, /* [out, retval] */ boolean * pVal )noexcept + STDMETHODIMP CRenderWindow::OnMouseRButtonUp( /* [in] */ IPosition * pos, /* [in] */ boolean isCtrlDown, /* [in] */ boolean isAltDown, /* [in] */ boolean isShiftDown, /* [out, retval] */ boolean * pVal )noexcept { HRESULT hr = E_POINTER; @@ -266,7 +284,10 @@ namespace CastorCom { if ( auto inputListener = m_internal->getEngine()->getUserInputListener() ) { - *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eRight, false, false, false ); + *pVal = inputListener->fireMouseButtonReleased( castor3d::MouseButton::eRight + , isCtrlDown != FALSE + , isAltDown != FALSE + , isShiftDown != FALSE ); } } catch ( castor::Exception & ) From 816c8cfc477cdf8418ef418d00d4df647d89555d Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 2 Apr 2023 12:27:17 +0200 Subject: [PATCH 03/35] Bumped version numbers and vcpkg related. --- CMake | 2 +- CMakeLists.txt | 4 +- CMakePresets.json | 31 +++--- data/vcpkg/ports/ashes/portfile.cmake | 8 ++ data/vcpkg/ports/ashes/vcpkg.json | 21 +++- data/vcpkg/ports/castor3d/portfile.cmake | 47 +++----- data/vcpkg/ports/castor3d/vcpkg.json | 34 ++++-- data/vcpkg/ports/rendergraph/portfile.cmake | 7 +- data/vcpkg/ports/rendergraph/vcpkg.json | 2 +- data/vcpkg/ports/shaderwriter/portfile.cmake | 37 ++---- data/vcpkg/ports/shaderwriter/vcpkg.json | 12 +- demos/CastorDvpTD/CMakeLists.txt | 2 +- demos/CastorViewerSharp/CMakeLists.txt | 2 +- external/vcpkg | 2 +- source/Core/Castor3D/CMakeLists.txt | 2 +- source/Core/CastorUtils/CMakeLists.txt | 2 +- source/Core/SceneExporter/CMakeLists.txt | 2 +- source/Interop/ComCastor3D/CMakeLists.txt | 2 +- .../AtmosphereScattering/CMakeLists.txt | 2 +- .../Generic/FFTOceanRendering/CMakeLists.txt | 2 +- .../Generic/OceanRendering/CMakeLists.txt | 2 +- .../Generic/ToonMaterial/CMakeLists.txt | 2 +- .../Generic/WaterRendering/CMakeLists.txt | 2 +- .../Importers/AssimpImporter/CMakeLists.txt | 2 +- .../BloomPostEffect/CMakeLists.txt | 2 +- .../DrawEdgesPostEffect/CMakeLists.txt | 2 +- .../FilmGrainPostEffect/CMakeLists.txt | 2 +- .../PostEffects/FxaaPostEffect/CMakeLists.txt | 2 +- .../GrayScalePostEffect/CMakeLists.txt | 2 +- .../LightStreaksPostEffect/CMakeLists.txt | 2 +- .../LinearMotionBlurPostEffect/CMakeLists.txt | 2 +- .../PbrBloomPostEffect/CMakeLists.txt | 2 +- .../PostEffects/SmaaPostEffect/CMakeLists.txt | 2 +- test/Castor3D/CMakeLists.txt | 2 +- tools/CastorMeshConverter/CMakeLists.txt | 2 +- tools/CastorMeshUpgrader/CMakeLists.txt | 2 +- tools/CastorTestLauncher/CMakeLists.txt | 2 +- tools/CastorViewer/CMakeLists.txt | 2 +- tools/GuiCommon/CMakeLists.txt | 2 +- tools/ImgConverter/CMakeLists.txt | 2 +- vcpkg.json | 105 +++++++++++------- 41 files changed, 194 insertions(+), 174 deletions(-) diff --git a/CMake b/CMake index ad28a43953..4e0292ed50 160000 --- a/CMake +++ b/CMake @@ -1 +1 @@ -Subproject commit ad28a43953f8a65b3f95b40824ac43c7278a565c +Subproject commit 4e0292ed50d76dab5fc8c81840ae0e021dc60c2a diff --git a/CMakeLists.txt b/CMakeLists.txt index ceb812be47..6c8219814e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,9 +19,9 @@ endif () set( MAIN_PROJECT_NAME "Castor3D" ) set( VERSION_MAJOR 0 ) -set( VERSION_MINOR 14 ) +set( VERSION_MINOR 15 ) set( VERSION_BUILD 0 ) -set( VERSION_YEAR 2022 ) +set( VERSION_YEAR 2023 ) # Setup lookup for external modules if ( VCPKG_TOOLCHAIN ) diff --git a/CMakePresets.json b/CMakePresets.json index 4e6810bf66..0d19aca632 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -7,7 +7,7 @@ }, "configurePresets": [ { - "name": "default-base", + "name": "user-base", "hidden": true, "installDir": "${sourceDir}/package/Castor3D", "cacheVariables": { @@ -26,25 +26,20 @@ "PROJECTS_OUTPUT_DIR": "${sourceDir}", "PROJECTS_UNITY_BUILD": true, "PROJECTS_USE_PRECOMPILED_HEADERS": false - }, - "environment": { - "BUILD_SDW_SPIRV": "1", - "BUILD_SDW_GLSL": "1", - "BUILD_SDW_HLSL": "1" } }, { - "name": "default-msvc", - "displayName": "Default Visual Studio Config", - "description": "Default build configuration using Visual Studio", - "inherits": "default-base", + "name": "user-msvc", + "displayName": "Castor3D User Visual Studio Config", + "description": "Build configuration using Visual Studio, for Castor3D users", + "inherits": "user-base", "generator": "Visual Studio 17 2022" }, { - "name": "default-ninja", - "displayName": "Default Ninja Config", - "description": "Default build configuration using Ninja", - "inherits": "default-base", + "name": "user-ninja", + "displayName": "Castor3D User Ninja Config", + "description": "Build configuration using Ninja, for Castor3D users", + "inherits": "user-base", "generator": "Ninja" }, { @@ -72,8 +67,8 @@ }, { "name": "dev-msvc", - "displayName": "Developer Visual Studio Config", - "description": "Developer build configuration using Visual Studio", + "displayName": "Castor3D Developer Visual Studio Config", + "description": "Build configuration using Visual Studio, for Castor3D developers", "inherits": "dev-base", "generator": "Visual Studio 17 2022", "cacheVariables": { @@ -82,8 +77,8 @@ }, { "name": "dev-ninja", - "displayName": "Developer Ninja Config", - "description": "Developer build configuration using Ninja", + "displayName": "Castor3D Developer Ninja Config", + "description": "Build configuration using Ninja, for Castor3D developers", "inherits": "dev-base", "generator": "Ninja" }, diff --git a/data/vcpkg/ports/ashes/portfile.cmake b/data/vcpkg/ports/ashes/portfile.cmake index 34b48b99d1..480fa12ff7 100644 --- a/data/vcpkg/ports/ashes/portfile.cmake +++ b/data/vcpkg/ports/ashes/portfile.cmake @@ -19,6 +19,13 @@ vcpkg_from_github( file(REMOVE_RECURSE "${SOURCE_PATH}/CMake") file(COPY "${CMAKE_SOURCE_PATH}/" DESTINATION "${SOURCE_PATH}/CMake") +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + direct3d11 ASHES_BUILD_RENDERER_D3D11 + opengl ASHES_BUILD_RENDERER_OGL + vulkan ASHES_BUILD_RENDERER_VKN +) + vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} OPTIONS @@ -27,6 +34,7 @@ vcpkg_cmake_configure( -DASHES_BUILD_TESTS=OFF -DASHES_BUILD_INFO=OFF -DASHES_BUILD_SAMPLES=OFF + ${FEATURE_OPTIONS} ) vcpkg_cmake_install() diff --git a/data/vcpkg/ports/ashes/vcpkg.json b/data/vcpkg/ports/ashes/vcpkg.json index 08fdded8e9..b32f882227 100644 --- a/data/vcpkg/ports/ashes/vcpkg.json +++ b/data/vcpkg/ports/ashes/vcpkg.json @@ -1,10 +1,10 @@ { "name": "ashes", - "version-date": "2022-06-08", + "version-date": "2023-03-12", "description": "Drop-in replacement to Vulkan's shared library, allowing the use of OpenGL or Direct3D11 in addition to Vulkan.", "homepage": "https://github.com/DragonJoker/Ashes", "license": "MIT", - "supports": "!ios & !android & !uwp & !x86 & !arm", + "supports": "!ios & !android & !x86 & !uwp & !arm32 & !static", "dependencies": [ "opengl", "spirv-cross", @@ -17,5 +17,20 @@ "host": true }, "vulkan-headers" - ] + ], + "default-features": [ + "opengl", + "vulkan" + ], + "features": { + "direct3d11": { + "description": "Compiles Direct3D11 renderer." + }, + "opengl": { + "description": "Compiles OpenGL renderer." + }, + "vulkan": { + "description": "Compiles Vulkan renderer." + } + } } diff --git a/data/vcpkg/ports/castor3d/portfile.cmake b/data/vcpkg/ports/castor3d/portfile.cmake index 3e7c96ad91..18e2e71760 100644 --- a/data/vcpkg/ports/castor3d/portfile.cmake +++ b/data/vcpkg/ports/castor3d/portfile.cmake @@ -3,44 +3,28 @@ vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO DragonJoker/Castor3D - REF b5cb00ae0f85206ac29fabce9162c206f67fe370 + REF 31c7acf35e4c5e5605df591fee61b989dc4d4d9d HEAD_REF master - SHA512 a67192a6f465ab2b18b3748d36371a708268f66d051c973c18886dec25294afc21cb47dae249299950d6c5e36b43a2c82337da260ec6007641452d00f0b079e2 + SHA512 203dbd28c32e02e714726460cab5a6477bec03f5a63e08001074cd1fc8342b6d64b91369cdf3a6d55d6758991c59bce691c377f3c82aa866cd09ecea8f6a518a ) vcpkg_from_github(OUT_SOURCE_PATH CMAKE_SOURCE_PATH REPO DragonJoker/CMakeUtils - REF ad28a43953f8a65b3f95b40824ac43c7278a565c + REF 7d355194fa795c437ce970cecf00e23ae10fc686 HEAD_REF master - SHA512 224d645f0bd7d8e1d845e894f09125fb60e29b0b19c2280142751ba8aa8f6d8d29fac5758fe22f21664276e4079066f40a3c2de21f555f2da57264fc38652787 + SHA512 ca25b19bdeb3e8fda7abc32f8548731f0ba1cd09889a70f6f287ad76d2fdfa0fedbb7f6f65b26d356ea51543bed8926c6bb463f8e8461b7d51d3b7b33134374c ) file(REMOVE_RECURSE "${SOURCE_PATH}/CMake") file(COPY "${CMAKE_SOURCE_PATH}/" DESTINATION "${SOURCE_PATH}/CMake") -if ("assimp" IN_LIST FEATURES) - set(BUILD_IMPORTER_ASSIMP ON) -else() - set(BUILD_IMPORTER_ASSIMP OFF) -endif() - -if ("freeimage" IN_LIST FEATURES) - set(USE_FREEIMAGE ON) -else() - set(USE_FREEIMAGE OFF) -endif() - -if ("glsl" IN_LIST FEATURES) - set(USE_GLSL ON) -else() - set(USE_GLSL OFF) -endif() - -if ("vkfft" IN_LIST FEATURES) - set(USE_VKFFT ON) -else() - set(USE_VKFFT OFF) -endif() +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + assimp CASTOR_BUILD_IMPORTER_ASSIMP + freeimage CASTOR_USE_FREEIMAGE + glsl CASTOR_C3D_NEEDS_GLSL + vkfft CASTOR_HAS_VKFFT +) vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} @@ -51,17 +35,14 @@ vcpkg_cmake_configure( -DCASTOR_BUILDGRP_TEST=OFF -DCASTOR_BUILDGRP_TOOL=OFF -DCASTOR_DISABLE_DELAYED_INITIALISATION=ON - -DCASTOR_FORCE_VCPKG_SUBMODULES=ON -DCASTOR_USE_GLSLANG=ON -DCASTOR_USE_MESH_SHADERS=OFF -DCASTOR_USE_TASK_SHADERS=OFF -DPROJECTS_UNITY_BUILD=ON -DPROJECTS_USE_PRECOMPILED_HEADERS=OFF - -DVCPKG_BUILD=ON -DCASTOR_FORCE_VCPKG_SUBMODULES=ON - -DCASTOR_BUILD_IMPORTER_ASSIMP=${BUILD_IMPORTER_ASSIMP} - -DCASTOR_C3D_NEEDS_GLSL=${USE_GLSL} - -DCASTOR_USE_FREEIMAGE=${USE_FREEIMAGE} + -DVCPKG_BUILD=ON + ${FEATURE_OPTIONS} ) vcpkg_copy_pdbs() @@ -70,4 +51,4 @@ vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/Castor3D) file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) \ No newline at end of file +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) diff --git a/data/vcpkg/ports/castor3d/vcpkg.json b/data/vcpkg/ports/castor3d/vcpkg.json index 4aade4ab6c..79858e87f9 100644 --- a/data/vcpkg/ports/castor3d/vcpkg.json +++ b/data/vcpkg/ports/castor3d/vcpkg.json @@ -1,19 +1,25 @@ { "name": "castor3d", - "version": "0.14.0", + "version": "0.15.0", "description": "C++17 and Vulkan 3D engine.", "homepage": "https://github.com/DragonJoker/Castor3D", "license": "MIT", "dependencies": [ + "ashes", "convectionkernels", "freetype", "gli", "meshoptimizer", "minizip", - "zlib", - "ashes", "rendergraph", - "shaderwriter", + { + "name": "shaderwriter", + "features": [ + "glsl", + "hlsl", + "spirv" + ] + }, { "name": "vcpkg-cmake", "host": true @@ -21,7 +27,8 @@ { "name": "vcpkg-cmake-config", "host": true - } + }, + "zlib" ], "default-features": [ "assimp", @@ -32,19 +39,28 @@ "features": { "assimp": { "description": "Use Assimp library to import external scenes.", - "dependencies": [ "assimp" ] + "dependencies": [ + "assimp" + ] }, "freeimage": { "description": "Use FreeImage library over stb_image to import TIF, PNG or RAW images.", - "dependencies": [ "freeimage" ] + "dependencies": [ + "freeimage" + ] }, "glsl": { "description": "Enable GLSL shaders import support.", - "dependencies": [ "glslang", "spirv-cross" ] + "dependencies": [ + "glslang", + "spirv-cross" + ] }, "vkfft": { "description": "Use VkFFT to compute Fast Fourier Transforms (Necessary for FFTOcean plugin).", - "dependencies": [ "vkfft" ] + "dependencies": [ + "vkfft" + ] } } } diff --git a/data/vcpkg/ports/rendergraph/portfile.cmake b/data/vcpkg/ports/rendergraph/portfile.cmake index 1d8ad99a4b..43c0402a9a 100644 --- a/data/vcpkg/ports/rendergraph/portfile.cmake +++ b/data/vcpkg/ports/rendergraph/portfile.cmake @@ -1,8 +1,8 @@ vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATH REPO DragonJoker/RenderGraph - REF 448f1b7f8b7f50ee247e84220c6643a412b458f8 + REF v${VERSION} HEAD_REF master - SHA512 73302f9c439e367ca4fe285a353ec6dbbfd67e9ec891b10c7e6fd81cc4dd8de0e3b94db881ebc43c04a3782de4cc2e306ea0c70c95000240d169381645eafe3c + SHA512 48bb3211022499538eebca0051f931ec105af9ccd3fea21d546fcd9cb41bc9d2191c70382e00caaf79fce48303e56d83d7089f7b975f635bcef3645c80abda30 ) vcpkg_from_github(OUT_SOURCE_PATH CMAKE_SOURCE_PATH @@ -31,7 +31,8 @@ vcpkg_cmake_configure( -DVULKAN_HEADERS_INCLUDE_DIRS=${CURRENT_INSTALLED_DIR}/include ) +vcpkg_copy_pdbs() vcpkg_cmake_install() vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/RenderGraph) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) \ No newline at end of file +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) diff --git a/data/vcpkg/ports/rendergraph/vcpkg.json b/data/vcpkg/ports/rendergraph/vcpkg.json index e588873aa2..7a574b60df 100644 --- a/data/vcpkg/ports/rendergraph/vcpkg.json +++ b/data/vcpkg/ports/rendergraph/vcpkg.json @@ -1,6 +1,6 @@ { "name": "rendergraph", - "version": "1.1.0", + "version": "1.3.0", "description": "Vulkan render graph implementation.", "homepage": "https://github.com/DragonJoker/RenderGraph", "license": "MIT", diff --git a/data/vcpkg/ports/shaderwriter/portfile.cmake b/data/vcpkg/ports/shaderwriter/portfile.cmake index ef212961bf..397a061e6c 100644 --- a/data/vcpkg/ports/shaderwriter/portfile.cmake +++ b/data/vcpkg/ports/shaderwriter/portfile.cmake @@ -1,10 +1,8 @@ -vcpkg_minimum_required(VERSION 2022-10-12) # for ${VERSION} - vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATH REPO DragonJoker/ShaderWriter - REF d040c89bb543b2e1d646714e36a190816b8e06ef + REF v${VERSION} HEAD_REF development - SHA512 9f95604f866f2cdc3b392c135ae34b93075a004f60319b00f5fbd2251361c68d7ca68ae00709adc435e387b3cf1b6659e643b7d200c0e6c734aa29f66491e947 + SHA512 7e7d5fec16998bf99225e01a990fcb29612eee8f59e32fbb4e9650a0d69ffc658588380fdfd9374cc5492bd4eac5c9c6dadeb583129c649e5d792346a2d1a743 ) vcpkg_from_github(OUT_SOURCE_PATH CMAKE_SOURCE_PATH @@ -19,27 +17,12 @@ file(COPY "${CMAKE_SOURCE_PATH}/" DESTINATION "${SOURCE_PATH}/CMake") string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" BUILD_STATIC) -set(BUILD_SPIRV OFF) -set(BUILD_GLSL OFF) -set(BUILD_HLSL OFF) - -if ("spirv" IN_LIST FEATURES) - set(BUILD_SPIRV ON) -elseif ("$ENV{BUILD_SDW_SPIRV}" STREQUAL "1") - set(BUILD_SPIRV ON) -endif() - -if ("glsl" IN_LIST FEATURES) - set(BUILD_GLSL ON) -elseif ("$ENV{BUILD_SDW_GLSL}" STREQUAL "1") - set(BUILD_GLSL ON) -endif() - -if ("glsl" IN_LIST FEATURES) - set(BUILD_HLSL ON) -elseif ("$ENV{BUILD_SDW_HLSL}" STREQUAL "1") - set(BUILD_HLSL ON) -endif() +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + spirv SDW_BUILD_EXPORTER_SPIRV + glsl SDW_BUILD_EXPORTER_HLSL + hlsl SDW_BUILD_EXPORTER_GLSL +) vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} @@ -48,12 +31,10 @@ vcpkg_cmake_configure( -DSDW_GENERATE_SOURCE=OFF -DSDW_BUILD_VULKAN_LAYER=OFF -DSDW_BUILD_TESTS=OFF - -DSDW_BUILD_EXPORTER_SPIRV=${BUILD_SPIRV} - -DSDW_BUILD_EXPORTER_HLSL=${BUILD_HLSL} - -DSDW_BUILD_EXPORTER_GLSL=${BUILD_GLSL} -DSDW_BUILD_STATIC_SDW=${BUILD_STATIC} -DSDW_BUILD_STATIC_SDAST=${BUILD_STATIC} -DSDW_UNITY_BUILD=ON + ${FEATURE_OPTIONS} ) vcpkg_copy_pdbs() diff --git a/data/vcpkg/ports/shaderwriter/vcpkg.json b/data/vcpkg/ports/shaderwriter/vcpkg.json index 9d2d046fce..9d1a0d45b3 100644 --- a/data/vcpkg/ports/shaderwriter/vcpkg.json +++ b/data/vcpkg/ports/shaderwriter/vcpkg.json @@ -1,10 +1,9 @@ { "name": "shaderwriter", - "version": "2.5.0", + "version": "2.6.0", "description": "Library to write shaders directly from C++ code, supports GLSL, HLSL and SPIRV outputs.", "homepage": "https://github.com/DragonJoker/ShaderWriter", "license": "MIT", - "default-features": [ "spirv" ], "dependencies": [ { "name": "vcpkg-cmake", @@ -15,15 +14,18 @@ "host": true } ], + "default-features": [ + "spirv" + ], "features": { - "spirv": { - "description": "Compiles SPIR-V exporter." - }, "glsl": { "description": "Compiles GLSL exporter." }, "hlsl": { "description": "Compiles HLSL exporter." + }, + "spirv": { + "description": "Compiles SPIR-V exporter." } } } diff --git a/demos/CastorDvpTD/CMakeLists.txt b/demos/CastorDvpTD/CMakeLists.txt index 4b50a11876..1db19d7ee4 100644 --- a/demos/CastorDvpTD/CMakeLists.txt +++ b/demos/CastorDvpTD/CMakeLists.txt @@ -3,7 +3,7 @@ project( CastorDvpTD ) set( ${PROJECT_NAME}_WXWIDGET 1 ) set( ${PROJECT_NAME}_DESCRIPTION "Castor Tower Defense" ) set( ${PROJECT_NAME}_VERSION_MAJOR 1 ) -set( ${PROJECT_NAME}_VERSION_MINOR 3 ) +set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( ${PROJECT_NAME}_HDR_FILES diff --git a/demos/CastorViewerSharp/CMakeLists.txt b/demos/CastorViewerSharp/CMakeLists.txt index 3ea3df9a60..d2629c0b1c 100644 --- a/demos/CastorViewerSharp/CMakeLists.txt +++ b/demos/CastorViewerSharp/CMakeLists.txt @@ -1,6 +1,6 @@ if ( MSVC AND ${CASTOR_BUILD_INTEROP_COM} ) set( CVS_VERSION_MAJOR 0 ) - set( CVS_VERSION_MINOR 5 ) + set( CVS_VERSION_MINOR 6 ) set( CVS_VERSION_BUILD 0 ) set( PROJECT_VERSION "${CVS_VERSION_MAJOR}.${CVS_VERSION_MINOR}.${CVS_VERSION_BUILD}" ) diff --git a/external/vcpkg b/external/vcpkg index 0641d1be81..a2addd4bc5 160000 --- a/external/vcpkg +++ b/external/vcpkg @@ -1 +1 @@ -Subproject commit 0641d1be81a49569d588e63b0fcabe0497551685 +Subproject commit a2addd4bc5c837747a19a093aa1a493d4c79bdee diff --git a/source/Core/Castor3D/CMakeLists.txt b/source/Core/Castor3D/CMakeLists.txt index 39624df90d..77c5d77fcb 100644 --- a/source/Core/Castor3D/CMakeLists.txt +++ b/source/Core/Castor3D/CMakeLists.txt @@ -6,7 +6,7 @@ set( ${PROJECT_NAME}_DESCRIPTION "Castor3D Core engine" ) set( ${PROJECT_NAME}_BRIEF "Multiplatform 3D engine" ) set( ${PROJECT_NAME}_ICON "${CMAKE_SOURCE_DIR}/data/Images/castor-small.png" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 14 ) +set( ${PROJECT_NAME}_VERSION_MINOR 15 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) if ( NOT DEFINED CASTOR_USE_WEIGHED_BLENDED_OIT ) diff --git a/source/Core/CastorUtils/CMakeLists.txt b/source/Core/CastorUtils/CMakeLists.txt index 4339fe9832..493b7bcbec 100644 --- a/source/Core/CastorUtils/CMakeLists.txt +++ b/source/Core/CastorUtils/CMakeLists.txt @@ -14,7 +14,7 @@ set( ${PROJECT_NAME}_DESCRIPTION "${MAIN_PROJECT_NAME} Utils" ) set( ${PROJECT_NAME}_BRIEF "Multiplatform utilities library" ) set( ${PROJECT_NAME}_ICON "${CMAKE_SOURCE_DIR}/data/Images/castor-dark-small.png" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 14 ) +set( ${PROJECT_NAME}_VERSION_MINOR 15 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) if ( ZLIB_FOUND AND FreeType_FOUND ) diff --git a/source/Core/SceneExporter/CMakeLists.txt b/source/Core/SceneExporter/CMakeLists.txt index 615befb832..5adb2e6d04 100644 --- a/source/Core/SceneExporter/CMakeLists.txt +++ b/source/Core/SceneExporter/CMakeLists.txt @@ -9,7 +9,7 @@ set( ${PROJECT_NAME}_DESCRIPTION "${MAIN_PROJECT_NAME} scene exporter" ) set( ${PROJECT_NAME}_BRIEF "Scene exporter for Castor3D" ) set( ${PROJECT_NAME}_ICON "${CMAKE_SOURCE_DIR}/data/Images/castor-dark-small.png" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 5 ) +set( ${PROJECT_NAME}_VERSION_MINOR 6 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( ${PROJECT_NAME}_HDR_FILES diff --git a/source/Interop/ComCastor3D/CMakeLists.txt b/source/Interop/ComCastor3D/CMakeLists.txt index f5d8aa4d85..3c43c74dc5 100644 --- a/source/Interop/ComCastor3D/CMakeLists.txt +++ b/source/Interop/ComCastor3D/CMakeLists.txt @@ -6,7 +6,7 @@ if ( MSVC ) if ( ATL_FOUND ) message( STATUS "+ Found ATL" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) - set( ${PROJECT_NAME}_VERSION_MINOR 5 ) + set( ${PROJECT_NAME}_VERSION_MINOR 6 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) configure_file( diff --git a/source/Plugins/Generic/AtmosphereScattering/CMakeLists.txt b/source/Plugins/Generic/AtmosphereScattering/CMakeLists.txt index 3e18df80a1..68a9585a99 100644 --- a/source/Plugins/Generic/AtmosphereScattering/CMakeLists.txt +++ b/source/Plugins/Generic/AtmosphereScattering/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Atmosphere scattering" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 2 ) +set( ${PROJECT_NAME}_VERSION_MINOR 3 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/Generic/FFTOceanRendering/CMakeLists.txt b/source/Plugins/Generic/FFTOceanRendering/CMakeLists.txt index 75ad177593..7ac63556a0 100644 --- a/source/Plugins/Generic/FFTOceanRendering/CMakeLists.txt +++ b/source/Plugins/Generic/FFTOceanRendering/CMakeLists.txt @@ -17,7 +17,7 @@ if ( CASTOR_USE_GLSLANG AND VKFFT_INCLUDE_DIRS ) set( ${PROJECT_NAME}_DESCRIPTION "FFT Ocean rendering for Castor3D" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) - set( ${PROJECT_NAME}_VERSION_MINOR 3 ) + set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/Generic/OceanRendering/CMakeLists.txt b/source/Plugins/Generic/OceanRendering/CMakeLists.txt index 6383ab05d8..c808f6b09a 100644 --- a/source/Plugins/Generic/OceanRendering/CMakeLists.txt +++ b/source/Plugins/Generic/OceanRendering/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Ocean rendering for Castor3D" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 3 ) +set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/Generic/ToonMaterial/CMakeLists.txt b/source/Plugins/Generic/ToonMaterial/CMakeLists.txt index 3e852fe673..9ad1a94b75 100644 --- a/source/Plugins/Generic/ToonMaterial/CMakeLists.txt +++ b/source/Plugins/Generic/ToonMaterial/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Toon material for Castor3D" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 3 ) +set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/Generic/WaterRendering/CMakeLists.txt b/source/Plugins/Generic/WaterRendering/CMakeLists.txt index b9ac85c226..742f1d0218 100644 --- a/source/Plugins/Generic/WaterRendering/CMakeLists.txt +++ b/source/Plugins/Generic/WaterRendering/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Water rendering for Castor3D" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 3 ) +set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/Importers/AssimpImporter/CMakeLists.txt b/source/Plugins/Importers/AssimpImporter/CMakeLists.txt index 80af4a1923..27d305c495 100644 --- a/source/Plugins/Importers/AssimpImporter/CMakeLists.txt +++ b/source/Plugins/Importers/AssimpImporter/CMakeLists.txt @@ -65,7 +65,7 @@ if( assimp_FOUND ) set( ${PROJECT_NAME}_DESCRIPTION "Assimp powered importer" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) - set( ${PROJECT_NAME}_VERSION_MINOR 8 ) + set( ${PROJECT_NAME}_VERSION_MINOR 9 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/BloomPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/BloomPostEffect/CMakeLists.txt index 05c95ef696..32a7d8bf51 100644 --- a/source/Plugins/PostEffects/BloomPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/BloomPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "HDR Bloom Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 6 ) +set( ${PROJECT_NAME}_VERSION_MINOR 7 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/DrawEdgesPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/DrawEdgesPostEffect/CMakeLists.txt index ae6fc687b5..74709982ee 100644 --- a/source/Plugins/PostEffects/DrawEdgesPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/DrawEdgesPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Edges drawing Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 2 ) +set( ${PROJECT_NAME}_VERSION_MINOR 3 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/FilmGrainPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/FilmGrainPostEffect/CMakeLists.txt index d163ee668c..9026d7186b 100644 --- a/source/Plugins/PostEffects/FilmGrainPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/FilmGrainPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "FilmGrain Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 4 ) +set( ${PROJECT_NAME}_VERSION_MINOR 5 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/FxaaPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/FxaaPostEffect/CMakeLists.txt index 1822ef9472..26a29798dc 100644 --- a/source/Plugins/PostEffects/FxaaPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/FxaaPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "FXAA Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 5 ) +set( ${PROJECT_NAME}_VERSION_MINOR 6 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/GrayScalePostEffect/CMakeLists.txt b/source/Plugins/PostEffects/GrayScalePostEffect/CMakeLists.txt index 985ac4fb8d..7c79913526 100644 --- a/source/Plugins/PostEffects/GrayScalePostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/GrayScalePostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "GrayScale Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 5 ) +set( ${PROJECT_NAME}_VERSION_MINOR 6 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/LightStreaksPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/LightStreaksPostEffect/CMakeLists.txt index 3c452bebfc..2fff0d6be2 100644 --- a/source/Plugins/PostEffects/LightStreaksPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/LightStreaksPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Light Streaks Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 4 ) +set( ${PROJECT_NAME}_VERSION_MINOR 5 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/CMakeLists.txt index 9c57e0ad9e..faeb8b2d71 100644 --- a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "Linear Motion Blur Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 3 ) +set( ${PROJECT_NAME}_VERSION_MINOR 4 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/PbrBloomPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/PbrBloomPostEffect/CMakeLists.txt index 6f169fb034..2de9011022 100644 --- a/source/Plugins/PostEffects/PbrBloomPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/PbrBloomPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "PBR Bloom Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 1 ) +set( ${PROJECT_NAME}_VERSION_MINOR 2 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/source/Plugins/PostEffects/SmaaPostEffect/CMakeLists.txt b/source/Plugins/PostEffects/SmaaPostEffect/CMakeLists.txt index cb6dd87339..f3a7ae5cd4 100644 --- a/source/Plugins/PostEffects/SmaaPostEffect/CMakeLists.txt +++ b/source/Plugins/PostEffects/SmaaPostEffect/CMakeLists.txt @@ -9,7 +9,7 @@ set( Castor3DBinsDependencies set( ${PROJECT_NAME}_DESCRIPTION "SMAA Post Effect" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 5 ) +set( ${PROJECT_NAME}_VERSION_MINOR 6 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/test/Castor3D/CMakeLists.txt b/test/Castor3D/CMakeLists.txt index 25e5553f5e..ba7e5c73ee 100644 --- a/test/Castor3D/CMakeLists.txt +++ b/test/Castor3D/CMakeLists.txt @@ -2,7 +2,7 @@ project( Castor3DTest ) set( ${PROJECT_NAME}_DESCRIPTION "${PROJECT_NAME} application" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 4 ) +set( ${PROJECT_NAME}_VERSION_MINOR 5 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( ${PROJECT_NAME}_HDR_FILES diff --git a/tools/CastorMeshConverter/CMakeLists.txt b/tools/CastorMeshConverter/CMakeLists.txt index e4e861077b..69610915e3 100644 --- a/tools/CastorMeshConverter/CMakeLists.txt +++ b/tools/CastorMeshConverter/CMakeLists.txt @@ -2,7 +2,7 @@ project( CastorMeshConverter ) set( ${PROJECT_NAME}_DESCRIPTION "Castor3D mesh file converter." ) set( ${PROJECT_NAME}_VERSION_MAJOR 1 ) -set( ${PROJECT_NAME}_VERSION_MINOR 2 ) +set( ${PROJECT_NAME}_VERSION_MINOR 3 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/tools/CastorMeshUpgrader/CMakeLists.txt b/tools/CastorMeshUpgrader/CMakeLists.txt index c12e39ee73..b5d3d3f895 100644 --- a/tools/CastorMeshUpgrader/CMakeLists.txt +++ b/tools/CastorMeshUpgrader/CMakeLists.txt @@ -2,7 +2,7 @@ project( CastorMeshUpgrader ) set( ${PROJECT_NAME}_DESCRIPTION "Castor3D mesh file upgrader." ) set( ${PROJECT_NAME}_VERSION_MAJOR 1 ) -set( ${PROJECT_NAME}_VERSION_MINOR 1 ) +set( ${PROJECT_NAME}_VERSION_MINOR 2 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/tools/CastorTestLauncher/CMakeLists.txt b/tools/CastorTestLauncher/CMakeLists.txt index 633b482318..a683bf7def 100644 --- a/tools/CastorTestLauncher/CMakeLists.txt +++ b/tools/CastorTestLauncher/CMakeLists.txt @@ -3,7 +3,7 @@ project( CastorTestLauncher ) set( ${PROJECT_NAME}_WXWIDGET 1 ) set( ${PROJECT_NAME}_DESCRIPTION "Test Scene Launcher for ${MAIN_PROJECT_NAME}" ) set( ${PROJECT_NAME}_VERSION_MAJOR 1 ) -set( ${PROJECT_NAME}_VERSION_MINOR 2 ) +set( ${PROJECT_NAME}_VERSION_MINOR 3 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/tools/CastorViewer/CMakeLists.txt b/tools/CastorViewer/CMakeLists.txt index 2827c67e61..4376327e92 100644 --- a/tools/CastorViewer/CMakeLists.txt +++ b/tools/CastorViewer/CMakeLists.txt @@ -3,7 +3,7 @@ project( CastorViewer ) set( ${PROJECT_NAME}_WXWIDGET 1 ) set( ${PROJECT_NAME}_DESCRIPTION "Scene Viewer for ${MAIN_PROJECT_NAME}" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 11 ) +set( ${PROJECT_NAME}_VERSION_MINOR 12 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( ${PROJECT_NAME}_HDR_FILES diff --git a/tools/GuiCommon/CMakeLists.txt b/tools/GuiCommon/CMakeLists.txt index e6011e05f1..8bfe5ad441 100644 --- a/tools/GuiCommon/CMakeLists.txt +++ b/tools/GuiCommon/CMakeLists.txt @@ -30,7 +30,7 @@ set( CastorBinLibraries set( ${PROJECT_NAME}_DESCRIPTION "${MAIN_PROJECT_NAME} Common GUI tools" ) set( ${PROJECT_NAME}_VERSION_MAJOR 0 ) -set( ${PROJECT_NAME}_VERSION_MINOR 14 ) +set( ${PROJECT_NAME}_VERSION_MINOR 15 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( ${PROJECT_NAME}_HDR_FILES diff --git a/tools/ImgConverter/CMakeLists.txt b/tools/ImgConverter/CMakeLists.txt index 781e4da955..da3d7d2a44 100644 --- a/tools/ImgConverter/CMakeLists.txt +++ b/tools/ImgConverter/CMakeLists.txt @@ -3,7 +3,7 @@ project( ImgConverter ) set( ${PROJECT_NAME}_WXWIDGET 1 ) set( ${PROJECT_NAME}_DESCRIPTION "Converter from image files to ICO/XPM files" ) set( ${PROJECT_NAME}_VERSION_MAJOR 1 ) -set( ${PROJECT_NAME}_VERSION_MINOR 2 ) +set( ${PROJECT_NAME}_VERSION_MINOR 3 ) set( ${PROJECT_NAME}_VERSION_BUILD 0 ) set( PROJECT_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) diff --git a/vcpkg.json b/vcpkg.json index 9e8ff63423..b49ddbc1be 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,47 +1,68 @@ { - "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", - "name": "castor3d", - "version": "0.14.0", - "builtin-baseline": "28324ed4b463a6cf2fc7c3164c13271f3ad4c66a", - "dependencies": [ "convectionkernels", "freetype", "gli", "meshoptimizer", "minizip", "zlib" ], - "default-features": [ "assimp", "freeimage", "glsl", "vkfft" ], - "vcpkg-configuration": { - "overlay-ports": [ - "./data/vcpkg/ports/ashes", - "./data/vcpkg/ports/shaderwriter", - "./data/vcpkg/ports/rendergraph" - ] + "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", + "name": "castor3d", + "version": "0.15.0", + "builtin-baseline": "a2addd4bc5c837747a19a093aa1a493d4c79bdee", + "dependencies": [ + "convectionkernels", + "freetype", + "gli", + "meshoptimizer", + "minizip", + "zlib" + ], + "default-features": [ + "assimp", + "freeimage", + "glsl", + "vkfft" + ], + "vcpkg-configuration": { + "overlay-ports": [ + "./data/vcpkg/ports/ashes", + "./data/vcpkg/ports/shaderwriter", + "./data/vcpkg/ports/rendergraph" + ] + }, + "features": { + "assimp": { + "description": "Use Assimp library to import external scenes.", + "dependencies": [ + "assimp" + ] }, - "features": { - "assimp": { - "description": "Use Assimp library to import external scenes.", - "dependencies": [ "assimp" ] - }, - "freeimage": { - "description": "Use FreeImage library over stb_image to import TIF, PNG or RAW images.", - "dependencies": [ "freeimage" ] - }, - "glsl": { - "description": "Enable GLSL shaders import support.", - "dependencies": [ "glslang", "spirv-cross" ] - }, - "vkfft": { - "description": "Use VkFFT to compute Fast Fourier Transforms (Necessary for FFTOcean plugin).", - "dependencies": [ "vkfft" ] - }, - "tools": { - "description": "The tools provided with the engine.", - "dependencies": [ "wxwidgets" ] - }, - "vcpkg-deps": { - "description": "Use vcpkg's ashes/rendergraph/shaderwriter.", - "dependencies": [ "ashes", - "rendergraph", - { - "name": "shaderwriter", - "features": [ "spirv", "glsl", "hlsl" ] - } - ] + "freeimage": { + "description": "Use FreeImage library over stb_image to import TIF, PNG or RAW images.", + "dependencies": [ + "freeimage" + ] + }, + "glsl": { + "description": "Enable GLSL shaders import support.", + "dependencies": [ + "glslang", + "spirv-cross" + ] + }, + "vkfft": { + "description": "Use VkFFT to compute Fast Fourier Transforms (Necessary for FFTOcean plugin).", + "dependencies": [ + "vkfft" + ] + }, + "vcpkg-deps": { + "description": "Use vcpkg's ashes/rendergraph/shaderwriter.", + "dependencies": [ "ashes", + "rendergraph", + { + "name": "shaderwriter", + "features": [ + "spirv", + "glsl", + "hlsl" + ] } + ] } + } } From dc5aede4448d12f4da17d3a7a82d223c624cb1af Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 2 Apr 2023 15:34:50 +0200 Subject: [PATCH 04/35] Castor3D: Fixed some issues discovered while running tests. --- .../Event/UserInput/UserInputListener.hpp | 18 +++-- include/Core/Castor3D/Gui/Layout/Layout.hpp | 2 +- .../Core/Castor3D/Gui/Theme/StylesHolder.hpp | 15 +++++ source/Core/Castor3D/Cache/LightCache.cpp | 5 +- source/Core/Castor3D/Engine.cpp | 5 ++ .../Event/UserInput/UserInputListener.cpp | 4 +- source/Core/Castor3D/Gui/ControlsManager.cpp | 33 +++++++++- source/Core/Castor3D/Gui/Layout/Layout.cpp | 9 +++ .../Core/Castor3D/Overlay/DebugOverlays.cpp | 4 +- source/Core/Castor3D/Scene/Scene.cpp | 6 ++ test/Castor3D/Castor3DTestCommon.cpp | 12 +++- test/Castor3D/main.cpp | 66 ++++++++++++------- test/CastorTest/UnitTest.cpp | 2 + test/CastorUtils/CastorUtilsArrayViewTest.cpp | 3 + .../CastorUtilsBuddyAllocatorTest.cpp | 7 ++ .../CastorUtilsDynamicBitsetTest.cpp | 13 ++++ test/CastorUtils/CastorUtilsMatrixTest.cpp | 11 ++-- test/CastorUtils/CastorUtilsMatrixTest.hpp | 2 + .../CastorUtils/CastorUtilsQuaternionTest.cpp | 1 + .../CastorUtils/CastorUtilsQuaternionTest.hpp | 2 + test/CastorUtils/CastorUtilsSignalTest.hpp | 5 -- .../CastorUtilsTestPrerequisites.hpp | 1 + vcpkg.json | 2 +- 23 files changed, 180 insertions(+), 48 deletions(-) diff --git a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp index 5cc2f6333d..832ed4236f 100644 --- a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp +++ b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp @@ -524,16 +524,13 @@ namespace castor3d /** *\~english *\~brief Removes a handler. - *\remarks You *MUST* call this function when adding a handler to your lists, if you want to have it updated. *\param[in] handler The handler. *\~french *\~brief Supprime un gestionnaire. - *\remarks Vous *DEVEZ* appeler cette fonction lors de l'ajout d'un gestionnaire dans vos listes, si vous voulez qu'il soit mis à jour. *\param[in] handler Le gestionnaire. */ - inline void doRemoveHandler( EventHandler const & handler ) + inline void doRemoveHandlerNL( EventHandler const & handler ) { - auto lock( castor::makeUniqueLock( m_mutexHandlers ) ); m_handlers.erase( std::find_if( std::begin( m_handlers ) , std::end( m_handlers ) , [&handler]( auto lookup ) @@ -541,6 +538,19 @@ namespace castor3d return lookup.get() == &handler; } ) ); } + /** + *\~english + *\~brief Removes a handler. + *\param[in] handler The handler. + *\~french + *\~brief Supprime un gestionnaire. + *\param[in] handler Le gestionnaire. + */ + inline void doRemoveHandler( EventHandler const & handler ) + { + auto lock( castor::makeUniqueLock( m_mutexHandlers ) ); + doRemoveHandlerNL( handler ); + } private: /** diff --git a/include/Core/Castor3D/Gui/Layout/Layout.hpp b/include/Core/Castor3D/Gui/Layout/Layout.hpp index 9a26e6b59e..46cb1cb803 100644 --- a/include/Core/Castor3D/Gui/Layout/Layout.hpp +++ b/include/Core/Castor3D/Gui/Layout/Layout.hpp @@ -191,11 +191,11 @@ namespace castor3d /**@name General */ //@{ - C3D_API virtual ~Layout()noexcept = default; C3D_API Layout( Layout const & )noexcept = delete; C3D_API Layout & operator=( Layout const & )noexcept = delete; C3D_API Layout( Layout && )noexcept = delete; C3D_API Layout & operator=( Layout && )noexcept = delete; + C3D_API virtual ~Layout()noexcept; /** Constructor *\param[in] typeName diff --git a/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp b/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp index 44bebd9c10..53ed0ddcb3 100644 --- a/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp +++ b/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp @@ -197,6 +197,21 @@ namespace castor3d return m_holderName; } + void cleanupStyles()noexcept + { + m_buttonStyles.clear(); + m_comboBoxStyles.clear(); + m_editStyles.clear(); + m_expandablePanelStyles.clear(); + m_frameStyles.clear(); + m_listBoxStyles.clear(); + m_panelStyles.clear(); + m_progressStyles.clear(); + m_scrollBarStyles.clear(); + m_sliderStyles.clear(); + m_staticStyles.clear(); + } + private: template< typename StyleT > StyleT * createControlStyle( castor::String name diff --git a/source/Core/Castor3D/Cache/LightCache.cpp b/source/Core/Castor3D/Cache/LightCache.cpp index 88c88f147b..0bb6ac4ec3 100644 --- a/source/Core/Castor3D/Cache/LightCache.cpp +++ b/source/Core/Castor3D/Cache/LightCache.cpp @@ -120,8 +120,9 @@ namespace castor3d LightsArray ObjectCacheT< Light, castor::String, LightCacheTraits >::getLights( LightType type )const { - CU_Require( m_lightBuffer ); - return m_lightBuffer->getLights( type ); + return ( m_lightBuffer + ? m_lightBuffer->getLights( type ) + : LightsArray{} ); } void ObjectCacheT< Light, castor::String, LightCacheTraits >::createPassBinding( crg::FramePass & pass diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index 38c78851f0..d31ff0a711 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -416,6 +416,11 @@ namespace castor3d m_brdf.destroy(); m_renderLoop.reset(); + if ( auto userInputs = getUserInputListener() ) + { + userInputs->cleanup(); + } + m_targetCache->clear(); m_samplerCache->clear(); m_shaderCache->clear(); diff --git a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp index a57c651176..795b167811 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp @@ -52,6 +52,8 @@ namespace castor3d doCleanup(); + m_activeHandler = {}; + m_lastMouseTarget = {}; using LockType = std::unique_lock< std::mutex >; LockType lock{ castor::makeUniqueLock( m_mutexHandlers ) }; auto it = m_handlers.begin(); @@ -59,7 +61,7 @@ namespace castor3d while ( it != m_handlers.end() ) { auto handler = *it; - doRemoveHandler( *handler ); + doRemoveHandlerNL( *handler ); it = m_handlers.begin(); } } diff --git a/source/Core/Castor3D/Gui/ControlsManager.cpp b/source/Core/Castor3D/Gui/ControlsManager.cpp index 43e5a28967..487d4f2651 100644 --- a/source/Core/Castor3D/Gui/ControlsManager.cpp +++ b/source/Core/Castor3D/Gui/ControlsManager.cpp @@ -955,12 +955,39 @@ namespace castor3d void ControlsManager::doCleanup() { - ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexHandlers ) }; + for ( auto cit : m_controlsById ) + { + if ( auto control = cit.second.lock() ) + { + control->destroy(); + } + } - for ( auto handler : m_handlers ) + auto lock( castor::makeUniqueLock( m_mutexControlsById ) ); + + m_onButtonClicks.clear(); + m_onComboSelects.clear(); + m_onEditUpdates.clear(); + m_onListSelects.clear(); + m_onScrollTracks.clear(); + m_onScrollReleases.clear(); + m_onSliderTracks.clear(); + m_onSliderReleases.clear(); + m_onPanelExpands.clear(); + m_onPanelRetracts.clear(); + m_themes.clear(); + + if ( auto event = m_event.exchange( nullptr ) ) { - std::static_pointer_cast< Control >( handler )->destroy(); + event->skip(); } + + m_controlsByZIndex.clear(); + m_rootControls.clear(); + m_controlsById.clear(); + m_movedControl = {}; + m_resizedControl = {}; + cleanupStyles(); } EventHandler * ControlsManager::doGetMouseTargetableHandler( castor::Position const & position )const diff --git a/source/Core/Castor3D/Gui/Layout/Layout.cpp b/source/Core/Castor3D/Gui/Layout/Layout.cpp index c199c16b3c..2ec06c056c 100644 --- a/source/Core/Castor3D/Gui/Layout/Layout.cpp +++ b/source/Core/Castor3D/Gui/Layout/Layout.cpp @@ -33,6 +33,15 @@ namespace castor3d { } + Layout::~Layout()noexcept + { + if ( m_event ) + { + m_event->skip(); + m_event = nullptr; + } + } + void Layout::markDirty() { if ( !m_event ) diff --git a/source/Core/Castor3D/Overlay/DebugOverlays.cpp b/source/Core/Castor3D/Overlay/DebugOverlays.cpp index 2afc5836e7..4eb1b781cf 100644 --- a/source/Core/Castor3D/Overlay/DebugOverlays.cpp +++ b/source/Core/Castor3D/Overlay/DebugOverlays.cpp @@ -614,7 +614,7 @@ namespace castor3d } else { - log::warn << "Couldn't find pass [" << name << "]" << std::endl; + log::warn << "DebugOverlays::removeTimer: Couldn't find pass [" << name << "]" << std::endl; } } else @@ -637,7 +637,7 @@ namespace castor3d } else { - log::warn << "Couldn't find category [" << current << "]" << std::endl; + log::warn << "DebugOverlays::removeTimer: Couldn't find category [" << current << "]" << std::endl; } } diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index 29f045d459..6f049bac71 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -1055,6 +1055,12 @@ namespace castor3d { auto & cache = getParticleSystemCache(); auto lock( castor::makeUniqueLock( cache ) ); + + if ( !m_timerParticlesGpu ) + { + return; + } + auto count = 2u * cache.getObjectCountNoLock(); if ( m_timerParticlesGpu->getCount() < count ) diff --git a/test/Castor3D/Castor3DTestCommon.cpp b/test/Castor3D/Castor3DTestCommon.cpp index edd21aa681..8a0556a79a 100644 --- a/test/Castor3D/Castor3DTestCommon.cpp +++ b/test/Castor3D/Castor3DTestCommon.cpp @@ -1,5 +1,7 @@ #include "Castor3DTestCommon.hpp" +#include + #include using namespace castor; @@ -89,9 +91,15 @@ namespace Testing TestCase::doRegisterTest( name , [this, test]() { - m_engine.initialise( 1, false ); + auto guard = castor::makeBlockGuard( [this]() + { + m_engine.initialise( 1, false ); + } + , [this]() + { + m_engine.cleanup(); + } ); test(); - m_engine.cleanup(); } ); } diff --git a/test/Castor3D/main.cpp b/test/Castor3D/main.cpp index 0bce503c9d..6c08a43c41 100644 --- a/test/Castor3D/main.cpp +++ b/test/Castor3D/main.cpp @@ -17,51 +17,73 @@ using namespace castor3d; namespace { - void doloadPlugins( Engine & engine ) + castor::PathArray listPluginsFiles( castor::Path const & folder ) { - PathArray arrayFiles; - File::listDirectoryFiles( Engine::getPluginsDirectory(), arrayFiles ); - PathArray arrayKept; + static castor::String castor3DLibPrefix{ CU_LibPrefix + castor::String{ cuT( "castor3d" ) } }; + castor::PathArray files; + castor::File::listDirectoryFiles( folder, files ); + castor::PathArray result; + castor::String endRel = "." + castor::String{ CU_SharedLibExt }; + castor::String endDbg = "d" + endRel; // Exclude debug plug-in in release builds, and release plug-ins in debug builds - for ( auto file : arrayFiles ) + for ( auto file : files ) { + auto fileName = file.getFileName( true ); + bool res = castor::string::endsWith( fileName, endDbg ); #if defined( NDEBUG ) + res = castor::string::endsWith( fileName, endRel ) && !res; +#endif + if ( res && fileName.find( castor3DLibPrefix ) == 0u ) + { + result.push_back( file ); + } + } - if ( file.find( String( cuT( "d." ) ) + CU_SharedLibExt ) == String::npos ) -#else + return result; + } - if ( file.find( String( cuT( "d." ) ) + CU_SharedLibExt ) != String::npos ) + void loadPlugins( Engine & engine ) + { + castor::PathArray arrayKept = listPluginsFiles( castor3d::Engine::getPluginsDirectory() ); -#endif +#if !defined( NDEBUG ) + + // When debug is installed, plugins are installed in lib/Debug/Castor3D + if ( arrayKept.empty() ) + { + castor::Path pathBin = castor::File::getExecutableDirectory(); + + while ( pathBin.getFileName() != cuT( "bin" ) ) { - arrayKept.push_back( file ); + pathBin = pathBin.getPath(); } + + castor::Path pathUsr = pathBin.getPath(); + arrayKept = listPluginsFiles( pathUsr / cuT( "lib" ) / cuT( "Castor3D" ) ); } +#endif + if ( !arrayKept.empty() ) { - PathArray arrayFailed; - PathArray otherPlugins; + castor::PathArray arrayFailed; for ( auto file : arrayKept ) { - if ( file.getExtension() == CU_SharedLibExt ) + if ( !engine.getPluginCache().loadPlugin( file ) ) { - if ( !engine.getPluginCache().loadPlugin( file ) ) - { - arrayFailed.push_back( file ); - } + arrayFailed.push_back( file ); } } if ( !arrayFailed.empty() ) { - Logger::logWarning( cuT( "Some plug-ins couldn't be loaded :" ) ); + castor::Logger::logWarning( cuT( "Some plug-ins couldn't be loaded :" ) ); for ( auto file : arrayFailed ) { - Logger::logWarning( file.getFileName() ); + castor::Logger::logWarning( file.getFileName() ); } arrayFailed.clear(); @@ -71,7 +93,7 @@ namespace Logger::logInfo( cuT( "Plugins loaded" ) ); } - std::unique_ptr< Engine > doInitialiseCastor() + std::unique_ptr< Engine > initialiseCastor() { if ( !File::directoryExists( Engine::getEngineDirectory() ) ) { @@ -82,7 +104,7 @@ namespace , Version{ Castor3DTest_VERSION_MAJOR, Castor3DTest_VERSION_MINOR, Castor3DTest_VERSION_BUILD } , true , true ); - doloadPlugins( *result ); + loadPlugins( *result ); auto & renderers = result->getRenderersList(); @@ -118,7 +140,7 @@ int main( int argc, char const * argv[] ) Logger::setFileName( castor::File::getExecutableDirectory() / cuT( "Castor3DTests.log" ) ); { - std::unique_ptr< Engine > engine = doInitialiseCastor(); + std::unique_ptr< Engine > engine = initialiseCastor(); // Test cases. Testing::registerType( std::make_unique< Testing::BinaryExportTest >( *engine ) ); diff --git a/test/CastorTest/UnitTest.cpp b/test/CastorTest/UnitTest.cpp index 3db837bbff..f00daa7943 100644 --- a/test/CastorTest/UnitTest.cpp +++ b/test/CastorTest/UnitTest.cpp @@ -1,5 +1,7 @@ #include "UnitTest.hpp" +#include + #include #include #include diff --git a/test/CastorUtils/CastorUtilsArrayViewTest.cpp b/test/CastorUtils/CastorUtilsArrayViewTest.cpp index d89c7a784b..a76270a1b9 100644 --- a/test/CastorUtils/CastorUtilsArrayViewTest.cpp +++ b/test/CastorUtils/CastorUtilsArrayViewTest.cpp @@ -21,6 +21,7 @@ namespace Testing void CastorUtilsArrayViewTest::BasicTest() { { + CT_ON( cuT( " Check build from dynamically allocated buffer" ) ); uint64_t const size = 8; int * tmp = new int[size]; ArrayView< int > view1 = castor::makeArrayView( tmp, size ); @@ -44,6 +45,7 @@ namespace Testing delete[] tmp; } { + CT_ON( cuT( " Check build from statically allocated buffer" ) ); static size_t const size = 8; int tmp[size]; ArrayView< int > view1 = makeArrayView( tmp ); @@ -66,6 +68,7 @@ namespace Testing CT_CHECK( *view1.rbegin() == tmp[--index] ); } { + CT_ON( cuT( " Check build buffer part" ) ); size_t const size = 0; int * tmp = new int[size + 1]; ArrayView< int > view1 = makeArrayView( tmp, size ); diff --git a/test/CastorUtils/CastorUtilsBuddyAllocatorTest.cpp b/test/CastorUtils/CastorUtilsBuddyAllocatorTest.cpp index fcba9eaf08..c128e02368 100644 --- a/test/CastorUtils/CastorUtilsBuddyAllocatorTest.cpp +++ b/test/CastorUtils/CastorUtilsBuddyAllocatorTest.cpp @@ -21,6 +21,7 @@ namespace Testing void CastorUtilsBuddyAllocatorTest::SizeTest() { { + CT_ON( cuT( " Block size of 1, 4 levels" ) ); BuddyAllocator allocator{ 4, 1 }; CT_EQUAL( allocator.getSize(), 16u ); for ( auto i = 1u; i < allocator.getSize(); ++i ) @@ -29,6 +30,7 @@ namespace Testing } } { + CT_ON( cuT( " Block size of 2, 4 levels" ) ); BuddyAllocator allocator{ 4, 2 }; CT_EQUAL( allocator.getSize(), 32u ); for ( auto i = 1u; i < allocator.getSize(); ++i ) @@ -37,6 +39,7 @@ namespace Testing } } { + CT_ON( cuT( " Block size of 2, 5 levels" ) ); BuddyAllocator allocator{ 5, 2 }; CT_EQUAL( allocator.getSize(), 64u ); for ( auto i = 1u; i < allocator.getSize(); ++i ) @@ -45,6 +48,7 @@ namespace Testing } } { + CT_ON( cuT( " Block size of 3, 5 levels" ) ); BuddyAllocator allocator{ 5, 3 }; CT_EQUAL( allocator.getSize(), 96u ); for ( auto i = 1u; i < allocator.getSize(); ++i ) @@ -53,14 +57,17 @@ namespace Testing } } { + CT_ON( cuT( " Block size of 8, 16 levels" ) ); BuddyAllocator allocator{ 16, 8 }; CT_EQUAL( allocator.getSize(), 524288u ); } { + CT_ON( cuT( " Block size of 128, 16 levels" ) ); BuddyAllocator allocator{ 16, 128 }; CT_EQUAL( allocator.getSize(), 8388608u ); } { + CT_ON( cuT( " Block size of 96, 20 levels" ) ); BuddyAllocator allocator{ 20, 96 }; CT_EQUAL( allocator.getSize(), 100663296u ); } diff --git a/test/CastorUtils/CastorUtilsDynamicBitsetTest.cpp b/test/CastorUtils/CastorUtilsDynamicBitsetTest.cpp index 475609ea4f..c0632ab2cf 100644 --- a/test/CastorUtils/CastorUtilsDynamicBitsetTest.cpp +++ b/test/CastorUtils/CastorUtilsDynamicBitsetTest.cpp @@ -28,16 +28,19 @@ namespace Testing void CastorUtilsDynamicBitsetTest::sizeTest() { { + CT_ON( cuT( " Size of 8, bits unset" ) ); DynamicBitset bitset{ 8u }; CT_REQUIRE( bitset.getSize() == 8u ); CT_REQUIRE( bitset.getBlockCount() == 1u ); } { + CT_ON( cuT( " Size of 8, bits set" ) ); DynamicBitset bitset{ 8u, true }; CT_REQUIRE( bitset.getSize() == 8u ); CT_REQUIRE( bitset.getBlockCount() == 1u ); } { + CT_ON( cuT( " Size of 37, bits set" ) ); DynamicBitset bitset{ 37u, true }; CT_REQUIRE( bitset.getSize() == 37u ); CT_REQUIRE( bitset.getBlockCount() == 2u ); @@ -47,6 +50,7 @@ namespace Testing void CastorUtilsDynamicBitsetTest::initValueTest() { { + CT_ON( cuT( " Size of 8, bits unset" ) ); DynamicBitset bitset{ 8u }; for ( size_t i = 0u; i < bitset.getSize(); ++i ) @@ -58,6 +62,7 @@ namespace Testing CT_EQUAL( bitset.toString(), test ); } { + CT_ON( cuT( " Size of 8, bits set" ) ); DynamicBitset bitset{ 8u, true }; for ( size_t i = 0u; i < bitset.getSize(); ++i ) @@ -69,6 +74,7 @@ namespace Testing CT_EQUAL( bitset.toString(), test ); } { + CT_ON( cuT( " Size of 37, bits set" ) ); DynamicBitset bitset{ 37u, true }; for ( size_t i = 0u; i < bitset.getSize(); ++i ) @@ -80,6 +86,7 @@ namespace Testing CT_EQUAL( bitset.toString(), test ); } { + CT_ON( cuT( " From string" ) ); String test = cuT( "011011010101010101010010101010101010110110" ); DynamicBitset bitset{ test }; CT_EQUAL( bitset.toString(), test ); @@ -90,16 +97,19 @@ namespace Testing void CastorUtilsDynamicBitsetTest::leftShiftTest() { { + CT_ON( cuT( " Shift by 5" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset <<= 5; CT_EQUAL( bitset.toString(), cuT( "101010101010101001010101010101011011000000" ) ); } { + CT_ON( cuT( " Shift by 35" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset <<= 35; CT_EQUAL( bitset.toString(), cuT( "011011000000000000000000000000000000000000" ) ); } { + CT_ON( cuT( " Shift by size" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset <<= int( bitset.getSize() ); CT_EQUAL( bitset.toString(), cuT( "000000000000000000000000000000000000000000" ) ); @@ -109,16 +119,19 @@ namespace Testing void CastorUtilsDynamicBitsetTest::rightShiftTest() { { + CT_ON( cuT( " Shift by 5" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset >>= 5; CT_EQUAL( bitset.toString(), cuT( "000000110110101010101010100101010101010101" ) ); } { + CT_ON( cuT( " Shift by 35" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset >>= 35; CT_EQUAL( bitset.toString(), cuT( "000000000000000000000000000000000000110110" ) ); } { + CT_ON( cuT( " Shift by size" ) ); DynamicBitset bitset{ cuT( "011011010101010101010010101010101010110110" ) }; bitset >>= int( bitset.getSize() ); CT_EQUAL( bitset.toString(), cuT( "000000000000000000000000000000000000000000" ) ); diff --git a/test/CastorUtils/CastorUtilsMatrixTest.cpp b/test/CastorUtils/CastorUtilsMatrixTest.cpp index b52e69a833..c92c139e48 100644 --- a/test/CastorUtils/CastorUtilsMatrixTest.cpp +++ b/test/CastorUtils/CastorUtilsMatrixTest.cpp @@ -5,6 +5,7 @@ #if defined( CASTOR_USE_GLM ) # define GLM_FORCE_RADIANS +# define GLM_FORCE_DEPTH_ZERO_TO_ONE # include # include # include @@ -217,7 +218,7 @@ namespace Testing void CastorUtilsMatrixTest::TransformationMatrixComparison() { - Logger::logInfo( cuT( " Translate" ) ); + CT_ON( cuT( " Translate" ) ); for ( float r = 0; r < 100; r += 1 ) { @@ -229,7 +230,7 @@ namespace Testing CT_EQUAL( mtx, mat ); } - Logger::logInfo( cuT( " Scale" ) ); + CT_ON( cuT( " Scale" ) ); for ( float r = 0; r < 100; r += 1 ) { @@ -250,7 +251,7 @@ namespace Testing float bottom = 1080.0f; float near = 1.0f; float far = 1000.0f; - Logger::logInfo( cuT( " Ortho RH" ) ); + CT_ON( cuT( " Ortho RH" ) ); { Matrix4x4f mtx( 1 ); matrix::ortho( mtx, left, right, bottom, top, near, far ); @@ -258,7 +259,7 @@ namespace Testing mat = glm::ortho( left, right, bottom, top, near, far ); CT_EQUAL( mtx, mat ); } - Logger::logInfo( cuT( " Frustum" ) ); + CT_ON( cuT( " Frustum" ) ); { Matrix4x4f mtx( 1 ); matrix::frustum( mtx, left, right, bottom, top, near, far ); @@ -266,7 +267,7 @@ namespace Testing mat = glm::frustum( left, right, bottom, top, near, far ); CT_EQUAL( mtx, mat ); } - Logger::logInfo( cuT( " Perspective" ) ); + CT_ON( cuT( " Perspective" ) ); { Angle fov{ 90.0_degrees }; float aspect = 4.0f / 3.0f; diff --git a/test/CastorUtils/CastorUtilsMatrixTest.hpp b/test/CastorUtils/CastorUtilsMatrixTest.hpp index 54dfc5dafd..e2e5507502 100644 --- a/test/CastorUtils/CastorUtilsMatrixTest.hpp +++ b/test/CastorUtils/CastorUtilsMatrixTest.hpp @@ -6,6 +6,8 @@ #include #if defined( CASTOR_USE_GLM ) +# define GLM_FORCE_RADIANS +# define GLM_FORCE_DEPTH_ZERO_TO_ONE # include #endif diff --git a/test/CastorUtils/CastorUtilsQuaternionTest.cpp b/test/CastorUtils/CastorUtilsQuaternionTest.cpp index 62cbfe5fa2..b184aeeb94 100644 --- a/test/CastorUtils/CastorUtilsQuaternionTest.cpp +++ b/test/CastorUtils/CastorUtilsQuaternionTest.cpp @@ -2,6 +2,7 @@ #if defined( CASTOR_USE_GLM ) # define GLM_FORCE_RADIANS +# define GLM_FORCE_DEPTH_ZERO_TO_ONE # include # include # include diff --git a/test/CastorUtils/CastorUtilsQuaternionTest.hpp b/test/CastorUtils/CastorUtilsQuaternionTest.hpp index b981f44929..c2bfcf627f 100644 --- a/test/CastorUtils/CastorUtilsQuaternionTest.hpp +++ b/test/CastorUtils/CastorUtilsQuaternionTest.hpp @@ -6,6 +6,8 @@ #include #if defined( CASTOR_USE_GLM ) +# define GLM_FORCE_RADIANS +# define GLM_FORCE_DEPTH_ZERO_TO_ONE # include #endif diff --git a/test/CastorUtils/CastorUtilsSignalTest.hpp b/test/CastorUtils/CastorUtilsSignalTest.hpp index f015387925..d557935a73 100644 --- a/test/CastorUtils/CastorUtilsSignalTest.hpp +++ b/test/CastorUtils/CastorUtilsSignalTest.hpp @@ -4,11 +4,6 @@ #include "CastorUtilsTestPrerequisites.hpp" -#include -#if defined( CASTOR_USE_GLM ) -# include -#endif - namespace Testing { class CastorUtilsSignalTest diff --git a/test/CastorUtils/CastorUtilsTestPrerequisites.hpp b/test/CastorUtils/CastorUtilsTestPrerequisites.hpp index 606ae69794..99a301dab1 100644 --- a/test/CastorUtils/CastorUtilsTestPrerequisites.hpp +++ b/test/CastorUtils/CastorUtilsTestPrerequisites.hpp @@ -14,6 +14,7 @@ #if defined( CASTOR_USE_GLM ) # define GLM_FORCE_RADIANS +# define GLM_FORCE_DEPTH_ZERO_TO_ONE # pragma warning( push ) # pragma warning( disable:4201 ) # pragma warning( disable:4464 ) diff --git a/vcpkg.json b/vcpkg.json index b49ddbc1be..a008d35487 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,7 +2,7 @@ "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", "name": "castor3d", "version": "0.15.0", - "builtin-baseline": "a2addd4bc5c837747a19a093aa1a493d4c79bdee", + "builtin-baseline": "648fd374b2e1d8507def23793c8af0cfa89fd0bb", "dependencies": [ "convectionkernels", "freetype", From 0e85f1680f14e44b1499ac6771269df9f92ba085 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Mon, 3 Apr 2023 18:58:34 +0200 Subject: [PATCH 05/35] Castor3D: Fixed reloading of a simple scene --- .../Core/Castor3D/Overlay/DebugOverlays.hpp | 3 +- include/Core/Castor3D/Render/RenderTarget.hpp | 3 ++ .../Core/Castor3D/Overlay/DebugOverlays.cpp | 24 ++++----- source/Core/Castor3D/Render/RenderTarget.cpp | 50 ++++++++++++------- source/Core/Castor3D/Render/RenderWindow.cpp | 2 +- source/Core/Castor3D/Scene/Scene.cpp | 14 +++--- 6 files changed, 58 insertions(+), 38 deletions(-) diff --git a/include/Core/Castor3D/Overlay/DebugOverlays.hpp b/include/Core/Castor3D/Overlay/DebugOverlays.hpp index 7327d03f9a..161b9dcfe4 100644 --- a/include/Core/Castor3D/Overlay/DebugOverlays.hpp +++ b/include/Core/Castor3D/Overlay/DebugOverlays.hpp @@ -288,7 +288,8 @@ namespace castor3d using PassOverlaysPtr = std::unique_ptr< PassOverlays >; class CategoryOverlays; - using CategoriesOverlays = std::vector< CategoryOverlays >; + using CategoryOverlaysPtr = std::unique_ptr< CategoryOverlays >; + using CategoriesOverlays = std::vector< CategoryOverlaysPtr >; class CategoryOverlays { diff --git a/include/Core/Castor3D/Render/RenderTarget.hpp b/include/Core/Castor3D/Render/RenderTarget.hpp index 0b9d837526..12e895e6f6 100644 --- a/include/Core/Castor3D/Render/RenderTarget.hpp +++ b/include/Core/Castor3D/Render/RenderTarget.hpp @@ -439,6 +439,7 @@ namespace castor3d bool doInitialiseTechnique( RenderDevice const & device , QueueData const & queueData , ProgressBar * progress ); + void doCleanupTechnique(); crg::FramePass const & doInitialiseCopyCommands( RenderDevice const & device , castor::String const & name , Texture const & source @@ -446,7 +447,9 @@ namespace castor3d , crg::FramePass const & previousPass , ProgressBar * progress , bool const * enabled ); + void doCleanupCopyCommands(); void doInitCombineProgram( ProgressBar * progress ); + void doCleanupCombineProgram(); Texture const & doUpdatePostEffects( CpuUpdater & updater , PostEffectPtrArray const & effects , std::vector< Texture const * > const & images )const; diff --git a/source/Core/Castor3D/Overlay/DebugOverlays.cpp b/source/Core/Castor3D/Overlay/DebugOverlays.cpp index 4eb1b781cf..78342c2f31 100644 --- a/source/Core/Castor3D/Overlay/DebugOverlays.cpp +++ b/source/Core/Castor3D/Overlay/DebugOverlays.cpp @@ -575,20 +575,20 @@ namespace castor3d , m_categories.end() , [¤t]( auto & lookup ) { - return lookup.getName() == current; + return lookup->getName() == current; } ); if ( it == m_categories.end() ) { - m_categories.emplace_back( current + m_categories.emplace_back( std::make_unique< CategoryOverlays >( current , *m_engine , *m_container->getContent() - , m_leftOffset + 5u ); + , m_leftOffset + 5u ) ); it = std::next( m_categories.begin() , ptrdiff_t( m_categories.size() - 1 ) ); } - it->addTimer( name, categories, timer ); + ( *it )->addTimer( name, categories, timer ); } } @@ -625,12 +625,12 @@ namespace castor3d , m_categories.end() , [¤t]( auto & lookup ) { - return lookup.getName() == current; + return lookup->getName() == current; } ); if ( it != m_categories.end() ) { - if ( it->removeTimer( name, categories, timer ) ) + if ( ( *it )->removeTimer( name, categories, timer ) ) { m_categories.erase( it ); } @@ -661,9 +661,9 @@ namespace castor3d for ( auto & catIt : m_categories ) { - catIt.compute(); - m_cpu.time += catIt.getCpuTime(); - m_gpu.time += catIt.getGpuTime(); + catIt->compute(); + m_cpu.time += catIt->getCpuTime(); + m_gpu.time += catIt->getGpuTime(); } } @@ -700,7 +700,7 @@ namespace castor3d for ( auto & catIt : m_categories ) { - catIt.update( height ); + catIt->update( height ); } top += height; @@ -724,7 +724,7 @@ namespace castor3d for ( auto & catIt : m_categories ) { - catIt.retrieveGpuTime(); + catIt->retrieveGpuTime(); } } @@ -757,7 +757,7 @@ namespace castor3d for ( auto & cat : m_categories ) { - cat.dumpFrameTimes( prefix, params ); + cat->dumpFrameTimes( prefix, params ); } } diff --git a/source/Core/Castor3D/Render/RenderTarget.cpp b/source/Core/Castor3D/Render/RenderTarget.cpp index fc3d98c4e7..2a19dd6e51 100644 --- a/source/Core/Castor3D/Render/RenderTarget.cpp +++ b/source/Core/Castor3D/Render/RenderTarget.cpp @@ -450,6 +450,15 @@ namespace castor3d RenderTarget::~RenderTarget() { + for ( auto & texture : m_srgbObjects ) + { + texture->destroy(); + } + + for ( auto & texture : m_hdrObjects ) + { + texture->destroy(); + } } uint32_t RenderTarget::countInitialisationSteps()const @@ -521,17 +530,19 @@ namespace castor3d if ( m_initialised.exchange( false ) ) { m_signalReady.reset(); - m_overlayPass = nullptr; + m_overlayPass = {}; #if C3D_DebugTimers getEngine()->unregisterTimer( cuT( "AAACPUTests" ), *m_cpuUpdateTimer ); m_cpuUpdateTimer.reset(); getEngine()->unregisterTimer( cuT( "AAAGPUTests" ), *m_gpuUpdateTimer ); m_gpuUpdateTimer.reset(); #endif - getEngine()->unregisterTimer( getName() + cuT( "/Overlays/Overlays" ), *m_overlaysTimer ); + getEngine()->unregisterTimer( getName() + cuT( "/Overlays" ), *m_overlaysTimer ); m_overlaysTimer.reset(); m_intermediates.clear(); m_runnable.reset(); + m_combinePassSource = {}; + m_combinePass = {}; for ( auto effect : m_srgbPostEffects ) { @@ -546,24 +557,11 @@ namespace castor3d } } - m_renderTechnique.reset(); - - for ( auto & texture : m_srgbObjects ) - { - texture->destroy(); - } - - for ( auto & texture : m_hdrObjects ) - { - texture->destroy(); - } - m_overlays.destroy(); m_velocity->destroy(); m_combined.destroy(); - m_combineStages.clear(); - m_combinePxl.shader.reset(); - m_combineVtx.shader.reset(); + doCleanupTechnique(); + doCleanupCombineProgram(); m_culler.reset(); m_hdrConfigUbo.reset(); } @@ -946,7 +944,7 @@ namespace castor3d stepProgressBar( progress, "Creating overlay renderer" ); m_overlaysTimer = castor::makeUnique< FramePassTimer >( device.makeContext(), getName() + cuT( "/Overlays" ) ); - getEngine()->registerTimer( getName() + cuT( "/Overlays/Overlays" ), *m_overlaysTimer ); + getEngine()->registerTimer( getName() + cuT( "/Overlays" ), *m_overlaysTimer ); #if C3D_DebugTimers m_cpuUpdateTimer = castor::makeUnique< FramePassTimer >( device.makeContext(), cuT( "AAACPUTests" ) ); getEngine()->registerTimer( cuT( "AAACPUTests" ), *m_cpuUpdateTimer ); @@ -1048,6 +1046,11 @@ namespace castor3d return true; } + void RenderTarget::doCleanupTechnique() + { + m_renderTechnique.reset(); + } + crg::FramePass const & RenderTarget::doInitialiseCopyCommands( RenderDevice const & device , castor::String const & name , Texture const & source @@ -1080,6 +1083,10 @@ namespace castor3d return pass; } + void RenderTarget::doCleanupCopyCommands() + { + } + void RenderTarget::doInitCombineProgram( ProgressBar * progress ) { stepProgressBar( progress, "Creating combine program" ); @@ -1161,6 +1168,13 @@ namespace castor3d m_combineStages.push_back( makeShaderState( renderSystem.getRenderDevice(), m_combinePxl ) ); } + void RenderTarget::doCleanupCombineProgram() + { + m_combineStages.clear(); + m_combinePxl.shader.reset(); + m_combineVtx.shader.reset(); + } + Texture const & RenderTarget::doUpdatePostEffects( CpuUpdater & updater , PostEffectPtrArray const & effects , std::vector< Texture const * > const & images )const diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index fd6171d673..8dbc62e3a2 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -1487,7 +1487,7 @@ namespace castor3d doWaitFrame( queueData, {} ); getDevice()->waitIdle(); - if ( !m_initialised ) + if ( !m_initialised || m_loading ) { doResetSwapChain( queueData ); diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index 6f049bac71..6fcb90a946 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -239,7 +239,7 @@ namespace castor3d m_cleanBackground = nullptr; } - m_reflectionMap.reset(); + m_reflectionMap->cleanup(); m_onSceneNodeChanged.disconnect(); m_onGeometryChanged.disconnect(); m_onBillboardListChanged.disconnect(); @@ -273,6 +273,7 @@ namespace castor3d m_sceneNodeCache.reset(); m_meshCache.reset(); + m_skeletonCache.reset(); m_materialCacheView.reset(); m_samplerCacheView.reset(); m_overlayCache.reset(); @@ -365,18 +366,19 @@ namespace castor3d m_dirtyNodes.clear(); m_dirtyBillboards.clear(); m_dirtyObjects.clear(); + m_animatedObjectGroupCache->cleanup(); - m_cameraCache->cleanup(); - m_particleSystemCache->cleanup(); - m_billboardCache->cleanup(); m_geometryCache->cleanup(); + m_cameraCache->cleanup(); m_lightCache->cleanup(); - m_reflectionMap->cleanup(); + m_billboardCache->cleanup(); + m_particleSystemCache->cleanup(); m_sceneNodeCache->cleanup(); + m_skeletonCache->cleanup(); + m_overlayCache->cleanup(); m_materialCacheView->clear(); m_samplerCacheView->clear(); - m_overlayCache->cleanup(); m_fontCacheView->clear(); m_renderNodes->clear(); From 7dc1e012b7119c54788bf19e02bd1c75b6c62e52 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 11:34:34 +0200 Subject: [PATCH 06/35] Castor3D: Fixed controls and overlays cleanup. --- .../Core/Castor3D/Gui/Controls/CtrlButton.hpp | 1 + .../Castor3D/Gui/Controls/CtrlComboBox.hpp | 2 + .../Castor3D/Gui/Controls/CtrlControl.hpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.hpp | 1 + .../Castor3D/Gui/Controls/CtrlProgress.hpp | 1 + .../Castor3D/Gui/Controls/CtrlScrollable.hpp | 1 + .../Core/Castor3D/Gui/Controls/CtrlStatic.hpp | 1 + include/Core/Castor3D/Overlay/Overlay.hpp | 23 ++++++---- source/Core/Castor3D/Cache/OverlayCache.cpp | 28 +++++++----- .../Core/Castor3D/Gui/Controls/CtrlButton.cpp | 17 ++++++++ .../Castor3D/Gui/Controls/CtrlComboBox.cpp | 15 +++++++ .../Castor3D/Gui/Controls/CtrlControl.cpp | 16 +++++++ .../Core/Castor3D/Gui/Controls/CtrlEdit.cpp | 43 +++++++++++++++++++ .../Castor3D/Gui/Controls/CtrlProgress.cpp | 27 ++++++++++++ .../Castor3D/Gui/Controls/CtrlScrollable.cpp | 15 +++++++ .../Core/Castor3D/Gui/Controls/CtrlStatic.cpp | 15 +++++++ .../Core/Castor3D/Overlay/DebugOverlays.cpp | 24 +++++------ source/Core/Castor3D/Overlay/Overlay.cpp | 34 ++++++++++++--- 18 files changed, 230 insertions(+), 38 deletions(-) diff --git a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp index 51557f982e..db342c0e05 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp @@ -44,6 +44,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~ButtonCtrl()noexcept; /** Sets the horizontal alignment for the text. *\param[in] align The new value. diff --git a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp index 86a25da6c4..42285bf5cc 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp @@ -83,6 +83,8 @@ namespace castor3d { } + C3D_API ~ComboBoxCtrl()noexcept; + /** Appends a new item *\param[in] value The item */ diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index de127b52a3..20531d36e4 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -45,6 +45,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~Control()noexcept; /** Sets the style *\param[in] value The new value @@ -212,7 +213,7 @@ namespace castor3d Engine & getEngine()const noexcept { - return m_style->getEngine(); + return m_engine; } ControlStyle const & getBaseStyle()const noexcept @@ -594,6 +595,7 @@ namespace castor3d private: const ControlID m_id; const ControlType m_type; + Engine & m_engine; ControlStyleRPtr m_style{}; castor::Position m_position{}; castor::Size m_size{}; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp index b5305d5343..dc66267104 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp @@ -46,6 +46,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~EditCtrl()noexcept; /** Updates the caption *\param[in] value The new value diff --git a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp index 66a6ee4e7e..496e605d22 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp @@ -23,6 +23,7 @@ namespace castor3d , castor::String const & name , ProgressStyle * style , ControlRPtr parent ); + C3D_API ~ProgressCtrl()noexcept; C3D_API void setTitle( castor::U32String value ); C3D_API void setRange( castor::Range< int32_t > const & value ); diff --git a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp index e9f11aae4a..ad0200654b 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp @@ -14,6 +14,7 @@ namespace castor3d class ScrollableCtrl { public: + C3D_API virtual ~ScrollableCtrl()noexcept; C3D_API castor::Position getScrollPosition()const; ScrollableStyle & getStyle()const noexcept diff --git a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp index 569536cfaf..d324039430 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp @@ -43,6 +43,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~StaticCtrl()noexcept; /** Sets the horizontal alignment for the text. *\param[in] value The new value. diff --git a/include/Core/Castor3D/Overlay/Overlay.hpp b/include/Core/Castor3D/Overlay/Overlay.hpp index 237a1ea1f4..ca7aa5ba19 100644 --- a/include/Core/Castor3D/Overlay/Overlay.hpp +++ b/include/Core/Castor3D/Overlay/Overlay.hpp @@ -16,6 +16,10 @@ namespace castor3d class Overlay final : public castor::OwnedBy< Engine > { + friend class castor::ResourceCacheT< Overlay + , castor::String + , OverlayCacheTraits >; + public: using iterator = OverlayPtrArray::iterator; using const_iterator = OverlayPtrArray::const_iterator; @@ -75,15 +79,6 @@ namespace castor3d C3D_API Overlay( Engine & engine , OverlayType type , uint32_t level = 0u ); - /** - *\~english - *\brief adds a child to the overlay. - *\param[in] overlay The overlay to add. - *\~french - *\brief Ajoute un enfant à l'incrustation. - *\param[in] overlay L'incrustation enfant. - */ - C3D_API void addChild( OverlayRPtr overlay ); /** *\~english *\param[in] level The wanted level @@ -306,8 +301,18 @@ namespace castor3d { m_name = name; } + + void reparent( OverlayRPtr parent ) + { + m_parent = parent; + } /**@}*/ + private: + void addChild( OverlayRPtr overlay ); + void removeChild( OverlayRPtr overlay ); + void clear()noexcept; + private: castor::String m_name; OverlayRPtr m_parent{}; diff --git a/source/Core/Castor3D/Cache/OverlayCache.cpp b/source/Core/Castor3D/Cache/OverlayCache.cpp index c585924313..7296e466b2 100644 --- a/source/Core/Castor3D/Cache/OverlayCache.cpp +++ b/source/Core/Castor3D/Cache/OverlayCache.cpp @@ -30,18 +30,12 @@ namespace castor } auto level = overlay.computeLevel(); - Overlay * parent{ overlay.getParent() }; - - if ( parent ) - { - parent->addChild( &overlay ); - } - overlay.getCategory()->setOrder( level , ++m_overlayCountPerLevel[level][uint32_t( overlay.getType() )] ); - if ( parent ) + if ( auto parent = overlay.getParent() ) { + parent->addChild( &overlay ); it = std::find( m_overlays.begin(), m_overlays.end(), parent->getCategory() ); if ( it != m_overlays.end() ) @@ -67,11 +61,15 @@ namespace castor { for ( auto child : overlay ) { - child->setRelativePosition( child->getAbsolutePosition() ); - child->setRelativeSize( child->getAbsoluteSize() ); + child->reparent( overlay.getParent() ); } } + if ( auto parent = overlay.getParent() ) + { + parent->removeChild( &overlay ); + } + auto it = std::find( m_overlays.begin(), m_overlays.end(), overlay.getCategory() ); if ( it != m_overlays.end() ) @@ -121,7 +119,15 @@ namespace castor void ResourceCacheT< Overlay, String, OverlayCacheTraits >::cleanup() { auto lock( makeUniqueLock( *this ) ); - doCleanupNoLock(); + + // Flatten hierarchy + for ( auto overlay : m_overlays ) + { + overlay->getOverlay().reparent( nullptr ); + overlay->getOverlay().clear(); + } + + m_overlays.clear(); for ( auto it : m_fontTextures ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp index 3cb4e2e6e6..8f9cf037e3 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp @@ -96,6 +96,23 @@ namespace castor3d setStyle( style ); } + ButtonCtrl::~ButtonCtrl()noexcept + { + m_onEnable = {}; + + if ( auto text = m_text.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Text" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); + } + } + } + void ButtonCtrl::setHAlign( HAlign align ) { m_flags &= ~ControlFlagType( StaticFlag::eHAlignCenter diff --git a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp index 40ae6582fc..dd4829670a 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp @@ -106,6 +106,21 @@ namespace castor3d setStyle( style ); } + ComboBoxCtrl::~ComboBoxCtrl()noexcept + { + if ( auto text = m_text.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Text" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); + } + } + } + void ComboBoxCtrl::appendItem( castor::String const & value ) { m_choices->appendItem( value ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index b2f1c9282c..a96e77fa62 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -34,6 +34,7 @@ namespace castor3d , m_flags{ flags } , m_id{ std::hash< castor::String >{}( getName() ) } , m_type{ type } + , m_engine{ style->getEngine() } , m_style{ style } , m_position{ position } , m_size{ size } @@ -106,6 +107,21 @@ namespace castor3d m_background = panel; } + Control::~Control()noexcept + { + if ( auto overlay = m_background.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName(), true ); + } + else + { + getEngine().removeOverlay( getName(), true ); + } + } + } + void Control::setStyle( ControlStyleRPtr value ) { m_style = value; diff --git a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp index 3ad4269bb6..2374fc371d 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp @@ -127,6 +127,49 @@ namespace castor3d doUpdateFlags(); } + EditCtrl::~EditCtrl()noexcept + { + uint32_t i{}; + + for ( auto sel : m_selections ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); + } + + ++i; + } + + if ( auto overlay = m_caret.overlay.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Caret" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Caret" ), true ); + } + } + + if ( auto overlay = m_text.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Text" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); + } + } + } + void EditCtrl::updateCaption( castor::String const & value ) { m_caption = castor::string::toU32String( value ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp index 52f324f718..a1736e10fb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp @@ -81,6 +81,33 @@ namespace castor3d doUpdateFlags(); } + ProgressCtrl::~ProgressCtrl()noexcept + { + if ( auto overlay = m_text.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Text" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); + } + } + + if ( auto overlay = m_title.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Title" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Title" ), true ); + } + } + } + void ProgressCtrl::setTitle( castor::U32String value ) { if ( auto title = m_title.lock() ) diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp index 12ea5bfa25..b7d6166138 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp @@ -79,6 +79,21 @@ namespace castor3d { } + ScrollableCtrl::~ScrollableCtrl()noexcept + { + if ( auto overlay = m_corner.lock() ) + { + if ( m_target.hasScene() ) + { + m_target.getScene().removeOverlay( m_target.getName() + cuT( "/Scroll/Corner" ), true ); + } + else + { + m_target.getEngine().removeOverlay( m_target.getName() + cuT( "/Scroll/Corner" ), true ); + } + } + } + castor::Position ScrollableCtrl::getScrollPosition()const { castor::Position result{}; diff --git a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp index 535acecebc..d5aa70dc62 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp @@ -73,6 +73,21 @@ namespace castor3d doUpdateFlags(); } + StaticCtrl::~StaticCtrl()noexcept + { + if ( auto overlay = m_text.lock() ) + { + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Text" ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); + } + } + } + void StaticCtrl::setHAlign( HAlign align ) { m_flags &= ~ControlFlagType( StaticFlag::eHAlignCenter diff --git a/source/Core/Castor3D/Overlay/DebugOverlays.cpp b/source/Core/Castor3D/Overlay/DebugOverlays.cpp index 78342c2f31..55d57c28b2 100644 --- a/source/Core/Castor3D/Overlay/DebugOverlays.cpp +++ b/source/Core/Castor3D/Overlay/DebugOverlays.cpp @@ -347,12 +347,12 @@ namespace castor3d m_gpu.value->setVisible( false ); auto & manager = *m_panel->getControlsManager(); - manager.destroy( m_panel ); - manager.destroy( m_passName ); - manager.destroy( m_cpu.name ); - manager.destroy( m_gpu.name ); - manager.destroy( m_cpu.value ); - manager.destroy( m_gpu.value ); + manager.destroy( std::move( m_gpu.name ) ); + manager.destroy( std::move( m_gpu.value ) ); + manager.destroy( std::move( m_cpu.name ) ); + manager.destroy( std::move( m_cpu.value ) ); + manager.destroy( std::move( m_passName ) ); + manager.destroy( std::move( m_panel ) ); } } @@ -531,12 +531,12 @@ namespace castor3d m_categories.clear(); auto & manager = dbgovl::getControlsManager( *m_engine ); - manager.destroy( m_cpu.value ); - manager.destroy( m_gpu.value ); - manager.destroy( m_cpu.name ); - manager.destroy( m_gpu.name ); - manager.destroy( m_name ); - manager.destroy( m_container ); + manager.destroy( std::move( m_cpu.value ) ); + manager.destroy( std::move( m_gpu.value ) ); + manager.destroy( std::move( m_cpu.name ) ); + manager.destroy( std::move( m_gpu.name ) ); + manager.destroy( std::move( m_name ) ); + manager.destroy( std::move( m_container ) ); } } diff --git a/source/Core/Castor3D/Overlay/Overlay.cpp b/source/Core/Castor3D/Overlay/Overlay.cpp index 87ccec7868..d33a581981 100644 --- a/source/Core/Castor3D/Overlay/Overlay.cpp +++ b/source/Core/Castor3D/Overlay/Overlay.cpp @@ -55,11 +55,6 @@ namespace castor3d { } - void Overlay::addChild( OverlayRPtr overlay ) - { - m_children.push_back( overlay ); - } - uint32_t Overlay::getChildrenCount( uint32_t level )const { uint32_t result{ 0 }; @@ -146,4 +141,33 @@ namespace castor3d return 1u + m_parent->computeLevel(); } + + void Overlay::addChild( OverlayRPtr overlay ) + { + m_children.push_back( overlay ); + overlay->m_parent = this; + } + + void Overlay::removeChild( OverlayRPtr overlay ) + { + auto it = std::find( m_children.begin() + , m_children.end() + , overlay ); + + if ( it != m_children.end() ) + { + ( *it )->m_parent = nullptr; + m_children.erase( it ); + } + } + + void Overlay::clear()noexcept + { + for ( auto child : m_children ) + { + child->m_parent = nullptr; + } + + m_children.clear(); + } } From bf654089b44446fa02a27f2cda778c9320d25d74 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 12:34:36 +0200 Subject: [PATCH 07/35] Castor3D: Got rid of shared_ptrs for overlays. --- demos/CastorDvpTD/Hud.cpp | 28 ++-- demos/CastorDvpTD/Hud.hpp | 18 +-- include/Core/Castor3D/Cache/OverlayCache.hpp | 8 +- .../Core/Castor3D/Gui/Controls/CtrlButton.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlComboBox.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlControl.hpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.hpp | 6 +- .../Castor3D/Gui/Controls/CtrlProgress.hpp | 4 +- .../Castor3D/Gui/Controls/CtrlScrollable.hpp | 18 +-- .../Core/Castor3D/Gui/Controls/CtrlStatic.hpp | 2 +- .../Castor3D/Overlay/BorderPanelOverlay.hpp | 2 +- include/Core/Castor3D/Overlay/Overlay.hpp | 12 +- .../Core/Castor3D/Overlay/OverlayFactory.hpp | 4 +- .../Core/Castor3D/Overlay/PanelOverlay.hpp | 2 +- include/Core/Castor3D/Overlay/TextOverlay.hpp | 8 +- source/Core/Castor3D/Cache/OverlayCache.cpp | 37 +++--- .../Core/Castor3D/Gui/Controls/CtrlButton.cpp | 46 +++---- .../Castor3D/Gui/Controls/CtrlComboBox.cpp | 19 ++- .../Castor3D/Gui/Controls/CtrlControl.cpp | 8 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.cpp | 79 ++++++------ .../Castor3D/Gui/Controls/CtrlProgress.cpp | 36 +++--- .../Castor3D/Gui/Controls/CtrlScrollable.cpp | 18 +-- .../Core/Castor3D/Gui/Controls/CtrlStatic.cpp | 20 +-- .../Castor3D/Overlay/BorderPanelOverlay.cpp | 4 +- source/Core/Castor3D/Overlay/Overlay.cpp | 12 +- .../Core/Castor3D/Overlay/OverlayCategory.cpp | 2 +- .../Core/Castor3D/Overlay/OverlayFactory.cpp | 2 +- source/Core/Castor3D/Overlay/PanelOverlay.cpp | 4 +- source/Core/Castor3D/Overlay/TextOverlay.cpp | 10 +- .../Castor3D/Render/Overlays/OverlayPass.cpp | 2 +- .../Render/Overlays/OverlayPreparer.cpp | 4 +- .../Render/Overlays/OverlayRenderer.cpp | 2 +- .../TextureConfigurationBuffer.cpp | 2 + .../TreeItems/OverlayTreeItemProperty.cpp | 121 ++++++++---------- .../TreeItems/OverlayTreeItemProperty.hpp | 18 ++- tools/GuiCommon/System/SceneObjectsList.cpp | 12 +- 36 files changed, 291 insertions(+), 287 deletions(-) diff --git a/demos/CastorDvpTD/Hud.cpp b/demos/CastorDvpTD/Hud.cpp index 8984742336..8d3afd3024 100644 --- a/demos/CastorDvpTD/Hud.cpp +++ b/demos/CastorDvpTD/Hud.cpp @@ -12,10 +12,10 @@ namespace castortd { namespace { - castor3d::TextOverlaySPtr getTextOverlay( castor3d::Scene const & scene + castor3d::TextOverlayRPtr getTextOverlay( castor3d::Scene const & scene , castor::String const & name ) { - castor3d::TextOverlaySPtr result; + castor3d::TextOverlayRPtr result{}; auto overlay = scene.findOverlay( name ).lock(); if ( overlay ) @@ -119,42 +119,42 @@ namespace castortd void Hud::update() { - auto text = m_lives.lock(); + auto text = m_lives; if ( text ) { text->setCaption( castor::string::toU32String( m_game.getLives() ) ); } - text = m_ore.lock(); + text = m_ore; if ( text ) { text->setCaption( castor::string::toU32String( m_game.getOre() ) ); } - text = m_level.lock(); + text = m_level; if ( text ) { text->setCaption( castor::string::toU32String( m_game.getWave() ) ); } - text = m_kills.lock(); + text = m_kills; if ( text ) { text->setCaption( castor::string::toU32String( m_game.getKills() ) ); } - text = m_enemyLife.lock(); + text = m_enemyLife; if ( text ) { text->setCaption( castor::string::toU32String( m_game.getEnemiesLife() ) ); } - text = m_enemyBounty.lock(); + text = m_enemyBounty; if ( text ) { @@ -165,7 +165,7 @@ namespace castortd if ( tower ) { - text = m_towerDamage.lock(); + text = m_towerDamage; if ( text ) { @@ -173,7 +173,7 @@ namespace castortd text->setCaption( castor::string::toU32String( tower->getDamage() ) ); } - text = m_towerSpeed.lock(); + text = m_towerSpeed; if ( text ) { @@ -181,7 +181,7 @@ namespace castortd text->setCaption( castor::string::toU32String( tower->getSpeed() ) ); } - text = m_towerRange.lock(); + text = m_towerRange; if ( text ) { @@ -191,21 +191,21 @@ namespace castortd } else { - text = m_towerDamage.lock(); + text = m_towerDamage; if ( text ) { text->setVisible( false ); } - text = m_towerSpeed.lock(); + text = m_towerSpeed; if ( text ) { text->setVisible( false ); } - text = m_towerRange.lock(); + text = m_towerRange; if ( text ) { diff --git a/demos/CastorDvpTD/Hud.hpp b/demos/CastorDvpTD/Hud.hpp index 66b2943bd0..7049d02b26 100644 --- a/demos/CastorDvpTD/Hud.hpp +++ b/demos/CastorDvpTD/Hud.hpp @@ -20,14 +20,14 @@ namespace castortd private: Game const & m_game; - castor3d::TextOverlayWPtr m_lives; - castor3d::TextOverlayWPtr m_ore; - castor3d::TextOverlayWPtr m_level; - castor3d::TextOverlayWPtr m_kills; - castor3d::TextOverlayWPtr m_enemyLife; - castor3d::TextOverlayWPtr m_enemyBounty; - castor3d::TextOverlayWPtr m_towerSpeed; - castor3d::TextOverlayWPtr m_towerRange; - castor3d::TextOverlayWPtr m_towerDamage; + castor3d::TextOverlayRPtr m_lives{}; + castor3d::TextOverlayRPtr m_ore{}; + castor3d::TextOverlayRPtr m_level{}; + castor3d::TextOverlayRPtr m_kills{}; + castor3d::TextOverlayRPtr m_enemyLife{}; + castor3d::TextOverlayRPtr m_enemyBounty{}; + castor3d::TextOverlayRPtr m_towerSpeed{}; + castor3d::TextOverlayRPtr m_towerRange{}; + castor3d::TextOverlayRPtr m_towerDamage{}; }; } diff --git a/include/Core/Castor3D/Cache/OverlayCache.hpp b/include/Core/Castor3D/Cache/OverlayCache.hpp index d20b0682c8..4facca25ac 100644 --- a/include/Core/Castor3D/Cache/OverlayCache.hpp +++ b/include/Core/Castor3D/Cache/OverlayCache.hpp @@ -39,8 +39,8 @@ namespace castor using ElementMergerT = typename ElementCacheT::ElementMergerT; using iterator = std::map< ElementT, ElementKeyT >::iterator; using const_iterator = std::map< ElementT, ElementKeyT >::const_iterator; - CU_DeclareMap( ElementKeyT, castor3d::FontTextureSPtr, FontTextureStr ); - using OverlayCategories = std::vector< castor3d::OverlayCategorySPtr >; + CU_DeclareMap( ElementKeyT, castor3d::FontTextureUPtr, FontTextureStr ); + using OverlayCategories = std::vector< castor3d::OverlayCategoryRPtr >; public: /** @@ -86,7 +86,7 @@ namespace castor *\param[in] name Le nom de la police. *\return La FontTexture si elle exite, nullptr sinon. */ - C3D_API castor3d::FontTextureSPtr getFontTexture( String const & name ); + C3D_API castor3d::FontTextureRPtr getFontTexture( String const & name ); /** *\~english *\brief Creates a FontTexture from a font. @@ -97,7 +97,7 @@ namespace castor *\param[in] font La police. *\return La FontTexture créée. */ - C3D_API castor3d::FontTextureSPtr createFontTexture( castor::FontResPtr font ); + C3D_API castor3d::FontTextureRPtr createFontTexture( castor::FontResPtr font ); /** *\~english *\name Iteration. diff --git a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp index db342c0e05..cc407e4e3d 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp @@ -168,7 +168,7 @@ namespace castor3d private: castor::U32String m_caption; - TextOverlayWPtr m_text; + TextOverlayRPtr m_text{}; OnButtonEvent m_signals[size_t( ButtonEvent::eCount )]; OnEnableConnection m_onEnable; }; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp index 42285bf5cc..02ddf0dfff 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp @@ -211,7 +211,7 @@ namespace castor3d void doSwitchExpand(); private: - TextOverlayWPtr m_text; + TextOverlayRPtr m_text{}; ButtonCtrlSPtr m_expand; ListBoxCtrlSPtr m_choices; castor::StringArray m_values; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index 20531d36e4..26f3c060a0 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -558,7 +558,7 @@ namespace castor3d BorderPanelOverlay & doGetBackground()const { - auto bg = m_background.lock(); + auto bg = m_background; if ( !bg ) { @@ -600,7 +600,7 @@ namespace castor3d castor::Position m_position{}; castor::Size m_size{}; castor::Point4ui m_borders{}; - BorderPanelOverlayWPtr m_background{}; + BorderPanelOverlayRPtr m_background{}; std::vector< ControlWPtr > m_children{}; ControlsManagerWPtr m_ctrlManager{}; bool m_moving{}; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp index dc66267104..0a5598d973 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp @@ -335,19 +335,19 @@ namespace castor3d struct Caret : CaretIndices { bool visible{}; - PanelOverlayWPtr overlay; + PanelOverlayRPtr overlay{}; }; castor::U32String m_caption; castor::TextMetrics m_metrics; bool m_active; - TextOverlayWPtr m_text; + TextOverlayRPtr m_text{}; Caret m_caret; OnEditEvent m_signals[size_t( EditEvent::eCount )]; bool m_hasSelection{}; bool m_isMouseSelecting{}; Selection m_selection{}; - std::vector< PanelOverlayWPtr > m_selections{}; + std::vector< PanelOverlayRPtr > m_selections{}; OnScrollContentConnection m_onScrollContent; uint32_t m_panelsZIndex{}; }; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp index 496e605d22..9903318107 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp @@ -146,10 +146,10 @@ namespace castor3d void doUpdateProgress(); private: - TextOverlayWPtr m_title; + TextOverlayRPtr m_title{}; PanelCtrlSPtr m_container; PanelCtrlSPtr m_progress; - TextOverlayWPtr m_text; + TextOverlayRPtr m_text{}; castor::RangedValue< int32_t > m_value; }; } diff --git a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp index ad0200654b..a3f9d248cd 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp @@ -108,15 +108,15 @@ namespace castor3d private: private: Control & m_target; - ScrollableStyleRPtr m_scrollableStyle; - ScrollBarCtrlSPtr m_verticalScrollBar; - ScrollBarCtrlSPtr m_horizontalScrollBar; - PanelOverlayWPtr m_corner; - std::map< ControlRPtr, ScrolledControl > m_controls; - OnScrollBarEventConnection m_onVerticalThumbRelease; - OnScrollBarEventConnection m_onHorizontalThumbRelease; - OnScrollBarEventConnection m_onVerticalThumbTrack; - OnScrollBarEventConnection m_onHorizontalThumbTrack; + ScrollableStyleRPtr m_scrollableStyle{}; + ScrollBarCtrlSPtr m_verticalScrollBar{}; + ScrollBarCtrlSPtr m_horizontalScrollBar{}; + PanelOverlayRPtr m_corner{}; + std::map< ControlRPtr, ScrolledControl > m_controls{}; + OnScrollBarEventConnection m_onVerticalThumbRelease{}; + OnScrollBarEventConnection m_onHorizontalThumbRelease{}; + OnScrollBarEventConnection m_onVerticalThumbTrack{}; + OnScrollBarEventConnection m_onHorizontalThumbTrack{}; bool m_updating{}; }; } diff --git a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp index d324039430..9ff370fa7e 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp @@ -132,7 +132,7 @@ namespace castor3d private: castor::U32String m_caption; - TextOverlayWPtr m_text; + TextOverlayRPtr m_text{}; }; } diff --git a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp index 407d8f5a45..89d3712c8d 100644 --- a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp +++ b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp @@ -41,7 +41,7 @@ namespace castor3d *\brief Fonction de création utilisée par la fabrique *\return Un overlay */ - C3D_API static OverlayCategorySPtr create(); + C3D_API static OverlayCategoryUPtr create(); /** *\copydoc castor3d::OverlayCategory::accept */ diff --git a/include/Core/Castor3D/Overlay/Overlay.hpp b/include/Core/Castor3D/Overlay/Overlay.hpp index ca7aa5ba19..fe2a146a23 100644 --- a/include/Core/Castor3D/Overlay/Overlay.hpp +++ b/include/Core/Castor3D/Overlay/Overlay.hpp @@ -94,21 +94,21 @@ namespace castor3d *\~french *\return L'incrustation panneau. */ - C3D_API PanelOverlaySPtr getPanelOverlay()const; + C3D_API PanelOverlayRPtr getPanelOverlay()const; /** *\~english *\return The border panel overlay. *\~french *\return L'incrustation panneau borduré. */ - C3D_API BorderPanelOverlaySPtr getBorderPanelOverlay()const; + C3D_API BorderPanelOverlayRPtr getBorderPanelOverlay()const; /** *\~english *\return The text overlay. *\~french *\return L'incrustation texte. */ - C3D_API TextOverlaySPtr getTextOverlay()const; + C3D_API TextOverlayRPtr getTextOverlay()const; /** *\~english *\return The visibility status. @@ -139,9 +139,9 @@ namespace castor3d * Accesseurs. */ /**@{*/ - OverlayCategorySPtr getCategory()const noexcept + OverlayCategory & getCategory()const noexcept { - return m_category; + return *m_category; } castor::Position getAbsolutePosition( castor::Size const & size )const noexcept @@ -317,7 +317,7 @@ namespace castor3d castor::String m_name; OverlayRPtr m_parent{}; OverlayPtrArray m_children; - OverlayCategorySPtr m_category; + OverlayCategoryUPtr m_category; Scene * m_scene; RenderSystem * m_renderSystem; }; diff --git a/include/Core/Castor3D/Overlay/OverlayFactory.hpp b/include/Core/Castor3D/Overlay/OverlayFactory.hpp index d2815d9fcb..e7ced34048 100644 --- a/include/Core/Castor3D/Overlay/OverlayFactory.hpp +++ b/include/Core/Castor3D/Overlay/OverlayFactory.hpp @@ -11,7 +11,9 @@ See LICENSE file in root folder namespace castor3d { class OverlayFactory - : public castor::Factory< OverlayCategory, OverlayType > + : public castor::Factory< OverlayCategory + , OverlayType + , OverlayCategoryUPtr > { public: /** diff --git a/include/Core/Castor3D/Overlay/PanelOverlay.hpp b/include/Core/Castor3D/Overlay/PanelOverlay.hpp index 6f8d500db2..8f9034d34c 100644 --- a/include/Core/Castor3D/Overlay/PanelOverlay.hpp +++ b/include/Core/Castor3D/Overlay/PanelOverlay.hpp @@ -37,7 +37,7 @@ namespace castor3d *\brief Fonction de création utilisée par la fabrique *\return Un overlay */ - C3D_API static OverlayCategorySPtr create(); + C3D_API static OverlayCategoryUPtr create(); /** *\copydoc castor3d::OverlayCategory::accept */ diff --git a/include/Core/Castor3D/Overlay/TextOverlay.hpp b/include/Core/Castor3D/Overlay/TextOverlay.hpp index 0665d440b3..0f92858a02 100644 --- a/include/Core/Castor3D/Overlay/TextOverlay.hpp +++ b/include/Core/Castor3D/Overlay/TextOverlay.hpp @@ -60,7 +60,7 @@ namespace castor3d *\brief Fonction de création utilisée par la fabrique *\return Un overlay */ - C3D_API static OverlayCategorySPtr create(); + C3D_API static OverlayCategoryUPtr create(); /** *\copydoc castor3d::OverlayCategory::accept */ @@ -121,9 +121,9 @@ namespace castor3d return getFontTexture()->getFontName(); } - FontTextureSPtr getFontTexture()const + FontTextureRPtr getFontTexture()const { - return m_fontTexture.lock(); + return m_fontTexture; } std::u32string getCaption()const @@ -242,7 +242,7 @@ namespace castor3d private: std::u32string m_currentCaption; std::u32string m_previousCaption; - FontTextureWPtr m_fontTexture; + FontTextureRPtr m_fontTexture{}; TextWrappingMode m_wrappingMode{ TextWrappingMode::eNone }; TextLineSpacingMode m_lineSpacingMode{ TextLineSpacingMode::eOwnHeight }; HAlign m_hAlign{ HAlign::eLeft }; diff --git a/source/Core/Castor3D/Cache/OverlayCache.cpp b/source/Core/Castor3D/Cache/OverlayCache.cpp index 7296e466b2..baf872f9cb 100644 --- a/source/Core/Castor3D/Cache/OverlayCache.cpp +++ b/source/Core/Castor3D/Cache/OverlayCache.cpp @@ -22,7 +22,7 @@ namespace castor void ResourceCacheT< Overlay, String, OverlayCacheTraits >::initialise( Overlay & overlay ) { - auto it = std::find( m_overlays.begin(), m_overlays.end(), overlay.getCategory() ); + auto it = std::find( m_overlays.begin(), m_overlays.end(), &overlay.getCategory() ); if ( it != m_overlays.end() ) { @@ -30,28 +30,28 @@ namespace castor } auto level = overlay.computeLevel(); - overlay.getCategory()->setOrder( level + overlay.getCategory().setOrder( level , ++m_overlayCountPerLevel[level][uint32_t( overlay.getType() )] ); if ( auto parent = overlay.getParent() ) { parent->addChild( &overlay ); - it = std::find( m_overlays.begin(), m_overlays.end(), parent->getCategory() ); + it = std::find( m_overlays.begin(), m_overlays.end(), &parent->getCategory() ); if ( it != m_overlays.end() ) { - m_overlays.insert( std::next( it ), overlay.getCategory() ); + m_overlays.insert( std::next( it ), &overlay.getCategory() ); } else { initialise( *parent ); - it = std::find( m_overlays.begin(), m_overlays.end(), parent->getCategory() ); - m_overlays.insert( std::next( it ), overlay.getCategory() ); + it = std::find( m_overlays.begin(), m_overlays.end(), &parent->getCategory() ); + m_overlays.insert( std::next( it ), &overlay.getCategory() ); } } else { - m_overlays.insert( m_overlays.begin(), overlay.getCategory() ); + m_overlays.insert( m_overlays.begin(), &overlay.getCategory() ); } } @@ -70,7 +70,7 @@ namespace castor parent->removeChild( &overlay ); } - auto it = std::find( m_overlays.begin(), m_overlays.end(), overlay.getCategory() ); + auto it = std::find( m_overlays.begin(), m_overlays.end(), &overlay.getCategory() ); if ( it != m_overlays.end() ) { @@ -129,27 +129,27 @@ namespace castor m_overlays.clear(); - for ( auto it : m_fontTextures ) + for ( auto & it : m_fontTextures ) { m_engine.postEvent( makeGpuCleanupEvent( *it.second ) ); } } - FontTextureSPtr ResourceCacheT< Overlay, String, OverlayCacheTraits >::getFontTexture( String const & name ) + FontTextureRPtr ResourceCacheT< Overlay, String, OverlayCacheTraits >::getFontTexture( String const & name ) { auto lock( makeUniqueLock( *this ) ); auto it = m_fontTextures.find( name ); - FontTextureSPtr result; + FontTextureRPtr result{}; if ( it != m_fontTextures.end() ) { - result = it->second; + result = it->second.get(); } return result; } - FontTextureSPtr ResourceCacheT< Overlay, String, OverlayCacheTraits >::createFontTexture( castor::FontResPtr font ) + FontTextureRPtr ResourceCacheT< Overlay, String, OverlayCacheTraits >::createFontTexture( castor::FontResPtr font ) { auto lock( makeUniqueLock( *this ) ); auto fontName = font.lock()->getName(); @@ -157,16 +157,17 @@ namespace castor if ( ires.second ) { - auto result = std::make_shared< FontTexture >( m_engine, font ); + auto result = castor::makeUnique< FontTexture >( m_engine, font ); + auto tmp = result.get(); m_engine.postEvent( makeGpuFunctorEvent( EventType::ePreRender - , [result]( RenderDevice const & device + , [tmp]( RenderDevice const & device , QueueData const & queueData ) { - result->initialise( device, queueData ); + tmp->initialise( device, queueData ); } ) ); - ires.first->second = result; + ires.first->second = std::move( result ); } - return ires.first->second; + return ires.first->second.get(); } } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp index 8f9cf037e3..a576bd45e3 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp @@ -59,13 +59,13 @@ namespace castor3d if ( v ) { - m_text.lock()->setMaterial( mystyle.getTextMaterial() ); + m_text->setMaterial( mystyle.getTextMaterial() ); setBackgroundMaterial( mystyle.getBackgroundMaterial() ); setBackgroundBorderMaterial( mystyle.getForegroundMaterial() ); } else { - m_text.lock()->setMaterial( mystyle.getDisabledTextMaterial() ); + m_text->setMaterial( mystyle.getDisabledTextMaterial() ); setBackgroundMaterial( mystyle.getDisabledBackgroundMaterial() ); setBackgroundBorderMaterial( mystyle.getDisabledForegroundMaterial() ); } @@ -100,7 +100,7 @@ namespace castor3d { m_onEnable = {}; - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { if ( m_scene ) { @@ -191,7 +191,7 @@ namespace castor3d { auto & style = getStyle(); - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setFont( style.getFontName() ); } @@ -201,13 +201,15 @@ namespace castor3d { setBackgroundBorderPosition( BorderPosition::eInternal ); - auto & style = getStyle(); - auto text = m_text.lock(); - text->setMaterial( style.getTextMaterial() ); - - if ( !text->getFontTexture() || !text->getFontTexture()->getFont() ) + if ( auto text = m_text ) { - text->setFont( style.getFontName() ); + auto & style = getStyle(); + text->setMaterial( style.getTextMaterial() ); + + if ( !text->getFontTexture() || !text->getFontTexture()->getFont() ) + { + text->setFont( style.getFontName() ); + } } getControlsManager()->connectEvents( *this ); @@ -220,7 +222,7 @@ namespace castor3d void ButtonCtrl::doSetPosition( castor::Position const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( getClientOffset() ); } @@ -228,7 +230,7 @@ namespace castor3d void ButtonCtrl::doSetSize( castor::Size const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelSize( getClientSize() ); } @@ -236,7 +238,7 @@ namespace castor3d void ButtonCtrl::doSetBorderSize( castor::Point4ui const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( getClientOffset() ); text->setPixelSize( getClientSize() ); @@ -247,7 +249,7 @@ namespace castor3d { m_caption = value; - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setCaption( value ); } @@ -255,7 +257,7 @@ namespace castor3d void ButtonCtrl::doSetVisible( bool visible ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( visible ); } @@ -263,7 +265,7 @@ namespace castor3d void ButtonCtrl::doUpdateFlags() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setHAlign( getHAlign() ); text->setVAlign( getVAlign() ); @@ -273,7 +275,7 @@ namespace castor3d void ButtonCtrl::doOnMouseEnter( MouseEvent const & event ) { auto & style = getStyle(); - m_text.lock()->setMaterial( style.getHighlightedTextMaterial() ); + m_text->setMaterial( style.getHighlightedTextMaterial() ); setBackgroundMaterial( style.getHighlightedBackgroundMaterial() ); setBackgroundBorderMaterial( style.getHighlightedForegroundMaterial() ); } @@ -283,7 +285,7 @@ namespace castor3d if ( event.getButton() == MouseButton::eLeft ) { auto & style = getStyle(); - m_text.lock()->setMaterial( style.getPushedTextMaterial() ); + m_text->setMaterial( style.getPushedTextMaterial() ); setBackgroundMaterial( style.getPushedBackgroundMaterial() ); setBackgroundBorderMaterial( style.getPushedForegroundMaterial() ); } @@ -294,7 +296,7 @@ namespace castor3d if ( event.getButton() == MouseButton::eLeft ) { auto & style = getStyle(); - m_text.lock()->setMaterial( style.getHighlightedTextMaterial() ); + m_text->setMaterial( style.getHighlightedTextMaterial() ); setBackgroundMaterial( style.getHighlightedBackgroundMaterial() ); setBackgroundBorderMaterial( style.getHighlightedForegroundMaterial() ); @@ -305,14 +307,14 @@ namespace castor3d void ButtonCtrl::doOnMouseLeave( MouseEvent const & event ) { auto & style = getStyle(); - m_text.lock()->setMaterial( style.getTextMaterial() ); + m_text->setMaterial( style.getTextMaterial() ); setBackgroundMaterial( style.getBackgroundMaterial() ); setBackgroundBorderMaterial( style.getForegroundMaterial() ); } void ButtonCtrl::doUpdateZIndex( uint32_t & index ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( index++, 0u ); } @@ -320,7 +322,7 @@ namespace castor3d void ButtonCtrl::doAdjustZIndex( uint32_t offset ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( text->getLevel() + offset, 0u ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp index dd4829670a..34cf942eeb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp @@ -108,7 +108,7 @@ namespace castor3d ComboBoxCtrl::~ComboBoxCtrl()noexcept { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { if ( m_scene ) { @@ -194,7 +194,7 @@ namespace castor3d onNcKeyDown( control, event ); } ); - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { auto clientSize = getClientSize(); auto clientOffset = getClientOffset(); @@ -239,7 +239,7 @@ namespace castor3d void ComboBoxCtrl::doSetPosition( castor::Position const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { auto clientOffset = getClientOffset(); text->setPixelPosition( clientOffset ); @@ -251,7 +251,7 @@ namespace castor3d void ComboBoxCtrl::doSetSize( castor::Size const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { auto clientSize = getClientSize(); text->setPixelSize( { clientSize->x - clientSize->x, clientSize->y } ); @@ -265,7 +265,7 @@ namespace castor3d void ComboBoxCtrl::doSetBorderSize( castor::Point4ui const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( getClientOffset() ); text->setPixelSize( getClientSize() ); @@ -317,7 +317,7 @@ namespace castor3d void ComboBoxCtrl::doSetVisible( bool visible ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( visible ); } @@ -328,7 +328,7 @@ namespace castor3d void ComboBoxCtrl::doUpdateZIndex( uint32_t & index ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( index++, 0u ); } @@ -336,7 +336,7 @@ namespace castor3d void ComboBoxCtrl::doAdjustZIndex( uint32_t offset ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( text->getLevel() + offset, 0u ); } @@ -352,9 +352,8 @@ namespace castor3d if ( selected >= 0 ) { doSwitchExpand(); - TextOverlaySPtr text = m_text.lock(); - if ( text ) + if ( auto text = m_text ) { text->setCaption( castor::string::toU32String( m_choices->getItemText( selected ) ) ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index a96e77fa62..87e4ccbf9b 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -92,7 +92,7 @@ namespace castor3d if ( isAlwaysOnTop() ) { - overlay->getCategory()->setOrder( 50000u, 0u ); + overlay->getCategory().setOrder( 50000u, 0u ); overlay->setPixelPosition( getAbsolutePosition() ); } else @@ -109,7 +109,7 @@ namespace castor3d Control::~Control()noexcept { - if ( auto overlay = m_background.lock() ) + if ( auto overlay = m_background ) { if ( m_scene ) { @@ -605,7 +605,7 @@ namespace castor3d auto bordersWidth = int32_t( getBorderSize()->x + getBorderSize()->z ); auto bordersHeight = int32_t( getBorderSize()->y + getBorderSize()->w ); - if ( auto background = m_background.lock() ) + if ( auto background = m_background ) { if ( background->getBorderPosition() == BorderPosition::eMiddle ) { @@ -650,7 +650,7 @@ namespace castor3d auto bordersWidth = borders->x + borders->z; auto bordersHeight = borders->y + borders->w; - if ( auto background = m_background.lock() ) + if ( auto background = m_background ) { if ( background->getBorderPosition() == BorderPosition::eMiddle ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp index 2374fc371d..f88bd8ef5c 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp @@ -133,19 +133,22 @@ namespace castor3d for ( auto sel : m_selections ) { - if ( m_scene ) + if ( sel ) { - m_scene->removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); - } - else - { - getEngine().removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); + if ( m_scene ) + { + m_scene->removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); + } + else + { + getEngine().removeOverlay( getName() + cuT( "/Selection" ) + castor::string::toString( i ), true ); + } } ++i; } - if ( auto overlay = m_caret.overlay.lock() ) + if ( m_caret.overlay ) { if ( m_scene ) { @@ -157,7 +160,7 @@ namespace castor3d } } - if ( auto overlay = m_text.lock() ) + if ( m_text ) { if ( m_scene ) { @@ -179,7 +182,7 @@ namespace castor3d { auto & style = getStyle(); - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setMaterial( style.getTextMaterial() ); @@ -189,14 +192,14 @@ namespace castor3d } } - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setMaterial( style.getTextMaterial() ); } for ( auto sel : m_selections ) { - if ( auto panel = sel.lock() ) + if ( auto panel = sel ) { panel->setMaterial( style.getSelectionMaterial() ); } @@ -241,7 +244,7 @@ namespace castor3d if ( !hasVerticalScrollBar() && !hasHorizontalScrollBar() ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelSize( { value->x + 1u, value->y } ); } @@ -268,12 +271,12 @@ namespace castor3d void EditCtrl::doSetVisible( bool visible ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( visible ); } - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setVisible( m_caret.visible ); } @@ -283,12 +286,12 @@ namespace castor3d void EditCtrl::doUpdateZIndex( uint32_t & index ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( index++, 0u ); } - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setOrder( index++, 0u ); } @@ -301,7 +304,7 @@ namespace castor3d for ( auto sel : m_selections ) { - if ( auto panel = sel.lock() ) + if ( auto panel = sel ) { panel->setOrder( index, i++ ); } @@ -315,12 +318,12 @@ namespace castor3d void EditCtrl::doAdjustZIndex( uint32_t offset ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( text->getLevel() + offset, 0u ); } - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setOrder( caret->getLevel() + offset, 0u ); } @@ -330,7 +333,7 @@ namespace castor3d for ( auto sel : m_selections ) { - if ( auto panel = sel.lock() ) + if ( auto panel = sel ) { panel->setOrder( panel->getLevel() + offset, i++ ); } @@ -341,7 +344,7 @@ namespace castor3d void EditCtrl::doUpdateFlags() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { if ( isMultiLine() ) { @@ -367,7 +370,7 @@ namespace castor3d m_active = true; m_caret.visible = m_active && isVisible(); - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setVisible( m_caret.visible ); } @@ -381,7 +384,7 @@ namespace castor3d m_isMouseSelecting = false; m_caret.visible = false; - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { caret->setVisible( m_caret.visible ); } @@ -843,7 +846,7 @@ namespace castor3d void EditCtrl::doUpdateCaretPosition( castor::Position const & pos , CaretIndices & indices ) { - auto text = m_text.lock(); + auto text = m_text; if ( !text ) { @@ -943,9 +946,9 @@ namespace castor3d void EditCtrl::doUpdateCaret() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { auto font = text->getFontTexture()->getFont(); castor::Position position{}; @@ -995,7 +998,7 @@ namespace castor3d void EditCtrl::doUpdateMetrics() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { auto fontTexture = text->getFontTexture(); auto font = fontTexture->getFont(); @@ -1038,7 +1041,7 @@ namespace castor3d doUpdateMetrics(); doUpdateCaretIndices(); - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setCaption( m_caption ); auto size = text->getPixelSize(); @@ -1068,7 +1071,7 @@ namespace castor3d return; } - auto text = m_text.lock(); + auto text = m_text; if ( !text ) { @@ -1101,7 +1104,7 @@ namespace castor3d { // Multiline selection. // Process first and last lines separately (since they may not be fully selected). - if ( auto panel = m_selections[selLineIndex++].lock() ) + if ( auto panel = m_selections[selLineIndex++] ) { // First line auto & line = m_metrics.lines[selBegin.lineIndex++]; @@ -1114,7 +1117,7 @@ namespace castor3d panel->setVisible( true ); } - if ( auto panel = m_selections[selLineIndex++].lock() ) + if ( auto panel = m_selections[selLineIndex++] ) { // LastLine auto & line = m_metrics.lines[selEnd.lineIndex--]; @@ -1129,7 +1132,7 @@ namespace castor3d // Process remaining lines while ( selBegin.lineIndex <= selEnd.lineIndex ) { - if ( auto panel = m_selections[selLineIndex++].lock() ) + if ( auto panel = m_selections[selLineIndex++] ) { auto & line = m_metrics.lines[selBegin.lineIndex]; panel->setPixelPosition( { 0, int32_t( line.top ) } ); @@ -1141,7 +1144,7 @@ namespace castor3d ++selBegin.lineIndex; } } - else if ( auto panel = m_selections[selLineIndex++].lock() ) + else if ( auto panel = m_selections[selLineIndex++] ) { // Single line selection. auto charDiff = selEnd.charIndex - selBegin.charIndex; @@ -1166,7 +1169,7 @@ namespace castor3d for ( auto sel : castor::makeArrayView( m_selections.begin() + selLineIndex, m_selections.end() ) ) { - if ( auto panel = sel.lock() ) + if ( auto panel = sel ) { panel->setVisible( false ); } @@ -1181,7 +1184,7 @@ namespace castor3d for ( auto sel : m_selections ) { - if ( auto panel = sel.lock() ) + if ( auto panel = sel ) { panel->setVisible( false ); } @@ -1298,9 +1301,9 @@ namespace castor3d void EditCtrl::doAdjustTextPosition() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { - if ( auto caret = m_caret.overlay.lock() ) + if ( auto caret = m_caret.overlay ) { auto clientSize = getClientSize(); auto clientOffset = getClientOffset(); @@ -1368,7 +1371,7 @@ namespace castor3d void EditCtrl::doScrollContent( castor::Position const & position ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { auto pos = position + getClientOffset(); text->setPixelPosition( { pos->x, pos->y } ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp index a1736e10fb..149f9302fe 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp @@ -83,7 +83,7 @@ namespace castor3d ProgressCtrl::~ProgressCtrl()noexcept { - if ( auto overlay = m_text.lock() ) + if ( auto overlay = m_text ) { if ( m_scene ) { @@ -95,7 +95,7 @@ namespace castor3d } } - if ( auto overlay = m_title.lock() ) + if ( auto overlay = m_title ) { if ( m_scene ) { @@ -110,7 +110,7 @@ namespace castor3d void ProgressCtrl::setTitle( castor::U32String value ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setCaption( value ); } @@ -211,13 +211,13 @@ namespace castor3d m_container->setStyle( &style.getContainerStyle() ); m_progress->setStyle( &style.getProgressStyle() ); - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setFont( style.getTitleFontName() ); title->setMaterial( style.getTitleMaterial() ); } - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setFont( style.getTextFontName() ); text->setMaterial( style.getTextMaterial() ); @@ -228,26 +228,26 @@ namespace castor3d { if ( isVertical() ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setVisible( false ); } - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( false ); } } else if ( isRightToLeft() ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setHAlign( HAlign::eRight ); } } else { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setHAlign( HAlign::eLeft ); } @@ -256,12 +256,12 @@ namespace castor3d void ProgressCtrl::doUpdateZIndex( uint32_t & index ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setOrder( index++, 0u ); } - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( index++, 0u ); } @@ -269,12 +269,12 @@ namespace castor3d void ProgressCtrl::doAdjustZIndex( uint32_t offset ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setOrder( title->getLevel() + offset, 0u ); } - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( text->getLevel() + offset, 0u ); } @@ -296,7 +296,7 @@ namespace castor3d void ProgressCtrl::doSetCaption( castor::U32String const & caption ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setCaption( caption ); } @@ -304,7 +304,7 @@ namespace castor3d void ProgressCtrl::doSetVisible( bool value ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { title->setVisible( value && !isVertical() ); } @@ -319,7 +319,7 @@ namespace castor3d m_progress->setVisible( value ); } - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( value && !isVertical() ); } @@ -334,7 +334,7 @@ namespace castor3d if ( !isVertical() ) { - if ( auto title = m_title.lock() ) + if ( auto title = m_title ) { auto titleHeight = ( title->getFontTexture() && title->getFontTexture()->getFont() ) ? title->getFontTexture()->getFont()->getHeight() @@ -355,7 +355,7 @@ namespace castor3d if ( !isVertical() ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( m_container->getClientOffset() ); text->setPixelSize( m_container->getClientSize() ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp index b7d6166138..52af5fc788 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp @@ -81,7 +81,7 @@ namespace castor3d ScrollableCtrl::~ScrollableCtrl()noexcept { - if ( auto overlay = m_corner.lock() ) + if ( auto overlay = m_corner ) { if ( m_target.hasScene() ) { @@ -169,7 +169,7 @@ namespace castor3d m_horizontalScrollBar->setStyle( &m_scrollableStyle->getHorizontalStyle() ); } - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setMaterial( m_target.getBackgroundOverlay().getMaterial() ); } @@ -198,7 +198,7 @@ namespace castor3d if ( m_verticalScrollBar && m_horizontalScrollBar ) { - if ( !m_corner.lock() ) + if ( !m_corner ) { auto corner = m_target.hasScene() ? m_target.getScene().addNewOverlay( m_target.getName() + cuT( "/Scroll/Corner" ) @@ -214,13 +214,13 @@ namespace castor3d m_corner = corner; } - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setVisible( true ); corner->setMaterial( m_target.getBackgroundOverlay().getMaterial() ); } } - else if ( auto corner = m_corner.lock() ) + else if ( auto corner = m_corner ) { corner->setVisible( false ); } @@ -255,7 +255,7 @@ namespace castor3d if ( m_verticalScrollBar && m_horizontalScrollBar ) { - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setPixelPosition( { m_verticalScrollBar->getPosition().x() , m_horizontalScrollBar->getPosition().y() } ); @@ -310,7 +310,7 @@ namespace castor3d if ( m_verticalScrollBar && m_horizontalScrollBar ) { - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setVisible( visible ); } @@ -362,7 +362,7 @@ namespace castor3d void ScrollableCtrl::updateScrollZIndex( uint32_t & index ) { - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setOrder( index++, 0u ); } @@ -370,7 +370,7 @@ namespace castor3d void ScrollableCtrl::adjustScrollZIndex( uint32_t offset ) { - if ( auto corner = m_corner.lock() ) + if ( auto corner = m_corner ) { corner->setOrder( corner->getLevel() + offset, 0u ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp index d5aa70dc62..f80707669b 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp @@ -75,7 +75,7 @@ namespace castor3d StaticCtrl::~StaticCtrl()noexcept { - if ( auto overlay = m_text.lock() ) + if ( auto overlay = m_text ) { if ( m_scene ) { @@ -166,7 +166,7 @@ namespace castor3d { auto & style = getStyle(); - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setFont( style.getFontName() ); text->setMaterial( style.getTextMaterial() ); @@ -183,7 +183,7 @@ namespace castor3d void StaticCtrl::doSetPosition( castor::Position const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( getClientOffset() ); } @@ -191,7 +191,7 @@ namespace castor3d void StaticCtrl::doSetSize( castor::Size const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelSize( getClientSize() ); } @@ -199,7 +199,7 @@ namespace castor3d void StaticCtrl::doSetBorderSize( castor::Point4ui const & value ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setPixelPosition( getClientOffset() ); text->setPixelSize( getClientSize() ); @@ -210,7 +210,7 @@ namespace castor3d { m_caption = value; - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setCaption( value ); } @@ -218,7 +218,7 @@ namespace castor3d void StaticCtrl::doSetVisible( bool visible ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setVisible( visible ); } @@ -226,7 +226,7 @@ namespace castor3d void StaticCtrl::doUpdateFlags() { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setHAlign( getHAlign() ); text->setVAlign( getVAlign() ); @@ -235,7 +235,7 @@ namespace castor3d void StaticCtrl::doUpdateZIndex( uint32_t & index ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( index++, 0u ); } @@ -243,7 +243,7 @@ namespace castor3d void StaticCtrl::doAdjustZIndex( uint32_t offset ) { - if ( auto text = m_text.lock() ) + if ( auto text = m_text ) { text->setOrder( text->getLevel() + offset, 0u ); } diff --git a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp index 26cdaa6b53..5bcc77855d 100644 --- a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp +++ b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp @@ -20,9 +20,9 @@ namespace castor3d { } - OverlayCategorySPtr BorderPanelOverlay::create() + OverlayCategoryUPtr BorderPanelOverlay::create() { - return std::make_shared< BorderPanelOverlay >(); + return castor::makeUniqueDerived< OverlayCategory, BorderPanelOverlay >(); } void BorderPanelOverlay::accept( OverlayVisitor & visitor )const diff --git a/source/Core/Castor3D/Overlay/Overlay.cpp b/source/Core/Castor3D/Overlay/Overlay.cpp index d33a581981..90fc525fb2 100644 --- a/source/Core/Castor3D/Overlay/Overlay.cpp +++ b/source/Core/Castor3D/Overlay/Overlay.cpp @@ -78,34 +78,34 @@ namespace castor3d return result; } - PanelOverlaySPtr Overlay::getPanelOverlay()const + PanelOverlayRPtr Overlay::getPanelOverlay()const { if ( m_category->getType() != OverlayType::ePanel ) { CU_Exception( "This overlay is not a panel." ); } - return std::static_pointer_cast< PanelOverlay >( m_category ); + return &static_cast< PanelOverlay & >( *m_category ); } - BorderPanelOverlaySPtr Overlay::getBorderPanelOverlay()const + BorderPanelOverlayRPtr Overlay::getBorderPanelOverlay()const { if ( m_category->getType() != OverlayType::eBorderPanel ) { CU_Exception( "This overlay is not a border panel." ); } - return std::static_pointer_cast< BorderPanelOverlay >( m_category ); + return &static_cast< BorderPanelOverlay & >( *m_category ); } - TextOverlaySPtr Overlay::getTextOverlay()const + TextOverlayRPtr Overlay::getTextOverlay()const { if ( m_category->getType() != OverlayType::eText ) { CU_Exception( "This overlay is not a text." ); } - return std::static_pointer_cast< TextOverlay >( m_category ); + return &static_cast< TextOverlay & >( *m_category ); } bool Overlay::isVisible()const diff --git a/source/Core/Castor3D/Overlay/OverlayCategory.cpp b/source/Core/Castor3D/Overlay/OverlayCategory.cpp index 7874573ae7..e7e8ab72ce 100644 --- a/source/Core/Castor3D/Overlay/OverlayCategory.cpp +++ b/source/Core/Castor3D/Overlay/OverlayCategory.cpp @@ -195,7 +195,7 @@ namespace castor3d while ( auto parent = overlay->getParent() ) { - result = ovrlcat::intersect( result, parent->getCategory()->getDisplayRect() ); + result = ovrlcat::intersect( result, parent->getCategory().getDisplayRect() ); overlay = parent; } diff --git a/source/Core/Castor3D/Overlay/OverlayFactory.cpp b/source/Core/Castor3D/Overlay/OverlayFactory.cpp index 53389b3252..dc74533079 100644 --- a/source/Core/Castor3D/Overlay/OverlayFactory.cpp +++ b/source/Core/Castor3D/Overlay/OverlayFactory.cpp @@ -9,7 +9,7 @@ CU_ImplementCUSmartPtr( castor3d, OverlayFactory ) namespace castor3d { OverlayFactory::OverlayFactory() - : Factory< OverlayCategory, OverlayType >() + : Factory< OverlayCategory, OverlayType, OverlayCategoryUPtr >() { registerType( OverlayType::ePanel, &PanelOverlay::create ); registerType( OverlayType::eBorderPanel, &BorderPanelOverlay::create ); diff --git a/source/Core/Castor3D/Overlay/PanelOverlay.cpp b/source/Core/Castor3D/Overlay/PanelOverlay.cpp index c712cb1475..c65e95a601 100644 --- a/source/Core/Castor3D/Overlay/PanelOverlay.cpp +++ b/source/Core/Castor3D/Overlay/PanelOverlay.cpp @@ -19,9 +19,9 @@ namespace castor3d { } - OverlayCategorySPtr PanelOverlay::create() + OverlayCategoryUPtr PanelOverlay::create() { - return std::make_shared< PanelOverlay >(); + return castor::makeUniqueDerived< OverlayCategory, PanelOverlay >(); } void PanelOverlay::accept( OverlayVisitor & visitor )const diff --git a/source/Core/Castor3D/Overlay/TextOverlay.cpp b/source/Core/Castor3D/Overlay/TextOverlay.cpp index f8903ec279..aa668b9550 100644 --- a/source/Core/Castor3D/Overlay/TextOverlay.cpp +++ b/source/Core/Castor3D/Overlay/TextOverlay.cpp @@ -132,7 +132,7 @@ namespace castor3d static castor::Font & getFont( TextOverlay const & overlay ) { - FontTextureSPtr fontTexture = overlay.getFontTexture(); + auto fontTexture = overlay.getFontTexture(); if ( !fontTexture ) { @@ -166,9 +166,9 @@ namespace castor3d m_displayable = false; } - OverlayCategorySPtr TextOverlay::create() + OverlayCategoryUPtr TextOverlay::create() { - return std::make_shared< TextOverlay >(); + return castor::makeUniqueDerived< OverlayCategory, TextOverlay >(); } void TextOverlay::accept( OverlayVisitor & visitor )const @@ -375,7 +375,7 @@ namespace castor3d if ( auto font = fontCache.find( name ).lock() ) { - FontTextureSPtr fontTexture = engine->getOverlayCache().getFontTexture( font->getName() ); + auto fontTexture = engine->getOverlayCache().getFontTexture( font->getName() ); if ( !fontTexture ) { @@ -406,7 +406,7 @@ namespace castor3d void TextOverlay::doUpdate( OverlayRenderer const & renderer ) { - FontTextureSPtr fontTexture = getFontTexture(); + auto fontTexture = getFontTexture(); if ( !fontTexture ) { diff --git a/source/Core/Castor3D/Render/Overlays/OverlayPass.cpp b/source/Core/Castor3D/Render/Overlays/OverlayPass.cpp index 5088662061..2280d98b5a 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayPass.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayPass.cpp @@ -29,7 +29,7 @@ namespace castor3d { if ( category->getOverlay().isVisible() ) { - categories.push_back( category.get() ); + categories.push_back( category ); if ( category->hasAnyChange() || renderer.isSizeChanged() ) { diff --git a/source/Core/Castor3D/Render/Overlays/OverlayPreparer.cpp b/source/Core/Castor3D/Render/Overlays/OverlayPreparer.cpp index dd1aeb3bdb..53bcbf8db2 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayPreparer.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayPreparer.cpp @@ -23,7 +23,7 @@ namespace castor3d return castor::Point4f{ 0.0f, 0.0f, 1.0f, 1.0f }; } - auto & parent = *overlay.getParent()->getCategory(); + auto & parent = overlay.getParent()->getCategory(); auto pos = parent.getAbsolutePosition(); auto dim = parent.getAbsoluteSize(); auto renderRatio = parent.getRenderRatio( renderSize ); @@ -286,7 +286,7 @@ namespace castor3d , *text , data , false - , text->getFontTexture().get() ) ) + , text->getFontTexture() ) ) { doUpdateUbo( m_renderer.m_common.textVertexBuffer->overlaysBuffer[data.overlayIndex] , *text diff --git a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp index e5c7c9072b..725b7bc603 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp @@ -1106,7 +1106,7 @@ namespace castor3d auto texture = text->getFontTexture(); node = &m_draw.getTextNode( device, renderPass, pass, *texture->getTexture(), *texture->getSampler().lock() ); pipelineData = &m_common.textVertexBuffer->getDrawPipelineData( node->pipeline - , texture.get() + , texture , &m_draw.createTextDescriptorSet( *texture ) ); m_compute.getTextPipeline( *texture ).count += text->getCharCount(); } diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp index aa8d820bd2..e2dba3e3c1 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp @@ -10,6 +10,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, TextureConfigurationBuffer ) + namespace castor3d { //********************************************************************************************* diff --git a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp index 26ade25b60..ecadbdb3dd 100644 --- a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp @@ -20,8 +20,8 @@ namespace GuiCommon { OverlayTreeItemProperty::OverlayTreeItemProperty( bool editable - , castor3d::OverlayCategorySPtr overlay ) - : TreeItemProperty( overlay->getOverlay().getEngine(), editable ) + , castor3d::OverlayCategory & overlay ) + : TreeItemProperty( overlay.getOverlay().getEngine(), editable ) , m_overlay( overlay ) { CreateTreeItemMenu(); @@ -36,48 +36,42 @@ namespace GuiCommon static wxString PROPERTY_OVERLAY_SIZE = _( "Size" ); static wxString PROPERTY_OVERLAY_MATERIAL = _( "Material" ); - castor3d::OverlayCategorySPtr overlay = getOverlay(); + auto & overlay = getOverlay(); + auto & engine = *overlay.getOverlay().getEngine(); + m_materials = getMaterialsList(); + addProperty( grid, PROPERTY_CATEGORY_OVERLAY + wxString( overlay.getOverlayName() ) ); + addPropertyT( grid, PROPERTY_OVERLAY_VISIBLE, overlay.isVisible(), &overlay, &castor3d::OverlayCategory::setVisible ); + addProperty( grid, PROPERTY_OVERLAY_POSITION, overlay.computePixelPosition() + , [&overlay]( wxVariant const & var ) + { + overlay.setPixelPosition( PositionRefFromVariant( var ) ); + } ); + addProperty( grid, PROPERTY_OVERLAY_SIZE, overlay.computePixelSize() + , [&overlay]( wxVariant const & var ) + { + overlay.setPixelSize( SizeRefFromVariant( var ) ); + } ); + addMaterial( grid, engine, PROPERTY_OVERLAY_MATERIAL, m_materials, overlay.getMaterial() + , [&overlay]( castor3d::MaterialRPtr material ) { overlay.setMaterial( material ); } ); - if ( overlay ) + switch ( overlay.getType() ) { - auto & engine = *overlay->getOverlay().getEngine(); - m_materials = getMaterialsList(); - addProperty( grid, PROPERTY_CATEGORY_OVERLAY + wxString( overlay->getOverlayName() ) ); - addPropertyT( grid, PROPERTY_OVERLAY_VISIBLE, overlay->isVisible(), overlay.get(), &castor3d::OverlayCategory::setVisible ); - addProperty( grid, PROPERTY_OVERLAY_POSITION, overlay->computePixelPosition() - , [this]( wxVariant const & var ) - { - castor3d::OverlayCategorySPtr ov = getOverlay(); - ov->setPixelPosition( PositionRefFromVariant( var ) ); - } ); - addProperty( grid, PROPERTY_OVERLAY_SIZE, overlay->computePixelSize() - , [this]( wxVariant const & var ) - { - castor3d::OverlayCategorySPtr ov = getOverlay(); - ov->setPixelSize( SizeRefFromVariant( var ) ); - } ); - addMaterial( grid, engine, PROPERTY_OVERLAY_MATERIAL, m_materials, overlay->getMaterial() - , [&overlay]( castor3d::MaterialRPtr material ) { overlay->setMaterial( material ); } ); - - switch ( overlay->getType() ) - { - case castor3d::OverlayType::ePanel: - break; - case castor3d::OverlayType::eBorderPanel: - doCreateBorderPanelOverlayProperties( grid, std::static_pointer_cast< castor3d::BorderPanelOverlay >( getOverlay() ) ); - break; - case castor3d::OverlayType::eText: - doCreateTextOverlayProperties( grid, std::static_pointer_cast< castor3d::TextOverlay >( getOverlay() ) ); - break; - default: - CU_Failure( "Unsupported OverlayType" ); - break; - } + case castor3d::OverlayType::ePanel: + break; + case castor3d::OverlayType::eBorderPanel: + doCreateBorderPanelOverlayProperties( grid, static_cast< castor3d::BorderPanelOverlay & >( overlay ) ); + break; + case castor3d::OverlayType::eText: + doCreateTextOverlayProperties( grid, static_cast< castor3d::TextOverlay & >( overlay ) ); + break; + default: + CU_Failure( "Unsupported OverlayType" ); + break; } } void OverlayTreeItemProperty::doCreateBorderPanelOverlayProperties( wxPropertyGrid * grid - , castor3d::BorderPanelOverlaySPtr overlay ) + , castor3d::BorderPanelOverlay & overlay ) { static wxString PROPERTY_CATEGORY_BORDER_PANEL_OVERLAY = _( "Borders" ); static wxString PROPERTY_OVERLAY_BORDER_SIZE = _( "Borders Size" ); @@ -87,26 +81,25 @@ namespace GuiCommon static wxString PROPERTY_OVERLAY_BORDER_POSITION = _( "Borders Position" ); static std::array< wxString, size_t( castor3d::BorderPosition::eCount ) > PROPERTY_OVERLAY_BORDER_POSITION_TEXTS{ _( "Internal" ), _( "Middle" ), _( "External" ) }; - auto & engine = *overlay->getOverlay().getEngine(); + auto & engine = *overlay.getOverlay().getEngine(); addProperty( grid, PROPERTY_CATEGORY_BORDER_PANEL_OVERLAY ); wxArrayString choices{ make_wxArrayString( PROPERTY_OVERLAY_BORDER_POSITION_TEXTS ) }; addProperty( grid, PROPERTY_OVERLAY_BORDER_SIZE - , overlay->computePixelBorderSize() - , [this]( wxVariant const & var ) + , overlay.computePixelBorderSize() + , [&overlay]( wxVariant const & var ) { - auto & ov = static_cast< castor3d::BorderPanelOverlay & >( *getOverlay() ); - ov.setPixelBorderSize( Point4uiRefFromVariant( var ) ); + overlay.setPixelBorderSize( Point4uiRefFromVariant( var ) ); } ); - addMaterial( grid, engine, PROPERTY_OVERLAY_BORDER_MATERIAL, m_materials, overlay->getBorderMaterial() - , [&overlay]( castor3d::MaterialRPtr material ) { overlay->setBorderMaterial( material ); } ); - addPropertyT( grid, PROPERTY_OVERLAY_BORDER_INNER_UV, overlay->getBorderInnerUV(), overlay.get(), &castor3d::BorderPanelOverlay::setBorderInnerUV ); - addPropertyT( grid, PROPERTY_OVERLAY_BORDER_OUTER_UV, overlay->getBorderOuterUV(), overlay.get(), &castor3d::BorderPanelOverlay::setBorderOuterUV ); - addPropertyET( grid, PROPERTY_OVERLAY_BORDER_POSITION, choices, overlay->getBorderPosition(), overlay.get(), &castor3d::BorderPanelOverlay::setBorderPosition ); + addMaterial( grid, engine, PROPERTY_OVERLAY_BORDER_MATERIAL, m_materials, overlay.getBorderMaterial() + , [&overlay]( castor3d::MaterialRPtr material ) { overlay.setBorderMaterial( material ); } ); + addPropertyT( grid, PROPERTY_OVERLAY_BORDER_INNER_UV, overlay.getBorderInnerUV(), &overlay, &castor3d::BorderPanelOverlay::setBorderInnerUV ); + addPropertyT( grid, PROPERTY_OVERLAY_BORDER_OUTER_UV, overlay.getBorderOuterUV(), &overlay, &castor3d::BorderPanelOverlay::setBorderOuterUV ); + addPropertyET( grid, PROPERTY_OVERLAY_BORDER_POSITION, choices, overlay.getBorderPosition(), &overlay, &castor3d::BorderPanelOverlay::setBorderPosition ); } void OverlayTreeItemProperty::doCreateTextOverlayProperties( wxPropertyGrid * grid - , castor3d::TextOverlaySPtr overlay ) + , castor3d::TextOverlay & overlay ) { static wxString PROPERTY_CATEGORY_TEXT_OVERLAY = _( "Text" ); static wxString PROPERTY_OVERLAY_FONT = _( "Font" ); @@ -123,29 +116,27 @@ namespace GuiCommon static std::array< wxString, size_t( castor3d::TextTexturingMode::eCount ) > PROPERTY_OVERLAY_TEXTURING_TEXTS{ _( "Letter" ), _( "Text" ) }; wxArrayString haligns{ make_wxArrayString( PROPERTY_OVERLAY_HALIGN_TEXTS ) }; - wxString halign{ PROPERTY_OVERLAY_HALIGN_TEXTS[size_t( overlay->getHAlign() )] }; + wxString halign{ PROPERTY_OVERLAY_HALIGN_TEXTS[size_t( overlay.getHAlign() )] }; wxArrayString valigns{ make_wxArrayString( PROPERTY_OVERLAY_VALIGN_TEXTS ) }; - wxString valign{ PROPERTY_OVERLAY_VALIGN_TEXTS[size_t( overlay->getVAlign() )] }; + wxString valign{ PROPERTY_OVERLAY_VALIGN_TEXTS[size_t( overlay.getVAlign() )] }; wxArrayString wrappings{ make_wxArrayString( PROPERTY_OVERLAY_WRAPPING_TEXTS ) }; - wxString wrapping{ PROPERTY_OVERLAY_WRAPPING_TEXTS[size_t( overlay->getTextWrappingMode() )] }; + wxString wrapping{ PROPERTY_OVERLAY_WRAPPING_TEXTS[size_t( overlay.getTextWrappingMode() )] }; wxArrayString spacings{ make_wxArrayString( PROPERTY_OVERLAY_SPACING_TEXTS ) }; - wxString spacing{ PROPERTY_OVERLAY_SPACING_TEXTS[size_t( overlay->getLineSpacingMode() )] }; + wxString spacing{ PROPERTY_OVERLAY_SPACING_TEXTS[size_t( overlay.getLineSpacingMode() )] }; wxArrayString texturings{ make_wxArrayString( PROPERTY_OVERLAY_TEXTURING_TEXTS ) }; - wxString texturing{ PROPERTY_OVERLAY_TEXTURING_TEXTS[size_t( overlay->getTexturingMode() )] }; + wxString texturing{ PROPERTY_OVERLAY_TEXTURING_TEXTS[size_t( overlay.getTexturingMode() )] }; addProperty( grid, PROPERTY_CATEGORY_TEXT_OVERLAY ); - addProperty( grid, PROPERTY_OVERLAY_FONT, *overlay->getFontTexture()->getFont() - , [this]( wxVariant const & var ) + addProperty( grid, PROPERTY_OVERLAY_FONT, *overlay.getFontTexture()->getFont() + , [&overlay]( wxVariant const & var ) { - castor3d::TextOverlaySPtr ov = std::static_pointer_cast< castor3d::TextOverlay >( getOverlay() ); - CU_Require( ov->getType() == castor3d::OverlayType::eText ); - ov->setFont( variantCast< castor::FontSPtr >( var )->getName() ); + overlay.setFont( variantCast< castor::FontSPtr >( var )->getName() ); } ); - addPropertyT( grid, PROPERTY_OVERLAY_CAPTION, overlay->getCaption(), overlay.get(), &castor3d::TextOverlay::setCaption ); - addPropertyET( grid, PROPERTY_OVERLAY_HALIGN, haligns, overlay->getHAlign(), overlay.get(), &castor3d::TextOverlay::setHAlign ); - addPropertyET( grid, PROPERTY_OVERLAY_VALIGN, valigns, overlay->getVAlign(), overlay.get(), &castor3d::TextOverlay::setVAlign ); - addPropertyET( grid, PROPERTY_OVERLAY_WRAPPING, wrappings, overlay->getTextWrappingMode(), overlay.get(), &castor3d::TextOverlay::setTextWrappingMode ); - addPropertyET( grid, PROPERTY_OVERLAY_SPACING, spacings, overlay->getLineSpacingMode(), overlay.get(), &castor3d::TextOverlay::setLineSpacingMode ); - addPropertyET( grid, PROPERTY_OVERLAY_TEXTURING, texturings, overlay->getTexturingMode(), overlay.get(), &castor3d::TextOverlay::setTexturingMode ); + addPropertyT( grid, PROPERTY_OVERLAY_CAPTION, overlay.getCaption(), &overlay, &castor3d::TextOverlay::setCaption ); + addPropertyET( grid, PROPERTY_OVERLAY_HALIGN, haligns, overlay.getHAlign(), &overlay, &castor3d::TextOverlay::setHAlign ); + addPropertyET( grid, PROPERTY_OVERLAY_VALIGN, valigns, overlay.getVAlign(), &overlay, &castor3d::TextOverlay::setVAlign ); + addPropertyET( grid, PROPERTY_OVERLAY_WRAPPING, wrappings, overlay.getTextWrappingMode(), &overlay, &castor3d::TextOverlay::setTextWrappingMode ); + addPropertyET( grid, PROPERTY_OVERLAY_SPACING, spacings, overlay.getLineSpacingMode(), &overlay, &castor3d::TextOverlay::setLineSpacingMode ); + addPropertyET( grid, PROPERTY_OVERLAY_TEXTURING, texturings, overlay.getTexturingMode(), &overlay, &castor3d::TextOverlay::setTexturingMode ); } } diff --git a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.hpp index f4b8df9568..6d1f30682c 100644 --- a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.hpp @@ -31,7 +31,8 @@ namespace GuiCommon *\param[in] editable Dit si les propriétés sont modifiables *\param[in] overlay L'incrustation cible */ - OverlayTreeItemProperty( bool editable, castor3d::OverlayCategorySPtr overlay ); + OverlayTreeItemProperty( bool editable + , castor3d::OverlayCategory & overlay ); /** *\~english *\brief Retrieves the overlay @@ -40,23 +41,26 @@ namespace GuiCommon *\brief Récupère l'incrustation *\return La valeur */ - inline castor3d::OverlayCategorySPtr getOverlay() + inline castor3d::OverlayCategory & getOverlay()const noexcept { - return m_overlay.lock(); + return m_overlay; } private: /** *\copydoc GuiCommon::TreeItemProperty::doCreateProperties */ - void doCreateProperties( wxPGEditor * editor, wxPropertyGrid * grid )override; + void doCreateProperties( wxPGEditor * editor + , wxPropertyGrid * grid )override; private: - void doCreateBorderPanelOverlayProperties( wxPropertyGrid * grid, castor3d::BorderPanelOverlaySPtr overlay ); - void doCreateTextOverlayProperties( wxPropertyGrid * grid, castor3d::TextOverlaySPtr overlay ); + void doCreateBorderPanelOverlayProperties( wxPropertyGrid * grid + , castor3d::BorderPanelOverlay & overlay ); + void doCreateTextOverlayProperties( wxPropertyGrid * grid + , castor3d::TextOverlay & overlay ); private: - castor3d::OverlayCategoryWPtr m_overlay; + castor3d::OverlayCategory & m_overlay; wxArrayString m_materials; }; } diff --git a/tools/GuiCommon/System/SceneObjectsList.cpp b/tools/GuiCommon/System/SceneObjectsList.cpp index 6255d498de..7d7c6662ce 100644 --- a/tools/GuiCommon/System/SceneObjectsList.cpp +++ b/tools/GuiCommon/System/SceneObjectsList.cpp @@ -312,7 +312,7 @@ namespace GuiCommon , overlay->getOverlayName() , eBMP_PANEL_OVERLAY , eBMP_PANEL_OVERLAY_SEL - , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay ) ) + , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), *overlay ) ) , *overlay ); break; case castor3d::OverlayType::eBorderPanel: @@ -320,7 +320,7 @@ namespace GuiCommon , overlay->getOverlayName() , eBMP_BORDER_PANEL_OVERLAY , eBMP_BORDER_PANEL_OVERLAY_SEL - , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay ) ) + , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), *overlay ) ) , *overlay ); break; case castor3d::OverlayType::eText: @@ -328,7 +328,7 @@ namespace GuiCommon , overlay->getOverlayName() , eBMP_TEXT_OVERLAY , eBMP_TEXT_OVERLAY_SEL - , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay ) ) + , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), *overlay ) ) , *overlay ); break; default: @@ -603,7 +603,7 @@ namespace GuiCommon , eBMP_PANEL_OVERLAY , eBMP_PANEL_OVERLAY_SEL , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay->getCategory() ) ) - , *overlay->getCategory() ); + , overlay->getCategory() ); break; case castor3d::OverlayType::eBorderPanel: doAddOverlay( AppendItem( id @@ -611,7 +611,7 @@ namespace GuiCommon , eBMP_BORDER_PANEL_OVERLAY , eBMP_BORDER_PANEL_OVERLAY_SEL , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay->getCategory() ) ) - , *overlay->getCategory() ); + , overlay->getCategory() ); break; case castor3d::OverlayType::eText: doAddOverlay( AppendItem( id @@ -619,7 +619,7 @@ namespace GuiCommon , eBMP_TEXT_OVERLAY , eBMP_TEXT_OVERLAY_SEL , new OverlayTreeItemProperty( m_propertiesHolder->isEditable(), overlay->getCategory() ) ) - , *overlay->getCategory() ); + , overlay->getCategory() ); break; default: CU_Failure( "Unsupported OverlayType" ); From 8a34ea65d8c968d4ff6c66f4fecebf946b5178a1 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 17:38:08 +0200 Subject: [PATCH 08/35] Castor3D: Replaced shared_ptrs with unique_ptrs for material shader buffers. --- include/Core/Castor3D/Cache/MaterialCache.hpp | 8 ++++---- source/Core/Castor3D/Cache/MaterialCache.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/Core/Castor3D/Cache/MaterialCache.hpp b/include/Core/Castor3D/Cache/MaterialCache.hpp index 09e4f24f87..48e22975b4 100644 --- a/include/Core/Castor3D/Cache/MaterialCache.hpp +++ b/include/Core/Castor3D/Cache/MaterialCache.hpp @@ -315,10 +315,10 @@ namespace castor private: castor3d::Engine & m_engine; castor3d::MaterialRPtr m_defaultMaterial{}; - castor3d::PassBufferSPtr m_passBuffer; - castor3d::SssProfileBufferSPtr m_sssProfileBuffer; - castor3d::TextureConfigurationBufferSPtr m_texConfigBuffer; - castor3d::TextureAnimationBufferSPtr m_texAnimBuffer; + castor3d::PassBufferUPtr m_passBuffer; + castor3d::SssProfileBufferUPtr m_sssProfileBuffer; + castor3d::TextureConfigurationBufferUPtr m_texConfigBuffer; + castor3d::TextureAnimationBufferUPtr m_texAnimBuffer; std::vector< castor3d::Pass * > m_pendingPasses; std::vector< castor3d::TextureUnit * > m_pendingUnits; std::vector< castor3d::AnimatedTexture const * > m_pendingTextures; diff --git a/source/Core/Castor3D/Cache/MaterialCache.cpp b/source/Core/Castor3D/Cache/MaterialCache.cpp index 030d2b1c0d..be2113c0e3 100644 --- a/source/Core/Castor3D/Cache/MaterialCache.cpp +++ b/source/Core/Castor3D/Cache/MaterialCache.cpp @@ -159,18 +159,18 @@ namespace castor } m_defaultMaterial = material.get(); - m_passBuffer = std::make_shared< PassBuffer >( m_engine + m_passBuffer = castor::makeUnique< PassBuffer >( m_engine , device , MaxMaterialsCount ); - m_sssProfileBuffer = std::make_shared< SssProfileBuffer >( m_engine + m_sssProfileBuffer = castor::makeUnique< SssProfileBuffer >( m_engine , device , MaxSssProfilesCount ); - m_texConfigBuffer = std::make_shared< TextureConfigurationBuffer >( m_engine + m_texConfigBuffer = castor::makeUnique< TextureConfigurationBuffer >( m_engine , device , ( device.hasBindless() ? device.getMaxBindlessSampled() : MaxTextureConfigurationCount ) ); - m_texAnimBuffer = std::make_shared< TextureAnimationBuffer >( m_engine + m_texAnimBuffer = castor::makeUnique< TextureAnimationBuffer >( m_engine , device , ( device.hasBindless() ? device.getMaxBindlessSampled() From 93b8ddcefe6bd551050423a0e8cf8ee76761c49f Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 17:40:56 +0200 Subject: [PATCH 09/35] Castor3D: Fixed normals after passes merging. --- source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp b/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp index f96326156c..6682567bf1 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp @@ -76,6 +76,7 @@ namespace castor3d::shader ROF; output = result; + output.normal = normalize( result.normal ); if ( opaque || !output.hasMember( "transmission" ) ) From 1d91f32f29ec1853f3b2c8a3f803d477fbdff7b6 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 17:41:32 +0200 Subject: [PATCH 10/35] Castor3D: Fixed handling of 64 bits png with FreeImage. --- .../CastorUtils/Graphics/FreeImageLoader.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp index f31af9ce99..cd2aa28d12 100644 --- a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp @@ -165,8 +165,20 @@ namespace castor needsComponentSwap = true; break; default: - sourceFmt = freeimgl::convertTo32Bits( fiImage ); - needsComponentSwap = true; + if ( auto info = FreeImage_GetInfo( fiImage ) ) + { + auto colorType = FreeImage_GetColorType( fiImage ); + + if ( info->bmiHeader.biBitCount == 64 && colorType == FIC_RGBALPHA ) + { + sourceFmt = PixelFormat::eR16G16B16A16_UNORM; + } + else + { + sourceFmt = freeimgl::convertTo32Bits( fiImage ); + needsComponentSwap = true; + } + } break; } From dae09afeb3bd443a9e2ba43c130635f6168392f5 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Tue, 4 Apr 2023 17:42:08 +0200 Subject: [PATCH 11/35] Castor3D: Fixed merging of images during texture units constitution. --- .../Material/Texture/TextureConfiguration.hpp | 1 + .../CastorUtils/Graphics/PixelComponents.hpp | 6 +- .../CastorUtils/Graphics/PixelComponents.inl | 187 +++++++++- .../CastorUtils/Graphics/PixelDefinitions.inl | 89 ++++- .../Core/CastorUtils/Graphics/PixelFormat.hpp | 14 + .../Core/CastorUtils/Graphics/PixelFormat.inl | 319 +++++++++++------- source/Core/Castor3D/Cache/TextureCache.cpp | 30 +- .../Render/Opaque/VisibilityResolvePass.cpp | 8 +- 8 files changed, 514 insertions(+), 140 deletions(-) diff --git a/include/Core/Castor3D/Material/Texture/TextureConfiguration.hpp b/include/Core/Castor3D/Material/Texture/TextureConfiguration.hpp index 8ca8775248..904e3fe0d5 100644 --- a/include/Core/Castor3D/Material/Texture/TextureConfiguration.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureConfiguration.hpp @@ -175,6 +175,7 @@ namespace castor3d /**@{*/ C3D_API TextureFlagsSet getFlags( TextureConfiguration const & config ); C3D_API castor::PixelComponents getPixelComponents( uint32_t mask ); + C3D_API castor::PixelComponents getPixelComponents( castor::PixelFormat format ); C3D_API castor::PixelComponents getPixelComponents( TextureConfiguration const & config ); C3D_API void updateIndices( castor::PixelFormat format , TextureConfiguration & config ); diff --git a/include/Core/CastorUtils/Graphics/PixelComponents.hpp b/include/Core/CastorUtils/Graphics/PixelComponents.hpp index c605889713..4d3343f7f8 100644 --- a/include/Core/CastorUtils/Graphics/PixelComponents.hpp +++ b/include/Core/CastorUtils/Graphics/PixelComponents.hpp @@ -65,9 +65,9 @@ namespace castor template< PixelFormat PFT > int16_t getR16F( uint8_t const * buffer ); template< PixelFormat PFT > - uint32_t getR32S( uint8_t const * buffer ); + uint32_t getR32U( uint8_t const * buffer ); template< PixelFormat PFT > - int32_t getR32U( uint8_t const * buffer ); + int32_t getR32S( uint8_t const * buffer ); template< PixelFormat PFT > float getR32F( uint8_t const * buffer ); template< PixelFormat PFT > @@ -618,6 +618,8 @@ namespace castor { return setS8U< PF >( pixel.ptr(), value ); } + + castor::PixelComponents getPixelComponents( castor::PixelFormat format ); } #include "PixelComponents.inl" diff --git a/include/Core/CastorUtils/Graphics/PixelComponents.inl b/include/Core/CastorUtils/Graphics/PixelComponents.inl index 48c39cc8c9..d51fc05df6 100644 --- a/include/Core/CastorUtils/Graphics/PixelComponents.inl +++ b/include/Core/CastorUtils/Graphics/PixelComponents.inl @@ -32,6 +32,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR4G4_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { uint8_t r : 4; @@ -82,6 +84,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR4G4B4A4_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t r : 4; @@ -136,6 +142,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eB4G4R4A4_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t b : 4; @@ -190,6 +200,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR5G6B5_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint16_t r : 5; @@ -242,6 +255,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eB5G6R5_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint16_t b : 5; @@ -294,6 +310,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR5G5B5A1_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t r : 5; @@ -348,6 +368,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eB5G5R5A1_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t b : 5; @@ -402,6 +426,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA1R5G5B5_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t a : 1; @@ -456,6 +484,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { int8_t r; @@ -504,6 +533,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { int8_t r; @@ -587,6 +617,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { uint8_t r; @@ -637,6 +669,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { int8_t r; @@ -722,6 +756,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8B8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint8_t r; @@ -774,6 +811,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8B8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { int8_t r; @@ -861,6 +901,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eB8G8R8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint8_t b; @@ -913,6 +956,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eB8G8R8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { int8_t b; @@ -1000,6 +1046,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8B8A8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint8_t r; @@ -1054,6 +1104,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR8G8B8A8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int8_t r; @@ -1143,6 +1197,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eB8G8R8A8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint8_t b; @@ -1197,6 +1255,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eB8G8R8A8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int8_t b; @@ -1286,6 +1348,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA8B8G8R8_UNORM > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint8_t a; @@ -1340,6 +1406,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA8B8G8R8_SNORM > { using Type = int8_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int8_t a; @@ -1429,6 +1499,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA2R10G10B10_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint32_t a : 2; @@ -1483,6 +1557,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA2R10G10B10_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int32_t a : 2; @@ -1565,6 +1643,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA2B10G10R10_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint32_t a : 2; @@ -1619,6 +1701,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eA2B10G10R10_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int32_t a : 2; @@ -1701,6 +1787,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { uint16_t r; @@ -1749,6 +1836,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { int16_t r; @@ -1832,6 +1920,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { uint16_t r; @@ -1882,6 +1972,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { int16_t r; @@ -1967,6 +2059,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16B16_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint16_t r; @@ -2019,6 +2114,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16B16_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { int16_t r; @@ -2106,6 +2204,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16B16A16_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint16_t r; @@ -2160,6 +2262,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR16G16B16A16_SNORM > { using Type = int16_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int16_t r; @@ -2249,6 +2355,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32_UINT > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { uint32_t r; @@ -2297,6 +2404,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32_SINT > { using Type = int32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { int32_t r; @@ -2345,6 +2453,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32_SFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { float r; @@ -2393,6 +2502,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32_UINT > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { uint32_t r; @@ -2443,6 +2554,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32_SINT > { using Type = int32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { int32_t r; @@ -2493,6 +2606,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32_SFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { float r; @@ -2543,6 +2658,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32_UINT > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint32_t r; @@ -2595,6 +2713,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32_SINT > { using Type = int32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { int32_t r; @@ -2647,6 +2768,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32_SFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { float r; @@ -2699,6 +2823,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32A32_UINT > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint32_t r; @@ -2753,6 +2881,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32A32_SINT > { using Type = int32_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int32_t r; @@ -2807,6 +2939,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR32G32B32A32_SFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { float r; @@ -2861,6 +2997,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64_UINT > { using Type = uint64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { uint64_t r; @@ -2909,6 +3046,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64_SINT > { using Type = int64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { int64_t r; @@ -2957,6 +3095,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64_SFLOAT > { using Type = double; + static PixelComponents constexpr Components = ( PixelComponent::eRed ); struct Pixel { double r; @@ -3005,6 +3144,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64_UINT > { using Type = uint64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { uint64_t r; @@ -3055,6 +3196,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64_SINT > { using Type = int64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { int64_t r; @@ -3105,6 +3248,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64_SFLOAT > { using Type = double; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen ); struct Pixel { double r; @@ -3155,6 +3300,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64_UINT > { using Type = uint64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint64_t r; @@ -3207,6 +3355,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64_SINT > { using Type = int64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { int64_t r; @@ -3259,6 +3410,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64_SFLOAT > { using Type = double; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { double r; @@ -3311,6 +3465,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64A64_UINT > { using Type = uint64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint64_t r; @@ -3365,6 +3523,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64A64_SINT > { using Type = int64_t; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { int64_t r; @@ -3419,6 +3581,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eR64G64B64A64_SFLOAT > { using Type = double; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { double r; @@ -3473,6 +3639,9 @@ namespace castor struct PixelComponentsT< PixelFormat::eB10G11R11_UFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue ); struct Pixel { uint32_t b : 10; @@ -3525,6 +3694,10 @@ namespace castor struct PixelComponentsT< PixelFormat::eE5B9G9R9_UFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eRed + | PixelComponent::eGreen + | PixelComponent::eBlue + | PixelComponent::eAlpha ); struct Pixel { uint32_t e : 5; @@ -3578,6 +3751,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eD16_UNORM > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eDepth ); struct Pixel { uint16_t d; @@ -3612,6 +3786,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eX8_D24_UNORM > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eDepth ); struct Pixel { uint32_t d : 24, : 8; @@ -3646,6 +3821,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eD32_SFLOAT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eDepth ); struct Pixel { float d; @@ -3680,6 +3856,7 @@ namespace castor struct PixelComponentsT< PixelFormat::eS8_UINT > { using Type = uint8_t; + static PixelComponents constexpr Components = ( PixelComponent::eStencil ); struct Pixel { uint8_t s; @@ -3714,6 +3891,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eD16_UNORM_S8_UINT > { using Type = uint16_t; + static PixelComponents constexpr Components = ( PixelComponent::eDepth + | PixelComponent::eStencil ); struct Pixel { uint16_t d; @@ -3750,6 +3929,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eD24_UNORM_S8_UINT > { using Type = uint32_t; + static PixelComponents constexpr Components = ( PixelComponent::eDepth + | PixelComponent::eStencil ); struct Pixel { uint32_t d : 24; @@ -3786,6 +3967,8 @@ namespace castor struct PixelComponentsT< PixelFormat::eD32_SFLOAT_S8_UINT > { using Type = float; + static PixelComponents constexpr Components = ( PixelComponent::eDepth + | PixelComponent::eStencil ); struct Pixel { uint32_t d : 24; @@ -4899,13 +5082,13 @@ namespace castor } template< PixelFormat PFT > - uint32_t getR32S( uint8_t const * buffer ) + uint32_t getR32U( uint8_t const * buffer ) { return details::PxComponentGetter< uint32_t >::get( buffer, PixelComponentsT< PFT >::R ); } template< PixelFormat PFT > - int32_t getR32U( uint8_t const * buffer ) + int32_t getR32S( uint8_t const * buffer ) { return details::PxComponentGetter< int32_t >::get( buffer, PixelComponentsT< PFT >::R ); } diff --git a/include/Core/CastorUtils/Graphics/PixelDefinitions.inl b/include/Core/CastorUtils/Graphics/PixelDefinitions.inl index 196bf21658..b28ef154ed 100644 --- a/include/Core/CastorUtils/Graphics/PixelDefinitions.inl +++ b/include/Core/CastorUtils/Graphics/PixelDefinitions.inl @@ -218,18 +218,42 @@ namespace castor case PixelFormat::eR8_UNORM: PixelConverter< PF, PixelFormat::eR8_UNORM >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR16_UINT: + PixelConverter< PF, PixelFormat::eR16_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR16_SINT: + PixelConverter< PF, PixelFormat::eR16_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR16_SFLOAT: PixelConverter< PF, PixelFormat::eR16_SFLOAT >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR32_UINT: + PixelConverter< PF, PixelFormat::eR32_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR32_SINT: + PixelConverter< PF, PixelFormat::eR32_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR32_SFLOAT: PixelConverter< PF, PixelFormat::eR32_SFLOAT >()( srcBuffer, dstBuffer ); break; case PixelFormat::eR8G8_UNORM: PixelConverter< PF, PixelFormat::eR8G8_UNORM >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR16G16_UINT: + PixelConverter< PF, PixelFormat::eR16G16_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR16G16_SINT: + PixelConverter< PF, PixelFormat::eR16G16_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR16G16_SFLOAT: PixelConverter< PF, PixelFormat::eR16G16_SFLOAT >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR32G32_UINT: + PixelConverter< PF, PixelFormat::eR32G32_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR32G32_SINT: + PixelConverter< PF, PixelFormat::eR32G32_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR32G32_SFLOAT: PixelConverter< PF, PixelFormat::eR32G32_SFLOAT >()( srcBuffer, dstBuffer ); break; @@ -263,14 +287,32 @@ namespace castor case PixelFormat::eA8B8G8R8_SRGB: PixelConverter< PF, PixelFormat::eA8B8G8R8_SRGB >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR16G16B16_UINT: + PixelConverter< PF, PixelFormat::eR16G16B16_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR16G16B16_SINT: + PixelConverter< PF, PixelFormat::eR16G16B16_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR16G16B16_SFLOAT: PixelConverter< PF, PixelFormat::eR16G16B16_SFLOAT >()( srcBuffer, dstBuffer ); break; + case PixelFormat::eR32G32B32_SFLOAT: + PixelConverter< PF, PixelFormat::eR32G32B32_SFLOAT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR16G16B16A16_UINT: + PixelConverter< PF, PixelFormat::eR16G16B16A16_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR16G16B16A16_SINT: + PixelConverter< PF, PixelFormat::eR16G16B16A16_SINT >()( srcBuffer, dstBuffer ); + break; case PixelFormat::eR16G16B16A16_SFLOAT: PixelConverter< PF, PixelFormat::eR16G16B16A16_SFLOAT >()( srcBuffer, dstBuffer ); break; - case PixelFormat::eR32G32B32_SFLOAT: - PixelConverter< PF, PixelFormat::eR32G32B32_SFLOAT >()( srcBuffer, dstBuffer ); + case PixelFormat::eR32G32B32A32_UINT: + PixelConverter< PF, PixelFormat::eR32G32B32A32_UINT >()( srcBuffer, dstBuffer ); + break; + case PixelFormat::eR32G32B32A32_SINT: + PixelConverter< PF, PixelFormat::eR32G32B32A32_SINT >()( srcBuffer, dstBuffer ); break; case PixelFormat::eR32G32B32A32_SFLOAT: PixelConverter< PF, PixelFormat::eR32G32B32A32_SFLOAT >()( srcBuffer, dstBuffer ); @@ -401,6 +443,12 @@ namespace castor case PixelFormat::eR8_UNORM: BufferConverter< PF, PixelFormat::eR8_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; + case PixelFormat::eR16_UNORM: + BufferConverter< PF, PixelFormat::eR16_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR16_SNORM: + BufferConverter< PF, PixelFormat::eR16_SNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; case PixelFormat::eR16_SFLOAT: BufferConverter< PF, PixelFormat::eR16_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; @@ -410,9 +458,21 @@ namespace castor case PixelFormat::eR8G8_UNORM: BufferConverter< PF, PixelFormat::eR8G8_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; + case PixelFormat::eR16G16_UNORM: + BufferConverter< PF, PixelFormat::eR16G16_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR16G16_SNORM: + BufferConverter< PF, PixelFormat::eR16G16_SNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; case PixelFormat::eR16G16_SFLOAT: BufferConverter< PF, PixelFormat::eR16G16_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; + case PixelFormat::eR32G32_UINT: + BufferConverter< PF, PixelFormat::eR32G32_UINT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR32G32_SINT: + BufferConverter< PF, PixelFormat::eR32G32_SINT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; case PixelFormat::eR32G32_SFLOAT: BufferConverter< PF, PixelFormat::eR32G32_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; @@ -437,6 +497,21 @@ namespace castor case PixelFormat::eB8G8R8_SRGB: BufferConverter< PF, PixelFormat::eB8G8R8_SRGB >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; + case PixelFormat::eR16G16B16_UNORM: + BufferConverter< PF, PixelFormat::eR16G16B16_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR16G16B16_SNORM: + BufferConverter< PF, PixelFormat::eR16G16B16_SNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR32G32B32_UINT: + BufferConverter< PF, PixelFormat::eR32G32B32_UINT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR32G32B32_SINT: + BufferConverter< PF, PixelFormat::eR32G32B32_SINT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR32G32B32_SFLOAT: + BufferConverter< PF, PixelFormat::eR32G32B32_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; case PixelFormat::eR8G8B8A8_UNORM: BufferConverter< PF, PixelFormat::eR8G8B8A8_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; @@ -449,14 +524,20 @@ namespace castor case PixelFormat::eA8B8G8R8_SRGB: BufferConverter< PF, PixelFormat::eA8B8G8R8_SRGB >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; + case PixelFormat::eR16G16B16A16_UNORM: + BufferConverter< PF, PixelFormat::eR16G16B16A16_UNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; + case PixelFormat::eR16G16B16A16_SNORM: + BufferConverter< PF, PixelFormat::eR16G16B16A16_SNORM >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + break; case PixelFormat::eR16G16B16_SFLOAT: BufferConverter< PF, PixelFormat::eR16G16B16_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; case PixelFormat::eR16G16B16A16_SFLOAT: BufferConverter< PF, PixelFormat::eR16G16B16A16_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; - case PixelFormat::eR32G32B32_SFLOAT: - BufferConverter< PF, PixelFormat::eR32G32B32_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); + case PixelFormat::eR32G32B32A32_UINT: + BufferConverter< PF, PixelFormat::eR32G32B32A32_UINT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); break; case PixelFormat::eR32G32B32A32_SFLOAT: BufferConverter< PF, PixelFormat::eR32G32B32A32_SFLOAT >()( options, srcDimensions, dstDimensions, srcBuffer, srcSize, dstBuffer, dstSize ); diff --git a/include/Core/CastorUtils/Graphics/PixelFormat.hpp b/include/Core/CastorUtils/Graphics/PixelFormat.hpp index ca98b35083..3f40b20902 100644 --- a/include/Core/CastorUtils/Graphics/PixelFormat.hpp +++ b/include/Core/CastorUtils/Graphics/PixelFormat.hpp @@ -82,6 +82,13 @@ namespace castor *\param[in] format Le format de pixels */ inline constexpr bool isSRGBFormat( PixelFormat format ); + /** + *\~english + *\return \p true if format is an RG format. + *\~french + *\return \p false si le format est en RG. + */ + inline constexpr bool isRGFormat( PixelFormat format ); /** *\~english *\return \p true if format is an RGB format. @@ -190,6 +197,13 @@ namespace castor */ inline constexpr PixelComponent getIndexComponent( uint32_t index , PixelFormat format ); + /** + *\~english + *\return The PixelComponents matching the given PixelFormat. + *\~french + *\return Le PixelComponents correspondant au PixelFormat donné. + */ + inline constexpr castor::PixelComponents getComponents( castor::PixelFormat format ); /** *\~english diff --git a/include/Core/CastorUtils/Graphics/PixelFormat.inl b/include/Core/CastorUtils/Graphics/PixelFormat.inl index d4d2118229..c1517bba85 100644 --- a/include/Core/CastorUtils/Graphics/PixelFormat.inl +++ b/include/Core/CastorUtils/Graphics/PixelFormat.inl @@ -491,21 +491,21 @@ namespace castor { switch ( component ) { - case castor::PixelComponent::eRed: + case PixelComponent::eRed: return getComponentsCount( format ) >= 1 && !ashes::isDepthOrStencilFormat( VkFormat( format ) ); - case castor::PixelComponent::eGreen: + case PixelComponent::eGreen: return getComponentsCount( format ) >= 2 && !ashes::isDepthOrStencilFormat( VkFormat( format ) ); - case castor::PixelComponent::eBlue: + case PixelComponent::eBlue: return getComponentsCount( format ) >= 3 && !ashes::isDepthOrStencilFormat( VkFormat( format ) ); - case castor::PixelComponent::eAlpha: + case PixelComponent::eAlpha: return hasAlpha( format ); - case castor::PixelComponent::eDepth: + case PixelComponent::eDepth: return ashes::isDepthFormat( VkFormat( format ) ) || ashes::isDepthStencilFormat( VkFormat( format ) ); - case castor::PixelComponent::eStencil: + case PixelComponent::eStencil: return ashes::isStencilFormat( VkFormat( format ) ) || ashes::isDepthStencilFormat( VkFormat( format ) ); default: @@ -565,6 +565,35 @@ namespace castor return ashes::isSRGBFormat( VkFormat( format ) ); } + inline constexpr bool isRGFormat( PixelFormat format ) + { + return format == PixelFormat::eR4G4_UNORM + || format == PixelFormat::eR8G8_UNORM + || format == PixelFormat::eR8G8_SNORM + || format == PixelFormat::eR8G8_USCALED + || format == PixelFormat::eR8G8_SSCALED + || format == PixelFormat::eR8G8_UINT + || format == PixelFormat::eR8G8_SINT + || format == PixelFormat::eR8G8_SRGB + || format == PixelFormat::eR16G16_UNORM + || format == PixelFormat::eR16G16_SNORM + || format == PixelFormat::eR16G16_USCALED + || format == PixelFormat::eR16G16_SSCALED + || format == PixelFormat::eR16G16_UINT + || format == PixelFormat::eR16G16_SINT + || format == PixelFormat::eR16G16_SFLOAT + || format == PixelFormat::eR32G32_UINT + || format == PixelFormat::eR32G32_SINT + || format == PixelFormat::eR32G32_SFLOAT + || format == PixelFormat::eR64G64_UINT + || format == PixelFormat::eR64G64_SINT + || format == PixelFormat::eR64G64_SFLOAT + || format == PixelFormat::eBC5_UNORM_BLOCK + || format == PixelFormat::eBC5_SNORM_BLOCK + || format == PixelFormat::eEAC_R11G11_UNORM_BLOCK + || format == PixelFormat::eEAC_R11G11_SNORM_BLOCK; + } + inline constexpr bool isRGBFormat( PixelFormat format ) { return format == PixelFormat::eR5G6B5_UNORM @@ -689,64 +718,64 @@ namespace castor { switch ( format ) { - case castor::PixelFormat::eR8_UNORM: - return castor::PixelFormat::eR8_SRGB; - case castor::PixelFormat::eR8G8_UNORM: - return castor::PixelFormat::eR8G8_SRGB; - case castor::PixelFormat::eR8G8B8_UNORM: - return castor::PixelFormat::eR8G8B8_SRGB; - case castor::PixelFormat::eB8G8R8_UNORM: - return castor::PixelFormat::eB8G8R8_SRGB; - case castor::PixelFormat::eR8G8B8A8_UNORM: - return castor::PixelFormat::eR8G8B8A8_SRGB; - case castor::PixelFormat::eB8G8R8A8_UNORM: - return castor::PixelFormat::eB8G8R8A8_SRGB; - case castor::PixelFormat::eA8B8G8R8_UNORM: - return castor::PixelFormat::eA8B8G8R8_SRGB; - case castor::PixelFormat::eBC1_RGB_UNORM_BLOCK: - return castor::PixelFormat::eBC1_RGB_SRGB_BLOCK; - case castor::PixelFormat::eBC1_RGBA_UNORM_BLOCK: - return castor::PixelFormat::eBC1_RGBA_SRGB_BLOCK; - case castor::PixelFormat::eBC2_UNORM_BLOCK: - return castor::PixelFormat::eBC2_SRGB_BLOCK; - case castor::PixelFormat::eBC3_UNORM_BLOCK: - return castor::PixelFormat::eBC3_SRGB_BLOCK; - case castor::PixelFormat::eBC7_UNORM_BLOCK: - return castor::PixelFormat::eBC7_SRGB_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8_UNORM_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8_SRGB_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8A1_UNORM_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8A1_SRGB_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8A8_UNORM_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8A8_SRGB_BLOCK; - case castor::PixelFormat::eASTC_4x4_UNORM_BLOCK: - return castor::PixelFormat::eASTC_4x4_SRGB_BLOCK; - case castor::PixelFormat::eASTC_5x4_UNORM_BLOCK: - return castor::PixelFormat::eASTC_5x4_SRGB_BLOCK; - case castor::PixelFormat::eASTC_5x5_UNORM_BLOCK: - return castor::PixelFormat::eASTC_5x5_SRGB_BLOCK; - case castor::PixelFormat::eASTC_6x5_UNORM_BLOCK: - return castor::PixelFormat::eASTC_6x5_SRGB_BLOCK; - case castor::PixelFormat::eASTC_6x6_UNORM_BLOCK: - return castor::PixelFormat::eASTC_6x6_SRGB_BLOCK; - case castor::PixelFormat::eASTC_8x5_UNORM_BLOCK: - return castor::PixelFormat::eASTC_8x5_SRGB_BLOCK; - case castor::PixelFormat::eASTC_8x6_SRGB_BLOCK: - return castor::PixelFormat::eASTC_8x6_SRGB_BLOCK; - case castor::PixelFormat::eASTC_8x8_UNORM_BLOCK: - return castor::PixelFormat::eASTC_8x8_SRGB_BLOCK; - case castor::PixelFormat::eASTC_10x5_UNORM_BLOCK: - return castor::PixelFormat::eASTC_10x5_SRGB_BLOCK; - case castor::PixelFormat::eASTC_10x6_UNORM_BLOCK: - return castor::PixelFormat::eASTC_10x6_SRGB_BLOCK; - case castor::PixelFormat::eASTC_10x8_UNORM_BLOCK: - return castor::PixelFormat::eASTC_10x8_SRGB_BLOCK; - case castor::PixelFormat::eASTC_10x10_UNORM_BLOCK: - return castor::PixelFormat::eASTC_10x10_SRGB_BLOCK; - case castor::PixelFormat::eASTC_12x10_UNORM_BLOCK: - return castor::PixelFormat::eASTC_12x10_SRGB_BLOCK; - case castor::PixelFormat::eASTC_12x12_UNORM_BLOCK: - return castor::PixelFormat::eASTC_12x12_SRGB_BLOCK; + case PixelFormat::eR8_UNORM: + return PixelFormat::eR8_SRGB; + case PixelFormat::eR8G8_UNORM: + return PixelFormat::eR8G8_SRGB; + case PixelFormat::eR8G8B8_UNORM: + return PixelFormat::eR8G8B8_SRGB; + case PixelFormat::eB8G8R8_UNORM: + return PixelFormat::eB8G8R8_SRGB; + case PixelFormat::eR8G8B8A8_UNORM: + return PixelFormat::eR8G8B8A8_SRGB; + case PixelFormat::eB8G8R8A8_UNORM: + return PixelFormat::eB8G8R8A8_SRGB; + case PixelFormat::eA8B8G8R8_UNORM: + return PixelFormat::eA8B8G8R8_SRGB; + case PixelFormat::eBC1_RGB_UNORM_BLOCK: + return PixelFormat::eBC1_RGB_SRGB_BLOCK; + case PixelFormat::eBC1_RGBA_UNORM_BLOCK: + return PixelFormat::eBC1_RGBA_SRGB_BLOCK; + case PixelFormat::eBC2_UNORM_BLOCK: + return PixelFormat::eBC2_SRGB_BLOCK; + case PixelFormat::eBC3_UNORM_BLOCK: + return PixelFormat::eBC3_SRGB_BLOCK; + case PixelFormat::eBC7_UNORM_BLOCK: + return PixelFormat::eBC7_SRGB_BLOCK; + case PixelFormat::eETC2_R8G8B8_UNORM_BLOCK: + return PixelFormat::eETC2_R8G8B8_SRGB_BLOCK; + case PixelFormat::eETC2_R8G8B8A1_UNORM_BLOCK: + return PixelFormat::eETC2_R8G8B8A1_SRGB_BLOCK; + case PixelFormat::eETC2_R8G8B8A8_UNORM_BLOCK: + return PixelFormat::eETC2_R8G8B8A8_SRGB_BLOCK; + case PixelFormat::eASTC_4x4_UNORM_BLOCK: + return PixelFormat::eASTC_4x4_SRGB_BLOCK; + case PixelFormat::eASTC_5x4_UNORM_BLOCK: + return PixelFormat::eASTC_5x4_SRGB_BLOCK; + case PixelFormat::eASTC_5x5_UNORM_BLOCK: + return PixelFormat::eASTC_5x5_SRGB_BLOCK; + case PixelFormat::eASTC_6x5_UNORM_BLOCK: + return PixelFormat::eASTC_6x5_SRGB_BLOCK; + case PixelFormat::eASTC_6x6_UNORM_BLOCK: + return PixelFormat::eASTC_6x6_SRGB_BLOCK; + case PixelFormat::eASTC_8x5_UNORM_BLOCK: + return PixelFormat::eASTC_8x5_SRGB_BLOCK; + case PixelFormat::eASTC_8x6_SRGB_BLOCK: + return PixelFormat::eASTC_8x6_SRGB_BLOCK; + case PixelFormat::eASTC_8x8_UNORM_BLOCK: + return PixelFormat::eASTC_8x8_SRGB_BLOCK; + case PixelFormat::eASTC_10x5_UNORM_BLOCK: + return PixelFormat::eASTC_10x5_SRGB_BLOCK; + case PixelFormat::eASTC_10x6_UNORM_BLOCK: + return PixelFormat::eASTC_10x6_SRGB_BLOCK; + case PixelFormat::eASTC_10x8_UNORM_BLOCK: + return PixelFormat::eASTC_10x8_SRGB_BLOCK; + case PixelFormat::eASTC_10x10_UNORM_BLOCK: + return PixelFormat::eASTC_10x10_SRGB_BLOCK; + case PixelFormat::eASTC_12x10_UNORM_BLOCK: + return PixelFormat::eASTC_12x10_SRGB_BLOCK; + case PixelFormat::eASTC_12x12_UNORM_BLOCK: + return PixelFormat::eASTC_12x12_SRGB_BLOCK; default: return format; } @@ -756,64 +785,64 @@ namespace castor { switch ( format ) { - case castor::PixelFormat::eR8_SRGB: - return castor::PixelFormat::eR8_UNORM; - case castor::PixelFormat::eR8G8_SRGB: - return castor::PixelFormat::eR8G8_UNORM; - case castor::PixelFormat::eR8G8B8_SRGB: - return castor::PixelFormat::eR8G8B8_UNORM; - case castor::PixelFormat::eB8G8R8_SRGB: - return castor::PixelFormat::eB8G8R8_UNORM; - case castor::PixelFormat::eR8G8B8A8_SRGB: - return castor::PixelFormat::eR8G8B8A8_UNORM; - case castor::PixelFormat::eB8G8R8A8_SRGB: - return castor::PixelFormat::eB8G8R8A8_UNORM; - case castor::PixelFormat::eA8B8G8R8_SRGB: - return castor::PixelFormat::eA8B8G8R8_UNORM; - case castor::PixelFormat::eBC1_RGB_SRGB_BLOCK: - return castor::PixelFormat::eBC1_RGB_UNORM_BLOCK; - case castor::PixelFormat::eBC1_RGBA_SRGB_BLOCK: - return castor::PixelFormat::eBC1_RGBA_UNORM_BLOCK; - case castor::PixelFormat::eBC2_SRGB_BLOCK: - return castor::PixelFormat::eBC2_UNORM_BLOCK; - case castor::PixelFormat::eBC3_SRGB_BLOCK: - return castor::PixelFormat::eBC3_UNORM_BLOCK; - case castor::PixelFormat::eBC7_SRGB_BLOCK: - return castor::PixelFormat::eBC7_UNORM_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8_SRGB_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8_UNORM_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8A1_SRGB_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8A1_UNORM_BLOCK; - case castor::PixelFormat::eETC2_R8G8B8A8_SRGB_BLOCK: - return castor::PixelFormat::eETC2_R8G8B8A8_UNORM_BLOCK; - case castor::PixelFormat::eASTC_4x4_SRGB_BLOCK: - return castor::PixelFormat::eASTC_4x4_UNORM_BLOCK; - case castor::PixelFormat::eASTC_5x4_SRGB_BLOCK: - return castor::PixelFormat::eASTC_5x4_UNORM_BLOCK; - case castor::PixelFormat::eASTC_5x5_SRGB_BLOCK: - return castor::PixelFormat::eASTC_5x5_UNORM_BLOCK; - case castor::PixelFormat::eASTC_6x5_SRGB_BLOCK: - return castor::PixelFormat::eASTC_6x5_UNORM_BLOCK; - case castor::PixelFormat::eASTC_6x6_SRGB_BLOCK: - return castor::PixelFormat::eASTC_6x6_UNORM_BLOCK; - case castor::PixelFormat::eASTC_8x5_SRGB_BLOCK: - return castor::PixelFormat::eASTC_8x5_UNORM_BLOCK; - case castor::PixelFormat::eASTC_8x6_SRGB_BLOCK: - return castor::PixelFormat::eASTC_8x6_SRGB_BLOCK; - case castor::PixelFormat::eASTC_8x8_SRGB_BLOCK: - return castor::PixelFormat::eASTC_8x8_UNORM_BLOCK; - case castor::PixelFormat::eASTC_10x5_SRGB_BLOCK: - return castor::PixelFormat::eASTC_10x5_UNORM_BLOCK; - case castor::PixelFormat::eASTC_10x6_SRGB_BLOCK: - return castor::PixelFormat::eASTC_10x6_UNORM_BLOCK; - case castor::PixelFormat::eASTC_10x8_SRGB_BLOCK: - return castor::PixelFormat::eASTC_10x8_UNORM_BLOCK; - case castor::PixelFormat::eASTC_10x10_SRGB_BLOCK: - return castor::PixelFormat::eASTC_10x10_UNORM_BLOCK; - case castor::PixelFormat::eASTC_12x10_SRGB_BLOCK: - return castor::PixelFormat::eASTC_12x10_UNORM_BLOCK; - case castor::PixelFormat::eASTC_12x12_SRGB_BLOCK: - return castor::PixelFormat::eASTC_12x12_UNORM_BLOCK; + case PixelFormat::eR8_SRGB: + return PixelFormat::eR8_UNORM; + case PixelFormat::eR8G8_SRGB: + return PixelFormat::eR8G8_UNORM; + case PixelFormat::eR8G8B8_SRGB: + return PixelFormat::eR8G8B8_UNORM; + case PixelFormat::eB8G8R8_SRGB: + return PixelFormat::eB8G8R8_UNORM; + case PixelFormat::eR8G8B8A8_SRGB: + return PixelFormat::eR8G8B8A8_UNORM; + case PixelFormat::eB8G8R8A8_SRGB: + return PixelFormat::eB8G8R8A8_UNORM; + case PixelFormat::eA8B8G8R8_SRGB: + return PixelFormat::eA8B8G8R8_UNORM; + case PixelFormat::eBC1_RGB_SRGB_BLOCK: + return PixelFormat::eBC1_RGB_UNORM_BLOCK; + case PixelFormat::eBC1_RGBA_SRGB_BLOCK: + return PixelFormat::eBC1_RGBA_UNORM_BLOCK; + case PixelFormat::eBC2_SRGB_BLOCK: + return PixelFormat::eBC2_UNORM_BLOCK; + case PixelFormat::eBC3_SRGB_BLOCK: + return PixelFormat::eBC3_UNORM_BLOCK; + case PixelFormat::eBC7_SRGB_BLOCK: + return PixelFormat::eBC7_UNORM_BLOCK; + case PixelFormat::eETC2_R8G8B8_SRGB_BLOCK: + return PixelFormat::eETC2_R8G8B8_UNORM_BLOCK; + case PixelFormat::eETC2_R8G8B8A1_SRGB_BLOCK: + return PixelFormat::eETC2_R8G8B8A1_UNORM_BLOCK; + case PixelFormat::eETC2_R8G8B8A8_SRGB_BLOCK: + return PixelFormat::eETC2_R8G8B8A8_UNORM_BLOCK; + case PixelFormat::eASTC_4x4_SRGB_BLOCK: + return PixelFormat::eASTC_4x4_UNORM_BLOCK; + case PixelFormat::eASTC_5x4_SRGB_BLOCK: + return PixelFormat::eASTC_5x4_UNORM_BLOCK; + case PixelFormat::eASTC_5x5_SRGB_BLOCK: + return PixelFormat::eASTC_5x5_UNORM_BLOCK; + case PixelFormat::eASTC_6x5_SRGB_BLOCK: + return PixelFormat::eASTC_6x5_UNORM_BLOCK; + case PixelFormat::eASTC_6x6_SRGB_BLOCK: + return PixelFormat::eASTC_6x6_UNORM_BLOCK; + case PixelFormat::eASTC_8x5_SRGB_BLOCK: + return PixelFormat::eASTC_8x5_UNORM_BLOCK; + case PixelFormat::eASTC_8x6_SRGB_BLOCK: + return PixelFormat::eASTC_8x6_SRGB_BLOCK; + case PixelFormat::eASTC_8x8_SRGB_BLOCK: + return PixelFormat::eASTC_8x8_UNORM_BLOCK; + case PixelFormat::eASTC_10x5_SRGB_BLOCK: + return PixelFormat::eASTC_10x5_UNORM_BLOCK; + case PixelFormat::eASTC_10x6_SRGB_BLOCK: + return PixelFormat::eASTC_10x6_UNORM_BLOCK; + case PixelFormat::eASTC_10x8_SRGB_BLOCK: + return PixelFormat::eASTC_10x8_UNORM_BLOCK; + case PixelFormat::eASTC_10x10_SRGB_BLOCK: + return PixelFormat::eASTC_10x10_UNORM_BLOCK; + case PixelFormat::eASTC_12x10_SRGB_BLOCK: + return PixelFormat::eASTC_12x10_UNORM_BLOCK; + case PixelFormat::eASTC_12x12_SRGB_BLOCK: + return PixelFormat::eASTC_12x12_UNORM_BLOCK; default: return format; } @@ -1070,5 +1099,51 @@ namespace castor } } } + + inline constexpr castor::PixelComponents getComponents( PixelFormat format ) + { + if ( isRGBAFormat( format ) + || isARGBFormat( format ) + || isBGRAFormat( format ) + || isABGRFormat( format ) ) + { + return ( castor::PixelComponent::eRed + | castor::PixelComponent::eGreen + | castor::PixelComponent::eBlue + | castor::PixelComponent::eAlpha ); + } + + if ( isRGBFormat( format ) + || isBGRFormat( format ) ) + { + return ( castor::PixelComponent::eRed + | castor::PixelComponent::eGreen + | castor::PixelComponent::eBlue ); + } + + if ( isRGFormat( format ) ) + { + return ( castor::PixelComponent::eRed + | castor::PixelComponent::eGreen ); + } + + if ( ashes::isDepthStencilFormat( VkFormat( format ) ) ) + { + return ( castor::PixelComponent::eDepth + | castor::PixelComponent::eStencil ); + } + + if ( ashes::isDepthFormat( VkFormat( format ) ) ) + { + return castor::PixelComponent::eDepth; + } + + if ( ashes::isStencilFormat( VkFormat( format ) ) ) + { + return castor::PixelComponent::eStencil; + } + + return castor::PixelComponent::eRed; + } } diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 6fddb74a92..952ff53727 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -65,13 +65,31 @@ namespace castor3d rhsPixelFormat = getSRGBFormat( rhsPixelFormat ); } - if ( pixelFormat != rhsBuffer->getFormat() ) + auto lhsComponentFormat = getSingleComponent( pixelFormat ); + auto rhsComponentFormat = getSingleComponent( rhsPixelFormat ); + + if ( lhsComponentFormat != rhsComponentFormat ) { - if ( getBytesPerPixel( pixelFormat ) < getBytesPerPixel( rhsBuffer->getFormat() ) - || ( !isFloatingPoint( pixelFormat ) && isFloatingPoint( rhsBuffer->getFormat() ) ) - ) + if ( getBytesPerPixel( lhsComponentFormat ) < getBytesPerPixel( rhsComponentFormat ) + || ( !isFloatingPoint( pixelFormat ) && isFloatingPoint( rhsPixelFormat ) ) ) + { + pixelFormat = getPixelFormat( rhsComponentFormat + , getPixelComponents( lhsDstMask | rhsDstMask ) ); + lhsBuffer = castor::PxBufferBase::createUnique( dimensions + , getPixelFormat( rhsComponentFormat, getComponents( lhsBuffer->getFormat() ) ) + , lhsBuffer->getConstPtr() + , lhsBuffer->getFormat() + , lhsBuffer->getAlign() ); + } + else { - pixelFormat = rhsBuffer->getFormat(); + pixelFormat = getPixelFormat( lhsComponentFormat + , getPixelComponents( lhsDstMask | rhsDstMask ) ); + rhsBuffer = castor::PxBufferBase::createUnique( dimensions + , getPixelFormat( lhsComponentFormat, getComponents( rhsBuffer->getFormat() ) ) + , rhsBuffer->getConstPtr() + , rhsBuffer->getFormat() + , rhsBuffer->getAlign() ); } } @@ -79,7 +97,7 @@ namespace castor3d auto lhsComponents = getPixelComponents( lhsSrcMask ); auto rhsComponents = getPixelComponents( rhsSrcMask ); auto result = castor::PxBufferBase::createUnique( dimensions - , getPixelFormat( pixelFormat, getPixelComponents( lhsDstMask | rhsDstMask ) ) ); + , pixelFormat ); log::debug << cuT( "Copying LHS image components to result.\n" ); copyBufferComponents( lhsComponents , getPixelComponents( lhsDstMask ) diff --git a/source/Core/Castor3D/Render/Opaque/VisibilityResolvePass.cpp b/source/Core/Castor3D/Render/Opaque/VisibilityResolvePass.cpp index c5e1672937..4a7156f531 100644 --- a/source/Core/Castor3D/Render/Opaque/VisibilityResolvePass.cpp +++ b/source/Core/Castor3D/Render/Opaque/VisibilityResolvePass.cpp @@ -687,9 +687,9 @@ namespace castor3d if ( flags.enableNormal() ) { - normal = derivatives.interpolate( v0.normal.xyz() + normal = normalize( derivatives.interpolate( v0.normal.xyz() , v1.normal.xyz() - , v2.normal.xyz() ); + , v2.normal.xyz() ) ); } auto tangent = writer.declLocale< sdw::Vec3 >( "tangent" @@ -698,9 +698,9 @@ namespace castor3d if ( flags.enableTangentSpace() ) { - tangent = derivatives.interpolate( v0.tangent.xyz() + tangent = normalize( derivatives.interpolate( v0.tangent.xyz() , v1.tangent.xyz() - , v2.tangent.xyz() ); + , v2.tangent.xyz() ) ); } if ( flags.enablePassMasks() ) From f19f2a7f9fc2754cf825df05994e154070a9c98f Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Wed, 5 Apr 2023 19:18:10 +0200 Subject: [PATCH 12/35] Castor3D: Fixed consistency between STB and FreeImage. --- .../Core/CastorUtils/Graphics/PixelFormat.hpp | 33 +++++++ .../Core/CastorUtils/Graphics/PixelFormat.inl | 93 +++++++++++++++++++ .../CastorUtils/Graphics/FreeImageLoader.cpp | 41 ++++---- source/Core/CastorUtils/Graphics/Image.cpp | 6 +- .../CastorUtils/Graphics/StbImageLoader.cpp | 10 +- 5 files changed, 156 insertions(+), 27 deletions(-) diff --git a/include/Core/CastorUtils/Graphics/PixelFormat.hpp b/include/Core/CastorUtils/Graphics/PixelFormat.hpp index 3f40b20902..fb4cdd421a 100644 --- a/include/Core/CastorUtils/Graphics/PixelFormat.hpp +++ b/include/Core/CastorUtils/Graphics/PixelFormat.hpp @@ -55,6 +55,39 @@ namespace castor *\return Le format à composante unique correspondant au format donné. */ inline constexpr PixelFormat getSingleComponent( PixelFormat format ); + /** + *\~english + *\return \p true if the given pixel format is a int8 one. + *\~french + *\return \p true si le format donné est un format en int8. + */ + inline constexpr bool isInt8( PixelFormat format ); + inline constexpr bool isInt8( VkFormat format ) + { + return isInt8( PixelFormat( format ) ); + } + /** + *\~english + *\return \p true if the given pixel format is a int16 one. + *\~french + *\return \p true si le format donné est un format en int16. + */ + inline constexpr bool isInt16( PixelFormat format ); + inline constexpr bool isInt16( VkFormat format ) + { + return isInt16( PixelFormat( format ) ); + } + /** + *\~english + *\return \p true if the given pixel format is a int32 one. + *\~french + *\return \p true si le format donné est un format en int32. + */ + inline constexpr bool isInt32( PixelFormat format ); + inline constexpr bool isInt32( VkFormat format ) + { + return isInt32( PixelFormat( format ) ); + } /** *\~english *\return \p true if the given pixel format is a floating point one. diff --git a/include/Core/CastorUtils/Graphics/PixelFormat.inl b/include/Core/CastorUtils/Graphics/PixelFormat.inl index c1517bba85..b72bf95f9e 100644 --- a/include/Core/CastorUtils/Graphics/PixelFormat.inl +++ b/include/Core/CastorUtils/Graphics/PixelFormat.inl @@ -532,6 +532,99 @@ namespace castor return result; } + inline constexpr bool isInt8( PixelFormat format ) + { + return format == PixelFormat::eR8_UNORM + || format == PixelFormat::eR8_SNORM + || format == PixelFormat::eR8_USCALED + || format == PixelFormat::eR8_SSCALED + || format == PixelFormat::eR8_UINT + || format == PixelFormat::eR8_SINT + || format == PixelFormat::eR8_SRGB + || format == PixelFormat::eR8_UNORM + || format == PixelFormat::eR8G8_SNORM + || format == PixelFormat::eR8G8_USCALED + || format == PixelFormat::eR8G8_SSCALED + || format == PixelFormat::eR8G8_UINT + || format == PixelFormat::eR8G8_SINT + || format == PixelFormat::eR8G8_SRGB + || format == PixelFormat::eR8G8B8_UNORM + || format == PixelFormat::eR8G8B8_SNORM + || format == PixelFormat::eR8G8B8_USCALED + || format == PixelFormat::eR8G8B8_SSCALED + || format == PixelFormat::eR8G8B8_UINT + || format == PixelFormat::eR8G8B8_SINT + || format == PixelFormat::eR8G8B8_SRGB + || format == PixelFormat::eB8G8R8_UNORM + || format == PixelFormat::eB8G8R8_SNORM + || format == PixelFormat::eB8G8R8_USCALED + || format == PixelFormat::eB8G8R8_SSCALED + || format == PixelFormat::eB8G8R8_UINT + || format == PixelFormat::eB8G8R8_SINT + || format == PixelFormat::eB8G8R8_SRGB + || format == PixelFormat::eR8G8B8A8_UNORM + || format == PixelFormat::eR8G8B8A8_SNORM + || format == PixelFormat::eR8G8B8A8_USCALED + || format == PixelFormat::eR8G8B8A8_SSCALED + || format == PixelFormat::eR8G8B8A8_UINT + || format == PixelFormat::eR8G8B8A8_SINT + || format == PixelFormat::eR8G8B8A8_SRGB + || format == PixelFormat::eB8G8R8A8_UNORM + || format == PixelFormat::eB8G8R8A8_SNORM + || format == PixelFormat::eB8G8R8A8_USCALED + || format == PixelFormat::eB8G8R8A8_SSCALED + || format == PixelFormat::eB8G8R8A8_UINT + || format == PixelFormat::eB8G8R8A8_SINT + || format == PixelFormat::eB8G8R8A8_SRGB + || format == PixelFormat::eA8B8G8R8_UNORM + || format == PixelFormat::eA8B8G8R8_SNORM + || format == PixelFormat::eA8B8G8R8_USCALED + || format == PixelFormat::eA8B8G8R8_SSCALED + || format == PixelFormat::eA8B8G8R8_UINT + || format == PixelFormat::eA8B8G8R8_SINT + || format == PixelFormat::eA8B8G8R8_SRGB; + } + + inline constexpr bool isInt16( PixelFormat format ) + { + return format == PixelFormat::eR16_UNORM + || format == PixelFormat::eR16_SNORM + || format == PixelFormat::eR16_USCALED + || format == PixelFormat::eR16_SSCALED + || format == PixelFormat::eR16_UINT + || format == PixelFormat::eR16_SINT + || format == PixelFormat::eR16_UNORM + || format == PixelFormat::eR16G16_SNORM + || format == PixelFormat::eR16G16_USCALED + || format == PixelFormat::eR16G16_SSCALED + || format == PixelFormat::eR16G16_UINT + || format == PixelFormat::eR16G16_SINT + || format == PixelFormat::eR16G16B16_UNORM + || format == PixelFormat::eR16G16B16_SNORM + || format == PixelFormat::eR16G16B16_USCALED + || format == PixelFormat::eR16G16B16_SSCALED + || format == PixelFormat::eR16G16B16_UINT + || format == PixelFormat::eR16G16B16_SINT + || format == PixelFormat::eR16G16B16A16_UNORM + || format == PixelFormat::eR16G16B16A16_SNORM + || format == PixelFormat::eR16G16B16A16_USCALED + || format == PixelFormat::eR16G16B16A16_SSCALED + || format == PixelFormat::eR16G16B16A16_UINT + || format == PixelFormat::eR16G16B16A16_SINT; + } + + inline constexpr bool isInt32( PixelFormat format ) + { + return format == PixelFormat::eR32_UINT + || format == PixelFormat::eR32_SINT + || format == PixelFormat::eR32G32_UINT + || format == PixelFormat::eR32G32_SINT + || format == PixelFormat::eR32G32B32_UINT + || format == PixelFormat::eR32G32B32_SINT + || format == PixelFormat::eR32G32B32A32_UINT + || format == PixelFormat::eR32G32B32A32_SINT; + } + inline constexpr bool isFloatingPoint( PixelFormat format ) { return format == PixelFormat::eR16G16B16A16_SFLOAT diff --git a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp index cd2aa28d12..e557b96e46 100644 --- a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp @@ -48,6 +48,20 @@ namespace castor } } + static PixelFormat convertTo8Bits( FIBITMAP *& fiImage ) + { + FIBITMAP * dib = FreeImage_ConvertTo8Bits( fiImage ); + FreeImage_Unload( fiImage ); + fiImage = dib; + + if ( !fiImage ) + { + CU_LoaderError( "Can't convert image to 32 bits" ); + } + + return PixelFormat::eR8_SRGB; + } + static PixelFormat convertTo32Bits( FIBITMAP *& fiImage ) { FIBITMAP * dib = FreeImage_ConvertTo32Bits( fiImage ); @@ -136,16 +150,10 @@ namespace castor switch ( imageType ) { case FIT_UINT16: - sourceFmt = PixelFormat::eR16_UNORM; - break; case FIT_INT16: - sourceFmt = PixelFormat::eR16_SNORM; - break; case FIT_UINT32: - sourceFmt = PixelFormat::eR32_UINT; - break; case FIT_INT32: - sourceFmt = PixelFormat::eR32_SINT; + sourceFmt = freeimgl::convertTo8Bits( fiImage ); break; case FIT_FLOAT: sourceFmt = PixelFormat::eR32_SFLOAT; @@ -164,21 +172,11 @@ namespace castor sourceFmt = PixelFormat::eR32G32B32A32_SFLOAT; needsComponentSwap = true; break; + case FIT_RGB16: + case FIT_RGBA16: default: - if ( auto info = FreeImage_GetInfo( fiImage ) ) - { - auto colorType = FreeImage_GetColorType( fiImage ); - - if ( info->bmiHeader.biBitCount == 64 && colorType == FIC_RGBALPHA ) - { - sourceFmt = PixelFormat::eR16G16B16A16_UNORM; - } - else - { - sourceFmt = freeimgl::convertTo32Bits( fiImage ); - needsComponentSwap = true; - } - } + sourceFmt = freeimgl::convertTo32Bits( fiImage ); + needsComponentSwap = true; break; } @@ -192,6 +190,7 @@ namespace castor freeimgl::swapComponents( pixels, sourceFmt, width, height ); } #endif + buffer = PxBufferBase::create( dimensions , sourceFmt , pixels diff --git a/source/Core/CastorUtils/Graphics/Image.cpp b/source/Core/CastorUtils/Graphics/Image.cpp index e279e13e52..ab32803195 100644 --- a/source/Core/CastorUtils/Graphics/Image.cpp +++ b/source/Core/CastorUtils/Graphics/Image.cpp @@ -115,7 +115,11 @@ namespace castor : STBIR_ALPHA_CHANNEL_NONE }; stbir_datatype dataType{ isFloatingPoint( srcBuffer->getFormat() ) ? STBIR_TYPE_FLOAT - : STBIR_TYPE_UINT8 }; + : ( isInt32( srcBuffer->getFormat() ) + ? STBIR_TYPE_UINT32 + : ( isInt16( srcBuffer->getFormat() ) + ? STBIR_TYPE_UINT16 + : STBIR_TYPE_UINT8 ) ) }; stbir_colorspace colorSpace{ isSRGBFormat( srcBuffer->getFormat() ) ? STBIR_COLORSPACE_SRGB : STBIR_COLORSPACE_LINEAR }; diff --git a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp index 9499c68853..e3cc73e70a 100644 --- a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp @@ -40,22 +40,22 @@ namespace castor switch ( channels ) { - case 1: + case STBI_grey: format = PixelFormat::eR8_SRGB; break; - case 2: + case STBI_grey_alpha: format = PixelFormat::eR8G8_SRGB; break; - case 3: + case STBI_rgb: format = PixelFormat::eR8G8B8_SRGB; break; - case 4: + case STBI_rgb_alpha: default: format = PixelFormat::eR8G8B8A8_SRGB; break; } - result = PxBufferBase::create( Size{ uint32_t( width ), uint32_t( height ) } + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } , format , data , format ); From 7647761884ae299f3d76c9917249a29c1742225e Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Wed, 5 Apr 2023 19:18:27 +0200 Subject: [PATCH 13/35] Castor3D: Fixed images merging. --- .../Core/Castor3D/Scene/SceneFileParser.hpp | 1 + source/Core/Castor3D/Cache/TextureCache.cpp | 7 +- source/Core/Castor3D/Material/Pass/Pass.cpp | 12 +- .../Scene/SceneFileParser_Parsers.cpp | 12 +- .../CastorUtils/Graphics/StbImageLoader.cpp | 151 +++++++++++++----- .../AssimpImporter/AssimpMaterialImporter.cpp | 3 +- 6 files changed, 136 insertions(+), 50 deletions(-) diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index c7de121e1c..c85a3de26b 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -187,6 +187,7 @@ namespace castor3d castor::PxBufferBaseSPtr buffer{}; castor::Path folder{}; castor::Path relative{}; + castor::ImageSPtr image{}; VkShaderStageFlagBits shaderStage{}; UniformBufferBaseUPtr uniformBuffer{}; OverlayRes overlay{}; diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 952ff53727..85d89c5e23 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -70,7 +70,7 @@ namespace castor3d if ( lhsComponentFormat != rhsComponentFormat ) { - if ( getBytesPerPixel( lhsComponentFormat ) < getBytesPerPixel( rhsComponentFormat ) + if ( getBytesPerPixel( lhsComponentFormat ) > getBytesPerPixel( rhsComponentFormat ) || ( !isFloatingPoint( pixelFormat ) && isFloatingPoint( rhsPixelFormat ) ) ) { pixelFormat = getPixelFormat( rhsComponentFormat @@ -92,6 +92,11 @@ namespace castor3d , rhsBuffer->getAlign() ); } } + else + { + pixelFormat = getPixelFormat( lhsComponentFormat + , getPixelComponents( lhsDstMask | rhsDstMask ) ); + } // Merge the two buffers into one auto lhsComponents = getPixelComponents( lhsSrcMask ); diff --git a/source/Core/Castor3D/Material/Pass/Pass.cpp b/source/Core/Castor3D/Material/Pass/Pass.cpp index 18f76615d7..d429af4b8a 100644 --- a/source/Core/Castor3D/Material/Pass/Pass.cpp +++ b/source/Core/Castor3D/Material/Pass/Pass.cpp @@ -64,17 +64,23 @@ namespace castor3d static bool areFormatsCompatible( VkFormat lhs, VkFormat rhs ) { + if ( ashes::isCompressedFormat( lhs ) + || ashes::isCompressedFormat( rhs ) ) + { + return false; + } + if ( isSRGBFormat( convert( rhs ) ) ) { return isSRGBFormat( getSRGBFormat( convert( lhs ) ) ); } - else if ( isSRGBFormat( convert( lhs ) ) ) + + if ( isSRGBFormat( convert( lhs ) ) ) { return isSRGBFormat( getSRGBFormat( convert( rhs ) ) ); } - return !ashes::isCompressedFormat( lhs ) - && !ashes::isCompressedFormat( rhs ); + return true; } static bool areSpacesCompatible( TextureSpaces lhs, TextureSpaces rhs ) diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 6e63bfd4b3..da7e83ff8b 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -4191,14 +4191,14 @@ namespace castor3d { folder = context.file.getPath(); auto & engine = *parsingContext.parser->getEngine(); - auto image = engine.tryFindImage( relative.getFileName() ); + parsingContext.image = engine.tryFindImage( relative.getFileName() ).lock(); - if ( !image.lock() ) + if ( !parsingContext.image ) { auto img = engine.createImage( relative.getFileName() , castor::ImageCreateParams{ folder / relative , { false, false, false } } ); - image = engine.addImage( relative.getFileName(), img ); + parsingContext.image = engine.addImage( relative.getFileName(), img ).lock(); } } else if ( !castor::File::fileExists( relative ) ) @@ -4381,6 +4381,11 @@ namespace castor3d } else { + if ( parsingContext.image ) + { + parsingContext.imageInfo->format = VkFormat( parsingContext.image->getPixelFormat() ); + } + if ( parsingContext.imageInfo->mipLevels == ashes::RemainingArrayLayers ) { parsingContext.imageInfo->mipLevels = 20; @@ -4405,6 +4410,7 @@ namespace castor3d VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT }; + parsingContext.image = {}; parsingContext.textureConfiguration = TextureConfiguration{}; parsingContext.texcoordSet = 0u; parsingContext.passComponent = nullptr; diff --git a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp index e3cc73e70a..22ce5f3700 100644 --- a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp @@ -27,6 +27,8 @@ namespace castor int height = 0; int channels = 0; stbi_set_flip_vertically_on_load( 1u ); + stbi_convert_iphone_png_to_rgb( 1u ); + auto isHdr = stbi_is_hdr_from_memory( input, int( size ) ) != 0; uint8_t * data = stbi_load_from_memory( input , int( size ) , &width @@ -36,29 +38,62 @@ namespace castor if ( data ) { - PixelFormat format; - - switch ( channels ) + if ( channels == STBI_grey_alpha ) + { + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } + , isHdr ? PixelFormat::eR8G8_UNORM : PixelFormat::eR8G8_SRGB + , data + , isHdr ? PixelFormat::eR8G8_UNORM : PixelFormat::eR8G8_SRGB ); + auto redChannel = castor::extractComponent( result + , PixelComponent::eRed ); + auto alphaChannel = castor::extractComponent( result + , PixelComponent::eGreen ); + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } + , isHdr ? PixelFormat::eR8G8B8A8_UNORM : PixelFormat::eR8G8B8A8_SRGB ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eRed + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eGreen + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eBlue + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eAlpha + , PixelComponent::eAlpha + , *alphaChannel + , *result ); + } + else { - case STBI_grey: - format = PixelFormat::eR8_SRGB; - break; - case STBI_grey_alpha: - format = PixelFormat::eR8G8_SRGB; - break; - case STBI_rgb: - format = PixelFormat::eR8G8B8_SRGB; - break; - case STBI_rgb_alpha: - default: - format = PixelFormat::eR8G8B8A8_SRGB; - break; + PixelFormat format; + + switch ( channels ) + { + case STBI_grey: + format = isHdr ? PixelFormat::eR8_UNORM : PixelFormat::eR8_SRGB; + break; + case STBI_grey_alpha: + format = isHdr ? PixelFormat::eR8G8_UNORM : PixelFormat::eR8G8_SRGB; + break; + case STBI_rgb: + format = isHdr ? PixelFormat::eR8G8B8_UNORM : PixelFormat::eR8G8B8_SRGB; + break; + case STBI_rgb_alpha: + default: + format = isHdr ? PixelFormat::eR8G8B8A8_UNORM : PixelFormat::eR8G8B8A8_SRGB; + break; + } + + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } + , format + , data + , format ); } - result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } - , format - , data - , format ); stbi_image_free( data ); } else @@ -86,30 +121,62 @@ namespace castor if ( data ) { - PixelFormat format; - - switch ( channels ) + if ( channels == STBI_grey_alpha ) { - case 1: - format = PixelFormat::eR32_SFLOAT; - break; - case 2: - format = PixelFormat::eR32G32_SFLOAT; - break; - case 3: - format = PixelFormat::eR32G32B32_SFLOAT; - break; - case 4: - default: - format = PixelFormat::eR32G32B32A32_SFLOAT; - break; + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } + , PixelFormat::eR32G32_SFLOAT + , reinterpret_cast< uint8_t * >( data ) + , PixelFormat::eR32G32_SFLOAT ); + auto redChannel = castor::extractComponent( result + , PixelComponent::eRed ); + auto alphaChannel = castor::extractComponent( result + , PixelComponent::eGreen ); + result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } + , PixelFormat::eR32G32B32A32_SFLOAT ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eRed + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eGreen + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eRed + , PixelComponent::eBlue + , *redChannel + , *result ); + castor::copyBufferComponents( PixelComponent::eAlpha + , PixelComponent::eAlpha + , *alphaChannel + , *result ); + } + else + { + PixelFormat format; + + switch ( channels ) + { + case 1: + format = PixelFormat::eR32_SFLOAT; + break; + case 2: + format = PixelFormat::eR32G32_SFLOAT; + break; + case 3: + format = PixelFormat::eR32G32B32_SFLOAT; + break; + case 4: + default: + format = PixelFormat::eR32G32B32A32_SFLOAT; + break; + } + + result = PxBufferBase::create( Size{ uint32_t( width ), uint32_t( height ) } + , format + , reinterpret_cast< uint8_t * >( data ) + , format ); + stbi_image_free( data ); } - - result = PxBufferBase::create( Size{ uint32_t( width ), uint32_t( height ) } - , format - , reinterpret_cast< uint8_t * >( data ) - , format ); - stbi_image_free( data ); } else { diff --git a/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp index e35598e4e6..6f8b9c8c51 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp @@ -103,7 +103,8 @@ namespace c3d_assimp , castor::PixelComponent::eAlpha ); auto data = alphaChannel->getConstPtr(); auto end = data + alphaChannel->getSize(); - return std::any_of( data, end, []( uint8_t byte ){ return byte != 0x00 && byte != 0xFF; } ); + return !std::all_of( data, end, []( uint8_t byte ) { return byte != 0x00; } ) + || !std::all_of( data, end, []( uint8_t byte ) { return byte != 0xFF; } ); } static castor::String decodeUri( castor::String uri ) From 7ae9eca02de2e8990ca0f4bb8180cdf9de136329 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 01:12:27 +0200 Subject: [PATCH 14/35] Castor3D: Replaced shared_ptr with unique_ptr for pixel buffers. --- .../Material/Texture/TextureLayout.hpp | 14 +- include/Core/Castor3D/Render/RenderWindow.hpp | 6 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 2 +- include/Core/CastorUtils/CastorUtils.natvis | 2 + include/Core/CastorUtils/Config/Macros.hpp | 20 +-- .../CastorUtils/Graphics/DataImageLoader.hpp | 2 +- .../CastorUtils/Graphics/ExrImageLoader.hpp | 2 +- .../CastorUtils/Graphics/FreeImageLoader.hpp | 2 +- .../CastorUtils/Graphics/GliImageLoader.hpp | 2 +- include/Core/CastorUtils/Graphics/Image.hpp | 15 +- .../Core/CastorUtils/Graphics/ImageLoader.hpp | 2 +- .../CastorUtils/Graphics/PixelBufferBase.hpp | 169 ++---------------- .../Core/CastorUtils/Graphics/PixelFormat.hpp | 6 +- .../CastorUtils/Graphics/StbImageLoader.hpp | 2 +- .../CastorUtils/Graphics/XpmImageLoader.hpp | 2 +- include/Core/CastorUtils/Math/MathModule.hpp | 2 - include/Core/CastorUtils/Noise/WhiteNoise.hpp | 4 +- source/Core/Castor3D/Cache/TextureCache.cpp | 12 +- source/Core/Castor3D/Engine.cpp | 11 +- .../Texture/Animation/TextureAnimation.cpp | 2 - .../Material/Texture/TextureLayout.cpp | 74 ++++---- .../CastorUtils/Graphics/DataImageLoader.cpp | 2 +- .../CastorUtils/Graphics/ExrImageLoader.cpp | 14 +- .../CastorUtils/Graphics/FreeImageLoader.cpp | 2 +- .../CastorUtils/Graphics/GliImageLoader.cpp | 2 +- source/Core/CastorUtils/Graphics/Image.cpp | 92 ++-------- .../Core/CastorUtils/Graphics/ImageLoader.cpp | 4 +- .../CastorUtils/Graphics/PixelBufferBase.cpp | 25 +-- .../Core/CastorUtils/Graphics/PixelFormat.cpp | 6 +- .../Graphics/PixelFormatExtract.cpp | 20 +-- .../CastorUtils/Graphics/StbImageLoader.cpp | 18 +- .../CastorUtils/Graphics/XpmImageLoader.cpp | 15 +- .../CastorUtilsPixelBufferExtractTest.cpp | 6 +- .../CastorUtilsPixelFormatTest.cpp | 44 ++--- tools/CastorTestLauncher/MainFrame.cpp | 6 +- tools/GuiCommon/GuiCommonPrerequisites.cpp | 12 +- tools/GuiCommon/GuiCommonPrerequisites.hpp | 2 +- .../Properties/AdditionalProperties.cpp | 4 +- tools/GuiCommon/System/Recorder.cpp | 8 +- tools/GuiCommon/System/Recorder.hpp | 4 +- 40 files changed, 211 insertions(+), 428 deletions(-) diff --git a/include/Core/Castor3D/Material/Texture/TextureLayout.hpp b/include/Core/Castor3D/Material/Texture/TextureLayout.hpp index 5368bf70dc..3ba348e1a7 100644 --- a/include/Core/Castor3D/Material/Texture/TextureLayout.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureLayout.hpp @@ -298,10 +298,10 @@ namespace castor3d *\~french *\brief Définit la source de tout le layout. */ - C3D_API void setSource( castor::PxBufferBaseSPtr buffer + C3D_API void setSource( castor::PxBufferBaseUPtr buffer , uint32_t bufferOrigLevels , bool isStatic = false ); - C3D_API void setSource( castor::PxBufferBaseSPtr buffer + C3D_API void setSource( castor::PxBufferBaseUPtr buffer , bool isStatic = false ); C3D_API void setSource( castor::Path const & folder , castor::Path const & relative @@ -364,10 +364,10 @@ namespace castor3d *\brief Définit la source pour tous les mip levels une couche du layout. */ C3D_API void setLayerSource( uint32_t index - , castor::PxBufferBaseSPtr buffer + , castor::PxBufferBaseUPtr buffer , uint32_t bufferOrigLevels ); C3D_API void setLayerSource( uint32_t index - , castor::PxBufferBaseSPtr buffer ); + , castor::PxBufferBaseUPtr buffer ); C3D_API void setLayerSource( uint32_t index , castor::Path const & folder , castor::Path const & relative @@ -439,7 +439,7 @@ namespace castor3d */ C3D_API void setLayerMipSource( uint32_t index , uint32_t level - , castor::PxBufferBaseSPtr buffer ); + , castor::PxBufferBaseUPtr buffer ); C3D_API void setLayerMipSource( uint32_t index , uint32_t level , castor::Path const & folder @@ -586,7 +586,7 @@ namespace castor3d */ C3D_API void setLayerCubeFaceSource( uint32_t layer , CubeMapFace face - , castor::PxBufferBaseSPtr buffer ); + , castor::PxBufferBaseUPtr buffer ); C3D_API void setLayerCubeFaceSource( uint32_t layer , CubeMapFace face , castor::Path const & folder @@ -629,7 +629,7 @@ namespace castor3d C3D_API void setLayerCubeFaceMipSource( uint32_t layer , CubeMapFace face , uint32_t level - , castor::PxBufferBaseSPtr buffer ); + , castor::PxBufferBaseUPtr buffer ); C3D_API void setLayerCubeFaceMipSource( uint32_t layer , CubeMapFace face , uint32_t level diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index a47e53d42f..fb6bd90768 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -431,9 +431,9 @@ namespace castor3d return m_skip; } - castor::PxBufferBaseSPtr getSavedFrame()const + castor::PxBufferBaseRPtr getSavedFrame()const { - return m_saveBuffer; + return m_saveBuffer.get(); } ashes::Surface const & getSurface()const @@ -565,7 +565,7 @@ namespace castor3d mutable std::atomic_bool m_initialised{ false }; mutable std::atomic_bool m_skip{ false }; std::atomic_bool m_loading; - castor::PxBufferBaseSPtr m_saveBuffer; + castor::PxBufferBaseUPtr m_saveBuffer; PickingSPtr m_picking; castor::Position m_mousePosition; Texture3DTo2DUPtr m_texture3Dto2D; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index c85a3de26b..f36f04d14e 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -184,7 +184,7 @@ namespace castor3d , VK_IMAGE_TILING_OPTIMAL , VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT }; ShaderProgramSPtr shaderProgram{}; - castor::PxBufferBaseSPtr buffer{}; + castor::PxBufferBaseUPtr buffer{}; castor::Path folder{}; castor::Path relative{}; castor::ImageSPtr image{}; diff --git a/include/Core/CastorUtils/CastorUtils.natvis b/include/Core/CastorUtils/CastorUtils.natvis index ab21561b72..96659c9708 100644 --- a/include/Core/CastorUtils/CastorUtils.natvis +++ b/include/Core/CastorUtils/CastorUtils.natvis @@ -205,6 +205,7 @@ m_name m_buffer + m_layout m_pathFile @@ -219,6 +220,7 @@ m_layers m_levels m_align + m_tiles diff --git a/include/Core/CastorUtils/Config/Macros.hpp b/include/Core/CastorUtils/Config/Macros.hpp index 11d050dc7e..a0e5133ce0 100644 --- a/include/Core/CastorUtils/Config/Macros.hpp +++ b/include/Core/CastorUtils/Config/Macros.hpp @@ -172,41 +172,31 @@ See LICENSE file in root folder using Point##count##name = Point< type, count >;\ CU_DeclareSmartPtr( Point##count##name );\ CU_DeclareVector( Point##count##name, Point##count##name );\ - CU_DeclareList( Point##count##name, Point##count##name );\ - CU_DeclareVector( Point##count##name##SPtr, Point##count##name##Ptr );\ - CU_DeclareList( Point##count##name##SPtr, Point##count##name##Ptr ) + CU_DeclareList( Point##count##name, Point##count##name ) #define CU_DeclareCoord( type, count, name )\ using Coords##count##name = Coords< type, count >;\ CU_DeclareSmartPtr( Coords##count##name );\ CU_DeclareVector( Coords##count##name, Coords##count##name );\ - CU_DeclareList( Coords##count##name, Coords##count##name );\ - CU_DeclareVector( Coords##count##name##SPtr, Coords##count##name##Ptr );\ - CU_DeclareList( Coords##count##name##SPtr, Coords##count##name##Ptr ) + CU_DeclareList( Coords##count##name, Coords##count##name ) #define CU_DeclareConstCoord( type, count, name )\ using ConstCoords##count##name = Coords< type const, count >;\ CU_DeclareSmartPtr( ConstCoords##count##name );\ CU_DeclareVector( ConstCoords##count##name, ConstCoords##count##name );\ - CU_DeclareList( ConstCoords##count##name, ConstCoords##count##name );\ - CU_DeclareVector( ConstCoords##count##name##SPtr, ConstCoords##count##name##Ptr );\ - CU_DeclareList( ConstCoords##count##name##SPtr, ConstCoords##count##name##Ptr ) + CU_DeclareList( ConstCoords##count##name, ConstCoords##count##name ) #define CU_DeclareMtx( type, rows, cols, name )\ using Matrix##rows##x##cols##name = Matrix< type, rows, cols >;\ CU_DeclareSmartPtr( Matrix##rows##x##cols##name );\ CU_DeclareVector( Matrix##rows##x##cols##name, Matrix##rows##x##cols##name );\ - CU_DeclareList( Matrix##rows##x##cols##name, Matrix##rows##x##cols##name );\ - CU_DeclareVector( Matrix##rows##x##cols##name##SPtr, Matrix##rows##x##cols##name##Ptr );\ - CU_DeclareList( Matrix##rows##x##cols##name##SPtr, Matrix##rows##x##cols##name##Ptr ) + CU_DeclareList( Matrix##rows##x##cols##name, Matrix##rows##x##cols##name ) #define CU_DeclareSqMtx( type, count, name )\ using Matrix##count##x##count##name = SquareMatrix< type, count >;\ CU_DeclareSmartPtr( Matrix##count##x##count##name );\ CU_DeclareVector( Matrix##count##x##count##name, Matrix##count##x##count##name );\ - CU_DeclareList( Matrix##count##x##count##name, Matrix##count##x##count##name );\ - CU_DeclareVector( Matrix##count##x##count##name##SPtr, Matrix##count##x##count##name##Ptr );\ - CU_DeclareList( Matrix##count##x##count##name##SPtr, Matrix##count##x##count##name##Ptr ) + CU_DeclareList( Matrix##count##x##count##name, Matrix##count##x##count##name ) #if !defined CU_UnusedParam # define CU_UnusedParam( x ) diff --git a/include/Core/CastorUtils/Graphics/DataImageLoader.hpp b/include/Core/CastorUtils/Graphics/DataImageLoader.hpp index fdce12e469..e69302e401 100644 --- a/include/Core/CastorUtils/Graphics/DataImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/DataImageLoader.hpp @@ -28,7 +28,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Graphics/ExrImageLoader.hpp b/include/Core/CastorUtils/Graphics/ExrImageLoader.hpp index 679c9201f6..844a441f53 100644 --- a/include/Core/CastorUtils/Graphics/ExrImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/ExrImageLoader.hpp @@ -26,7 +26,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Graphics/FreeImageLoader.hpp b/include/Core/CastorUtils/Graphics/FreeImageLoader.hpp index a62bbb930d..4bc63ea8da 100644 --- a/include/Core/CastorUtils/Graphics/FreeImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/FreeImageLoader.hpp @@ -26,7 +26,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Graphics/GliImageLoader.hpp b/include/Core/CastorUtils/Graphics/GliImageLoader.hpp index 23d332998f..11fe27bc92 100644 --- a/include/Core/CastorUtils/Graphics/GliImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/GliImageLoader.hpp @@ -26,7 +26,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Graphics/Image.hpp b/include/Core/CastorUtils/Graphics/Image.hpp index 00d675a9c8..5c42e252fc 100644 --- a/include/Core/CastorUtils/Graphics/Image.hpp +++ b/include/Core/CastorUtils/Graphics/Image.hpp @@ -45,7 +45,7 @@ namespace castor CU_API Image( String const & name , Path const & path , ImageLayout layout - , PxBufferBaseSPtr buffer = nullptr ); + , PxBufferBaseUPtr buffer = nullptr ); template< PixelFormat PFSrc, PixelFormat PFDst > Image( String const & name , Path const & path @@ -84,7 +84,7 @@ namespace castor Image( String const & name , ImageLayout layout - , PxBufferBaseSPtr buffer ) + , PxBufferBaseUPtr buffer ) : Image{ name, {}, layout, std::move( buffer ) } { } @@ -104,7 +104,7 @@ namespace castor *\name Modification. */ //@{ - CU_API PxBufferBaseSPtr updateLayerLayout( Size const & extent + CU_API PxBufferBaseUPtr updateLayerLayout( Size const & extent , PixelFormat format ); //@} /** @@ -135,9 +135,6 @@ namespace castor result.resample( size ); return result; } - CU_API static PxBufferBaseSPtr resample( Size const & size - , PxBufferBaseSPtr & buffer - , ImageLayout & layout ); CU_API static PxBufferBaseUPtr resample( Size const & size , PxBufferBaseUPtr buffer ); /** @@ -340,9 +337,9 @@ namespace castor return *m_buffer; } - PxBufferBaseSPtr getPixels()const + PxBufferBaseRPtr getPixels()const { - return m_buffer; + return m_buffer.get(); } ImageLayout const & getLayout()const @@ -371,7 +368,7 @@ namespace castor private: Path m_pathFile; - PxBufferBaseSPtr m_buffer; + PxBufferBaseUPtr m_buffer; ImageLayout m_layout; }; } diff --git a/include/Core/CastorUtils/Graphics/ImageLoader.hpp b/include/Core/CastorUtils/Graphics/ImageLoader.hpp index 45ef5984d0..755dce202a 100644 --- a/include/Core/CastorUtils/Graphics/ImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/ImageLoader.hpp @@ -35,7 +35,7 @@ namespace castor CU_API virtual ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const = 0; + , PxBufferBaseUPtr & buffer )const = 0; /** *\~english *\brief Loads an image file data. diff --git a/include/Core/CastorUtils/Graphics/PixelBufferBase.hpp b/include/Core/CastorUtils/Graphics/PixelBufferBase.hpp index 50706fc43f..cd1c017026 100644 --- a/include/Core/CastorUtils/Graphics/PixelBufferBase.hpp +++ b/include/Core/CastorUtils/Graphics/PixelBufferBase.hpp @@ -238,9 +238,9 @@ namespace castor *\~french *\return Un clone de ce buffer. */ - std::shared_ptr< PxBufferBase > clone()const + PxBufferBaseUPtr clone()const { - return std::make_shared< PxBufferBase >( *this ); + return castor::makeUnique< PxBufferBase >( *this ); } /** *\~english @@ -355,146 +355,6 @@ namespace castor return getAt( uint32_t( position.x() ), uint32_t( position.y() ) ); } /**@}*/ - /** - *\~english - *\brief Creates a buffer with the given data. - *\param[in] options The convertion options. - *\param[in] size Buffer dimensions. - *\param[in] layers Buffer layers (or slices). - *\param[in] levels Buffer mip levels. - *\param[in] wantedFormat Pixels format. - *\param[in] buffer Data buffer. - *\param[in] bufferFormat Data buffer's pixels format. - *\param[in] bufferAlign The alignment of the source buffer. - *\return The created buffer. - *\~french - *\brief Crée un buffer avec les données voulues. - *\param[in] options Les options de conversion. - *\param[in] size Dimensions du buffer. - *\param[in] layers Couches du buffer (layers ou slices). - *\param[in] levels Niveaux de mip du buffer. - *\param[in] wantedFormat Format des pixels du buffer. - *\param[in] buffer Buffer de données. - *\param[in] bufferFormat Format des pixels du buffer de données. - *\param[in] bufferAlign L'alignement mémoire du buffer source. - *\return Le buffer créé. - */ - CU_API static PxBufferBaseSPtr create( PxBufferConvertOptions const * options - , Size const & size - , uint32_t layers - , uint32_t levels - , PixelFormat wantedFormat - , uint8_t const * buffer = nullptr - , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM - , uint32_t bufferAlign = 0u ); - /** - *\~english - *\brief Creates a buffer with the given data. - *\param[in] size Buffer dimensions. - *\param[in] layers Buffer layers (or slices). - *\param[in] levels Buffer mip levels. - *\param[in] wantedFormat Pixels format. - *\param[in] buffer Data buffer. - *\param[in] bufferFormat Data buffer's pixels format. - *\param[in] bufferAlign The alignment of the source buffer. - *\return The created buffer. - *\~french - *\brief Crée un buffer avec les données voulues. - *\param[in] size Dimensions du buffer. - *\param[in] layers Couches du buffer (layers ou slices). - *\param[in] levels Niveaux de mip du buffer. - *\param[in] wantedFormat Format des pixels du buffer. - *\param[in] buffer Buffer de données. - *\param[in] bufferFormat Format des pixels du buffer de données. - *\param[in] bufferAlign L'alignement mémoire du buffer source. - *\return Le buffer créé. - */ - CU_API static PxBufferBaseSPtr create( Size const & size - , uint32_t layers - , uint32_t levels - , PixelFormat wantedFormat - , uint8_t const * buffer = nullptr - , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM - , uint32_t bufferAlign = 0u ) - { - return create( nullptr - , size - , layers - , levels - , wantedFormat - , buffer - , bufferFormat - , bufferAlign ); - } - /** - *\~english - *\brief Creates a buffer with the given data. - *\param[in] options The convertion options. - *\param[in] size Buffer dimensions. - *\param[in] wantedFormat Pixels format. - *\param[in] buffer Data buffer. - *\param[in] bufferFormat Data buffer's pixels format. - *\param[in] bufferAlign The alignment of the source buffer. - *\return The created buffer. - *\~french - *\brief Crée un buffer avec les données voulues. - *\param[in] options Les options de conversion. - *\param[in] size Dimensions du buffer. - *\param[in] wantedFormat Format des pixels du buffer. - *\param[in] buffer Buffer de données. - *\param[in] bufferFormat Format des pixels du buffer de données. - *\param[in] bufferAlign L'alignement mémoire du buffer source. - *\return Le buffer créé. - */ - CU_API static PxBufferBaseSPtr create( PxBufferConvertOptions const * options - , Size const & size - , PixelFormat wantedFormat - , uint8_t const * buffer = nullptr - , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM - , uint32_t bufferAlign = 0u ) - { - return create( options - , size - , 1u - , 1u - , wantedFormat - , buffer - , bufferFormat - , bufferAlign ); - } - /** - *\~english - *\brief Creates a buffer with the given data. - *\param[in] size Buffer dimensions. - *\param[in] wantedFormat Pixels format. - *\param[in] buffer Data buffer. - *\param[in] bufferFormat Data buffer's pixels format. - *\param[in] bufferAlign The alignment of the source buffer. - *\return The created buffer. - *\~french - *\brief Crée un buffer avec les données voulues. - *\param[in] size Dimensions du buffer. - *\param[in] wantedFormat Format des pixels du buffer. - *\param[in] buffer Buffer de données. - *\param[in] bufferFormat Format des pixels du buffer de données. - *\param[in] bufferAlign L'alignement mémoire du buffer source. - *\return Le buffer créé. - */ - CU_API static PxBufferBaseSPtr create( Size const & size - , PixelFormat wantedFormat - , uint8_t const * buffer = nullptr - , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM - , uint32_t bufferAlign = 0u ) - { - return create( nullptr - , size - , 1u - , 1u - , wantedFormat - , buffer - , bufferFormat - , bufferAlign ); - } /** *\~english *\brief Creates a buffer with the given data. @@ -523,7 +383,7 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( PxBufferConvertOptions const * options + CU_API static PxBufferBaseUPtr create( PxBufferConvertOptions const * options , std::atomic_bool const * interrupt , Size const & size , uint32_t layers @@ -556,7 +416,7 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( PxBufferConvertOptions const * options + CU_API static PxBufferBaseUPtr create( PxBufferConvertOptions const * options , Size const & size , uint32_t layers , uint32_t levels @@ -565,7 +425,7 @@ namespace castor , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM , uint32_t bufferAlign = 0u ) { - return createUnique( options + return create( options , nullptr , size , layers @@ -597,7 +457,7 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( Size const & size + CU_API static PxBufferBaseUPtr create( Size const & size , uint32_t layers , uint32_t levels , PixelFormat wantedFormat @@ -605,8 +465,7 @@ namespace castor , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM , uint32_t bufferAlign = 0u ) { - return createUnique( nullptr - , nullptr + return create( nullptr , size , layers , levels @@ -637,7 +496,7 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( PxBufferConvertOptions const * options + CU_API static PxBufferBaseUPtr create( PxBufferConvertOptions const * options , std::atomic_bool const * interrupt , Size const & size , PixelFormat wantedFormat @@ -645,7 +504,7 @@ namespace castor , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM , uint32_t bufferAlign = 0u ) { - return createUnique( options + return create( options , interrupt , size , 1u @@ -675,15 +534,14 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( PxBufferConvertOptions const * options + CU_API static PxBufferBaseUPtr create( PxBufferConvertOptions const * options , Size const & size , PixelFormat wantedFormat , uint8_t const * buffer = nullptr , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM , uint32_t bufferAlign = 0u ) { - return createUnique( options - , nullptr + return create( options , size , 1u , 1u @@ -710,14 +568,13 @@ namespace castor *\param[in] bufferAlign L'alignement mémoire du buffer source. *\return Le buffer créé. */ - CU_API static PxBufferBaseUPtr createUnique( Size const & size + CU_API static PxBufferBaseUPtr create( Size const & size , PixelFormat wantedFormat , uint8_t const * buffer = nullptr , PixelFormat bufferFormat = PixelFormat::eR8G8B8A8_UNORM , uint32_t bufferAlign = 0u ) { - return createUnique( nullptr - , nullptr + return create( nullptr , size , 1u , 1u diff --git a/include/Core/CastorUtils/Graphics/PixelFormat.hpp b/include/Core/CastorUtils/Graphics/PixelFormat.hpp index fb4cdd421a..d6e4638de8 100644 --- a/include/Core/CastorUtils/Graphics/PixelFormat.hpp +++ b/include/Core/CastorUtils/Graphics/PixelFormat.hpp @@ -385,7 +385,7 @@ namespace castor *\param[in] src Le tampon de pixels compressé. *\return Le tampon de pixels décompressé. */ - CU_API PxBufferBaseSPtr decompressBuffer( PxBufferBaseSPtr src ); + CU_API PxBufferBaseUPtr decompressBuffer( PxBufferBaseRPtr src ); /** *\~english *\brief Extracts pixel component values from a source buffer holding alpha and puts it in a destination buffer. @@ -398,7 +398,7 @@ namespace castor *\param[in] component La composante à extraire *\return Le tampon contenant la composante extraite, au format castor::PixelFormat::eR8, \p nullptr si la source n'avait pas la coposante voulue. */ - CU_API PxBufferBaseSPtr extractComponent( PxBufferBaseSPtr src + CU_API PxBufferBaseUPtr extractComponent( PxBufferBaseRPtr src , PixelComponent component ); /** *\~english @@ -412,7 +412,7 @@ namespace castor *\param[in] component La composante à extraire *\return Le tampon contenant la composante extraite, au format castor::PixelFormat::eR8, \p nullptr si la source n'avait pas la coposante voulue. */ - CU_API PxBufferBaseSPtr extractComponents( PxBufferBaseSPtr src + CU_API PxBufferBaseUPtr extractComponents( PxBufferBaseRPtr src , PixelComponents component ); /** *\~english diff --git a/include/Core/CastorUtils/Graphics/StbImageLoader.hpp b/include/Core/CastorUtils/Graphics/StbImageLoader.hpp index 6bd2617255..d8675aaf4f 100644 --- a/include/Core/CastorUtils/Graphics/StbImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/StbImageLoader.hpp @@ -26,7 +26,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Graphics/XpmImageLoader.hpp b/include/Core/CastorUtils/Graphics/XpmImageLoader.hpp index 0a367726d1..3a50106ee6 100644 --- a/include/Core/CastorUtils/Graphics/XpmImageLoader.hpp +++ b/include/Core/CastorUtils/Graphics/XpmImageLoader.hpp @@ -20,7 +20,7 @@ namespace castor CU_API ImageLayout load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const override; + , PxBufferBaseUPtr & buffer )const override; }; } diff --git a/include/Core/CastorUtils/Math/MathModule.hpp b/include/Core/CastorUtils/Math/MathModule.hpp index 2416ab759b..0609e24dc1 100644 --- a/include/Core/CastorUtils/Math/MathModule.hpp +++ b/include/Core/CastorUtils/Math/MathModule.hpp @@ -386,8 +386,6 @@ namespace castor CU_DeclareSmartPtr( Quaternion ); CU_DeclareSmartPtr( SphericalVertex ); - CU_DeclareVector( SphericalVertexSPtr, SphericalVertexPtr ); - CU_API Point3f operator*( Matrix4x4f const & lhs, Point3f const & rhs ); CU_API Point3f operator*( Point3f const & lhs, Matrix4x4f const & rhs ); CU_API Point4f operator*( Matrix4x4f const & lhs, Point4f const & rhs ); diff --git a/include/Core/CastorUtils/Noise/WhiteNoise.hpp b/include/Core/CastorUtils/Noise/WhiteNoise.hpp index 3619efb26e..6e580bf1de 100644 --- a/include/Core/CastorUtils/Noise/WhiteNoise.hpp +++ b/include/Core/CastorUtils/Noise/WhiteNoise.hpp @@ -23,7 +23,7 @@ namespace castor }; public: - static PxBufferBaseSPtr generate( uint32_t imgSize ) + static PxBufferBaseUPtr generate( uint32_t imgSize ) { const uint32_t samples = 4096; // 128x128 @@ -48,6 +48,8 @@ namespace castor pixel->B = 255; pixel->A = 255; } + + return buffer; } }; } diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 85d89c5e23..9cac83e99e 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -75,7 +75,7 @@ namespace castor3d { pixelFormat = getPixelFormat( rhsComponentFormat , getPixelComponents( lhsDstMask | rhsDstMask ) ); - lhsBuffer = castor::PxBufferBase::createUnique( dimensions + lhsBuffer = castor::PxBufferBase::create( dimensions , getPixelFormat( rhsComponentFormat, getComponents( lhsBuffer->getFormat() ) ) , lhsBuffer->getConstPtr() , lhsBuffer->getFormat() @@ -85,7 +85,7 @@ namespace castor3d { pixelFormat = getPixelFormat( lhsComponentFormat , getPixelComponents( lhsDstMask | rhsDstMask ) ); - rhsBuffer = castor::PxBufferBase::createUnique( dimensions + rhsBuffer = castor::PxBufferBase::create( dimensions , getPixelFormat( lhsComponentFormat, getComponents( rhsBuffer->getFormat() ) ) , rhsBuffer->getConstPtr() , rhsBuffer->getFormat() @@ -101,7 +101,7 @@ namespace castor3d // Merge the two buffers into one auto lhsComponents = getPixelComponents( lhsSrcMask ); auto rhsComponents = getPixelComponents( rhsSrcMask ); - auto result = castor::PxBufferBase::createUnique( dimensions + auto result = castor::PxBufferBase::create( dimensions , pixelFormat ); log::debug << cuT( "Copying LHS image components to result.\n" ); copyBufferComponents( lhsComponents @@ -149,7 +149,7 @@ namespace castor3d if ( buffer->getFormat() != dstFormat ) { auto flipped = buffer->isFlipped(); - buffer = castor::PxBufferBase::createUnique( buffer->getDimensions() + buffer = castor::PxBufferBase::create( buffer->getDimensions() , buffer->getLayers() , buffer->getLevels() , dstFormat @@ -193,7 +193,7 @@ namespace castor3d auto format = ( ( isSRGBFormat( image.getPixels()->getFormat() ) && allowSRGB ) ? image.getPixels()->getFormat() : getNonSRGBFormat( image.getPixels()->getFormat() ) ); - auto buffer = castor::PxBufferBase::createUnique( image.getPixels()->getDimensions() + auto buffer = castor::PxBufferBase::create( image.getPixels()->getDimensions() , image.getPixels()->getLayers() , image.getPixels()->getLevels() , format @@ -283,7 +283,7 @@ namespace castor3d && allowCompression ) { log::debug << ( name + cuT( " - Compressing result.\n" ) ); - buffer = castor::PxBufferBase::createUnique( &loader.getOptions() + buffer = castor::PxBufferBase::create( &loader.getOptions() , &interrupted , buffer->getDimensions() , compressedFormat diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index d31ff0a711..1008fbdcde 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -101,15 +101,14 @@ namespace castor3d auto image = std::make_unique< ashes::Image >( *device, result.image, result.imageId.data->info ); auto imagePath = Engine::getEngineDirectory() / cuT( "Core" ) / cuT( "brdf.png" ); castor::ImageResPtr created; - castor::ImageResPtr img = engine.tryAddImage( cuT( "BRDF" ) + auto img = engine.tryAddImage( cuT( "BRDF" ) , true , created - , castor::ImageCreateParams{ imagePath, { false, false, false } } ); - auto buffer = img.lock()->getPixels(); - buffer = castor::PxBufferBase::create( buffer->getDimensions() + , castor::ImageCreateParams{ imagePath, { false, false, false } } ).lock(); + auto buffer = castor::PxBufferBase::create( img->getPixels()->getDimensions() , castor::PixelFormat::eR8G8B8A8_UNORM - , buffer->getConstPtr() - , buffer->getFormat() ); + , img->getPixels()->getConstPtr() + , img->getPixels()->getFormat() ); auto view = image->createView( VK_IMAGE_VIEW_TYPE_2D, result.getFormat() ); auto staging = device->createStagingTexture( VK_FORMAT_R8G8B8A8_UNORM , makeExtent2D( buffer->getDimensions() ) ); diff --git a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp index 8140ee8bdf..57f591ea34 100644 --- a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp +++ b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp @@ -53,8 +53,6 @@ namespace castor3d ++tile; } } - - } } diff --git a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp index 5fb16fa23b..1264d21440 100644 --- a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp @@ -523,10 +523,11 @@ namespace castor3d return stream.str(); } - static castor::PxBufferBaseSPtr adaptBuffer( castor::PxBufferBaseSPtr buffer + static castor::PxBufferBaseUPtr adaptBuffer( castor::PxBufferBaseRPtr buffer , uint32_t mipLevels ) { auto dstFormat = buffer->getFormat(); + auto result = buffer->clone(); switch ( dstFormat ) { @@ -553,26 +554,26 @@ namespace castor3d break; } - if ( buffer->getFormat() != dstFormat ) + if ( result->getFormat() != dstFormat ) { - auto flipped = buffer->isFlipped(); - buffer = castor::PxBufferBase::create( buffer->getDimensions() - , buffer->getLayers() - , buffer->getLevels() + auto flipped = result->isFlipped(); + result = castor::PxBufferBase::create( result->getDimensions() + , result->getLayers() + , result->getLevels() , dstFormat - , buffer->getConstPtr() - , buffer->getFormat() - , buffer->getAlign() ); + , result->getConstPtr() + , result->getFormat() + , result->getAlign() ); if ( flipped ) { - buffer->flip(); + result->flip(); } } - buffer->update( buffer->getLayers() + result->update( result->getLayers() , mipLevels ); - return buffer; + return result; } static castor::Image getFileImage( Engine & engine @@ -1200,35 +1201,39 @@ namespace castor3d m_static = true; } - void TextureLayout::setSource( castor::PxBufferBaseSPtr buffer + void TextureLayout::setSource( castor::PxBufferBaseUPtr buffer , uint32_t bufferOrigLevels , bool isStatic ) { - buffer = texlayt::adaptBuffer( buffer, buffer->getLevels() ); - m_image = { m_image.getName(), castor::ImageLayout{ *buffer }, buffer }; + buffer = texlayt::adaptBuffer( buffer.get(), buffer->getLevels() ); + auto layout = castor::ImageLayout{ *buffer }; + m_image = { m_image.getName(), layout, std::move( buffer ) }; doUpdateCreateInfo( m_image.getLayout() ); doUpdateMips( false, bufferOrigLevels ); m_static = isStatic; } - void TextureLayout::setSource( castor::PxBufferBaseSPtr buffer + void TextureLayout::setSource( castor::PxBufferBaseUPtr buffer , bool isStatic ) { - setSource( buffer + setSource( std::move( buffer ) , m_image.getPixels()->getLevels() , isStatic ); } void TextureLayout::setLayerSource( uint32_t index - , castor::PxBufferBaseSPtr buffer + , castor::PxBufferBaseUPtr buffer , uint32_t bufferOrigLevels ) { - buffer = texlayt::adaptBuffer( buffer, buffer->getLevels() ); - castor::Image srcImage{ texlayt::getBufferName( *buffer ), castor::ImageLayout{ *buffer }, buffer }; + buffer = texlayt::adaptBuffer( buffer.get(), buffer->getLevels() ); + auto layout = castor::ImageLayout{ *buffer }; + auto name = texlayt::getBufferName( *buffer ); + auto layerBuffer = buffer.get(); + castor::Image srcImage{ name, layout, std::move( buffer ) }; auto & srcLayout = srcImage.getLayout(); doUpdateFromFirstImage( 0u, srcLayout ); auto & dstLayout = m_image.getLayout(); - auto src = srcLayout.buffer( *buffer ); + auto src = srcLayout.buffer( *layerBuffer ); auto dst = dstLayout.layerBuffer( m_image.getPxBuffer(), index ); CU_Require( src.size() == dst.size() ); std::memcpy( dst.data(), src.data(), std::min( src.size(), dst.size() ) ); @@ -1238,10 +1243,10 @@ namespace castor3d } void TextureLayout::setLayerSource( uint32_t index - , castor::PxBufferBaseSPtr buffer ) + , castor::PxBufferBaseUPtr buffer ) { setLayerSource( index - , buffer + , std::move( buffer ) , m_image.getPixels()->getLevels() ); } @@ -1259,7 +1264,7 @@ namespace castor3d , srcMips , { config.allowCompression, config.generateMips, false } ); setLayerSource( index - , image.getPixels() + , image.getPixels()->clone() , srcMips ); } @@ -1277,14 +1282,17 @@ namespace castor3d void TextureLayout::setLayerMipSource( uint32_t index , uint32_t level - , castor::PxBufferBaseSPtr buffer ) + , castor::PxBufferBaseUPtr buffer ) { - buffer = texlayt::adaptBuffer( buffer, 1u ); - castor::Image srcImage{ texlayt::getBufferName( *buffer ), castor::ImageLayout{ *buffer }, buffer }; + buffer = texlayt::adaptBuffer( buffer.get(), 1u ); + auto layout = castor::ImageLayout{ *buffer }; + auto name = texlayt::getBufferName( *buffer ); + auto mipBuffer = buffer.get(); + castor::Image srcImage{ name, layout, std::move( buffer ) }; auto & srcLayout = srcImage.getLayout(); auto & dstLayout = m_image.getLayout(); doUpdateFromFirstImage( level, srcLayout ); - auto src = srcLayout.buffer( *buffer ); + auto src = srcLayout.buffer( *mipBuffer ); auto dst = dstLayout.layerMipBuffer( m_image.getPxBuffer(), index, level ); CU_Require( src.size() == dst.size() ); std::memcpy( dst.data(), src.data(), std::min( src.size(), dst.size() ) ); @@ -1309,7 +1317,7 @@ namespace castor3d , { config.allowCompression, false, false } ); setLayerMipSource( index , level - , image.getPixels() ); + , image.getPixels()->clone() ); } void TextureLayout::setLayerMipSource( uint32_t index @@ -1327,10 +1335,10 @@ namespace castor3d void TextureLayout::setLayerCubeFaceSource( uint32_t layer , CubeMapFace face - , castor::PxBufferBaseSPtr buffer ) + , castor::PxBufferBaseUPtr buffer ) { setLayerSource( layer * 6u + uint32_t( face ) - , buffer ); + , std::move( buffer ) ); } void TextureLayout::setLayerCubeFaceSource( uint32_t layer @@ -1358,11 +1366,11 @@ namespace castor3d void TextureLayout::setLayerCubeFaceMipSource( uint32_t layer , CubeMapFace face , uint32_t level - , castor::PxBufferBaseSPtr buffer ) + , castor::PxBufferBaseUPtr buffer ) { setLayerMipSource( layer * 6u + uint32_t( face ) , level - , buffer ); + , std::move( buffer ) ); } void TextureLayout::setLayerCubeFaceMipSource( uint32_t layer diff --git a/source/Core/CastorUtils/Graphics/DataImageLoader.cpp b/source/Core/CastorUtils/Graphics/DataImageLoader.cpp index f1ebad1b91..6c99d2fc68 100644 --- a/source/Core/CastorUtils/Graphics/DataImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/DataImageLoader.cpp @@ -36,7 +36,7 @@ namespace castor ImageLayout DataImageLoader::load( String const & imageFormat , uint8_t const * input , uint32_t size - , PxBufferBaseSPtr & outbuffer )const + , PxBufferBaseUPtr & outbuffer )const { auto format = getFormatByName( imageFormat ); auto bitsize = getBytesPerPixel( format ); diff --git a/source/Core/CastorUtils/Graphics/ExrImageLoader.cpp b/source/Core/CastorUtils/Graphics/ExrImageLoader.cpp index 3cefce3e6b..ee1c243753 100644 --- a/source/Core/CastorUtils/Graphics/ExrImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/ExrImageLoader.cpp @@ -15,7 +15,7 @@ namespace castor namespace exrl { - static PxBufferBaseSPtr doLoad32BitsPerChannel( uint8_t const * input + static PxBufferBaseUPtr doLoad32BitsPerChannel( uint8_t const * input , uint32_t size ) { const char * error{ nullptr }; @@ -35,14 +35,10 @@ namespace castor CU_LoaderError( String( cuT( "Can't load image:\n" ) ) + msg ); } - PxBufferBaseSPtr result; - - PixelFormat format; - format = PixelFormat::eR32G32B32A32_SFLOAT; - result = PxBufferBase::create( Size{ uint32_t( w ), uint32_t( h ) } - , format + auto result = PxBufferBase::create( Size{ uint32_t( w ), uint32_t( h ) } + , PixelFormat::eR32G32B32A32_SFLOAT , reinterpret_cast< uint8_t * >( data ) - , format ); + , PixelFormat::eR32G32B32A32_SFLOAT ); result->flip(); free( data ); @@ -75,7 +71,7 @@ namespace castor ImageLayout ExrImageLoader::load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const + , PxBufferBaseUPtr & buffer )const { if ( string::upperCase( imageFormat ).find( cuT( "EXR" ) ) != String::npos ) { diff --git a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp index e557b96e46..703e3500c5 100644 --- a/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/FreeImageLoader.cpp @@ -123,7 +123,7 @@ namespace castor ImageLayout FreeImageLoader::load( String const & CU_UnusedParam( imageFormat ) , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const + , PxBufferBaseUPtr & buffer )const { #if C3D_UseFreeImage diff --git a/source/Core/CastorUtils/Graphics/GliImageLoader.cpp b/source/Core/CastorUtils/Graphics/GliImageLoader.cpp index 1222b5c232..c33b5e3bc0 100644 --- a/source/Core/CastorUtils/Graphics/GliImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/GliImageLoader.cpp @@ -110,7 +110,7 @@ namespace castor ImageLayout GliImageLoader::load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const + , PxBufferBaseUPtr & buffer )const { gli::texture texture; bool flipped = false; diff --git a/source/Core/CastorUtils/Graphics/Image.cpp b/source/Core/CastorUtils/Graphics/Image.cpp index ab32803195..1493e04a69 100644 --- a/source/Core/CastorUtils/Graphics/Image.cpp +++ b/source/Core/CastorUtils/Graphics/Image.cpp @@ -49,11 +49,11 @@ namespace castor Image::Image( String const & name , Path const & path , ImageLayout layout - , PxBufferBaseSPtr buffer ) + , PxBufferBaseUPtr buffer ) : Named{ name } , m_pathFile{ path } , m_buffer{ ( buffer - ? buffer + ? std::move( buffer ) : PxBufferBase::create( layout.dimensions() , layout.depthLayers() , layout.levels @@ -76,17 +76,17 @@ namespace castor { m_pathFile = image.m_pathFile; m_layout = image.m_layout; - m_buffer = image.m_buffer ? image.m_buffer->clone() : nullptr; + m_buffer = std::move( image.m_buffer ? image.m_buffer->clone() : nullptr ); return * this; } - PxBufferBaseSPtr Image::updateLayerLayout( Size const & extent + PxBufferBaseUPtr Image::updateLayerLayout( Size const & extent , PixelFormat format ) { auto result = ( m_layout.extent->x != extent.getWidth() - || m_layout.extent->y != extent.getHeight() - || format != m_layout.format ) - ? m_buffer + || m_layout.extent->y != extent.getHeight() + || format != m_layout.format ) + ? std::move( m_buffer ) : nullptr; if ( result ) @@ -103,71 +103,6 @@ namespace castor return result; } - PxBufferBaseSPtr Image::resample( Size const & size - , PxBufferBaseSPtr & buffer - , ImageLayout & layout ) - { - auto srcBuffer = buffer; - auto format = srcBuffer->getFormat(); - int channels = int( getComponentsCount( srcBuffer->getFormat() ) ); - int alpha{ hasAlpha( srcBuffer->getFormat() ) - ? 1 - : STBIR_ALPHA_CHANNEL_NONE }; - stbir_datatype dataType{ isFloatingPoint( srcBuffer->getFormat() ) - ? STBIR_TYPE_FLOAT - : ( isInt32( srcBuffer->getFormat() ) - ? STBIR_TYPE_UINT32 - : ( isInt16( srcBuffer->getFormat() ) - ? STBIR_TYPE_UINT16 - : STBIR_TYPE_UINT8 ) ) }; - stbir_colorspace colorSpace{ isSRGBFormat( srcBuffer->getFormat() ) - ? STBIR_COLORSPACE_SRGB - : STBIR_COLORSPACE_LINEAR }; - auto srcLayerSize = layout.layerSize(); - auto src = srcBuffer->getPtr(); - auto layoutChanged = ( layout.extent->x != size.getWidth() - || layout.extent->y != size.getHeight() - || format != layout.format ) - ? buffer - : nullptr; - - if ( layoutChanged ) - { - layout.extent->x = size.getWidth(); - layout.extent->y = size.getHeight(); - layout.format = format; - buffer = PxBufferBase::create( { layout.extent->x, layout.extent->y } - , layout.depthLayers() - , layout.levels - , layout.format ); - } - - auto dstBuffer = buffer; - auto dstLayerSize = layout.layerSize(); - auto dst = dstBuffer->getPtr(); - - for ( uint32_t layer = 0u; layer < layout.depthLayers(); ++layer ) - { - auto result = stbir_resize( src, int( srcBuffer->getWidth() ), int( srcBuffer->getHeight() ), 0 - , dst, int( dstBuffer->getWidth() ), int( dstBuffer->getHeight() ), 0 - , dataType - , channels, alpha, 0 - , STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP - , STBIR_FILTER_CATMULLROM, STBIR_FILTER_CATMULLROM - , colorSpace, nullptr ); - - if ( !result ) - { - CU_LoaderError( "Image couldn't be resized" ); - } - - dst += dstLayerSize; - src += srcLayerSize; - } - - return dstBuffer; - } - PxBufferBaseUPtr Image::resample( Size const & size , PxBufferBaseUPtr buffer ) { @@ -184,7 +119,11 @@ namespace castor : STBIR_ALPHA_CHANNEL_NONE }; stbir_datatype dataType{ isFloatingPoint( buffer->getFormat() ) ? STBIR_TYPE_FLOAT - : STBIR_TYPE_UINT8 }; + : ( isInt32( buffer->getFormat() ) + ? STBIR_TYPE_UINT32 + : ( isInt16( buffer->getFormat() ) + ? STBIR_TYPE_UINT16 + : STBIR_TYPE_UINT8 ) ) }; stbir_colorspace colorSpace{ isSRGBFormat( buffer->getFormat() ) ? STBIR_COLORSPACE_SRGB : STBIR_COLORSPACE_LINEAR }; @@ -193,7 +132,7 @@ namespace castor layout.extent->x = size.getWidth(); layout.extent->y = size.getHeight(); layout.format = format; - auto result = PxBufferBase::createUnique( { layout.extent->x, layout.extent->y } + auto result = PxBufferBase::create( { layout.extent->x, layout.extent->y } , layout.depthLayers() , layout.levels , layout.format ); @@ -224,7 +163,10 @@ namespace castor Image & Image::resample( Size const & size ) { - resample( size, m_buffer, m_layout ); + m_buffer = resample( size, std::move( m_buffer ) ); + m_layout.extent->x = m_buffer->getHeight(); + m_layout.extent->y = m_buffer->getWidth(); + m_layout.format = m_buffer->getFormat(); CU_CheckInvariants(); return *this; } diff --git a/source/Core/CastorUtils/Graphics/ImageLoader.cpp b/source/Core/CastorUtils/Graphics/ImageLoader.cpp index fc168b0a93..90755b5fd1 100644 --- a/source/Core/CastorUtils/Graphics/ImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/ImageLoader.cpp @@ -29,7 +29,7 @@ namespace castor return image; } - auto buffer = image.getPixels(); + auto buffer = image.getPixels()->clone(); auto path = image.getPath(); auto name = image.getName(); auto layout = image.getLayout(); @@ -69,7 +69,7 @@ namespace castor , uint8_t const * data , uint32_t size )const { - PxBufferBaseSPtr buffer; + PxBufferBaseUPtr buffer; auto layout = load( imageFormat, data, size, buffer ); return Image{ name, imagePath, layout, std::move( buffer ) }; } diff --git a/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp b/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp index 62844271eb..4485f1c49b 100644 --- a/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp +++ b/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp @@ -500,6 +500,7 @@ namespace castor , m_size{ rhs.m_size } , m_layers{ rhs.m_layers } , m_levels{ rhs.m_levels } + , m_tiles{ rhs.m_tiles } , m_buffer{ 0 } { initialise( rhs.getConstPtr(), rhs.getFormat(), rhs.getAlign() ); @@ -516,6 +517,7 @@ namespace castor m_format = rhs.m_format; m_layers = rhs.m_layers; m_levels = rhs.m_levels; + m_tiles = rhs.m_tiles; initialise( rhs.m_buffer.data(), rhs.m_format ); return * this; } @@ -619,6 +621,7 @@ namespace castor std::swap( m_size, pixelBuffer.m_size ); std::swap( m_layers, pixelBuffer.m_layers ); std::swap( m_levels, pixelBuffer.m_levels ); + std::swap( m_tiles, pixelBuffer.m_tiles ); std::swap( m_buffer, pixelBuffer.m_buffer ); } @@ -779,27 +782,7 @@ namespace castor + ptrdiff_t( pxbb::getDataAt( VkFormat( m_format ), x, y, index, level, m_levels, m_align, *this ) ); } - PxBufferBaseSPtr PxBufferBase::create( PxBufferConvertOptions const * options - , Size const & size - , uint32_t layers - , uint32_t levels - , PixelFormat wantedFormat - , uint8_t const * buffer - , PixelFormat bufferFormat - , uint32_t bufferAlign ) - { - return std::make_shared< PxBufferBase >( options - , nullptr - , size - , wantedFormat - , layers - , levels - , buffer - , bufferFormat - , bufferAlign ); - } - - PxBufferBaseUPtr PxBufferBase::createUnique( PxBufferConvertOptions const * options + PxBufferBaseUPtr PxBufferBase::create( PxBufferConvertOptions const * options , std::atomic_bool const * interrupt , Size const & size , uint32_t layers diff --git a/source/Core/CastorUtils/Graphics/PixelFormat.cpp b/source/Core/CastorUtils/Graphics/PixelFormat.cpp index 7fe0c5c6e4..38196ff630 100644 --- a/source/Core/CastorUtils/Graphics/PixelFormat.cpp +++ b/source/Core/CastorUtils/Graphics/PixelFormat.cpp @@ -788,9 +788,9 @@ namespace castor } } - PxBufferBaseSPtr decompressBuffer( PxBufferBaseSPtr src ) + PxBufferBaseUPtr decompressBuffer( PxBufferBaseRPtr src ) { - PxBufferBaseSPtr result = src; + auto result = src->clone(); if ( isCompressed( src->getFormat() ) ) { @@ -846,7 +846,7 @@ namespace castor if ( !r ) { - return src; + return src->clone(); } uint32_t blockSize = 8u; diff --git a/source/Core/CastorUtils/Graphics/PixelFormatExtract.cpp b/source/Core/CastorUtils/Graphics/PixelFormatExtract.cpp index 4a24c721cc..b0ecee9044 100644 --- a/source/Core/CastorUtils/Graphics/PixelFormatExtract.cpp +++ b/source/Core/CastorUtils/Graphics/PixelFormatExtract.cpp @@ -198,30 +198,30 @@ namespace castor } } - PxBufferBaseSPtr extractComponent( PxBufferBaseSPtr src + PxBufferBaseUPtr extractComponent( PxBufferBaseRPtr src , PixelComponent component ) { - src = decompressBuffer( src ); - auto result = PxBufferBase::create( src->getDimensions() - , getSingleComponent( src->getFormat() ) ); - pfext::copyComponent( *src + auto decomp = decompressBuffer( src ); + auto result = PxBufferBase::create( decomp->getDimensions() + , getSingleComponent( decomp->getFormat() ) ); + pfext::copyComponent( *decomp , component , *result , PixelComponent::eRed ); return result; } - PxBufferBaseSPtr extractComponents( PxBufferBaseSPtr src + PxBufferBaseUPtr extractComponents( PxBufferBaseRPtr src , PixelComponents components ) { - src = decompressBuffer( src ); - auto result = PxBufferBase::create( src->getDimensions() - , getPixelFormat( src->getFormat(), components ) ); + auto decomp = decompressBuffer( src ); + auto result = PxBufferBase::create( decomp->getDimensions() + , getPixelFormat( decomp->getFormat(), components ) ); auto dstIndex = 0u; for ( auto component : components ) { - pfext::copyComponent( *src + pfext::copyComponent( *decomp , component , *result , getIndexComponent( dstIndex, result->getFormat() ) ); diff --git a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp index 22ce5f3700..702d53f2bd 100644 --- a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp @@ -19,10 +19,10 @@ namespace castor namespace stbil { - static PxBufferBaseSPtr doLoad8BitsPerChannel( uint8_t const * input + static PxBufferBaseUPtr doLoad8BitsPerChannel( uint8_t const * input , uint32_t size ) { - PxBufferBaseSPtr result; + PxBufferBaseUPtr result; int width = 0; int height = 0; int channels = 0; @@ -44,9 +44,9 @@ namespace castor , isHdr ? PixelFormat::eR8G8_UNORM : PixelFormat::eR8G8_SRGB , data , isHdr ? PixelFormat::eR8G8_UNORM : PixelFormat::eR8G8_SRGB ); - auto redChannel = castor::extractComponent( result + auto redChannel = castor::extractComponent( result.get() , PixelComponent::eRed ); - auto alphaChannel = castor::extractComponent( result + auto alphaChannel = castor::extractComponent( result.get() , PixelComponent::eGreen ); result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } , isHdr ? PixelFormat::eR8G8B8A8_UNORM : PixelFormat::eR8G8B8A8_SRGB ); @@ -104,10 +104,10 @@ namespace castor return result; } - static PxBufferBaseSPtr doLoad32BitsPerChannel( uint8_t const * input + static PxBufferBaseUPtr doLoad32BitsPerChannel( uint8_t const * input , uint32_t size ) { - PxBufferBaseSPtr result; + PxBufferBaseUPtr result; int width = 0; int height = 0; int channels = 0; @@ -127,9 +127,9 @@ namespace castor , PixelFormat::eR32G32_SFLOAT , reinterpret_cast< uint8_t * >( data ) , PixelFormat::eR32G32_SFLOAT ); - auto redChannel = castor::extractComponent( result + auto redChannel = castor::extractComponent( result.get() , PixelComponent::eRed ); - auto alphaChannel = castor::extractComponent( result + auto alphaChannel = castor::extractComponent( result.get() , PixelComponent::eGreen ); result = PxBufferBase::create( { uint32_t( width ), uint32_t( height ) } , PixelFormat::eR32G32B32A32_SFLOAT ); @@ -226,7 +226,7 @@ namespace castor ImageLayout StbImageLoader::load( String const & imageFormat , uint8_t const * data , uint32_t size - , PxBufferBaseSPtr & buffer )const + , PxBufferBaseUPtr & buffer )const { if ( string::upperCase( imageFormat ).find( cuT( "HDR" ) ) != String::npos ) { diff --git a/source/Core/CastorUtils/Graphics/XpmImageLoader.cpp b/source/Core/CastorUtils/Graphics/XpmImageLoader.cpp index 9c2ed6c491..8bab0d495a 100644 --- a/source/Core/CastorUtils/Graphics/XpmImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/XpmImageLoader.cpp @@ -34,7 +34,7 @@ namespace castor ImageLayout XpmImageLoader::load( String const & CU_UnusedParam( imageFormat ) , uint8_t const * input , uint32_t size - , PxBufferBaseSPtr & outbuffer )const + , PxBufferBaseUPtr & outbuffer )const { auto data = reinterpret_cast< char * const * >( input ); uint32_t coloursCount = 0; @@ -95,8 +95,9 @@ namespace castor } ); // Parse image - auto pixels = std::static_pointer_cast< PxBuffer< PixelFormat::eR8G8B8_UNORM > >( PxBufferBase::create( imgSize, PixelFormat::eR8G8B8_UNORM ) ); - auto buffer = pixels->begin(); + auto ppixels = PxBufferBase::create( imgSize, PixelFormat::eR8G8B8_UNORM ); + auto & pixels = static_cast< PxBuffer< PixelFormat::eR8G8B8_UNORM > & >( *ppixels ); + auto buffer = pixels.begin(); for ( auto it = &data[1 + coloursCount]; it != &data[1 + coloursCount + h]; ++it ) { @@ -110,10 +111,10 @@ namespace castor } } - outbuffer = PxBufferBase::create( pixels->getDimensions() - , pixels->getFormat() - , pixels->getConstPtr() - , pixels->getFormat() ); + outbuffer = PxBufferBase::create( pixels.getDimensions() + , pixels.getFormat() + , pixels.getConstPtr() + , pixels.getFormat() ); return ImageLayout{ ImageLayout::e2D, *outbuffer }; } } diff --git a/test/CastorUtils/CastorUtilsPixelBufferExtractTest.cpp b/test/CastorUtils/CastorUtilsPixelBufferExtractTest.cpp index 3aa8e914fd..a068e0b7f6 100644 --- a/test/CastorUtils/CastorUtilsPixelBufferExtractTest.cpp +++ b/test/CastorUtils/CastorUtilsPixelBufferExtractTest.cpp @@ -101,7 +101,7 @@ namespace } template< PixelFormat PfT > - PxBufferBaseSPtr createPixelBufferT() + PxBufferBaseUPtr createPixelBufferT() { auto data = createPixelDataT< PfT >(); return PxBufferBase::create( { 4u, 4u } @@ -115,8 +115,8 @@ namespace , PixelComponents components ) { CT_WHEN_EX( test, "components == " + getName( components ) ); - PxBufferBaseSPtr src = createPixelBufferT< PfT >(); - PxBufferBaseSPtr buffer = extractComponents( src, components ); + PxBufferBaseUPtr src = createPixelBufferT< PfT >(); + PxBufferBaseUPtr buffer = extractComponents( src.get(), components ); auto srcData = src->getConstPtr(); auto dstData = buffer->getConstPtr(); auto constexpr componentFormat = singleComponentV< PfT >; diff --git a/test/CastorUtils/CastorUtilsPixelFormatTest.cpp b/test/CastorUtils/CastorUtilsPixelFormatTest.cpp index 244da47824..4866c8e4fc 100644 --- a/test/CastorUtils/CastorUtilsPixelFormatTest.cpp +++ b/test/CastorUtils/CastorUtilsPixelFormatTest.cpp @@ -244,15 +244,16 @@ namespace template< PixelFormat PFDst, PixelFormat PFSrc > struct BufferConverter { - void operator()( std::shared_ptr< PxBuffer< PFSrc > > source ) + void operator()( PxBuffer< PFSrc > & source ) { - std::shared_ptr< PxBuffer< PFDst > > dest = std::static_pointer_cast< PxBuffer< PFDst > >( PxBufferBase::create( source->getDimensions() + auto destination = PxBufferBase::create( source.getDimensions() , PixelFormat( PFDst ) - , source->getPtr() - , PFSrc ) ); + , source.getPtr() + , PFSrc ); + auto dest = static_cast< PxBuffer< PFDst > & >( *destination ); auto stream = castor::makeStringStream(); stream.width( 20 ); - stream << "Converted buffer : " << *dest; + stream << "Converted buffer : " << dest; Logger::logTrace( stream ); } }; @@ -261,15 +262,14 @@ namespace struct BufferConverter< PFSrc, PFSrc > { using PixelBuffer = PxBuffer< PFSrc >; - using PixelBufferPtr = std::shared_ptr< PixelBuffer >; - void operator()( PixelBufferPtr source ) + void operator()( PixelBuffer & source ) { } }; template< PixelFormat PFDst, PixelFormat PFSrc > - void convertBuffer( std::shared_ptr< PxBuffer< PFSrc > > source ) + void convertBuffer( PxBuffer< PFSrc > & source ) { BufferConverter< PFDst, PFSrc >()( source ); } @@ -297,13 +297,14 @@ namespace setB8U( pixel, value++ ); } - auto source = std::static_pointer_cast< PxBuffer< PFSrc > >( PxBufferBase::create( size + auto src = PxBufferBase::create( size , PFSrc , buffer.data() - , PFSrc ) ); + , PFSrc ); + auto & source = static_cast< PxBuffer< PFSrc > & >( *src ); auto stream = castor::makeStringStream(); stream.width( 20 ); - stream << "Source buffer : " << *source; + stream << "Source buffer : " << source; Logger::logTrace( stream ); convertBuffer< PixelFormat::eR8_UNORM >( source ); convertBuffer< PixelFormat::eR32_SFLOAT >( source ); @@ -341,13 +342,14 @@ namespace stencil++; } - auto source = std::static_pointer_cast< PxBuffer< PFSrc > >( PxBufferBase::create( size + auto src = PxBufferBase::create( size , PFSrc , buffer.data() - , PFSrc ) ); + , PFSrc ); + auto & source = static_cast< PxBuffer< PFSrc > & >( *src ); auto stream = castor::makeStringStream(); stream.width( 20 ); - stream << "Source buffer : " << *source; + stream << "Source buffer : " << source; Logger::logTrace( stream ); convertBuffer< PixelFormat::eD16_UNORM >( source ); convertBuffer< PixelFormat::eX8_D24_UNORM >( source ); @@ -378,13 +380,14 @@ namespace stencil++; } - auto source = std::static_pointer_cast< PxBuffer< PFSrc > >( PxBufferBase::create( size + auto src = PxBufferBase::create( size , PFSrc , buffer.data() - , PFSrc ) ); + , PFSrc ); + auto & source = static_cast< PxBuffer< PFSrc > & >( *src ); auto stream = castor::makeStringStream(); stream.width( 20 ); - stream << "Source buffer : " << *source; + stream << "Source buffer : " << source; Logger::logTrace( stream ); convertBuffer< PixelFormat::eD16_UNORM >( source ); convertBuffer< PixelFormat::eX8_D24_UNORM >( source ); @@ -413,13 +416,14 @@ namespace setS8U( pixel, value++ ); } - auto source = std::static_pointer_cast< PxBuffer< PFSrc > >( PxBufferBase::create( size + auto src = PxBufferBase::create( size , PFSrc , buffer.data() - , PFSrc ) ); + , PFSrc ); + auto & source = static_cast< PxBuffer< PFSrc > & >( *src ); auto stream = castor::makeStringStream(); stream.width( 20 ); - stream << "Source buffer : " << *source; + stream << "Source buffer : " << source; Logger::logTrace( stream ); convertBuffer< PixelFormat::eD24_UNORM_S8_UINT >( source ); convertBuffer< PixelFormat::eS8_UINT >( source ); diff --git a/tools/CastorTestLauncher/MainFrame.cpp b/tools/CastorTestLauncher/MainFrame.cpp index 321b53bf18..e0ed11b49c 100644 --- a/tools/CastorTestLauncher/MainFrame.cpp +++ b/tools/CastorTestLauncher/MainFrame.cpp @@ -171,11 +171,11 @@ namespace test_launcher } } - void doCreateBitmapFromBuffer( castor::PxBufferBaseSPtr input + void doCreateBitmapFromBuffer( castor::PxBufferBaseRPtr input , bool flip , wxBitmap & output ) { - castor::PxBufferBaseSPtr buffer; + castor::PxBufferBaseUPtr buffer{}; if ( input->getFormat() != castor::PixelFormat::eR8G8B8A8_UNORM ) { @@ -186,7 +186,7 @@ namespace test_launcher } else { - buffer = input; + buffer = input->clone(); } doCreateBitmapFromBuffer( buffer->getConstPtr() diff --git a/tools/GuiCommon/GuiCommonPrerequisites.cpp b/tools/GuiCommon/GuiCommonPrerequisites.cpp index b74c3c73e8..b5b614cce9 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.cpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.cpp @@ -180,17 +180,23 @@ namespace GuiCommon } } - void createBitmapFromBuffer( castor::PxBufferBaseSPtr buffer, bool flip, wxBitmap & bitmap ) + void createBitmapFromBuffer( castor::PxBufferBaseRPtr buffer, bool flip, wxBitmap & bitmap ) { + castor::PxBufferBaseUPtr buf; + if ( buffer->getFormat() != castor::PixelFormat::eR8G8B8A8_UNORM ) { - buffer = castor::PxBufferBase::create( buffer->getDimensions() + buf = castor::PxBufferBase::create( buffer->getDimensions() , castor::PixelFormat::eR8G8B8A8_UNORM , buffer->getConstPtr() , buffer->getFormat() ); } + else + { + buf = buffer->clone(); + } - createBitmapFromBuffer( buffer->getConstPtr(), buffer->getWidth(), buffer->getHeight(), flip, bitmap ); + createBitmapFromBuffer( buf->getConstPtr(), buf->getWidth(), buf->getHeight(), flip, bitmap ); } void createBitmapFromBuffer( castor3d::TextureUnitSPtr unit, bool flip, wxBitmap & bitmap ) diff --git a/tools/GuiCommon/GuiCommonPrerequisites.hpp b/tools/GuiCommon/GuiCommonPrerequisites.hpp index 14aea66f9a..4806c70feb 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.hpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.hpp @@ -194,7 +194,7 @@ namespace GuiCommon *\param[in] flip Tells if the image mut be flipped. *\param[out] bitmap Reçoit le bitmap généré. */ - void createBitmapFromBuffer( castor::PxBufferBaseSPtr buffer + void createBitmapFromBuffer( castor::PxBufferBaseRPtr buffer , bool flip , wxBitmap & bitmap ); /** diff --git a/tools/GuiCommon/Properties/AdditionalProperties.cpp b/tools/GuiCommon/Properties/AdditionalProperties.cpp index b13bdb963c..066a9fdd31 100644 --- a/tools/GuiCommon/Properties/AdditionalProperties.cpp +++ b/tools/GuiCommon/Properties/AdditionalProperties.cpp @@ -179,11 +179,11 @@ namespace GuiCommon { auto buffer = m_loader->load( name , make_Path( filename.GetFullPath() ) - , {} ).getPixels(); + , {} ).getPixels()->clone(); if ( castor::isCompressed( buffer->getFormat() ) ) { - buffer = castor::decompressBuffer( buffer ); + buffer = castor::decompressBuffer( buffer.get() ); } if ( buffer->getFormat() != castor::PixelFormat::eR8G8B8A8_UNORM ) diff --git a/tools/GuiCommon/System/Recorder.cpp b/tools/GuiCommon/System/Recorder.cpp index 49d911f6ec..b638432915 100644 --- a/tools/GuiCommon/System/Recorder.cpp +++ b/tools/GuiCommon/System/Recorder.cpp @@ -132,7 +132,7 @@ namespace GuiCommon return result; } - bool RecordFrame( castor::PxBufferBaseSPtr buffer )override + bool RecordFrame( castor::PxBufferBaseRPtr buffer )override { doRecordFrame( buffer ); m_saved = clock::now(); @@ -143,7 +143,7 @@ namespace GuiCommon protected: virtual bool doStartRecord( castor::Size const & size, wxString const & name ) = 0; virtual bool doUpdateTime( uint64_t uiTimeDiff ) = 0; - virtual void doRecordFrame( castor::PxBufferBaseSPtr buffer ) = 0; + virtual void doRecordFrame( castor::PxBufferBaseRPtr buffer ) = 0; protected: time_point m_saved; @@ -423,7 +423,7 @@ namespace GuiCommon return true; } - void doRecordFrame( castor::PxBufferBaseSPtr inbuffer )override + void doRecordFrame( castor::PxBufferBaseRPtr inbuffer )override { if ( IsRecording() ) { @@ -491,7 +491,7 @@ namespace GuiCommon return false; } - bool RecordFrame( castor::PxBufferBaseSPtr )override + bool RecordFrame( castor::PxBufferBaseRPtr )override { return true; } diff --git a/tools/GuiCommon/System/Recorder.hpp b/tools/GuiCommon/System/Recorder.hpp index b6499b75bb..8292cdfe10 100644 --- a/tools/GuiCommon/System/Recorder.hpp +++ b/tools/GuiCommon/System/Recorder.hpp @@ -18,7 +18,7 @@ namespace GuiCommon virtual bool StartRecord( castor::Size const & size, int wantedFPS ) = 0; virtual bool IsRecording() = 0; virtual bool UpdateTime() = 0; - virtual bool RecordFrame( castor::PxBufferBaseSPtr buffer ) = 0; + virtual bool RecordFrame( castor::PxBufferBaseRPtr buffer ) = 0; virtual void StopRecord() = 0; }; @@ -47,7 +47,7 @@ namespace GuiCommon return m_impl->UpdateTime(); } - inline bool RecordFrame( castor::PxBufferBaseSPtr buffer ) + inline bool RecordFrame( castor::PxBufferBaseRPtr buffer ) { return m_impl->RecordFrame( buffer ); } From 54a4638c366fc8266e2c822a20e9868972690c16 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 01:14:38 +0200 Subject: [PATCH 15/35] Castor3D: Replaced shared_ptr with unique_ptr for file parser context. --- include/Core/Castor3D/Cache/ShaderCache.hpp | 4 ++-- .../Core/CastorUtils/FileParser/FileParser.hpp | 6 +++--- .../CastorUtils/FileParser/FileParserModule.hpp | 4 ++-- .../Core/CastorUtils/FileParser/FileParser.cpp | 16 +++++----------- .../CastorUtils/FileParser/FileParserContext.cpp | 2 ++ 5 files changed, 14 insertions(+), 18 deletions(-) diff --git a/include/Core/Castor3D/Cache/ShaderCache.hpp b/include/Core/Castor3D/Cache/ShaderCache.hpp index ea8efe4e1e..4306beb75f 100644 --- a/include/Core/Castor3D/Cache/ShaderCache.hpp +++ b/include/Core/Castor3D/Cache/ShaderCache.hpp @@ -165,10 +165,10 @@ namespace castor3d *\brief Crée un cache de ashes::ShaderProgram. *\param[in] engine Le moteur. */ - inline std::unique_ptr< ShaderProgramCache > + inline castor::UniquePtr< ShaderProgramCache > makeCache( Engine & engine ) { - return std::make_unique< ShaderProgramCache >( engine ); + return castor::makeUnique< ShaderProgramCache >( engine ); } } diff --git a/include/Core/CastorUtils/FileParser/FileParser.hpp b/include/Core/CastorUtils/FileParser/FileParser.hpp index 85d116c7da..a5c5a5c5f7 100644 --- a/include/Core/CastorUtils/FileParser/FileParser.hpp +++ b/include/Core/CastorUtils/FileParser/FileParser.hpp @@ -115,7 +115,7 @@ namespace castor CU_API explicit PreprocessedFile( FileParser & parser ); CU_API PreprocessedFile( FileParser & parser - , FileParserContextSPtr context ); + , FileParserContextUPtr context ); CU_API void addParser( Path file , uint64_t line @@ -151,7 +151,7 @@ namespace castor private: FileParser & m_parser; - FileParserContextSPtr m_context; + FileParserContextUPtr m_context; std::vector< Action > m_actions; Action m_popAction; }; @@ -433,7 +433,7 @@ namespace castor *\brief Initialisation spécifique. *\param[in] path Le chemin d'accès au fichier. */ - CU_API FileParserContextSPtr doInitialiseParser( Path const & path ); + CU_API FileParserContextUPtr doInitialiseParser( Path const & path ); /** *\~english *\brief Specific cleanup. diff --git a/include/Core/CastorUtils/FileParser/FileParserModule.hpp b/include/Core/CastorUtils/FileParser/FileParserModule.hpp index 608963ff80..2f187644a3 100644 --- a/include/Core/CastorUtils/FileParser/FileParserModule.hpp +++ b/include/Core/CastorUtils/FileParser/FileParserModule.hpp @@ -171,8 +171,8 @@ namespace castor */ class PreprocessedFile; - CU_DeclareSmartPtr( FileParserContext ); - CU_DeclareSmartPtr( ParserParameterBase ); + CU_DeclareCUSmartPtr( castor, FileParserContext, CU_API ); + CU_DeclareCUSmartPtr( castor, ParserParameterBase, CU_API ); CU_DeclareVector( ParserParameterBaseSPtr, ParserParameter ); /** *\~english diff --git a/source/Core/CastorUtils/FileParser/FileParser.cpp b/source/Core/CastorUtils/FileParser/FileParser.cpp index e2f132f0b3..9551ebf418 100644 --- a/source/Core/CastorUtils/FileParser/FileParser.cpp +++ b/source/Core/CastorUtils/FileParser/FileParser.cpp @@ -62,7 +62,7 @@ namespace castor } PreprocessedFile::PreprocessedFile( FileParser & parser - , FileParserContextSPtr context ) + , FileParserContextUPtr context ) : m_parser{ parser } , m_context{ std::move( context ) } { @@ -196,14 +196,8 @@ namespace castor if ( m_context->sections.empty() || m_context->sections.back() != m_parser.getRootSectionId() ) { - if ( m_context.use_count() == 1 ) - { - parseError( cuT( "Unexpected end of file" ) ); - } - else - { - m_parser.validate( *this ); - } + parseError( cuT( "Unexpected end of file" ) ); + m_parser.validate( *this ); } else { @@ -886,7 +880,7 @@ namespace castor } } - FileParserContextSPtr FileParser::doInitialiseParser( Path const & path ) + FileParserContextUPtr FileParser::doInitialiseParser( Path const & path ) { for ( auto & it : m_additionalParsers ) { @@ -900,7 +894,7 @@ namespace castor } } - return std::make_shared< FileParserContext >( *this, path ); + return castor::makeUnique< FileParserContext >( *this, path ); } void FileParser::doCheckDefines( String & text ) diff --git a/source/Core/CastorUtils/FileParser/FileParserContext.cpp b/source/Core/CastorUtils/FileParser/FileParserContext.cpp index acc145caf0..ed8aa28f8b 100644 --- a/source/Core/CastorUtils/FileParser/FileParserContext.cpp +++ b/source/Core/CastorUtils/FileParser/FileParserContext.cpp @@ -2,6 +2,8 @@ #include "CastorUtils/FileParser/FileParser.hpp" +CU_ImplementCUSmartPtr( castor, FileParserContext ) + namespace castor { FileParserContext::FileParserContext( FileParser & pparser From 36006d9488bde80539af60928377dbd51ea61157 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 01:15:53 +0200 Subject: [PATCH 16/35] Castor3D: Replaced shared_ptr with unique_ptr for caches and views. --- include/Core/Castor3D/Cache/CacheModule.hpp | 8 ++--- include/Core/Castor3D/Cache/CacheView.hpp | 2 +- include/Core/Castor3D/Cache/ObjectCache.hpp | 2 +- include/Core/Castor3D/Cache/ShaderCache.hpp | 4 +-- include/Core/Castor3D/Scene/SceneModule.hpp | 8 +++++ .../Core/CastorUtils/Design/DesignModule.hpp | 2 +- .../Core/CastorUtils/Design/ResourceCache.hpp | 2 +- .../Core/CastorUtils/Graphics/FontCache.hpp | 28 ----------------- .../CastorUtils/Graphics/GraphicsModule.hpp | 30 +++++++++++++++++++ source/Core/Castor3D/Cache/TextureCache.cpp | 2 ++ source/Core/Castor3D/Engine.cpp | 4 +-- source/Core/Castor3D/Scene/SceneModule.cpp | 3 ++ .../Core/CastorUtils/Graphics/FontCache.cpp | 2 ++ 13 files changed, 57 insertions(+), 40 deletions(-) diff --git a/include/Core/Castor3D/Cache/CacheModule.hpp b/include/Core/Castor3D/Cache/CacheModule.hpp index 38eba6b4aa..9d22f38261 100644 --- a/include/Core/Castor3D/Cache/CacheModule.hpp +++ b/include/Core/Castor3D/Cache/CacheModule.hpp @@ -231,9 +231,9 @@ namespace castor3d using ObjectDetacherT = typename ObjectCacheTraitsT< ObjT, KeyT >::ElementDetacherT; template< typename ObjT, typename KeyT, typename TraitsT > - using ObjectCachePtrT = std::shared_ptr< ObjectCacheT< ObjT, KeyT, TraitsT > >; + using ObjectCachePtrT = castor::UniquePtr< ObjectCacheT< ObjT, KeyT, TraitsT > >; template< typename CacheT, EventType EventT > - using CacheViewPtrT = std::shared_ptr< CacheViewT< CacheT, EventT > >; + using CacheViewPtrT = castor::UniquePtr< CacheViewT< CacheT, EventT > >; class RenderTargetCache; class ShaderProgramCache; @@ -256,7 +256,7 @@ namespace castor3d return *m_##memberName##Cache;\ }\ private:\ - className##Cache##SPtr m_##memberName##Cache + className##Cache##UPtr m_##memberName##Cache #define DECLARE_CACHE_MEMBER( memberName, className )\ public:\ @@ -336,7 +336,7 @@ namespace castor3d }\ private:\ castor::ConnectionT< castor::OnCacheChanged > m_on##className##Changed;\ - className##Cache##SPtr m_##memberName##Cache + className##Cache##UPtr m_##memberName##Cache #define DECLARE_OBJECT_CACHE_MEMBER( memberName, className )\ public:\ diff --git a/include/Core/Castor3D/Cache/CacheView.hpp b/include/Core/Castor3D/Cache/CacheView.hpp index f8d018e4cf..1058f21146 100644 --- a/include/Core/Castor3D/Cache/CacheView.hpp +++ b/include/Core/Castor3D/Cache/CacheView.hpp @@ -237,7 +237,7 @@ namespace castor3d , typename CacheViewTraitsT< CacheT >::ElementInitialiserT initialiser = {} , typename CacheViewTraitsT< CacheT >::ElementCleanerT cleaner = {} ) { - return std::make_shared< CacheViewT< CacheT, EventT > >( name + return castor::makeUnique< CacheViewT< CacheT, EventT > >( name , cache , std::move( initialiser ) , std::move( cleaner ) ); diff --git a/include/Core/Castor3D/Cache/ObjectCache.hpp b/include/Core/Castor3D/Cache/ObjectCache.hpp index 3fbc3c52f1..36626ef19c 100644 --- a/include/Core/Castor3D/Cache/ObjectCache.hpp +++ b/include/Core/Castor3D/Cache/ObjectCache.hpp @@ -86,7 +86,7 @@ namespace castor3d , typename ... ParametersT > ObjectCachePtrT< ObjT, KeyT, TraitsT > makeObjectCache( ParametersT && ... parameters ) { - return std::make_shared< ObjectCacheT< ObjT, KeyT, TraitsT > >( std::forward< ParametersT >( parameters )... ); + return castor::makeUnique< ObjectCacheT< ObjT, KeyT, TraitsT > >( std::forward< ParametersT >( parameters )... ); } } diff --git a/include/Core/Castor3D/Cache/ShaderCache.hpp b/include/Core/Castor3D/Cache/ShaderCache.hpp index 4306beb75f..14cb854440 100644 --- a/include/Core/Castor3D/Cache/ShaderCache.hpp +++ b/include/Core/Castor3D/Cache/ShaderCache.hpp @@ -149,13 +149,13 @@ namespace castor3d struct AutoGeneratedProgram { PipelineFlags flags; - ShaderProgramSPtr program; + ShaderProgramRPtr program; }; using ShaderProgramCont = std::vector< AutoGeneratedProgram >; mutable std::mutex m_mutex; ShaderProgramPtrArray m_programs; - ShaderProgramCont m_autogenerated; + ShaderProgramCont m_autoGenerated; }; /** *\~english diff --git a/include/Core/Castor3D/Scene/SceneModule.hpp b/include/Core/Castor3D/Scene/SceneModule.hpp index 6db5c40402..e1273ce277 100644 --- a/include/Core/Castor3D/Scene/SceneModule.hpp +++ b/include/Core/Castor3D/Scene/SceneModule.hpp @@ -6,9 +6,11 @@ See LICENSE file in root folder #include "Castor3D/Event/Frame/FrameEventModule.hpp" #include "Castor3D/Material/MaterialModule.hpp" +#include "Castor3D/Material/Texture/TextureModule.hpp" #include "Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp" #include +#include namespace castor3d { @@ -663,12 +665,18 @@ namespace castor3d using GeometryResPtr = CameraCacheTraits::ElementObsT; using SceneNodeRes = CameraCacheTraits::ElementPtrT; using SceneNodeResPtr = CameraCacheTraits::ElementObsT; + using MaterialCacheView = CacheViewT< MaterialCache, EventType::ePreRender >; + using SamplerCacheView = CacheViewT< SamplerCache, EventType::ePreRender >; + using FontCacheView = CacheViewT< castor::FontCache, EventType::ePreRender >; CU_DeclareCUSmartPtr( castor3d, SceneCache, C3D_API ); CU_DeclareCUSmartPtr( castor3d, BillboardListCache, C3D_API ); CU_DeclareCUSmartPtr( castor3d, CameraCache, C3D_API ); CU_DeclareCUSmartPtr( castor3d, GeometryCache, C3D_API ); CU_DeclareCUSmartPtr( castor3d, SceneNodeCache, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MaterialCacheView, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SamplerCacheView, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, FontCacheView, C3D_API ); //@} } diff --git a/include/Core/CastorUtils/Design/DesignModule.hpp b/include/Core/CastorUtils/Design/DesignModule.hpp index 9d19acd1f7..64c3a155ac 100644 --- a/include/Core/CastorUtils/Design/DesignModule.hpp +++ b/include/Core/CastorUtils/Design/DesignModule.hpp @@ -579,7 +579,7 @@ namespace castor using OnCacheChangedConnection = castor::ConnectionT< OnCacheChanged >; template< typename ResT, typename KeyT, typename TraitsT > - using ResourceCachePtrT = std::shared_ptr< ResourceCacheT< ResT, KeyT, TraitsT > >; + using ResourceCachePtrT = UniquePtr< ResourceCacheT< ResT, KeyT, TraitsT > >; //@} } diff --git a/include/Core/CastorUtils/Design/ResourceCache.hpp b/include/Core/CastorUtils/Design/ResourceCache.hpp index dd446b0dca..55f5bb11c9 100644 --- a/include/Core/CastorUtils/Design/ResourceCache.hpp +++ b/include/Core/CastorUtils/Design/ResourceCache.hpp @@ -78,7 +78,7 @@ namespace castor , typename ... ParametersT > ResourceCachePtrT< ResT, KeyT, TraitsT > makeCache( ParametersT && ... parameters ) { - return std::make_shared< ResourceCacheT< ResT, KeyT, TraitsT > >( std::forward< ParametersT >( parameters )... ); + return castor::makeUnique< ResourceCacheT< ResT, KeyT, TraitsT > >( std::forward< ParametersT >( parameters )... ); } } diff --git a/include/Core/CastorUtils/Graphics/FontCache.hpp b/include/Core/CastorUtils/Graphics/FontCache.hpp index ee1fa447a2..bab02d44d5 100644 --- a/include/Core/CastorUtils/Graphics/FontCache.hpp +++ b/include/Core/CastorUtils/Graphics/FontCache.hpp @@ -15,33 +15,6 @@ See LICENSE file in root folder namespace castor { - /** - *\~english - * Helper structure to specialise a cache behaviour. - *\remarks - * Specialisation for castor::Font. - *\~french - * Structure permettant de spécialiser le comportement d'un cache. - *\remarks - * Spécialisation pour castor::Font. - */ - template<> - struct ResourceCacheTraitsT< Font, String > - : ResourceCacheTraitsBaseT< Font, String, ResourceCacheTraitsT< Font, String > > - { - using KeyT = String; - using Base = ResourceCacheTraitsBaseT< Font, KeyT, ResourceCacheTraitsT< Font, KeyT > >; - using ElementT = typename Base::ElementT; - using ElementPtrT = typename Base::ElementPtrT; - - CU_API static const String Name; - - CU_API static ElementPtrT makeElement( ResourceCacheBaseT< Font, String, ResourceCacheTraitsT< Font, String > > const & cache - , KeyT const & name - , uint32_t height - , Path path ); - }; - using FontCacheTraits = ResourceCacheTraitsT< Font, String >; /** *\~english * Base class for an element cache. @@ -81,7 +54,6 @@ namespace castor PathNameMap m_paths; }; - using FontCache = ResourceCacheT< Font, String, FontCacheTraits >; using FontRes = FontCacheTraits::ElementPtrT; using FontResPtr = FontCacheTraits::ElementObsT; } diff --git a/include/Core/CastorUtils/Graphics/GraphicsModule.hpp b/include/Core/CastorUtils/Graphics/GraphicsModule.hpp index 74e502d38b..25be201dba 100644 --- a/include/Core/CastorUtils/Graphics/GraphicsModule.hpp +++ b/include/Core/CastorUtils/Graphics/GraphicsModule.hpp @@ -6,6 +6,7 @@ See LICENSE file in root folder #pragma once #include "CastorUtils/CastorUtils.hpp" +#include "CastorUtils/Data/DataModule.hpp" #include "CastorUtils/Design/FlagCombination.hpp" namespace castor @@ -814,16 +815,45 @@ namespace castor \brief Unsupported format exception */ class UnsupportedFormatException; + /** + *\~english + * Helper structure to specialise a cache behaviour. + *\remarks + * Specialisation for castor::Font. + *\~french + * Structure permettant de spécialiser le comportement d'un cache. + *\remarks + * Spécialisation pour castor::Font. + */ + template<> + struct ResourceCacheTraitsT< Font, String > + : ResourceCacheTraitsBaseT< Font, String, ResourceCacheTraitsT< Font, String > > + { + using KeyT = String; + using Base = ResourceCacheTraitsBaseT< Font, KeyT, ResourceCacheTraitsT< Font, KeyT > >; + using ElementT = typename Base::ElementT; + using ElementPtrT = typename Base::ElementPtrT; + + CU_API static const String Name; + + CU_API static ElementPtrT makeElement( ResourceCacheBaseT< Font, String, ResourceCacheTraitsT< Font, String > > const & cache + , KeyT const & name + , uint32_t height + , Path path ); + }; + using FontCacheTraits = ResourceCacheTraitsT< Font, String >; using ImageLoaderPtr = std::unique_ptr< ImageLoaderImpl >; using ImageWriterPtr = std::unique_ptr< ImageWriterImpl >; using PixelBuffer = PxBuffer< PixelFormat::eR8G8B8A8_UNORM >; + using FontCache = ResourceCacheT< Font, String, FontCacheTraits >; CU_DeclareCUSmartPtr( castor, BoundingBox, CU_API ); CU_DeclareCUSmartPtr( castor, BoundingSphere, CU_API ); CU_DeclareCUSmartPtr( castor, Image, CU_API ); CU_DeclareCUSmartPtr( castor, Font, CU_API ); CU_DeclareCUSmartPtr( castor, PxBufferBase, CU_API ); + CU_DeclareCUSmartPtr( castor, FontCache, CU_API ); using RgbColour = RgbColourT< ColourComponent >; using RgbaColour = RgbaColourT< ColourComponent >; diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 9cac83e99e..34fc8c142e 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -12,6 +12,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, TextureUnitCache ) + namespace castor3d { using ashes::operator==; diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index 1008fbdcde..ca4d5ad10b 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -199,8 +199,8 @@ namespace castor3d m_sceneCache = castor::makeCache< Scene, castor::String, SceneCacheTraits >( getLogger() , castor::ResourceInitialiserT< SceneCache >{} , castor::ResourceCleanerT< SceneCache >{} ); - m_targetCache = std::make_unique< RenderTargetCache >( *this ); - m_textureCache = std::make_unique< TextureUnitCache >( *this ); + m_targetCache = castor::makeUnique< RenderTargetCache >( *this ); + m_textureCache = castor::makeUnique< TextureUnitCache >( *this ); if ( !castor::File::directoryExists( getEngineDirectory() ) ) { diff --git a/source/Core/Castor3D/Scene/SceneModule.cpp b/source/Core/Castor3D/Scene/SceneModule.cpp index 0c043a3ce8..ac776af04c 100644 --- a/source/Core/Castor3D/Scene/SceneModule.cpp +++ b/source/Core/Castor3D/Scene/SceneModule.cpp @@ -9,6 +9,9 @@ CU_ImplementExportedOwnedBy( castor3d::Scene, Scene ) CU_ImplementCUSmartPtr( castor3d, CameraCache ) CU_ImplementCUSmartPtr( castor3d, SceneCache ) +CU_ImplementCUSmartPtr( castor3d, MaterialCacheView ) +CU_ImplementCUSmartPtr( castor3d, SamplerCacheView ) +CU_ImplementCUSmartPtr( castor3d, FontCacheView ) namespace castor3d { diff --git a/source/Core/CastorUtils/Graphics/FontCache.cpp b/source/Core/CastorUtils/Graphics/FontCache.cpp index a05c2b03ba..14c482264e 100644 --- a/source/Core/CastorUtils/Graphics/FontCache.cpp +++ b/source/Core/CastorUtils/Graphics/FontCache.cpp @@ -5,6 +5,8 @@ #include "CastorUtils/Log/Logger.hpp" #include "CastorUtils/Miscellaneous/StringUtils.hpp" +CU_ImplementCUSmartPtr( castor, FontCache ) + namespace castor { //********************************************************************************************* From 4a7208b4dbaa6f8c65ab9bd297892d5b28423c87 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 01:16:20 +0200 Subject: [PATCH 17/35] Castor3D: Replaced shared_ptr with unique_ptr for shader programs. --- include/Core/Castor3D/Cache/ShaderCache.hpp | 14 +++--- .../Core/Castor3D/Render/RenderNodesPass.hpp | 2 +- .../Core/Castor3D/Render/RenderPipeline.hpp | 4 +- .../ParticleSystem/ComputeParticleSystem.hpp | 4 +- .../Scene/ParticleSystem/ParticleSystem.hpp | 2 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 2 +- source/Core/Castor3D/Cache/ShaderCache.cpp | 43 ++++++++++--------- .../Core/Castor3D/Render/RenderNodesPass.cpp | 2 +- .../Core/Castor3D/Render/RenderPipeline.cpp | 2 +- .../ParticleSystem/ComputeParticleSystem.cpp | 2 +- .../Scene/ParticleSystem/ParticleSystem.cpp | 2 +- .../Scene/SceneFileParser_Parsers.cpp | 8 ++-- 12 files changed, 44 insertions(+), 43 deletions(-) diff --git a/include/Core/Castor3D/Cache/ShaderCache.hpp b/include/Core/Castor3D/Cache/ShaderCache.hpp index 14cb854440..aa780b98a3 100644 --- a/include/Core/Castor3D/Cache/ShaderCache.hpp +++ b/include/Core/Castor3D/Cache/ShaderCache.hpp @@ -13,7 +13,7 @@ namespace castor3d class ShaderProgramCache : public castor::OwnedBy< Engine > { - using ShaderProgramPtrArray = std::vector< ShaderProgramSPtr >; + using ShaderProgramPtrArray = std::vector< ShaderProgramUPtr >; public: /** @@ -51,7 +51,7 @@ namespace castor3d *\param[in] initialise Dit si on veut que le programme soit initialisé. *\return Le programme créé. */ - C3D_API ShaderProgramSPtr getNewProgram( castor::String const & name + C3D_API ShaderProgramRPtr getNewProgram( castor::String const & name , bool initialise ); /** *\~english @@ -66,7 +66,7 @@ namespace castor3d *\param[in] flags Les flags de pipeline. *\return Le programme trouvé ou créé. */ - C3D_API ShaderProgramSPtr getAutomaticProgram( RenderNodesPass const & renderPass + C3D_API ShaderProgramRPtr getAutomaticProgram( RenderNodesPass const & renderPass , PipelineFlags const & flags ); /** *\~english @@ -138,12 +138,12 @@ namespace castor3d } private: - ShaderProgramSPtr doFindAutomaticProgram( PipelineFlags const & flags ); - ShaderProgramSPtr doCreateAutomaticProgram( RenderNodesPass const & renderPass + ShaderProgramRPtr doFindAutomaticProgram( PipelineFlags const & flags ); + ShaderProgramUPtr doCreateAutomaticProgram( RenderNodesPass const & renderPass , PipelineFlags const & flags )const; - void doAddAutomaticProgram( ShaderProgramSPtr program + void doAddAutomaticProgram( ShaderProgramUPtr program , PipelineFlags const & flags ); - void doAddProgram( ShaderProgramSPtr program ); + void doAddProgram( ShaderProgramUPtr program ); private: struct AutoGeneratedProgram diff --git a/include/Core/Castor3D/Render/RenderNodesPass.hpp b/include/Core/Castor3D/Render/RenderNodesPass.hpp index 6b98ce9807..49f408ce91 100644 --- a/include/Core/Castor3D/Render/RenderNodesPass.hpp +++ b/include/Core/Castor3D/Render/RenderNodesPass.hpp @@ -694,7 +694,7 @@ namespace castor3d C3D_API virtual SubmeshFlags doAdjustSubmeshFlags( SubmeshFlags flags )const; C3D_API virtual ProgramFlags doAdjustProgramFlags( ProgramFlags flags )const; C3D_API virtual SceneFlags doAdjustSceneFlags( SceneFlags flags )const; - C3D_API ShaderProgramSPtr doGetProgram( PipelineFlags const & flags + C3D_API ShaderProgramRPtr doGetProgram( PipelineFlags const & flags , VkCullModeFlags cullMode = VK_CULL_MODE_NONE ); C3D_API void doUpdateFlags( PipelineFlags & flags )const; C3D_API void doAddShadowBindings( Scene const & scene diff --git a/include/Core/Castor3D/Render/RenderPipeline.hpp b/include/Core/Castor3D/Render/RenderPipeline.hpp index 76a6d315f8..382bdc16cd 100644 --- a/include/Core/Castor3D/Render/RenderPipeline.hpp +++ b/include/Core/Castor3D/Render/RenderPipeline.hpp @@ -83,7 +83,7 @@ namespace castor3d , ashes::PipelineRasterizationStateCreateInfo rsState , ashes::PipelineColorBlendStateCreateInfo blState , ashes::PipelineMultisampleStateCreateInfo msState - , ShaderProgramSPtr program + , ShaderProgramRPtr program , PipelineFlags const & flags ); /** *\~english @@ -257,7 +257,7 @@ namespace castor3d ashes::PipelineRasterizationStateCreateInfo m_rsState; ashes::PipelineColorBlendStateCreateInfo m_blState; ashes::PipelineMultisampleStateCreateInfo m_msState; - ShaderProgramSPtr m_program; + ShaderProgramRPtr m_program; PipelineFlags m_flags; PipelineBaseHash m_flagsHash; std::vector< ashes::PipelineVertexInputStateCreateInfo > m_vertexLayouts; diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp index af47e1b70a..22e218ea5a 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp @@ -65,7 +65,7 @@ namespace castor3d *\brief Définit le programme utilisé pour mettre à jour les particules. *\param[in] program Le programme shader. */ - C3D_API void setUpdateProgram( ShaderProgramSPtr program ); + C3D_API void setUpdateProgram( ShaderProgramRPtr program ); /** *\~english *\brief Defines the workgroup sizes, as defined inside the compute shader. @@ -116,7 +116,7 @@ namespace castor3d protected: ParticleDeclaration m_inputs; - ShaderProgramSPtr m_program; + ShaderProgramRPtr m_program; UniformBufferOffsetT< Configuration > m_ubo; std::array< ashes::BufferPtr< uint8_t >, 2 > m_particlesStorages; ashes::BufferPtr< uint32_t > m_generatedCountBuffer; diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp index ec1b0e2748..33eebadeb7 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp @@ -138,7 +138,7 @@ namespace castor3d *\brief Définit le programme utilisé pour mettre à jour les particules via un compute shader. *\param[in] program Le programme. */ - C3D_API void setCSUpdateProgram( ShaderProgramSPtr program ); + C3D_API void setCSUpdateProgram( ShaderProgramRPtr program ); /** *\~english *\brief Defines the workgroup sizes, as defined inside the compute shader. diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index f36f04d14e..b548f1704d 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -183,7 +183,7 @@ namespace castor3d , VK_SAMPLE_COUNT_1_BIT , VK_IMAGE_TILING_OPTIMAL , VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT }; - ShaderProgramSPtr shaderProgram{}; + ShaderProgramRPtr shaderProgram{}; castor::PxBufferBaseUPtr buffer{}; castor::Path folder{}; castor::Path relative{}; diff --git a/source/Core/Castor3D/Cache/ShaderCache.cpp b/source/Core/Castor3D/Cache/ShaderCache.cpp index 489c0716ed..63794a71be 100644 --- a/source/Core/Castor3D/Cache/ShaderCache.cpp +++ b/source/Core/Castor3D/Cache/ShaderCache.cpp @@ -23,29 +23,30 @@ namespace castor3d void ShaderProgramCache::clear() { auto lock( castor::makeUniqueLock( m_mutex ) ); - m_autogenerated.clear(); + m_autoGenerated.clear(); m_programs.clear(); } - ShaderProgramSPtr ShaderProgramCache::getNewProgram( castor::String const & name + ShaderProgramRPtr ShaderProgramCache::getNewProgram( castor::String const & name , bool initialise ) { - auto result = std::make_shared< ShaderProgram >( name , *getEngine()->getRenderSystem() ); + auto result = castor::makeUnique< ShaderProgram >( name , *getEngine()->getRenderSystem() ); auto lock( castor::makeUniqueLock( m_mutex ) ); - doAddProgram( result ); - return result; + auto ret = result.get(); + doAddProgram( std::move( result ) ); + return ret; } - ShaderProgramSPtr ShaderProgramCache::doFindAutomaticProgram( PipelineFlags const & flags ) + ShaderProgramRPtr ShaderProgramCache::doFindAutomaticProgram( PipelineFlags const & flags ) { - auto it = std::find_if( m_autogenerated.begin() - , m_autogenerated.end() + auto it = std::find_if( m_autoGenerated.begin() + , m_autoGenerated.end() , [&flags]( AutoGeneratedProgram const & lookup ) { return lookup.flags == flags; } ); - if ( it != m_autogenerated.end() ) + if ( it != m_autoGenerated.end() ) { return it->program; } @@ -53,27 +54,27 @@ namespace castor3d return nullptr; } - ShaderProgramSPtr ShaderProgramCache::getAutomaticProgram( RenderNodesPass const & renderPass + ShaderProgramRPtr ShaderProgramCache::getAutomaticProgram( RenderNodesPass const & renderPass , PipelineFlags const & flags ) { auto lock( castor::makeUniqueLock( m_mutex ) ); - auto result = doFindAutomaticProgram( flags ); - if ( result ) + if ( auto result = doFindAutomaticProgram( flags ) ) { return result; } - result = doCreateAutomaticProgram( renderPass, flags ); + auto result = doCreateAutomaticProgram( renderPass, flags ); CU_Require( result ); - doAddAutomaticProgram( result, flags ); - return result; + auto ret = result.get(); + doAddAutomaticProgram( std::move( result ), flags ); + return ret; } - ShaderProgramSPtr ShaderProgramCache::doCreateAutomaticProgram( RenderNodesPass const & renderPass + ShaderProgramUPtr ShaderProgramCache::doCreateAutomaticProgram( RenderNodesPass const & renderPass , PipelineFlags const & flags )const { - ShaderProgramSPtr result = std::make_shared< ShaderProgram >( renderPass.getName(), *getEngine()->getRenderSystem() ); + auto result = castor::makeUnique< ShaderProgram >( renderPass.getName(), *getEngine()->getRenderSystem() ); if ( getEngine()->hasMeshShaders() && flags.usesMesh() ) @@ -127,14 +128,14 @@ namespace castor3d return result; } - void ShaderProgramCache::doAddAutomaticProgram( ShaderProgramSPtr program + void ShaderProgramCache::doAddAutomaticProgram( ShaderProgramUPtr program , PipelineFlags const & flags ) { - m_autogenerated.push_back( { flags, program } ); - doAddProgram( program ); + m_autoGenerated.emplace_back( flags, program.get() ); + doAddProgram( std::move( program ) ); } - void ShaderProgramCache::doAddProgram( ShaderProgramSPtr program ) + void ShaderProgramCache::doAddProgram( ShaderProgramUPtr program ) { m_programs.push_back( std::move( program ) ); } diff --git a/source/Core/Castor3D/Render/RenderNodesPass.cpp b/source/Core/Castor3D/Render/RenderNodesPass.cpp index f4a6a2c78e..488a9fa418 100644 --- a/source/Core/Castor3D/Render/RenderNodesPass.cpp +++ b/source/Core/Castor3D/Render/RenderNodesPass.cpp @@ -843,7 +843,7 @@ namespace castor3d return flags; } - ShaderProgramSPtr RenderNodesPass::doGetProgram( PipelineFlags const & flags + ShaderProgramRPtr RenderNodesPass::doGetProgram( PipelineFlags const & flags , VkCullModeFlags cullMode ) { return getEngine()->getShaderProgramCache().getAutomaticProgram( *this, flags ); diff --git a/source/Core/Castor3D/Render/RenderPipeline.cpp b/source/Core/Castor3D/Render/RenderPipeline.cpp index 20df461fbf..d19c51e725 100644 --- a/source/Core/Castor3D/Render/RenderPipeline.cpp +++ b/source/Core/Castor3D/Render/RenderPipeline.cpp @@ -36,7 +36,7 @@ namespace castor3d , ashes::PipelineRasterizationStateCreateInfo rsState , ashes::PipelineColorBlendStateCreateInfo blState , ashes::PipelineMultisampleStateCreateInfo msState - , ShaderProgramSPtr program + , ShaderProgramRPtr program , PipelineFlags const & flags ) : castor::OwnedBy< RenderNodesPass >{ owner } , m_renderSystem{ renderSystem } diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp index aac9c3ce71..8582bc2f5f 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp @@ -222,7 +222,7 @@ namespace castor3d m_inputs.push_back( ParticleElementDeclaration{ name, ElementUsage::eUnknown, type, m_inputs.stride() } ); } - void ComputeParticleSystem::setUpdateProgram( ShaderProgramSPtr program ) + void ComputeParticleSystem::setUpdateProgram( ShaderProgramRPtr program ) { m_program = program; } diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp index 06f7e176e8..adfbd9d948 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp @@ -284,7 +284,7 @@ namespace castor3d m_defaultValues[cuT ("out_") + name] = defaultValue; } - void ParticleSystem::setCSUpdateProgram( ShaderProgramSPtr program ) + void ParticleSystem::setCSUpdateProgram( ShaderProgramRPtr program ) { m_csImpl->setUpdateProgram( program ); } diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index da7e83ff8b..76f7b4a962 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -1861,7 +1861,7 @@ namespace castor3d CU_ImplementAttributeParser( parserParticleSystemCSShader ) { auto & parsingContext = getParserContext( context ); - parsingContext.shaderProgram.reset(); + parsingContext.shaderProgram = {}; parsingContext.shaderStage = VkShaderStageFlagBits( 0u ); if ( !parsingContext.scene ) @@ -1878,7 +1878,7 @@ namespace castor3d CU_ImplementAttributeParser( parserParticleSystemEnd ) { auto & parsingContext = getParserContext( context ); - parsingContext.shaderProgram.reset(); + parsingContext.shaderProgram = {}; parsingContext.shaderStage = VkShaderStageFlagBits( 0u ); if ( !parsingContext.particleSystem ) @@ -4126,7 +4126,7 @@ namespace castor3d CU_ImplementAttributeParser( parserPassShader ) { auto & parsingContext = getParserContext( context ); - parsingContext.shaderProgram.reset(); + parsingContext.shaderProgram = {}; parsingContext.shaderStage = VkShaderStageFlagBits( 0u ); if ( parsingContext.pass ) @@ -4652,7 +4652,7 @@ namespace castor3d parsingContext.particleSystem->setCSUpdateProgram( parsingContext.shaderProgram ); } - parsingContext.shaderProgram.reset(); + parsingContext.shaderProgram = {}; } } CU_EndAttributePop() From ae07f62535cde6a6b12f8697ee21a424e3962497 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 02:07:30 +0200 Subject: [PATCH 18/35] Castor3D: Replaced shared_ptr with unique_ptr for render targets. --- demos/CastorDvpTD/RenderPanel.cpp | 2 +- demos/CastorDvpTD/RenderPanel.hpp | 2 +- include/Core/Castor3D/Cache/TargetCache.hpp | 13 ++------ .../Material/Texture/TextureSourceInfo.hpp | 6 ++-- .../Castor3D/Material/Texture/TextureUnit.hpp | 8 ++--- include/Core/Castor3D/Render/RenderTarget.hpp | 3 +- include/Core/Castor3D/Render/RenderWindow.hpp | 2 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 2 +- include/Core/CastorUtils/Config/SmartPtr.hpp | 4 +-- source/Core/Castor3D/Cache/TargetCache.cpp | 32 ++++++------------- .../Material/Texture/TextureSourceInfo.cpp | 2 +- .../Castor3D/Material/Texture/TextureUnit.cpp | 31 +++++++----------- .../Scene/SceneFileParser_Parsers.cpp | 2 +- tools/CastorTestLauncher/MainFrame.cpp | 4 +-- tools/CastorViewer/MainFrame.cpp | 4 +-- tools/CastorViewer/MainFrame.hpp | 2 +- tools/CastorViewer/RenderPanel.cpp | 2 +- tools/CastorViewer/RenderPanel.hpp | 2 +- tools/GuiCommon/GuiCommonPrerequisites.cpp | 6 ++-- tools/GuiCommon/GuiCommonPrerequisites.hpp | 2 +- tools/GuiCommon/System/MaterialsList.cpp | 3 +- 21 files changed, 52 insertions(+), 82 deletions(-) diff --git a/demos/CastorDvpTD/RenderPanel.cpp b/demos/CastorDvpTD/RenderPanel.cpp index 53679f6a28..874421a0d3 100644 --- a/demos/CastorDvpTD/RenderPanel.cpp +++ b/demos/CastorDvpTD/RenderPanel.cpp @@ -71,7 +71,7 @@ namespace castortd m_renderWindow->cleanup(); } - void RenderPanel::setRenderTarget( castor3d::RenderTargetSPtr target ) + void RenderPanel::setRenderTarget( castor3d::RenderTargetRPtr target ) { if ( target ) { diff --git a/demos/CastorDvpTD/RenderPanel.hpp b/demos/CastorDvpTD/RenderPanel.hpp index 5acd26f773..b3451b99bd 100644 --- a/demos/CastorDvpTD/RenderPanel.hpp +++ b/demos/CastorDvpTD/RenderPanel.hpp @@ -30,7 +30,7 @@ namespace castortd ~RenderPanel()override; void reset(); - void setRenderTarget( castor3d::RenderTargetSPtr target ); + void setRenderTarget( castor3d::RenderTargetRPtr target ); castor3d::RenderWindow const & getRenderWindow()const { diff --git a/include/Core/Castor3D/Cache/TargetCache.hpp b/include/Core/Castor3D/Cache/TargetCache.hpp index 92cfb8ea0b..36aaafd515 100644 --- a/include/Core/Castor3D/Cache/TargetCache.hpp +++ b/include/Core/Castor3D/Cache/TargetCache.hpp @@ -18,7 +18,7 @@ namespace castor3d class RenderTargetCache : public castor::OwnedBy< Engine > { - CU_DeclareVector( RenderTargetSPtr, RenderTarget ); + CU_DeclareVector( RenderTargetUPtr, RenderTarget ); CU_DeclareArray( RenderTargetArray, TargetType::eCount, TargetType ); public: @@ -52,7 +52,7 @@ namespace castor3d *\param[in] pixelFormat Le format des pixels de la cible de rendu. *\return La cible de rendu */ - C3D_API RenderTargetSPtr add( TargetType type + C3D_API RenderTargetRPtr add( TargetType type , castor::Size const & size , castor::PixelFormat pixelFormat ); /** @@ -64,15 +64,6 @@ namespace castor3d *\param[in] target La cible de rendu */ C3D_API void remove( RenderTargetRPtr target ); - /** - *\~english - *\brief Removes a render target from the render loop - *\param[in] target The render target - *\~french - *\brief Enlève une cible de rendu de la boucle de rendu - *\param[in] target La cible de rendu - */ - C3D_API void remove( RenderTargetSPtr target ); /** *\~english *\brief Updates the render pass, CPU wise. diff --git a/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp b/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp index 614bfa55d8..d08955e27c 100644 --- a/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp @@ -27,7 +27,7 @@ namespace castor3d , castor::ByteArray data , castor::ImageLoaderConfig loadConfig = { true, true, true } ); C3D_API TextureSourceInfo( SamplerRes sampler - , RenderTargetSPtr renderTarget ); + , RenderTargetRPtr renderTarget ); C3D_API TextureSourceInfo( SamplerRes sampler , ashes::ImageCreateInfo const & createInfo ); @@ -56,7 +56,7 @@ namespace castor3d return m_createInfo->format != VK_FORMAT_UNDEFINED; } - RenderTargetSPtr renderTarget()const + RenderTargetRPtr renderTarget()const { CU_Require( isRenderTarget() ); return m_renderTarget; @@ -135,7 +135,7 @@ namespace castor3d private: SamplerRes m_sampler{}; // Render target mode. - RenderTargetSPtr m_renderTarget{}; + RenderTargetRPtr m_renderTarget{}; // Image file mode. castor::Path m_folder{}; castor::Path m_relative{}; diff --git a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp index 4e4aa8001c..d7a9418176 100644 --- a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp @@ -158,9 +158,9 @@ namespace castor3d return m_texture != nullptr; } - RenderTargetSPtr getRenderTarget()const + RenderTargetRPtr getRenderTarget()const { - return m_renderTarget.lock(); + return m_renderTarget; } ashes::WriteDescriptorSet getDescriptor()const @@ -228,7 +228,7 @@ namespace castor3d , castor::Point3f const & scale ); C3D_API void setTexcoordSet( uint32_t value ); - void setRenderTarget( RenderTargetSPtr value ) + void setRenderTarget( RenderTargetRPtr value ) { m_renderTarget = value; } @@ -271,7 +271,7 @@ namespace castor3d TextureTransform m_transform; castor::Matrix4x4f m_transformations; TextureLayoutSPtr m_texture; - RenderTargetWPtr m_renderTarget; + RenderTargetRPtr m_renderTarget{}; SamplerResPtr m_sampler; SamplerRes m_ownSampler; ashes::WriteDescriptorSet m_descriptor; diff --git a/include/Core/Castor3D/Render/RenderTarget.hpp b/include/Core/Castor3D/Render/RenderTarget.hpp index 12e895e6f6..6704a7efb2 100644 --- a/include/Core/Castor3D/Render/RenderTarget.hpp +++ b/include/Core/Castor3D/Render/RenderTarget.hpp @@ -38,8 +38,7 @@ namespace castor3d }; class RenderTarget - : public std::enable_shared_from_this< RenderTarget > - , public castor::OwnedBy< Engine > + : public castor::OwnedBy< Engine > { using OnInitialisedFunc = std::function< void( RenderTarget const &, QueueData const & ) >; using OnInitialised = castor::SignalT< OnInitialisedFunc >; diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index fb6bd90768..5549964bf9 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -37,7 +37,7 @@ namespace castor3d struct RenderWindowDesc { castor::String name; - RenderTargetSPtr renderTarget; + RenderTargetRPtr renderTarget{}; bool enableVSync{}; bool fullscreen{}; }; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index b548f1704d..30e2fbe8fc 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -168,8 +168,8 @@ namespace castor3d SamplerResPtr sampler{}; SamplerRes ownSampler{}; TargetType targetType{}; - RenderTargetSPtr renderTarget{}; RenderTargetSPtr textureRenderTarget{}; + RenderTargetRPtr renderTarget{}; PassSPtr pass{}; PassComponent * passComponent{}; bool createPass{ true }; diff --git a/include/Core/CastorUtils/Config/SmartPtr.hpp b/include/Core/CastorUtils/Config/SmartPtr.hpp index 34ef765963..d3a7640fe0 100644 --- a/include/Core/CastorUtils/Config/SmartPtr.hpp +++ b/include/Core/CastorUtils/Config/SmartPtr.hpp @@ -45,13 +45,13 @@ namespace castor template< typename TypeT, typename TypeU, typename ... ParamsT > UniquePtr< TypeT > makeUniqueDerived( ParamsT && ... params ) { - return UniquePtr< TypeT >( new TypeU{ std::forward< ParamsT >( params )... } ); + return UniquePtr< TypeT >( new TypeU( std::forward< ParamsT >( params )... ) ); } template< typename TypeT, typename ... ParamsT > UniquePtr< TypeT > makeUnique( ParamsT && ... params ) { - return UniquePtr< TypeT >( new TypeT{ std::forward< ParamsT >( params )... } ); + return UniquePtr< TypeT >( new TypeT( std::forward< ParamsT >( params )... ) ); } } diff --git a/source/Core/Castor3D/Cache/TargetCache.cpp b/source/Core/Castor3D/Cache/TargetCache.cpp index ef31180b0a..16246f2ac9 100644 --- a/source/Core/Castor3D/Cache/TargetCache.cpp +++ b/source/Core/Castor3D/Cache/TargetCache.cpp @@ -18,17 +18,18 @@ namespace castor3d { } - RenderTargetSPtr RenderTargetCache::add( TargetType type + RenderTargetRPtr RenderTargetCache::add( TargetType type , castor::Size const & size , castor::PixelFormat pixelFormat ) { cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; - RenderTargetSPtr result = std::make_shared< RenderTarget >( *getEngine() + auto result = castor::makeUnique< RenderTarget >( *getEngine() , type , size , pixelFormat ); - m_renderTargets[size_t( type )].push_back( result ); - return result; + auto ret = result.get(); + m_renderTargets[size_t( type )].push_back( std::move( result ) ); + return ret; } void RenderTargetCache::remove( RenderTargetRPtr target ) @@ -38,7 +39,7 @@ namespace castor3d , ptrdiff_t( target->getTargetType() ) ); auto it = std::find_if( v->begin() , v->end() - , [&target]( RenderTargetSPtr lookup ) + , [&target]( RenderTargetUPtr const & lookup ) { return target == lookup.get(); } ); @@ -49,24 +50,11 @@ namespace castor3d } } - void RenderTargetCache::remove( RenderTargetSPtr target ) - { - cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; - auto v = std::next( m_renderTargets.begin() - , ptrdiff_t( target->getTargetType() ) ); - auto it = std::find( v->begin(), v->end(), target ); - - if ( it != v->end() ) - { - v->erase( it ); - } - } - void RenderTargetCache::update( CpuUpdater & updater ) { cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; - for ( auto target : m_renderTargets[size_t( TargetType::eTexture )] ) + for ( auto & target : m_renderTargets[size_t( TargetType::eTexture )] ) { target->update( updater ); } @@ -76,7 +64,7 @@ namespace castor3d { cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; - for ( auto target : m_renderTargets[size_t( TargetType::eTexture )] ) + for ( auto & target : m_renderTargets[size_t( TargetType::eTexture )] ) { target->update( updater ); } @@ -86,7 +74,7 @@ namespace castor3d { cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; - for ( auto target : m_renderTargets[size_t( TargetType::eTexture )] ) + for ( auto & target : m_renderTargets[size_t( TargetType::eTexture )] ) { target->upload( cb ); } @@ -100,7 +88,7 @@ namespace castor3d cachetgt::LockType lock{ castor::makeUniqueLock( *this ) }; crg::SemaphoreWaitArray result; - for ( auto target : m_renderTargets[size_t( TargetType::eTexture )] ) + for ( auto & target : m_renderTargets[size_t( TargetType::eTexture )] ) { auto toWait = target->render( device, info, queue, signalsToWait ); result.insert( result.end() diff --git a/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp b/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp index fff3b1831c..d70dabee83 100644 --- a/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp @@ -33,7 +33,7 @@ namespace castor3d } TextureSourceInfo::TextureSourceInfo( SamplerRes sampler - , RenderTargetSPtr renderTarget ) + , RenderTargetRPtr renderTarget ) : m_sampler{ std::move( sampler ) } , m_renderTarget{ std::move( renderTarget ) } { diff --git a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp index 474b912cca..5ab8775636 100644 --- a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp @@ -72,7 +72,7 @@ namespace castor3d cleanup(); } - auto renderTarget = m_renderTarget.lock(); + auto renderTarget = m_renderTarget; if ( renderTarget ) { @@ -131,17 +131,15 @@ namespace castor3d return m_initialised; } - RenderTargetSPtr target = m_renderTarget.lock(); bool result = false; - auto sampler = getSampler().lock(); CU_Require( sampler ); sampler->initialise( device ); - if ( target ) + if ( m_renderTarget ) { std::atomic_bool isInitialised = false; - target->initialise( [&isInitialised]( RenderTarget const & rt, QueueData const & queue ) + m_renderTarget->initialise( [&isInitialised]( RenderTarget const & rt, QueueData const & queue ) { isInitialised = true; } ); @@ -152,10 +150,10 @@ namespace castor3d } m_texture = std::make_shared< TextureLayout >( device.renderSystem - , target->getTexture().image - , target->getTexture().wholeViewId ); + , m_renderTarget->getTexture().image + , m_renderTarget->getTexture().wholeViewId ); result = true; - m_name = cuT( "RT_" ) + castor::string::toString( target->getIndex() ); + m_name = cuT( "RT_" ) + castor::string::toString( m_renderTarget->getIndex() ); } else if ( m_texture ) { @@ -223,11 +221,9 @@ namespace castor3d m_texture->cleanup(); } - RenderTargetSPtr target = m_renderTarget.lock(); - - if ( target ) + if ( m_renderTarget ) { - target->cleanup( device ); + m_renderTarget->cleanup( device ); } } } @@ -240,11 +236,9 @@ namespace castor3d castor::String TextureUnit::toString()const { - auto renderTarget = m_renderTarget.lock(); - - if ( renderTarget ) + if ( m_renderTarget ) { - return cuT( "RT_" ) + castor::string::toString( renderTarget->getIndex() ); + return cuT( "RT_" ) + castor::string::toString( m_renderTarget->getIndex() ); } CU_Require( m_texture ); @@ -276,12 +270,11 @@ namespace castor3d void TextureUnit::setConfiguration( TextureConfiguration value ) { - RenderTargetSPtr target = m_renderTarget.lock(); auto format = castor::PixelFormat::eR8G8B8A8_UNORM; - if ( target ) + if ( m_renderTarget ) { - format = castor::PixelFormat( target->getPixelFormat() ); + format = castor::PixelFormat( m_renderTarget->getPixelFormat() ); } else if ( m_texture ) { diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 76f7b4a962..8ef4ba15ca 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -4373,7 +4373,7 @@ namespace castor3d , std::move( parsingContext.textureConfiguration ) , parsingContext.texcoordSet } , std::move( parsingContext.textureAnimation ) ); - parsingContext.textureRenderTarget.reset(); + parsingContext.textureRenderTarget = {}; } else if ( parsingContext.folder.empty() && parsingContext.relative.empty() ) { diff --git a/tools/CastorTestLauncher/MainFrame.cpp b/tools/CastorTestLauncher/MainFrame.cpp index e0ed11b49c..e873252e5d 100644 --- a/tools/CastorTestLauncher/MainFrame.cpp +++ b/tools/CastorTestLauncher/MainFrame.cpp @@ -42,10 +42,10 @@ namespace test_launcher { namespace { - castor3d::RenderTargetSPtr doLoadScene( castor3d::Engine & engine + castor3d::RenderTargetRPtr doLoadScene( castor3d::Engine & engine , castor::Path const & fileName ) { - castor3d::RenderTargetSPtr result; + castor3d::RenderTargetRPtr result{}; if ( castor::File::fileExists( fileName ) ) { diff --git a/tools/CastorViewer/MainFrame.cpp b/tools/CastorViewer/MainFrame.cpp index 346ab44287..a7eebd1485 100644 --- a/tools/CastorViewer/MainFrame.cpp +++ b/tools/CastorViewer/MainFrame.cpp @@ -667,7 +667,7 @@ namespace CastorViewer #endif } - void MainFrame::doSceneLoadEnd( castor3d::RenderTargetSPtr target ) + void MainFrame::doSceneLoadEnd( castor3d::RenderTargetRPtr target ) { if ( !target ) { @@ -1096,7 +1096,7 @@ namespace CastorViewer if ( rawTarget ) { - doSceneLoadEnd( rawTarget->shared_from_this() ); + doSceneLoadEnd( rawTarget ); } } } diff --git a/tools/CastorViewer/MainFrame.hpp b/tools/CastorViewer/MainFrame.hpp index c904ccd1b3..ee8e2fc6ce 100644 --- a/tools/CastorViewer/MainFrame.hpp +++ b/tools/CastorViewer/MainFrame.hpp @@ -74,7 +74,7 @@ namespace CastorViewer bool doStartRecord(); void doRecordFrame(); void doStopRecord(); - void doSceneLoadEnd( castor3d::RenderTargetSPtr target ); + void doSceneLoadEnd( castor3d::RenderTargetRPtr target ); private: #pragma clang diagnostic push diff --git a/tools/CastorViewer/RenderPanel.cpp b/tools/CastorViewer/RenderPanel.cpp index ac698902d5..3eb115f87b 100644 --- a/tools/CastorViewer/RenderPanel.cpp +++ b/tools/CastorViewer/RenderPanel.cpp @@ -189,7 +189,7 @@ namespace CastorViewer castor::Logger::logInfo( cuT( "RenderPanel cleaned up." ) ); } - void RenderPanel::setTarget( castor3d::RenderTargetSPtr target ) + void RenderPanel::setTarget( castor3d::RenderTargetRPtr target ) { m_listener = m_renderWindow->getListener(); m_renderWindow->initialise( *target ); diff --git a/tools/CastorViewer/RenderPanel.hpp b/tools/CastorViewer/RenderPanel.hpp index 8310a5a464..adc76c9e63 100644 --- a/tools/CastorViewer/RenderPanel.hpp +++ b/tools/CastorViewer/RenderPanel.hpp @@ -58,7 +58,7 @@ namespace CastorViewer ~RenderPanel()override; void reset(); - void setTarget( castor3d::RenderTargetSPtr target ); + void setTarget( castor3d::RenderTargetRPtr target ); void onKeyUp( wxKeyEvent & event ); inline castor3d::RenderWindow & getRenderWindow()const diff --git a/tools/GuiCommon/GuiCommonPrerequisites.cpp b/tools/GuiCommon/GuiCommonPrerequisites.cpp index b5b614cce9..0ac62c958d 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.cpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.cpp @@ -234,12 +234,12 @@ namespace GuiCommon } } - castor3d::RenderTargetSPtr loadScene( castor3d::Engine & engine + castor3d::RenderTargetRPtr loadScene( castor3d::Engine & engine , castor::String const & appName , castor::Path const & fileName , castor3d::ProgressBar * progress ) { - castor3d::RenderTargetSPtr result; + castor3d::RenderTargetRPtr result{}; if ( castor::File::fileExists( fileName ) ) { @@ -300,7 +300,7 @@ namespace GuiCommon { auto target = loadScene( engine, appName, fileName, progress ); auto event = new wxThreadEvent{ wxEVT_THREAD, eventID }; - auto var = new wxVariant{ target.get() }; + auto var = new wxVariant{ target }; event->SetEventObject( var ); window->GetEventHandler()->QueueEvent( event ); } diff --git a/tools/GuiCommon/GuiCommonPrerequisites.hpp b/tools/GuiCommon/GuiCommonPrerequisites.hpp index 4806c70feb..c7fc03b9e3 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.hpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.hpp @@ -226,7 +226,7 @@ namespace GuiCommon *\param[in] fileName Le nom du fichier de scène. *\return true si tout s'est bien passé. */ - castor3d::RenderTargetSPtr loadScene( castor3d::Engine & engine + castor3d::RenderTargetRPtr loadScene( castor3d::Engine & engine , castor::String const & appName , castor::Path const & fileName , castor3d::ProgressBar * progress ); diff --git a/tools/GuiCommon/System/MaterialsList.cpp b/tools/GuiCommon/System/MaterialsList.cpp index 6e749c3d10..4ef53d9bf1 100644 --- a/tools/GuiCommon/System/MaterialsList.cpp +++ b/tools/GuiCommon/System/MaterialsList.cpp @@ -180,9 +180,8 @@ namespace GuiCommon , new TextureTreeItemProperty{ editable , pass , texture } ); - castor3d::RenderTargetSPtr target = texture->getRenderTarget(); - if ( target ) + if ( auto target = texture->getRenderTarget() ) { appendRenderTarget( treeCtrl , editable From 54df3eed9273919d641f1b9c5ea6da6ca7dc929f Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 02:08:13 +0200 Subject: [PATCH 19/35] Castor3D: Replaced shared_ptr with unique_ptr for texture layouts. --- include/Core/Castor3D/Cache/TextureCache.hpp | 2 +- include/Core/Castor3D/Gui/GuiModule.hpp | 2 +- .../Material/Texture/TextureLayout.hpp | 4 +-- .../Castor3D/Material/Texture/TextureUnit.hpp | 8 +++--- include/Core/Castor3D/Overlay/FontTexture.hpp | 6 ++-- .../Render/PostEffect/PostEffectSurface.hpp | 14 +++++----- .../Castor3D/Scene/Background/Background.hpp | 2 +- .../Core/Castor3D/Scene/Background/Image.hpp | 2 +- .../Core/Castor3D/Scene/Background/Skybox.hpp | 12 ++++---- .../Core/Castor3D/Scene/SceneFileParser.hpp | 2 +- source/Core/Castor3D/Cache/TextureCache.cpp | 6 ++-- source/Core/Castor3D/Gui/GuiModule.cpp | 4 +-- .../Material/Texture/TextureLayout.cpp | 8 +++--- .../Castor3D/Material/Texture/TextureUnit.cpp | 6 ++-- source/Core/Castor3D/Overlay/FontTexture.cpp | 4 +-- .../Render/PostEffect/PostEffectSurface.cpp | 24 ++++++++-------- .../Core/Castor3D/Scene/Background/Colour.cpp | 2 +- .../Core/Castor3D/Scene/Background/Image.cpp | 8 +++--- .../Core/Castor3D/Scene/Background/Skybox.cpp | 28 +++++++++---------- .../DiamondSquareTerrain.cpp | 4 +-- .../DiamondSquareTerrain.hpp | 2 +- .../DiamondSquare_Parsers.cpp | 5 ++-- .../AtmosphereBackground.cpp | 2 +- 23 files changed, 79 insertions(+), 78 deletions(-) diff --git a/include/Core/Castor3D/Cache/TextureCache.hpp b/include/Core/Castor3D/Cache/TextureCache.hpp index f749676978..718ab6eb91 100644 --- a/include/Core/Castor3D/Cache/TextureCache.hpp +++ b/include/Core/Castor3D/Cache/TextureCache.hpp @@ -32,7 +32,7 @@ namespace castor3d } TextureUnitData * data; - TextureLayoutSPtr layout{}; + TextureLayoutUPtr layout{}; TextureUnit * unit{}; std::atomic_bool interrupted{ false }; }; diff --git a/include/Core/Castor3D/Gui/GuiModule.hpp b/include/Core/Castor3D/Gui/GuiModule.hpp index a17c17b78d..a94a331152 100644 --- a/include/Core/Castor3D/Gui/GuiModule.hpp +++ b/include/Core/Castor3D/Gui/GuiModule.hpp @@ -494,7 +494,7 @@ namespace castor3d *\param[in] texture The material texture. *\return The created material. */ - MaterialRPtr createMaterial( Engine & engine, castor::String const & name, TextureLayoutSPtr texture ); + MaterialRPtr createMaterial( Engine & engine, castor::String const & name, TextureLayoutUPtr texture ); } #endif diff --git a/include/Core/Castor3D/Material/Texture/TextureLayout.hpp b/include/Core/Castor3D/Material/Texture/TextureLayout.hpp index 3ba348e1a7..2ad14de618 100644 --- a/include/Core/Castor3D/Material/Texture/TextureLayout.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureLayout.hpp @@ -165,11 +165,11 @@ namespace castor3d } }; - C3D_API TextureLayoutSPtr createTextureLayout( Engine const & engine + C3D_API TextureLayoutUPtr createTextureLayout( Engine const & engine , castor::Path const & relative , castor::Path const & folder , castor::ImageLoaderConfig config = { true, true, true } ); - C3D_API TextureLayoutSPtr createTextureLayout( Engine const & engine + C3D_API TextureLayoutUPtr createTextureLayout( Engine const & engine , castor::String const & name , castor::PxBufferBaseUPtr buffer , bool isStatic = false ); diff --git a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp index d7a9418176..8187bf14c1 100644 --- a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp @@ -81,7 +81,7 @@ namespace castor3d *\brief Définit la texture. *\param[in] texture La texture. */ - C3D_API void setTexture( TextureLayoutSPtr texture ); + C3D_API void setTexture( TextureLayoutUPtr texture ); /** *\~english *name @@ -138,9 +138,9 @@ namespace castor3d C3D_API bool isTransformAnimated()const; C3D_API bool isTileAnimated()const; - TextureLayoutSPtr getTexture()const + TextureLayoutRPtr getTexture()const { - return m_texture; + return m_texture.get(); } TextureConfiguration const & getConfiguration()const @@ -270,7 +270,7 @@ namespace castor3d TextureConfiguration m_configuration; TextureTransform m_transform; castor::Matrix4x4f m_transformations; - TextureLayoutSPtr m_texture; + TextureLayoutUPtr m_texture; RenderTargetRPtr m_renderTarget{}; SamplerResPtr m_sampler; SamplerRes m_ownSampler; diff --git a/include/Core/Castor3D/Overlay/FontTexture.hpp b/include/Core/Castor3D/Overlay/FontTexture.hpp index 360e1e95a3..5711c4cd95 100644 --- a/include/Core/Castor3D/Overlay/FontTexture.hpp +++ b/include/Core/Castor3D/Overlay/FontTexture.hpp @@ -141,7 +141,7 @@ namespace castor3d , bool front ) = 0; C3D_API virtual void swapResources() = 0; }; - using DoubleBufferedTextureLayout = DoubleBufferedResourceT< TextureLayout, std::shared_ptr >; + using DoubleBufferedTextureLayout = DoubleBufferedResourceT< TextureLayout, castor::UniquePtr >; class FontTexture : public DoubleBufferedTextureLayout @@ -239,9 +239,9 @@ namespace castor3d return *m_buffer; } - TextureLayoutSPtr getTexture()const + TextureLayoutRPtr getTexture()const { - return getResource(); + return getResource().get(); } SamplerResPtr getSampler()const diff --git a/include/Core/Castor3D/Render/PostEffect/PostEffectSurface.hpp b/include/Core/Castor3D/Render/PostEffect/PostEffectSurface.hpp index 6df3e3d46f..cf7c3a5068 100644 --- a/include/Core/Castor3D/Render/PostEffect/PostEffectSurface.hpp +++ b/include/Core/Castor3D/Render/PostEffect/PostEffectSurface.hpp @@ -96,7 +96,7 @@ namespace castor3d , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & size - , TextureLayoutSPtr colourTexture ); + , TextureLayoutUPtr colourTexture ); /** *\~english *\brief Initialises the surface. @@ -119,7 +119,7 @@ namespace castor3d , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & size - , TextureLayoutSPtr colourTexture + , TextureLayoutUPtr colourTexture , VkFormat depthFormat ); /** *\~english @@ -144,7 +144,7 @@ namespace castor3d , ashes::RenderPass const & renderPass , castor::Size const & size , VkFormat colourFormat - , TextureLayoutSPtr depthTexture ); + , TextureLayoutUPtr depthTexture ); /** *\~english *\brief Initialises the surface. @@ -167,8 +167,8 @@ namespace castor3d , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & size - , TextureLayoutSPtr colourTexture - , TextureLayoutSPtr depthTexture ); + , TextureLayoutUPtr colourTexture + , TextureLayoutUPtr depthTexture ); /** *\~english *\brief Cleans up the surface. @@ -184,10 +184,10 @@ namespace castor3d ashes::FrameBufferPtr frameBuffer; //!\~english The surface colour texture. //!\~french La texture couleur de la surface. - TextureLayoutSPtr colourTexture; + TextureLayoutUPtr colourTexture; //!\~english The surface depth texture. //!\~french La texture profondeur de la surface. - TextureLayoutSPtr depthTexture; + TextureLayoutUPtr depthTexture; //!\~english The surface depth view. //!\~french La vue profondeur de la surface. ashes::ImageView depthView; diff --git a/include/Core/Castor3D/Scene/Background/Background.hpp b/include/Core/Castor3D/Scene/Background/Background.hpp index 71b8dc389b..bb77d0322c 100644 --- a/include/Core/Castor3D/Scene/Background/Background.hpp +++ b/include/Core/Castor3D/Scene/Background/Background.hpp @@ -436,7 +436,7 @@ namespace castor3d bool m_hdr{ true }; bool m_srgb{ false }; Texture m_textureId; - TextureLayoutSPtr m_texture; + TextureLayoutUPtr m_texture; SamplerResPtr m_sampler; std::unique_ptr< IblTextures > m_ibl; bool m_hasIBLSupport; diff --git a/include/Core/Castor3D/Scene/Background/Image.hpp b/include/Core/Castor3D/Scene/Background/Image.hpp index 12b0529df3..2d1814d428 100644 --- a/include/Core/Castor3D/Scene/Background/Image.hpp +++ b/include/Core/Castor3D/Scene/Background/Image.hpp @@ -96,7 +96,7 @@ namespace castor3d , QueueData const & queueData ); private: - TextureLayoutSPtr m_2dTexture; + TextureLayoutUPtr m_2dTexture; castor::Path m_2dTexturePath; float m_ratio; }; diff --git a/include/Core/Castor3D/Scene/Background/Skybox.hpp b/include/Core/Castor3D/Scene/Background/Skybox.hpp index 29a68ca460..f9669d0c60 100644 --- a/include/Core/Castor3D/Scene/Background/Skybox.hpp +++ b/include/Core/Castor3D/Scene/Background/Skybox.hpp @@ -213,7 +213,7 @@ namespace castor3d *\param[in] size * Les dimensions voulues pour la skybox. */ - C3D_API void setEquiTexture( TextureLayoutSPtr texture + C3D_API void setEquiTexture( TextureLayoutUPtr texture , uint32_t size ); /** *\~english @@ -281,7 +281,7 @@ namespace castor3d *\param[in] texture * La texture. */ - C3D_API void setCrossTexture( TextureLayoutSPtr texture ); + C3D_API void setCrossTexture( TextureLayoutUPtr texture ); /** *\copydoc castor3d::SceneBackground::accept */ @@ -329,7 +329,7 @@ namespace castor3d * Mutateurs. */ /**@{*/ - void setTexture( TextureLayoutSPtr texture ) + void setTexture( TextureLayoutUPtr texture ) { m_texture = std::move( texture ); } @@ -357,12 +357,12 @@ namespace castor3d , QueueData const & queueData ); private: - std::array< TextureLayoutSPtr, 6u > m_layerTexture; + std::array< TextureLayoutUPtr, 6u > m_layerTexture; std::array< castor::Path, 6u > m_layerTexturePath; - TextureLayoutSPtr m_equiTexture; + TextureLayoutUPtr m_equiTexture; castor::Path m_equiTexturePath; castor::Size m_equiSize; - TextureLayoutSPtr m_crossTexture; + TextureLayoutUPtr m_crossTexture; castor::Path m_crossTexturePath; }; } diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index 30e2fbe8fc..6b64c9999b 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -168,8 +168,8 @@ namespace castor3d SamplerResPtr sampler{}; SamplerRes ownSampler{}; TargetType targetType{}; - RenderTargetSPtr textureRenderTarget{}; RenderTargetRPtr renderTarget{}; + RenderTargetRPtr textureRenderTarget{}; PassSPtr pass{}; PassComponent * passComponent{}; bool createPass{ true }; diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 34fc8c142e..3ffc5ac16f 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -270,7 +270,7 @@ namespace castor3d return getImageBuffer( *img, allowSRGB, engine.getMaxImageSize() ); } - static TextureLayoutSPtr getTextureLayout( Engine & engine + static TextureLayoutUPtr getTextureLayout( Engine & engine , castor::PxBufferBaseUPtr buffer , castor::String const & name , bool allowCompression @@ -765,10 +765,10 @@ namespace castor3d { if ( !data.interrupted ) { + auto tiles = data.layout->getImage().getPixels()->getTiles(); data.unit->setSampler( data.data->sourceInfo.sampler() ); - data.unit->setTexture( data.layout ); + data.unit->setTexture( std::move( data.layout ) ); auto config = data.data->passConfig.config; - auto tiles = data.layout->getImage().getPixels()->getTiles(); if ( config.tileSet->z <= 1 && tiles->x >= 1 ) { diff --git a/source/Core/Castor3D/Gui/GuiModule.cpp b/source/Core/Castor3D/Gui/GuiModule.cpp index 0321fc1745..72dceb2ec1 100644 --- a/source/Core/Castor3D/Gui/GuiModule.cpp +++ b/source/Core/Castor3D/Gui/GuiModule.cpp @@ -77,7 +77,7 @@ namespace castor3d MaterialRPtr createMaterial( Engine & engine , castor::String const & name - , TextureLayoutSPtr texture ) + , TextureLayoutUPtr texture ) { auto & cache = engine.getMaterialCache(); MaterialResPtr created; @@ -109,7 +109,7 @@ namespace castor3d } TextureUnitSPtr unit = pass->getTextureUnit( 0 ); - unit->setTexture( texture ); + unit->setTexture( std::move( texture ) ); return result.lock().get(); } } diff --git a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp index 1264d21440..c3bee13b54 100644 --- a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp @@ -814,7 +814,7 @@ namespace castor3d //************************************************************************************************ - TextureLayoutSPtr createTextureLayout( Engine const & engine + TextureLayoutUPtr createTextureLayout( Engine const & engine , castor::Path const & relative , castor::Path const & folder , castor::ImageLoaderConfig config ) @@ -831,7 +831,7 @@ namespace castor3d VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, }; - auto texture = std::make_shared< TextureLayout >( *engine.getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , createInfo , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , relative ); @@ -841,7 +841,7 @@ namespace castor3d return texture; } - TextureLayoutSPtr createTextureLayout( Engine const & engine + TextureLayoutUPtr createTextureLayout( Engine const & engine , castor::String const & name , castor::PxBufferBaseUPtr buffer , bool isStatic ) @@ -858,7 +858,7 @@ namespace castor3d , VK_IMAGE_TILING_OPTIMAL , VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT }; log::debug << ( cuT( "Creating " ) + name + cuT( " texture layout.\n" ) ); - auto texture = std::make_shared< TextureLayout >( *engine.getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , createInfo , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , name ); diff --git a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp index 5ab8775636..1d48211bd4 100644 --- a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp @@ -80,9 +80,9 @@ namespace castor3d } } - void TextureUnit::setTexture( TextureLayoutSPtr texture ) + void TextureUnit::setTexture( TextureLayoutUPtr texture ) { - m_texture = texture; + m_texture = std::move( texture ); m_changed = true; if ( m_texture ) @@ -149,7 +149,7 @@ namespace castor3d std::this_thread::sleep_for( 5_ms ); } - m_texture = std::make_shared< TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< TextureLayout >( device.renderSystem , m_renderTarget->getTexture().image , m_renderTarget->getTexture().wholeViewId ); result = true; diff --git a/source/Core/Castor3D/Overlay/FontTexture.cpp b/source/Core/Castor3D/Overlay/FontTexture.cpp index a2e4e3c398..e330c0d2d9 100644 --- a/source/Core/Castor3D/Overlay/FontTexture.cpp +++ b/source/Core/Castor3D/Overlay/FontTexture.cpp @@ -20,7 +20,7 @@ namespace castor3d namespace fonttex { - static TextureLayoutSPtr createTexture( Engine & engine, castor::FontResPtr font ) + static TextureLayoutUPtr createTexture( Engine & engine, castor::FontResPtr font ) { auto fnt = font.lock(); @@ -42,7 +42,7 @@ namespace castor3d , VK_SAMPLE_COUNT_1_BIT , VK_IMAGE_TILING_OPTIMAL , VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT }; - return std::make_shared< TextureLayout >( *engine.getRenderSystem() + return castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , image , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "FontTexture_" ) + fnt->getFaceName() + castor::string::toString( fnt->getHeight() ) ); diff --git a/source/Core/Castor3D/Render/PostEffect/PostEffectSurface.cpp b/source/Core/Castor3D/Render/PostEffect/PostEffectSurface.cpp index e99490f1aa..c725f53915 100644 --- a/source/Core/Castor3D/Render/PostEffect/PostEffectSurface.cpp +++ b/source/Core/Castor3D/Render/PostEffect/PostEffectSurface.cpp @@ -11,7 +11,7 @@ namespace castor3d { namespace postfxsfc { - static TextureLayoutSPtr doCreateTexture( RenderSystem & renderSystem + static TextureLayoutUPtr doCreateTexture( RenderSystem & renderSystem , castor::Size const & size , VkFormat format , uint32_t mipLevels @@ -51,7 +51,7 @@ namespace castor3d image->usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; } - return std::make_shared< TextureLayout >( renderSystem + return castor::makeUnique< TextureLayout >( renderSystem , image , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , std::move( name ) ); @@ -114,13 +114,13 @@ namespace castor3d , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & newSize - , TextureLayoutSPtr newColourTexture ) + , TextureLayoutUPtr newColourTexture ) { return initialise( device , queueData , renderPass , newSize - , newColourTexture + , std::move( newColourTexture ) , nullptr ); } @@ -128,14 +128,14 @@ namespace castor3d , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & newSize - , TextureLayoutSPtr newColourTexture + , TextureLayoutUPtr newColourTexture , VkFormat depthFormat ) { return initialise( device , queueData , renderPass , newSize - , newColourTexture + , std::move( newColourTexture ) , postfxsfc::doCreateTexture( *getEngine()->getRenderSystem() , newSize , depthFormat @@ -149,7 +149,7 @@ namespace castor3d , ashes::RenderPass const & renderPass , castor::Size const & newSize , VkFormat colourFormat - , TextureLayoutSPtr newDepthTexture ) + , TextureLayoutUPtr newDepthTexture ) { return initialise( device , queueData @@ -161,29 +161,29 @@ namespace castor3d , 1u , false , m_debugName + cuT( "_Colour" ) ) - , newDepthTexture ); + , std::move( newDepthTexture ) ); } bool PostEffectSurface::initialise( RenderDevice const & device , QueueData const & queueData , ashes::RenderPass const & renderPass , castor::Size const & newSize - , TextureLayoutSPtr newColourTexture - , TextureLayoutSPtr newDepthTexture ) + , TextureLayoutUPtr newColourTexture + , TextureLayoutUPtr newDepthTexture ) { size = newSize; ashes::ImageViewCRefArray attaches; if ( newColourTexture ) { - colourTexture = newColourTexture; + colourTexture = std::move( newColourTexture ); colourTexture->initialise( device, queueData ); attaches.emplace_back( colourTexture->getDefaultView().getTargetView() ); } if ( newDepthTexture ) { - depthTexture = newDepthTexture; + depthTexture = std::move( newDepthTexture ); depthTexture->initialise( device, queueData ); auto & texture = depthTexture->getTexture(); auto format = texture.getFormat(); diff --git a/source/Core/Castor3D/Scene/Background/Colour.cpp b/source/Core/Castor3D/Scene/Background/Colour.cpp index b3d1435414..06a8cd19fe 100644 --- a/source/Core/Castor3D/Scene/Background/Colour.cpp +++ b/source/Core/Castor3D/Scene/Background/Colour.cpp @@ -50,7 +50,7 @@ namespace castor3d , VK_FORMAT_R32G32B32A32_SFLOAT , VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT }; m_textureId.create(); - m_texture = std::make_shared< TextureLayout >( *engine.getRenderSystem() + m_texture = castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , m_textureId.image , m_textureId.wholeViewId ); } diff --git a/source/Core/Castor3D/Scene/Background/Image.cpp b/source/Core/Castor3D/Scene/Background/Image.cpp index a598ede376..7e4e39d8a5 100644 --- a/source/Core/Castor3D/Scene/Background/Image.cpp +++ b/source/Core/Castor3D/Scene/Background/Image.cpp @@ -79,7 +79,7 @@ namespace castor3d , castor::String const & name ) : SceneBackground{ engine, scene, name + cuT( "Image" ), cuT( "image" ), false } { - m_texture = std::make_shared< TextureLayout >( *engine.getRenderSystem() + m_texture = castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , bgimage::doGetImageCreate( VK_FORMAT_R8G8B8A8_UNORM, { 16u, 16u }, false ) , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "ImageBackground_Dummy" ) ); @@ -105,12 +105,12 @@ namespace castor3d | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT ), }; - auto texture = std::make_shared< TextureLayout >( *getEngine()->getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *getEngine()->getRenderSystem() , image , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "ImageBackground_Colour" ) ); texture->setSource( folder, relative, { false, false, false } ); - m_2dTexture = texture; + m_2dTexture = std::move( texture ); m_2dTexturePath = texture->getImage().getPath(); notifyChanged(); result = true; @@ -248,7 +248,7 @@ namespace castor3d | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ) }; m_textureId.create(); - m_texture = std::make_shared< TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< TextureLayout >( device.renderSystem , m_textureId.image , m_textureId.wholeViewId ); diff --git a/source/Core/Castor3D/Scene/Background/Skybox.cpp b/source/Core/Castor3D/Scene/Background/Skybox.cpp index dd7829303b..9896781e35 100644 --- a/source/Core/Castor3D/Scene/Background/Skybox.cpp +++ b/source/Core/Castor3D/Scene/Background/Skybox.cpp @@ -152,7 +152,7 @@ namespace castor3d , castor::String const & name ) : SceneBackground{ engine, scene, name + cuT( "Skybox" ), cuT( "skybox" ), true } { - m_texture = std::make_shared< TextureLayout >( *engine.getRenderSystem() + m_texture = castor::makeUnique< TextureLayout >( *getScene().getEngine()->getRenderSystem() , skybox::doGetImageCreate( VK_FORMAT_R8G8B8A8_UNORM, { 16u, 16u }, false ) , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "SkyboxBackground_Colour" ) @@ -233,13 +233,13 @@ namespace castor3d , ( VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT ) }; - auto texture = std::make_shared< TextureLayout >( *getScene().getEngine()->getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *getScene().getEngine()->getRenderSystem() , std::move( image ) , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "SkyboxBackground" ) + castor3d::getName( face ) ); texture->setSource( folder, relative, { false, false, false } ); m_layerTexturePath[size_t( face )] = texture->getImage().getPath(); - m_layerTexture[size_t( face )] = texture; + m_layerTexture[size_t( face )] = std::move( texture ); notifyChanged(); } @@ -257,19 +257,19 @@ namespace castor3d , VK_IMAGE_TILING_OPTIMAL , ( VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT ) }; - auto texture = std::make_shared< TextureLayout >( *getScene().getEngine()->getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *getScene().getEngine()->getRenderSystem() , std::move( image ) , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "SkyboxBackgroundEquirectangular" ) ); texture->setSource( folder, relative, { false, false, false } ); - setEquiTexture( texture, size ); + setCrossTexture( std::move( texture ) ); } - void SkyboxBackground::setEquiTexture( TextureLayoutSPtr texture + void SkyboxBackground::setEquiTexture( TextureLayoutUPtr texture , uint32_t size ) { m_equiTexturePath = texture->getImage().getPath(); - m_equiTexture = texture; + m_equiTexture = std::move( texture ); m_equiSize.set( size, size ); notifyChanged(); } @@ -294,18 +294,18 @@ namespace castor3d , ( VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT ) }; - auto texture = std::make_shared< TextureLayout >( *getScene().getEngine()->getRenderSystem() + auto texture = castor::makeUnique< TextureLayout >( *getScene().getEngine()->getRenderSystem() , image , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "SkyboxBackgroundCross" ) ); texture->setSource( folder, relative, { false, false, false } ); - setCrossTexture( texture ); + setCrossTexture( std::move( texture ) ); } - void SkyboxBackground::setCrossTexture( TextureLayoutSPtr texture ) + void SkyboxBackground::setCrossTexture( TextureLayoutUPtr texture ) { m_crossTexturePath = texture->getImage().getPath(); - m_crossTexture = texture; + m_crossTexture = std::move( texture ); notifyChanged(); } @@ -424,7 +424,7 @@ namespace castor3d | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ) }; m_textureId.create(); - m_texture = std::make_shared< TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< TextureLayout >( device.renderSystem , m_textureId.image , m_textureId.wholeViewId ); @@ -497,7 +497,7 @@ namespace castor3d | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ) }; m_textureId.create(); - m_texture = std::make_shared< TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< TextureLayout >( device.renderSystem , m_textureId.image , m_textureId.wholeViewId ); @@ -532,7 +532,7 @@ namespace castor3d | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ) }; m_textureId.create(); - m_texture = std::make_shared< TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< TextureLayout >( device.renderSystem , m_textureId.image , m_textureId.wholeViewId ); diff --git a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp index af1f445be4..51547e2554 100644 --- a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp +++ b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp @@ -56,9 +56,9 @@ namespace diamond_square_terrain { } - castor3d::MeshGeneratorSPtr Generator::create() + castor3d::MeshGeneratorUPtr Generator::create() { - return std::make_shared< Generator >(); + return std::make_unique< Generator >(); } void Generator::doGenerate( castor3d::Mesh & mesh diff --git a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.hpp b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.hpp index 73a2e5c51e..15f910c63f 100644 --- a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.hpp +++ b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.hpp @@ -19,7 +19,7 @@ namespace diamond_square_terrain /** *\copydoc castor3d::MeshGenerator::create */ - static castor3d::MeshGeneratorSPtr create(); + static castor3d::MeshGeneratorUPtr create(); void setBiomes( Biomes biomes ) { diff --git a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp index 83c889d2a8..7b59bc009d 100644 --- a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp +++ b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp @@ -27,14 +27,15 @@ namespace diamond_square_terrain auto & parsingContext = castor3d::getSceneParserContext( context ); auto & pluginContext = parser::getParserContext( context ); auto & factory = parsingContext.scene->getEngine()->getMeshFactory(); - auto generator = std::static_pointer_cast< Generator >( factory.create( Generator::Type ) ); + auto generator = factory.create( Generator::Type ); + auto & dsgen = static_cast< Generator & >( *generator ); std::sort( pluginContext.biomes.begin() , pluginContext.biomes.end() , []( Biome const & lhs, Biome const & rhs ) { return lhs.heightRange.getMin() < rhs.heightRange.getMin(); } ); - generator->setBiomes( pluginContext.biomes ); + dsgen.setBiomes( pluginContext.biomes ); generator->generate( *parsingContext.mesh.lock() , pluginContext.parameters ); } diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp index 4c755ad2a2..086ac41f63 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp @@ -816,7 +816,7 @@ namespace atmosphere_scattering m_transmittance.create(); m_multiScatter.create(); m_textureId.create(); - m_texture = std::make_shared< castor3d::TextureLayout >( device.renderSystem + m_texture = castor::makeUnique< castor3d::TextureLayout >( device.renderSystem , m_textureId.image , m_textureId.wholeViewId ); m_hdr = true; From 2bb8475362433c1f656a8c9aacb467333ebb019e Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 02:08:28 +0200 Subject: [PATCH 20/35] Castor3D: Replaced shared_ptr with unique_ptr for mesh generators. --- include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp | 2 +- include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp | 2 +- include/Core/Castor3D/Model/Mesh/MeshFactory.hpp | 2 +- include/Core/Castor3D/Model/Mesh/MeshGenerator.hpp | 2 +- source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp | 4 ++-- source/Core/Castor3D/Model/Mesh/MeshFactory.cpp | 2 +- source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp | 4 ++-- 22 files changed, 32 insertions(+), 32 deletions(-) diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp index 06d51652a0..66029446a6 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp index 43c99d9b8c..0da49bf0e2 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp index aaa6e35116..6a256ba71a 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp index 92701166d5..3508e9dcb0 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp index b8b24bfb17..d60b0878e4 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp index b92bffaab7..d99a37bac6 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp @@ -23,7 +23,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); /** *\~english *\brief Defines the pattern used to build the projection. diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp index 3d62e2a6b6..ec017c582e 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp b/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp index 989ce667b2..d4433d60d9 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp @@ -24,7 +24,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp index e397bc9679..7412449a51 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp @@ -22,7 +22,7 @@ namespace castor3d /** *\copydoc castor3d::MeshGenerator::create */ - C3D_API static MeshGeneratorSPtr create(); + C3D_API static MeshGeneratorUPtr create(); private: C3D_API virtual void doGenerate( Mesh & mesh diff --git a/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp b/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp index cd2c396f70..f94e6fbf14 100644 --- a/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp +++ b/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp @@ -11,7 +11,7 @@ See LICENSE file in root folder namespace castor3d { class MeshFactory - : public castor::Factory< MeshGenerator, castor::String > + : public castor::Factory< MeshGenerator, castor::String, std::unique_ptr< MeshGenerator > > { public: /** diff --git a/include/Core/Castor3D/Model/Mesh/MeshGenerator.hpp b/include/Core/Castor3D/Model/Mesh/MeshGenerator.hpp index 4a53af26b7..ad1965b8fe 100644 --- a/include/Core/Castor3D/Model/Mesh/MeshGenerator.hpp +++ b/include/Core/Castor3D/Model/Mesh/MeshGenerator.hpp @@ -36,7 +36,7 @@ namespace castor3d *\brief Fonction de création, utilisée par la Factory *\return Un cylindre */ - static MeshGeneratorSPtr create(); + static MeshGeneratorUPtr create(); /** *\~english *\brief Generates the mesh. diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp index fb09bc7f10..acd6b1ba52 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp @@ -15,9 +15,9 @@ namespace castor3d { } - MeshGeneratorSPtr Cone::create() + MeshGeneratorUPtr Cone::create() { - return std::make_shared< Cone >(); + return std::make_unique< Cone >(); } void Cone::doGenerate( Mesh & mesh diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp index 326da15111..37461f256c 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp @@ -14,9 +14,9 @@ namespace castor3d { } - MeshGeneratorSPtr Cube::create() + MeshGeneratorUPtr Cube::create() { - return std::make_shared< Cube >(); + return std::make_unique< Cube >(); } void Cube::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp index b48ec20e5c..9dc3e165e7 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp @@ -16,9 +16,9 @@ namespace castor3d { } - MeshGeneratorSPtr Cylinder::create() + MeshGeneratorUPtr Cylinder::create() { - return std::make_shared< Cylinder >(); + return std::make_unique< Cylinder >(); } void Cylinder::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp index 8bc08482fc..75cc4c7283 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp @@ -18,9 +18,9 @@ namespace castor3d { } - MeshGeneratorSPtr Icosahedron::create() + MeshGeneratorUPtr Icosahedron::create() { - return std::make_shared< Icosahedron >(); + return std::make_unique< Icosahedron >(); } void Icosahedron::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp index 306994cb39..75abe28cf4 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp @@ -12,9 +12,9 @@ namespace castor3d { } - MeshGeneratorSPtr Plane::create() + MeshGeneratorUPtr Plane::create() { - return std::make_shared< Plane >(); + return std::make_unique< Plane >(); } void Plane::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp index 2ef680876c..1d308e6941 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp @@ -13,9 +13,9 @@ namespace castor3d { } - MeshGeneratorSPtr Projection::create() + MeshGeneratorUPtr Projection::create() { - return std::make_shared< Projection >(); + return std::make_unique< Projection >(); } void Projection::setPoints( Pattern< castor::Point3f > const & pattern diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp index dfd45c68e1..e262d67f51 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp @@ -16,9 +16,9 @@ namespace castor3d { } - MeshGeneratorSPtr Sphere::create() + MeshGeneratorUPtr Sphere::create() { - return std::make_shared< Sphere >(); + return std::make_unique< Sphere >(); } void Sphere::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp b/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp index addc16fdf7..fa9297dbe2 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp @@ -17,9 +17,9 @@ namespace castor3d { } - MeshGeneratorSPtr SphereSection::create() + MeshGeneratorUPtr SphereSection::create() { - return std::make_shared< SphereSection >(); + return std::make_unique< SphereSection >(); } void SphereSection::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp index 6d0d1232b9..1237eea0be 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp @@ -17,9 +17,9 @@ namespace castor3d { } - MeshGeneratorSPtr Torus::create() + MeshGeneratorUPtr Torus::create() { - return std::make_shared< Torus >(); + return std::make_unique< Torus >(); } void Torus::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp b/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp index 8dc88ce7d5..86e30cb6da 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp @@ -15,7 +15,7 @@ CU_ImplementCUSmartPtr( castor3d, MeshFactory ) namespace castor3d { MeshFactory::MeshFactory() - : Factory< MeshGenerator, castor::String >{} + : Factory < MeshGenerator, castor::String, std::unique_ptr< MeshGenerator > > {} { registerType( cuT( "cone" ), Cone::create ); registerType( cuT( "cube" ), Cube::create ); diff --git a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp index ba5ffda70a..24c2d9dfb0 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp @@ -21,9 +21,9 @@ namespace castor3d { } - MeshGeneratorSPtr MeshGenerator::create() + MeshGeneratorUPtr MeshGenerator::create() { - return std::make_shared< MeshGenerator >( cuT( "custom" ) ); + return std::make_unique< MeshGenerator >( cuT( "custom" ) ); } void MeshGenerator::generate( Mesh & mesh, Parameters const & parameters ) From 7e010b91bdd72b6f782a1072f33e34a6dcaa28ab Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 13:51:34 +0200 Subject: [PATCH 21/35] Castor3D: Reworked event handlers as unique ptrs. --- include/Core/Castor3D/Cache/ShaderCache.hpp | 2 +- include/Core/Castor3D/Engine.hpp | 2 + .../Castor3D/Event/UserInput/EventHandler.hpp | 17 +- .../Castor3D/Event/UserInput/HandlerEvent.hpp | 6 +- .../Event/UserInput/UserInputEventModule.hpp | 12 +- .../Event/UserInput/UserInputListener.hpp | 41 ++- .../Castor3D/Gui/Controls/CtrlComboBox.hpp | 6 +- .../Castor3D/Gui/Controls/CtrlControl.hpp | 20 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.hpp | 6 +- .../Gui/Controls/CtrlExpandablePanel.hpp | 8 +- .../Core/Castor3D/Gui/Controls/CtrlFrame.hpp | 6 +- .../Gui/Controls/CtrlLayoutControl.hpp | 6 +- .../Castor3D/Gui/Controls/CtrlListBox.hpp | 18 +- .../Castor3D/Gui/Controls/CtrlProgress.hpp | 4 +- .../Castor3D/Gui/Controls/CtrlScrollBar.hpp | 18 +- .../Castor3D/Gui/Controls/CtrlScrollable.hpp | 8 +- .../Core/Castor3D/Gui/Controls/CtrlSlider.hpp | 18 +- include/Core/Castor3D/Gui/ControlsManager.hpp | 44 ++- include/Core/Castor3D/Gui/GuiModule.hpp | 2 +- include/Core/Castor3D/Gui/Gui_Parsers.hpp | 24 +- .../Core/Castor3D/Overlay/DebugOverlays.hpp | 56 +-- .../Core/Castor3D/Render/RenderPipeline.hpp | 2 +- include/Core/Castor3D/Render/RenderWindow.hpp | 15 +- .../ParticleSystem/ComputeParticleSystem.hpp | 2 +- include/Core/CastorUtils/Config/SmartPtr.hpp | 6 + source/Core/Castor3D/Engine.cpp | 7 + .../Event/UserInput/UserInputEventModule.cpp | 12 + .../Event/UserInput/UserInputListener.cpp | 10 +- .../Castor3D/Gui/Controls/CtrlComboBox.cpp | 16 +- .../Castor3D/Gui/Controls/CtrlControl.cpp | 52 +-- .../Core/Castor3D/Gui/Controls/CtrlEdit.cpp | 7 +- .../Gui/Controls/CtrlExpandablePanel.cpp | 20 +- .../Core/Castor3D/Gui/Controls/CtrlFrame.cpp | 15 +- .../Gui/Controls/CtrlLayoutControl.cpp | 7 +- .../Castor3D/Gui/Controls/CtrlListBox.cpp | 48 ++- .../Castor3D/Gui/Controls/CtrlProgress.cpp | 13 +- .../Castor3D/Gui/Controls/CtrlScrollBar.cpp | 68 ++-- .../Castor3D/Gui/Controls/CtrlScrollable.cpp | 44 ++- .../Core/Castor3D/Gui/Controls/CtrlSlider.cpp | 93 +++-- source/Core/Castor3D/Gui/ControlsManager.cpp | 55 +-- source/Core/Castor3D/Gui/Gui_Parsers.cpp | 71 ++-- .../Core/Castor3D/Overlay/DebugOverlays.cpp | 331 ++++++++++++++---- source/Core/Castor3D/Render/RenderWindow.cpp | 6 +- .../Core/Castor3D/Scene/Background/Image.cpp | 2 +- .../Core/Castor3D/Scene/Background/Skybox.cpp | 2 +- .../Text/TextCtrlLayoutControl.cpp | 4 +- .../WaterRendering/WaterRenderPass.cpp | 4 +- tools/GuiCommon/System/SceneObjectsList.cpp | 4 +- 48 files changed, 803 insertions(+), 437 deletions(-) diff --git a/include/Core/Castor3D/Cache/ShaderCache.hpp b/include/Core/Castor3D/Cache/ShaderCache.hpp index aa780b98a3..299389e59b 100644 --- a/include/Core/Castor3D/Cache/ShaderCache.hpp +++ b/include/Core/Castor3D/Cache/ShaderCache.hpp @@ -149,7 +149,7 @@ namespace castor3d struct AutoGeneratedProgram { PipelineFlags flags; - ShaderProgramRPtr program; + ShaderProgramRPtr program{}; }; using ShaderProgramCont = std::vector< AutoGeneratedProgram >; diff --git a/include/Core/Castor3D/Engine.hpp b/include/Core/Castor3D/Engine.hpp index 6b248b8897..fae2621596 100644 --- a/include/Core/Castor3D/Engine.hpp +++ b/include/Core/Castor3D/Engine.hpp @@ -15,6 +15,7 @@ See LICENSE file in root folder #include "Castor3D/Cache/TextureCache.hpp" #include "Castor3D/Event/Frame/FrameEventModule.hpp" #include "Castor3D/Event/UserInput/UserInputEventModule.hpp" +#include "Castor3D/Gui/GuiModule.hpp" #include "Castor3D/Material/MaterialModule.hpp" #include "Castor3D/Material/Pass/PassModule.hpp" #include "Castor3D/Material/Pass/Component/ComponentModule.hpp" @@ -682,6 +683,7 @@ namespace castor3d C3D_API bool hasMeshShaders()const; C3D_API uint32_t getMaxPassTypeCount()const; C3D_API RenderDevice * getRenderDevice()const; + C3D_API ControlsManager * getControlsManager()const; castor::String const & getAppName()const noexcept { diff --git a/include/Core/Castor3D/Event/UserInput/EventHandler.hpp b/include/Core/Castor3D/Event/UserInput/EventHandler.hpp index 21bc5c08f6..a359dc0620 100644 --- a/include/Core/Castor3D/Event/UserInput/EventHandler.hpp +++ b/include/Core/Castor3D/Event/UserInput/EventHandler.hpp @@ -451,27 +451,26 @@ namespace castor3d */ template< class Derived > class NonClientEventHandler - : public std::enable_shared_from_this< Derived > - , public EventHandler + : public EventHandler { protected: using EventHandlerFunction = EventHandler::EventHandlerFunction; using EventQueue = EventHandler::EventQueue; public: - CU_DeclareSmartPtr( Derived ); + using DerivedPtr = Derived *; using ClientMouseFunction = EventHandler::ClientMouseFunction; using ClientKeyboardFunction = EventHandler::ClientKeyboardFunction; using ClientHandlerFunction = EventHandler::ClientHandlerFunction; //!\~english Catcher definition for non client mouse events. //!\~french Définition d'une fonction de traitement d'évènement non client de souris. - using NonClientMouseFunction = std::function< void( DerivedSPtr, MouseEvent const & ) >; + using NonClientMouseFunction = std::function< void( DerivedPtr, MouseEvent const & ) >; //!\~english Catcher definition for non client keyboard events. //!\~french Définition d'une fonction de traitement d'évènement non client de clavier. - using NonClientKeyboardFunction = std::function< void( DerivedSPtr, KeyboardEvent const & ) >; + using NonClientKeyboardFunction = std::function< void( DerivedPtr, KeyboardEvent const & ) >; //!\~english Catcher definition for non client handler events. //!\~french Définition d'une fonction de traitement d'évènement non client de gestionnaire. - using NonClientHandlerFunction = std::function< void( DerivedSPtr, HandlerEvent const & ) >; + using NonClientHandlerFunction = std::function< void( DerivedPtr, HandlerEvent const & ) >; //!\~english Non client mouse event signal definition. //!\~french Définition d'un signal d'évènement non client de souris. using OnNonClientMouseEvent = castor::SignalT< NonClientMouseFunction >; @@ -556,17 +555,17 @@ namespace castor3d private: void doProcessMouseEvent( MouseEventSPtr event )override { - m_ncMouseSlots[size_t( event->getMouseEventType() )]( this->shared_from_this(), *event ); + m_ncMouseSlots[size_t( event->getMouseEventType() )]( static_cast< Derived * >( this ), *event ); } void doProcessKeyboardEvent( KeyboardEventSPtr event )override { - m_ncKeyboardSlots[size_t( event->getKeyboardEventType() )]( this->shared_from_this(), *event ); + m_ncKeyboardSlots[size_t( event->getKeyboardEventType() )]( static_cast< Derived * >( this ), *event ); } void doProcessHandlerEvent( HandlerEventSPtr event )override { - m_ncHandlerSlots[size_t( event->getHandlerEventType() )]( this->shared_from_this(), *event ); + m_ncHandlerSlots[size_t( event->getHandlerEventType() )]( static_cast< Derived * >( this ), *event ); } protected: diff --git a/include/Core/Castor3D/Event/UserInput/HandlerEvent.hpp b/include/Core/Castor3D/Event/UserInput/HandlerEvent.hpp index 29bb65e1d7..e3bc8ff2b7 100644 --- a/include/Core/Castor3D/Event/UserInput/HandlerEvent.hpp +++ b/include/Core/Castor3D/Event/UserInput/HandlerEvent.hpp @@ -23,7 +23,7 @@ namespace castor3d *\param[in] handler Un gestionnaire. */ HandlerEvent( HandlerEventType type - , EventHandler * handler ) + , EventHandlerRPtr handler ) : UserInputEvent{ UserInputEventType::eHandler } , m_handlerEventType{ type } , m_handler{ handler } @@ -45,7 +45,7 @@ namespace castor3d *\~french *\return Le gestionnaire. */ - EventHandler * getHandler()const + EventHandlerRPtr getHandler()const { return m_handler; } @@ -56,7 +56,7 @@ namespace castor3d HandlerEventType const m_handlerEventType; //!\~english The handler. //!\~french Le gestionnaire. - EventHandler * const m_handler; + EventHandlerRPtr const m_handler; }; } diff --git a/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp b/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp index 5cdbdc756f..7f2d6d50a2 100644 --- a/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp +++ b/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp @@ -411,12 +411,12 @@ namespace castor3d */ class UserInputListener; - CU_DeclareSmartPtr( EventHandler ); - CU_DeclareSmartPtr( UserInputEvent ); - CU_DeclareSmartPtr( KeyboardEvent ); - CU_DeclareSmartPtr( MouseEvent ); - CU_DeclareSmartPtr( HandlerEvent ); - CU_DeclareSmartPtr( UserInputListener ); + CU_DeclareCUSmartPtr( castor3d, EventHandler, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, UserInputEvent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, KeyboardEvent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MouseEvent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, HandlerEvent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, UserInputListener, C3D_API ); template< class Derived > class NonClientEventHandler; diff --git a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp index 832ed4236f..f7f622a8f3 100644 --- a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp +++ b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp @@ -77,12 +77,12 @@ namespace castor3d return m_mouse.position; } - inline EventHandler * getActiveControl()const + inline EventHandlerRPtr getActiveControl()const { return m_activeHandler; } - inline EventHandler * getFocusedControl()const + inline EventHandlerRPtr getFocusedControl()const { return m_lastMouseTarget; } @@ -484,10 +484,17 @@ namespace castor3d *\~french *\return Les gestionnaires, de manière thread-safe. */ - inline std::vector< EventHandlerSPtr > doGetHandlers()const + inline std::vector< EventHandlerRPtr > doGetHandlers()const { auto lock( castor::makeUniqueLock( m_mutexHandlers ) ); - return m_handlers; + std::vector< EventHandlerRPtr > result; + + for ( auto & h : m_handlers ) + { + result.push_back( h.get() ); + } + + return result; } /** *\~english @@ -510,7 +517,7 @@ namespace castor3d *\remarks Vous *DEVEZ* appeler cette fonction lors de l'ajout d'un gestionnaire dans vos listes, si vous voulez qu'il soit mis à jour. *\param[in] handler Le gestionnaire. */ - inline void doAddHandler( EventHandlerSPtr handler ) + inline EventHandlerRPtr doAddHandler( EventHandlerUPtr handler ) { auto lock( castor::makeUniqueLock( m_mutexHandlers ) ); @@ -519,7 +526,9 @@ namespace castor3d CU_Exception( "This handler already exists in the listener." ); } - m_handlers.push_back( handler ); + auto result = handler.get(); + m_handlers.push_back( std::move( handler ) ); + return result; } /** *\~english @@ -531,12 +540,18 @@ namespace castor3d */ inline void doRemoveHandlerNL( EventHandler const & handler ) { - m_handlers.erase( std::find_if( std::begin( m_handlers ) + auto it = std::find_if( std::begin( m_handlers ) , std::end( m_handlers ) - , [&handler]( auto lookup ) + , [&handler]( EventHandlerUPtr const & lookup ) { return lookup.get() == &handler; - } ) ); + } ); + + if ( it != m_handlers.end() ) + { + auto h = std::move( *it ); + m_handlers.erase( it ); + } } /** *\~english @@ -563,7 +578,7 @@ namespace castor3d *\param[in] position la position de la souris. *\return Le gestionnaire, \p nullptr si aucun. */ - virtual EventHandler * doGetMouseTargetableHandler( castor::Position const & position )const = 0; + virtual EventHandlerRPtr doGetMouseTargetableHandler( castor::Position const & position )const = 0; /** *copydoc castor3d::UserInputListener::Initialise */ @@ -585,7 +600,7 @@ namespace castor3d mutable std::mutex m_mutexHandlers; //!\~english The handlers array. //!\~french Le tableau de gestionnaires. - std::vector< EventHandlerSPtr > m_handlers; + std::vector< EventHandlerUPtr > m_handlers; //!\~english The associated frame listener. //!\~french Le frame listener associé. FrameListenerSPtr m_frameListener; @@ -594,8 +609,8 @@ namespace castor3d MouseState m_mouse; KeyboardState m_keyboard; bool m_enabled{}; - EventHandler * m_activeHandler{}; - EventHandler * m_lastMouseTarget{}; + EventHandlerRPtr m_activeHandler{}; + EventHandlerRPtr m_lastMouseTarget{}; std::map< castor::String, OnMouseMoveActionFunction > m_onMouseMoveActions; std::map< castor::String, OnClickActionFunction > m_onClickActions; std::map< castor::String, OnSelectActionFunction > m_onSelectActions; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp index 02ddf0dfff..2366680697 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp @@ -204,7 +204,7 @@ namespace castor3d /** Event when a keyboard key is pressed on the active tick or line control *\param[in] event The keyboard event */ - void onNcKeyDown( ControlSPtr control, KeyboardEvent const & event ); + void onNcKeyDown( ControlRPtr control, KeyboardEvent const & event ); /** Switch the combobox list */ @@ -212,8 +212,8 @@ namespace castor3d private: TextOverlayRPtr m_text{}; - ButtonCtrlSPtr m_expand; - ListBoxCtrlSPtr m_choices; + ButtonCtrlRPtr m_expand; + ListBoxCtrlRPtr m_choices; castor::StringArray m_values; int m_selected; OnComboEvent m_signals[size_t( ComboBoxEvent::eCount )]; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index 26f3c060a0..7483052afc 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -113,7 +113,7 @@ namespace castor3d /** Retrieves a control. *\param[in] id The control ID. */ - C3D_API ControlSPtr getChildControl( ControlID id )const; + C3D_API ControlRPtr getChildControl( ControlID id )const; /** Checks if the position is on any border (N, W, S, E). *\param[in] The position to check for. @@ -221,7 +221,7 @@ namespace castor3d return *m_style; } - std::vector< ControlWPtr > const & getChildren()const noexcept + std::vector< ControlRPtr > const & getChildren()const noexcept { return m_children; } @@ -336,7 +336,11 @@ namespace castor3d /** Adds a child control. */ - C3D_API void addChild( ControlSPtr control ); + C3D_API void addChild( ControlRPtr control ); + + /** Removes a child control. + */ + C3D_API void removeChild( ControlRPtr control ); ControlStyle & getBaseStyle() { @@ -418,7 +422,13 @@ namespace castor3d /** Adds a child control. */ - virtual void doAddChild( ControlSPtr control ) + virtual void doAddChild( ControlRPtr control ) + { + } + + /** Removes a child control. + */ + virtual void doRemoveChild( ControlRPtr control ) { } @@ -601,7 +611,7 @@ namespace castor3d castor::Size m_size{}; castor::Point4ui m_borders{}; BorderPanelOverlayRPtr m_background{}; - std::vector< ControlWPtr > m_children{}; + std::vector< ControlRPtr > m_children{}; ControlsManagerWPtr m_ctrlManager{}; bool m_moving{}; bool m_resizingN{}; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp index 0a5598d973..d7dc80a6a8 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp @@ -138,7 +138,11 @@ namespace castor3d /** @copydoc Control::doAddChild */ - void doAddChild( ControlSPtr control )override; + void doAddChild( ControlRPtr control )override; + + /** @copydoc Control::doRemoveChild + */ + void doRemoveChild( ControlRPtr control )override; /** @copydoc Control::doUpdateClientRect */ diff --git a/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp b/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp index c4ae04ad94..8f8036378b 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp @@ -48,6 +48,8 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~ExpandablePanelCtrl()noexcept; + C3D_API void setExpandCaption( castor::U32String v ); C3D_API void setRetractCaption( castor::U32String v ); @@ -151,9 +153,9 @@ namespace castor3d uint32_t m_headerHeight; castor::U32String m_expandCaption{ U"+" }; castor::U32String m_retractCaption{ U"-" }; - PanelCtrlSPtr m_header; - ButtonCtrlSPtr m_expand; - PanelCtrlSPtr m_content; + PanelCtrlRPtr m_header; + ButtonCtrlRPtr m_expand; + PanelCtrlRPtr m_content; OnExpandablePanelEvent m_signals[size_t( ExpandablePanelEvent::eCount )]; OnButtonEventConnection m_expandClickedConnection; bool m_expanded{ true }; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp b/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp index 662654f2fa..c943a6862e 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp @@ -48,6 +48,8 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~FrameCtrl()noexcept; + /** \return The frame style. */ FrameStyle const & getStyle()const noexcept @@ -170,8 +172,8 @@ namespace castor3d private: uint32_t m_headerHeight; - StaticCtrlSPtr m_header; - PanelCtrlSPtr m_content; + StaticCtrlRPtr m_header; + PanelCtrlRPtr m_content; castor::Size m_minSize; }; } diff --git a/include/Core/Castor3D/Gui/Controls/CtrlLayoutControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlLayoutControl.hpp index 7554dba1c2..617b07de5d 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlLayoutControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlLayoutControl.hpp @@ -60,7 +60,11 @@ namespace castor3d /** @copydoc Control::doAddChild */ - void doAddChild( ControlSPtr control )override; + void doAddChild( ControlRPtr control )override; + + /** @copydoc Control::doRemoveChild + */ + void doRemoveChild( ControlRPtr control )override; /** @copydoc Control::doUpdateStyle */ diff --git a/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp index 2721b696b3..dbeb287757 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp @@ -84,6 +84,8 @@ namespace castor3d { } + C3D_API ~ListBoxCtrl()noexcept; + /** Appends a new item *\param[in] value The item */ @@ -165,7 +167,7 @@ namespace castor3d *\param[in] value The control label *\return The static control. */ - StaticCtrlSPtr doCreateItemCtrl( castor::String const & value + StaticCtrlRPtr doCreateItemCtrl( castor::String const & value , uint32_t itemIndex ); /** Creates a sub-control, and it's Castor3D counterpart. @@ -206,24 +208,24 @@ namespace castor3d *\param[in] control The item *\param[in] event The mouse event */ - void onItemMouseEnter( ControlSPtr control, MouseEvent const & event ); + void onItemMouseEnter( ControlRPtr control, MouseEvent const & event ); /** Event when mouse leaves an item *\param[in] control The item *\param[in] event The mouse event */ - void onItemMouseLeave( ControlSPtr control, MouseEvent const & event ); + void onItemMouseLeave( ControlRPtr control, MouseEvent const & event ); /** Event when mouse left button is released on an item *\param[in] control The item *\param[in] event The mouse event */ - void onItemMouseLButtonUp( ControlSPtr control, MouseEvent const & event ); + void onItemMouseLButtonUp( ControlRPtr control, MouseEvent const & event ); /** Event when a keyboard key is pressed on the active tick or line control *\param[in] event The keyboard event */ - void onItemKeyDown( ControlSPtr control, KeyboardEvent const & event ); + void onItemKeyDown( ControlRPtr control, KeyboardEvent const & event ); /** Event when a keyboard key is pressed *\param[in] event The keyboard event @@ -237,9 +239,9 @@ namespace castor3d private: castor::StringArray m_initialValues; castor::StringArray m_values; - int m_selected; - StaticCtrlWPtr m_selectedItem; - std::vector< StaticCtrlSPtr > m_items; + int m_selected{}; + StaticCtrlRPtr m_selectedItem{}; + std::vector< StaticCtrlRPtr > m_items; OnListEvent m_signals[size_t( ListBoxEvent::eCount )]; }; } diff --git a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp index 9903318107..fd58091f3b 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp @@ -147,8 +147,8 @@ namespace castor3d private: TextOverlayRPtr m_title{}; - PanelCtrlSPtr m_container; - PanelCtrlSPtr m_progress; + PanelCtrlRPtr m_container{}; + PanelCtrlRPtr m_progress{}; TextOverlayRPtr m_text{}; castor::RangedValue< int32_t > m_value; }; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp b/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp index 1fc0b8b4e5..85b5c5050b 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp @@ -50,6 +50,8 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~ScrollBarCtrl()noexcept; + /** Sets the range *\param[in] value The new value */ @@ -158,21 +160,21 @@ namespace castor3d *\param[in] control The thumb control *\param[in] event The mouse event */ - void onThumbMouseMove( ControlSPtr control + void onThumbMouseMove( ControlRPtr control , MouseEvent const & event ); /** Event when mouse left button is released over the thumb control *\param[in] control The thumb control *\param[in] event The mouse event */ - void onThumbMouseButtonDown( ControlSPtr control + void onThumbMouseButtonDown( ControlRPtr control , MouseEvent const & event ); /** Event when mouse left button is released over the thumb control *\param[in] control The thumb control *\param[in] event The mouse event */ - void onThumbMouseButtonUp( ControlSPtr control + void onThumbMouseButtonUp( ControlRPtr control , MouseEvent const & event ); /** Event when a keyboard key is pressed @@ -184,7 +186,7 @@ namespace castor3d *\param[in] control The control *\param[in] event The keyboard event */ - void onNcKeyDown( ControlSPtr control + void onNcKeyDown( ControlRPtr control , KeyboardEvent const & event ); /** Updates the mouse position @@ -207,10 +209,10 @@ namespace castor3d private: OnScrollBarEvent m_signals[size_t( ScrollBarEvent::eCount )]; - ButtonCtrlSPtr m_begin; - PanelCtrlSPtr m_bar; - PanelCtrlSPtr m_thumb; - ButtonCtrlSPtr m_end; + ButtonCtrlRPtr m_begin; + PanelCtrlRPtr m_bar; + PanelCtrlRPtr m_thumb; + ButtonCtrlRPtr m_end; castor::RangedValue< float > m_value; castor::Range< uint32_t > m_totalRange; bool m_scrolling; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp index a3f9d248cd..95d657df5f 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlScrollable.hpp @@ -65,6 +65,10 @@ namespace castor3d */ C3D_API void registerControl( Control & control ); + /** Updates total scrollable content dimensions. + */ + C3D_API void unregisterControl( Control & control ); + /** Updates total scrollable content dimensions. */ C3D_API void updateTotalSize( castor::Size const & size ); @@ -109,8 +113,8 @@ namespace castor3d private: Control & m_target; ScrollableStyleRPtr m_scrollableStyle{}; - ScrollBarCtrlSPtr m_verticalScrollBar{}; - ScrollBarCtrlSPtr m_horizontalScrollBar{}; + ScrollBarCtrlRPtr m_verticalScrollBar{}; + ScrollBarCtrlRPtr m_horizontalScrollBar{}; PanelOverlayRPtr m_corner{}; std::map< ControlRPtr, ScrolledControl > m_controls{}; OnScrollBarEventConnection m_onVerticalThumbRelease{}; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp b/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp index 13de4da494..32d841b19a 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp @@ -47,6 +47,8 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); + C3D_API ~SliderCtrl()noexcept; + /** sets the range *\param[in] value The new value */ @@ -152,21 +154,21 @@ namespace castor3d *\param[in] control The tick control *\param[in] event The mouse event */ - void onTickMouseMove( ControlSPtr control + void onTickMouseMove( ControlRPtr control , MouseEvent const & event ); /** Event when mouse left button is released over the tick control *\param[in] control The tick control *\param[in] event The mouse event */ - void onTickMouseButtonDown( ControlSPtr control + void onTickMouseButtonDown( ControlRPtr control , MouseEvent const & event ); /** Event when mouse left button is released over the tick control *\param[in] control The tick control *\param[in] event The mouse event */ - void onTickMouseButtonUp( ControlSPtr control + void onTickMouseButtonUp( ControlRPtr control , MouseEvent const & event ); /** Event when a keyboard key is pressed @@ -177,7 +179,7 @@ namespace castor3d /** Event when a keyboard key is pressed on the active tick or line control *\param[in] event The keyboard event */ - void onNcKeyDown( ControlSPtr control + void onNcKeyDown( ControlRPtr control , KeyboardEvent const & event ); /** Updates the tick position @@ -192,10 +194,10 @@ namespace castor3d private: castor::RangedValue< int32_t > m_value; - bool m_scrolling; - castor::Position m_mouse; - StaticCtrlWPtr m_line; - StaticCtrlWPtr m_tick; + bool m_scrolling{}; + castor::Position m_mouse{}; + StaticCtrlRPtr m_line{}; + StaticCtrlRPtr m_tick{}; OnSliderEvent m_signals[size_t( SliderEvent::eCount )]; }; } diff --git a/include/Core/Castor3D/Gui/ControlsManager.hpp b/include/Core/Castor3D/Gui/ControlsManager.hpp index 027528dcc2..c6f8fd7bcc 100644 --- a/include/Core/Castor3D/Gui/ControlsManager.hpp +++ b/include/Core/Castor3D/Gui/ControlsManager.hpp @@ -123,23 +123,41 @@ namespace castor3d /**@name Controls management */ //@{ + /** Adds a control that still needs to be created. + *\param[in] control + * The control + */ + C3D_API ControlRPtr registerControl( ControlUPtr control ); + + template< typename ControlT > + ControlT * registerControlT( castor::UniquePtr< ControlT > control ) + { + return &static_cast< ControlT & >( *registerControl( castor::ptrCast< Control >( control ) ) ); + } + + /** Removes a control that has been destroyed. + *\param[in] control + * The control + */ + C3D_API void unregisterControl( Control & control ); + /** Creates the given control's overlays and binds its callbacks to appropriate events *\param[in] control * The control */ - C3D_API void create( ControlSPtr control ); + C3D_API void create( ControlRPtr control ); /** Destroys the given control's overlays and unbinds its callbacks from appropriate events. *\param[in] control * The control. */ - C3D_API void destroy( ControlSPtr control ); + C3D_API void destroy( ControlRPtr control ); /** Adds a control that can an event target *\param[in] control * The control */ - C3D_API void addControl( ControlSPtr control ); + C3D_API void addControl( ControlRPtr control ); /** Removes a control *\param[in] id @@ -153,7 +171,7 @@ namespace castor3d *\return * The control. */ - C3D_API ControlSPtr getControl( ControlID id )const; + C3D_API ControlRPtr getControl( ControlID id )const; /** Retrieves a control. *\param[in] name @@ -161,12 +179,12 @@ namespace castor3d *\return * The control. */ - C3D_API ControlSPtr findControl( castor::String const & name )const; + C3D_API ControlRPtr findControl( castor::String const & name )const; /** \return * The root controls. */ - C3D_API std::vector< Control * > getRootControls()const; + C3D_API std::vector< ControlRPtr > getRootControls()const; //@} @@ -282,7 +300,7 @@ namespace castor3d *\param[in] position * The mouse position */ - EventHandler * doGetMouseTargetableHandler( castor::Position const & position )const override; + EventHandlerRPtr doGetMouseTargetableHandler( castor::Position const & position )const override; /** Updates the z-index ordered controls array */ @@ -291,16 +309,16 @@ namespace castor3d /** \return * The controls by z-index. */ - std::vector< Control * > doGetControlsByZIndex()const; + std::vector< ControlRPtr > doGetControlsByZIndex()const; /** Sets the controls by z-index. */ - void doSetControlsByZIndex( std::vector< Control * > v ); + void doSetControlsByZIndex( std::vector< ControlRPtr > v ); /** \return * The controls by ID. */ - std::map< ControlID, ControlWPtr > doGetControlsById()const; + std::map< ControlID, ControlRPtr > doGetControlsById()const; /** Marks the manager as to be updated. */ @@ -311,10 +329,10 @@ namespace castor3d private: mutable std::mutex m_mutexControlsById; - std::map< ControlID, ControlWPtr > m_controlsById; - std::vector< Control * > m_rootControls; + std::map< ControlID, ControlRPtr > m_controlsById; + std::vector< ControlRPtr > m_rootControls; mutable std::mutex m_mutexControlsByZIndex; - mutable std::vector< Control * > m_controlsByZIndex; + mutable std::vector< ControlRPtr > m_controlsByZIndex; mutable std::atomic< CpuFrameEvent * > m_event{}; std::map< castor::String, ThemeUPtr > m_themes; std::map< Control const *, OnButtonEventConnection > m_onButtonClicks; diff --git a/include/Core/Castor3D/Gui/GuiModule.hpp b/include/Core/Castor3D/Gui/GuiModule.hpp index a94a331152..b06e82ad2b 100644 --- a/include/Core/Castor3D/Gui/GuiModule.hpp +++ b/include/Core/Castor3D/Gui/GuiModule.hpp @@ -463,7 +463,7 @@ namespace castor3d CU_DeclareCUSmartPtr( castor3d, SliderStyle, C3D_API ); CU_DeclareCUSmartPtr( castor3d, StaticStyle, C3D_API ); - using ControlArray = std::vector< ControlSPtr >; + using ControlArray = std::vector< ControlRPtr >; template< typename TypeT > concept ControlFlagTypeT = ( std::is_same_v< TypeT, ControlFlagType > diff --git a/include/Core/Castor3D/Gui/Gui_Parsers.hpp b/include/Core/Castor3D/Gui/Gui_Parsers.hpp index e736332498..d6e48c440e 100644 --- a/include/Core/Castor3D/Gui/Gui_Parsers.hpp +++ b/include/Core/Castor3D/Gui/Gui_Parsers.hpp @@ -16,22 +16,22 @@ namespace castor3d { struct GuiParserContext { - std::stack< ControlSPtr > parents{}; + std::stack< ControlRPtr > parents{}; std::stack< ControlStyleRPtr > styles{}; std::stack< StylesHolderRPtr > stylesHolder{}; Engine * engine{}; castor::String controlName{}; - ButtonCtrlSPtr button{}; - ComboBoxCtrlSPtr combo{}; - EditCtrlSPtr edit{}; - ListBoxCtrlSPtr listbox{}; - SliderCtrlSPtr slider{}; - StaticCtrlSPtr staticTxt{}; - PanelCtrlSPtr panel{}; - ProgressCtrlSPtr progress{}; - ExpandablePanelCtrlSPtr expandablePanel{}; - FrameCtrlSPtr frame{}; - ScrollableCtrlSPtr scrollable{}; + ButtonCtrlRPtr button{}; + ComboBoxCtrlRPtr combo{}; + EditCtrlRPtr edit{}; + ListBoxCtrlRPtr listbox{}; + SliderCtrlRPtr slider{}; + StaticCtrlRPtr staticTxt{}; + PanelCtrlRPtr panel{}; + ProgressCtrlRPtr progress{}; + ExpandablePanelCtrlRPtr expandablePanel{}; + FrameCtrlRPtr frame{}; + ScrollableCtrlRPtr scrollable{}; ThemeRPtr theme{}; ButtonStyleRPtr buttonStyle{}; ComboBoxStyleRPtr comboStyle{}; diff --git a/include/Core/Castor3D/Overlay/DebugOverlays.hpp b/include/Core/Castor3D/Overlay/DebugOverlays.hpp index 161b9dcfe4..0564338d46 100644 --- a/include/Core/Castor3D/Overlay/DebugOverlays.hpp +++ b/include/Core/Castor3D/Overlay/DebugOverlays.hpp @@ -157,23 +157,23 @@ namespace castor3d public: DebugPanel( DebugPanel const & ) = delete; DebugPanel & operator=( DebugPanel const & ) = delete; - DebugPanel( DebugPanel && ) = default; - DebugPanel & operator=( DebugPanel && ) = delete; + DebugPanel & operator=( DebugPanel && )noexcept = delete; DebugPanel( castor::String const & name , castor::String const & label , Engine & engine , PanelCtrl & parent , std::function< castor::String() > value ); - ~DebugPanel(); + DebugPanel( DebugPanel && rhs )noexcept; + ~DebugPanel()noexcept; void update(); protected: Engine & m_engine; std::function< castor::String() > m_v; - PanelCtrlSPtr m_panel; - StaticCtrlSPtr m_label; - StaticCtrlSPtr m_value; + PanelCtrlRPtr m_panel; + StaticCtrlRPtr m_label; + StaticCtrlRPtr m_value; }; class DebugPanels @@ -183,12 +183,12 @@ namespace castor3d public: DebugPanels( DebugPanels const & ) = delete; DebugPanels & operator=( DebugPanels const & ) = delete; - DebugPanels( DebugPanels && ) = default; - DebugPanels & operator=( DebugPanels && ) = delete; + DebugPanels & operator=( DebugPanels && )noexcept = delete; DebugPanels( castor::String const & title , Engine & engine , PanelCtrl & parent ); - ~DebugPanels(); + DebugPanels( DebugPanels && rhs )noexcept; + ~DebugPanels()noexcept; void update(); uint32_t updatePosition( uint32_t y ); @@ -198,8 +198,8 @@ namespace castor3d private: Engine & m_engine; - ExpandablePanelCtrlSPtr m_panel; - StaticCtrlSPtr m_title; + ExpandablePanelCtrlRPtr m_panel; + StaticCtrlRPtr m_title; DebugPanelArray m_panels; }; @@ -209,7 +209,7 @@ namespace castor3d { public: explicit MainDebugPanel( Engine & engine ); - ~MainDebugPanel(); + ~MainDebugPanel()noexcept; void update(); void setVisible( bool visible ); void addTimePanel( castor::String const & name @@ -227,7 +227,7 @@ namespace castor3d private: Engine & m_engine; - PanelCtrlSPtr m_panel; + PanelCtrlRPtr m_panel; DebugPanelsPtr m_times; DebugPanelsPtr m_fps; DebugPanelsPtr m_counts; @@ -239,21 +239,21 @@ namespace castor3d struct TimeOverlays { castor::Nanoseconds time{ 0_ns }; - StaticCtrlSPtr name; - StaticCtrlSPtr value; + StaticCtrlRPtr name; + StaticCtrlRPtr value; }; public: PassOverlays( PassOverlays const & ) = delete; PassOverlays & operator=( PassOverlays const & ) = delete; - PassOverlays( PassOverlays && ) = default; - PassOverlays & operator=( PassOverlays && ) = delete; + PassOverlays & operator=( PassOverlays && )noexcept = delete; PassOverlays( Engine & engine , PanelCtrl & parent , castor::String const & name , uint32_t leftOffset , uint32_t index ); - ~PassOverlays(); + PassOverlays( PassOverlays && rhs )noexcept; + ~PassOverlays()noexcept; void retrieveGpuTime(); void compute(); void update( uint32_t & top ); @@ -280,8 +280,8 @@ namespace castor3d castor::String m_name; bool m_visible{ true }; std::map< FramePassTimer *, crg::OnFramePassDestroyConnection > m_timers; - PanelCtrlSPtr m_panel; - StaticCtrlSPtr m_passName; + PanelCtrlRPtr m_panel; + StaticCtrlRPtr m_passName; TimeOverlays m_cpu; TimeOverlays m_gpu; }; @@ -297,22 +297,22 @@ namespace castor3d struct TimeOverlays { castor::Nanoseconds time{ 0_ns }; - StaticCtrlSPtr name; - StaticCtrlSPtr value; + StaticCtrlRPtr name; + StaticCtrlRPtr value; }; public: CategoryOverlays( CategoryOverlays const & ) = delete; CategoryOverlays & operator=( CategoryOverlays const & ) = delete; - CategoryOverlays( CategoryOverlays && ) = default; - CategoryOverlays & operator=( CategoryOverlays && ) = default; CategoryOverlays(); CategoryOverlays( castor::String const & category , Engine & engine , PanelCtrl & parent , uint32_t leftOffset , bool expanded = false ); - ~CategoryOverlays(); + CategoryOverlays & operator=( CategoryOverlays && rhs )noexcept; + CategoryOverlays( CategoryOverlays && rhs )noexcept; + ~CategoryOverlays()noexcept; void addTimer( castor::String const & name , castor::StringArray & categories , FramePassTimer & timer ); @@ -362,8 +362,8 @@ namespace castor3d bool m_parentVisible{ true }; std::vector< PassOverlaysPtr > m_passes{}; CategoriesOverlays m_categories{}; - ExpandablePanelCtrlSPtr m_container{}; - StaticCtrlSPtr m_name{}; + ExpandablePanelCtrlRPtr m_container{}; + StaticCtrlRPtr m_name{}; TimeOverlays m_cpu{}; TimeOverlays m_gpu{}; }; @@ -398,7 +398,7 @@ namespace castor3d castor::PreciseTimer m_frameTimer{}; castor::PreciseTimer m_debugTimer{}; std::unique_ptr< MainDebugPanel > m_debugPanel; - PanelCtrlSPtr m_passesContainer; + PanelCtrlRPtr m_passesContainer; CategoryOverlays m_renderPasses; std::array< castor::Nanoseconds, FrameSamplesCount > m_framesTimes{}; uint32_t m_frameIndex{ 0 }; diff --git a/include/Core/Castor3D/Render/RenderPipeline.hpp b/include/Core/Castor3D/Render/RenderPipeline.hpp index 382bdc16cd..f2e1d10a56 100644 --- a/include/Core/Castor3D/Render/RenderPipeline.hpp +++ b/include/Core/Castor3D/Render/RenderPipeline.hpp @@ -257,7 +257,7 @@ namespace castor3d ashes::PipelineRasterizationStateCreateInfo m_rsState; ashes::PipelineColorBlendStateCreateInfo m_blState; ashes::PipelineMultisampleStateCreateInfo m_msState; - ShaderProgramRPtr m_program; + ShaderProgramRPtr m_program{}; PipelineFlags m_flags; PipelineBaseHash m_flagsHash; std::vector< ashes::PipelineVertexInputStateCreateInfo > m_vertexLayouts; diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index 5549964bf9..19dc12c202 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -115,9 +115,9 @@ namespace castor3d } private: - EventHandler * doGetMouseTargetableHandler( castor::Position const & position )const override + EventHandlerRPtr doGetMouseTargetableHandler( castor::Position const & position )const override { - return m_window->getEventHandler().get(); + return m_handler; } /**@name General */ @@ -128,7 +128,7 @@ namespace castor3d */ bool doInitialise()override { - doAddHandler( m_window->getEventHandler() ); + m_handler = doAddHandler( castor::makeUniqueDerived< EventHandler, EvtHandler >( *m_window ) ); return true; } /** @@ -136,11 +136,12 @@ namespace castor3d */ void doCleanup()override { - doRemoveHandler( *m_window->getEventHandler() ); + doRemoveHandler( *m_handler ); } private: RenderWindow * m_window; + EventHandlerRPtr m_handler{}; }; public: @@ -448,9 +449,9 @@ namespace castor3d return *m_progressBar; } - EventHandlerSPtr getEventHandler() + EventHandlerRPtr getEventHandler() { - return m_evtHandler; + return m_evtHandler.get(); } /**@}*/ /** @@ -534,7 +535,7 @@ namespace castor3d private: static uint32_t s_nbRenderWindows; - std::shared_ptr< EvtHandler > m_evtHandler; + std::unique_ptr< EvtHandler > m_evtHandler; uint32_t m_index{}; RenderDevice & m_device; ashes::SurfacePtr m_surface; diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp index 22e218ea5a..0b9b6ed09a 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.hpp @@ -116,7 +116,7 @@ namespace castor3d protected: ParticleDeclaration m_inputs; - ShaderProgramRPtr m_program; + ShaderProgramRPtr m_program{}; UniformBufferOffsetT< Configuration > m_ubo; std::array< ashes::BufferPtr< uint8_t >, 2 > m_particlesStorages; ashes::BufferPtr< uint32_t > m_generatedCountBuffer; diff --git a/include/Core/CastorUtils/Config/SmartPtr.hpp b/include/Core/CastorUtils/Config/SmartPtr.hpp index d3a7640fe0..ef0e597e63 100644 --- a/include/Core/CastorUtils/Config/SmartPtr.hpp +++ b/include/Core/CastorUtils/Config/SmartPtr.hpp @@ -53,6 +53,12 @@ namespace castor { return UniquePtr< TypeT >( new TypeT( std::forward< ParamsT >( params )... ) ); } + + template< typename TypeU, typename TypeT > + UniquePtr< TypeU > ptrCast( UniquePtr< TypeT > & ptr ) + { + return UniquePtr< TypeU >( &static_cast< TypeU & >( *ptr.release() ) ); + } } #define CU_DeclareCUSmartPtr( nmspc, class_name, expdecl )\ diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index ca4d5ad10b..ef01b2ec0e 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -661,6 +661,13 @@ namespace castor3d : nullptr; } + ControlsManager * Engine::getControlsManager()const + { + return m_userInputListener + ? &static_cast< ControlsManager & >( *m_userInputListener ) + : nullptr; + } + castor::RgbaColour Engine::getNextRainbowColour()const { static float currentColourHue{ 0.0f }; diff --git a/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp b/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp index 15761a2806..3cce952e3d 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp @@ -1,5 +1,17 @@ #include "Castor3D/Event/UserInput/UserInputEventModule.hpp" +#include "Castor3D/Event/UserInput/EventHandler.hpp" +#include "Castor3D/Event/UserInput/HandlerEvent.hpp" +#include "Castor3D/Event/UserInput/KeyboardEvent.hpp" +#include "Castor3D/Event/UserInput/MouseEvent.hpp" +#include "Castor3D/Event/UserInput/UserInputEvent.hpp" + +CU_ImplementCUSmartPtr( castor3d, EventHandler ) +CU_ImplementCUSmartPtr( castor3d, HandlerEvent ) +CU_ImplementCUSmartPtr( castor3d, KeyboardEvent ) +CU_ImplementCUSmartPtr( castor3d, MouseEvent ) +CU_ImplementCUSmartPtr( castor3d, UserInputEvent ) + namespace castor3d { castor::String getName( UserInputEventType value ) diff --git a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp index 795b167811..fc8a4af801 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp @@ -11,6 +11,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, UserInputListener ) + namespace castor3d { UserInputListener::UserInputListener( Engine & engine, castor::String const & name ) @@ -60,8 +62,8 @@ namespace castor3d while ( it != m_handlers.end() ) { - auto handler = *it; - doRemoveHandlerNL( *handler ); + auto & handler = **it; + doRemoveHandlerNL( handler ); it = m_handlers.begin(); } } @@ -283,7 +285,7 @@ namespace castor3d { auto it = std::find_if( m_handlers.begin() , m_handlers.end() - , [&handler]( EventHandlerSPtr const & lookup ) + , [&handler]( EventHandlerUPtr const & lookup ) { return lookup->getName() == handler; } ); @@ -298,7 +300,7 @@ namespace castor3d { auto it = std::find_if( m_handlers.begin() , m_handlers.end() - , [&handler]( EventHandlerSPtr const & lookup ) + , [&handler]( EventHandlerUPtr const & lookup ) { return lookup->getName() == handler; } ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp index 34cf942eeb..ef850d59cc 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp @@ -56,13 +56,13 @@ namespace castor3d , m_values{ values } , m_selected{ selected } { - m_expand = std::make_shared< ButtonCtrl >( m_scene + m_expand = getEngine().getControlsManager()->registerControlT( castor::makeUnique< ButtonCtrl >( m_scene , cuT( "Expand" ) , &style->getExpandStyle() , this , U"+" , castor::Position{ int32_t( size->x - size->y ), 0 } - , castor::Size{ size->y, size->y } ); + , castor::Size{ size->y, size->y } ) ); m_expand->setVisible( visible ); m_expandClickedConnection = m_expand->connect( ButtonEvent::eClicked , [this]() @@ -70,7 +70,7 @@ namespace castor3d doSwitchExpand(); } ); - m_choices = std::make_shared< ListBoxCtrl >( m_scene + m_choices = getEngine().getControlsManager()->registerControlT( castor::makeUnique< ListBoxCtrl >( m_scene , cuT( "Choices" ) , &style->getElementsStyle() , this @@ -79,7 +79,7 @@ namespace castor3d , castor::Position{ 0, int32_t( size->y ) } , castor::Size{ size->x - size->y, ~( 0u ) } , uint64_t( ControlFlag::eAlwaysOnTop ) - , false ); + , false ) ); m_choicesSelectedConnection = m_choices->connect( ListBoxEvent::eSelected , [this]( int sel ) { @@ -119,6 +119,10 @@ namespace castor3d getEngine().removeOverlay( getName() + cuT( "/Text" ), true ); } } + + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_choices ); + manager.unregisterControl( *m_expand ); } void ComboBoxCtrl::appendItem( castor::String const & value ) @@ -188,7 +192,7 @@ namespace castor3d onKeyDown( event ); } ); NonClientEventHandler::connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control + , [this]( ControlRPtr control , KeyboardEvent const & event ) { onNcKeyDown( control, event ); @@ -310,7 +314,7 @@ namespace castor3d } } - void ComboBoxCtrl::onNcKeyDown( ControlSPtr control, KeyboardEvent const & event ) + void ComboBoxCtrl::onNcKeyDown( ControlRPtr control, KeyboardEvent const & event ) { onKeyDown( event ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index 87e4ccbf9b..6c5a6bc55e 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -219,16 +219,13 @@ namespace castor3d return visible; } - ControlSPtr Control::getChildControl( ControlID id )const + ControlRPtr Control::getChildControl( ControlID id )const { auto it = std::find_if( std::begin( m_children ) , std::end( m_children ) - , [&id]( ControlWPtr lookup ) + , [&id]( ControlRPtr lookup ) { - auto ctrl = lookup.lock(); - return ctrl - ? ( ctrl->getId() == id ) - : false; + return lookup ? ( lookup->getId() == id ) : false; } ); if ( it == m_children.end() ) @@ -236,7 +233,7 @@ namespace castor3d return nullptr; } - return it->lock(); + return *it; } std::array< bool, 4u > Control::isInResizeRange( castor::Position const & position )const @@ -310,9 +307,9 @@ namespace castor3d { m_ctrlManager = ctrlManager; - if ( ControlRPtr parent = getParent() ) + if ( auto parent = getParent() ) { - parent->addChild( shared_from_this() ); + parent->addChild( this ); } setBackgroundMaterial( m_style->getBackgroundMaterial() ); @@ -325,23 +322,39 @@ namespace castor3d void Control::destroy() { doDestroy(); + + if ( auto parent = getParent() ) + { + parent->removeChild( this ); + } } - void Control::addChild( ControlSPtr control ) + void Control::addChild( ControlRPtr control ) { m_children.push_back( control ); doAddChild( control ); } + void Control::removeChild( ControlRPtr control ) + { + auto it = std::find( m_children.begin(), m_children.end(), control ); + + if ( it != m_children.end() ) + { + doRemoveChild( control ); + m_children.erase( it ); + } + } + void Control::adjustZIndex( uint32_t offset ) { auto level = doGetBackground().getLevel(); doGetBackground().setOrder( level + offset, 0u ); doAdjustZIndex( offset ); - for ( auto child : m_children ) + for ( auto control : m_children ) { - if ( auto control = child.lock() ) + if ( control ) { control->adjustZIndex( offset ); } @@ -356,8 +369,7 @@ namespace castor3d , m_children.end() , []( auto const & lookup ) { - auto control = lookup.lock(); - return control ? control->isMovable() : false; + return lookup ? lookup->isMovable() : false; } ); auto realIndex = &index; @@ -380,13 +392,13 @@ namespace castor3d doUpdateZIndex( ( *realIndex ) ); std::vector< Control * > scrollbars; - for ( auto child : m_children ) + for ( auto control : m_children ) { - if ( auto control = child.lock() ) + if ( control ) { if ( control->getType() == ControlType::eScrollBar ) { - scrollbars.push_back( control.get() ); + scrollbars.push_back( control ); } else { @@ -408,13 +420,13 @@ namespace castor3d std::vector< Control * > scrollbars; auto maxIndex = findex; - for ( auto child : m_children ) + for ( auto control : m_children ) { - if ( auto control = child.lock() ) + if ( control ) { if ( control->getType() == ControlType::eScrollBar ) { - scrollbars.push_back( control.get() ); + scrollbars.push_back( control ); } else { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp index f88bd8ef5c..f2d94adef0 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp @@ -223,11 +223,16 @@ namespace castor3d getControlsManager()->disconnectEvents( *this ); } - void EditCtrl::doAddChild( ControlSPtr control ) + void EditCtrl::doAddChild( ControlRPtr control ) { registerControl( *control ); } + void EditCtrl::doRemoveChild( ControlRPtr control ) + { + unregisterControl( *control ); + } + castor::Point4ui EditCtrl::doUpdateClientRect( castor::Point4ui const & clientRect ) { return updateScrollableClientRect( clientRect ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp b/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp index b65359e6a6..12fb460a3b 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp @@ -54,25 +54,25 @@ namespace castor3d , flags , visible } , m_headerHeight{ headerHeight } - , m_header{ std::make_shared< PanelCtrl >( m_scene + , m_header{ getEngine().getControlsManager()->registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Header" ) , &style->getHeaderStyle() , this , castor::Position{ 0, 0 } - , castor::Size{ size->x - m_headerHeight, m_headerHeight } ) } - , m_expand{ std::make_shared< ButtonCtrl >( m_scene + , castor::Size{ size->x - m_headerHeight, m_headerHeight } ) ) } + , m_expand{ getEngine().getControlsManager()->registerControlT( castor::makeUnique< ButtonCtrl >( m_scene , cuT( "Expand" ) , &style->getExpandStyle() , this , m_retractCaption , castor::Position{ int32_t( size->x - m_headerHeight ), 0 } - , castor::Size{ m_headerHeight, m_headerHeight } ) } - , m_content{ std::make_shared< PanelCtrl >( m_scene + , castor::Size{ m_headerHeight, m_headerHeight } ) ) } + , m_content{ getEngine().getControlsManager()->registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Content" ) , &style->getContentStyle() , this , castor::Position{ 0, int32_t( m_headerHeight ) } - , castor::Size{ size->x, size->y - m_headerHeight } ) } + , castor::Size{ size->x, size->y - m_headerHeight } ) ) } , m_expanded{ expanded } { setBorderSize( { 0u, 0u, 0u, 0u } ); @@ -88,6 +88,14 @@ namespace castor3d setStyle( style ); } + ExpandablePanelCtrl::~ExpandablePanelCtrl()noexcept + { + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_content ); + manager.unregisterControl( *m_expand ); + manager.unregisterControl( *m_header ); + } + void ExpandablePanelCtrl::setExpandCaption( castor::U32String v ) { m_expandCaption = std::move( v ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp b/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp index aa6e9b71b6..fa497af2d8 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp @@ -54,19 +54,19 @@ namespace castor3d , flags | ControlFlag::eMovable | ControlFlag::eResizable , visible } , m_headerHeight{ headerHeight } - , m_header{ std::make_shared< StaticCtrl >( m_scene + , m_header{ getEngine().getControlsManager()->registerControlT( castor::makeUnique< StaticCtrl >( m_scene , cuT( "Header" ) , &style->getHeaderStyle() , this , castor::string::toU32String( name ) , castor::Position{ 0, 0 } - , castor::Size{ size->x - m_headerHeight, m_headerHeight } ) } - , m_content{ std::make_shared< PanelCtrl >( m_scene + , castor::Size{ size->x - m_headerHeight, m_headerHeight } ) ) } + , m_content{ getEngine().getControlsManager()->registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Content" ) , &style->getContentStyle() , this , castor::Position{ 0, int32_t( m_headerHeight ) } - , castor::Size{ size->x, size->y - m_headerHeight } ) } + , castor::Size{ size->x, size->y - m_headerHeight } ) ) } { setBorderSize( { 0u, 0u, 0u, 0u } ); m_header->setVisible( visible ); @@ -75,6 +75,13 @@ namespace castor3d setStyle( style ); } + FrameCtrl::~FrameCtrl()noexcept + { + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_content ); + manager.unregisterControl( *m_header ); + } + void FrameCtrl::doUpdateStyle() { auto & style = getStyle(); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp index 0a404a068b..fe09b305a0 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp @@ -71,11 +71,16 @@ namespace castor3d destroyScrollBars(); } - void LayoutControl::doAddChild( ControlSPtr control ) + void LayoutControl::doAddChild( ControlRPtr control ) { registerControl( *control ); } + void LayoutControl::doRemoveChild( ControlRPtr control ) + { + unregisterControl( *control ); + } + void LayoutControl::doUpdateStyle() { updateScrollBarsStyle(); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp index 334b8d4c28..39707e004f 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp @@ -67,6 +67,16 @@ namespace castor3d setStyle( style ); } + ListBoxCtrl::~ListBoxCtrl()noexcept + { + auto & manager = *getEngine().getControlsManager(); + + for ( auto item : m_items ) + { + manager.unregisterControl( *item ); + } + } + void ListBoxCtrl::appendItem( castor::String const & value ) { m_values.push_back( value ); @@ -81,7 +91,6 @@ namespace castor3d { getControlsManager()->create( item ); } ) ); - doUpdateItems(); } else @@ -104,7 +113,7 @@ namespace castor3d } else if ( value == m_selected ) { - m_selectedItem.reset(); + m_selectedItem = {}; m_selected = -1; } @@ -164,7 +173,7 @@ namespace castor3d { m_values.clear(); m_items.clear(); - m_selectedItem.reset(); + m_selectedItem = {}; m_selected = -1; } @@ -180,7 +189,7 @@ namespace castor3d if ( item ) { item->setStyle( &style.getItemStyle() ); - m_selectedItem.reset(); + m_selectedItem = {}; } } @@ -230,37 +239,38 @@ namespace castor3d setBackgroundSize( castor::Size( getSize()->x, uint32_t( m_items.size() * DefaultHeight ) ) ); } - StaticCtrlSPtr ListBoxCtrl::doCreateItemCtrl( castor::String const & value + StaticCtrlRPtr ListBoxCtrl::doCreateItemCtrl( castor::String const & value , uint32_t itemIndex ) { auto & style = getStyle(); - auto item = std::make_shared< StaticCtrl >( m_scene + auto & manager = *getEngine().getControlsManager(); + auto item = manager.registerControlT( castor::makeUnique< StaticCtrl >( m_scene , getName() + cuT( "_Item" ) + castor::string::toString( itemIndex ) , &style.getItemStyle() , this , castor::string::toU32String( value ) , castor::Position{} , castor::Size{ getClientSize()->x, DefaultHeight } - , uint32_t( StaticFlag::eVAlignCenter ) ); + , uint32_t( StaticFlag::eVAlignCenter ) ) ); item->setCatchesMouseEvents( true ); item->connectNC( MouseEventType::eEnter - , [this]( ControlSPtr control, MouseEvent const & event ) + , [this]( ControlRPtr control, MouseEvent const & event ) { onItemMouseEnter( control, event ); } ); item->connectNC( MouseEventType::eLeave - , [this]( ControlSPtr control, MouseEvent const & event ) + , [this]( ControlRPtr control, MouseEvent const & event ) { onItemMouseLeave( control, event ); } ); item->connectNC( MouseEventType::eReleased - , [this]( ControlSPtr control, MouseEvent const & event ) + , [this]( ControlRPtr control, MouseEvent const & event ) { onItemMouseLButtonUp( control, event ); } ); item->connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control, KeyboardEvent const & event ) + , [this]( ControlRPtr control, KeyboardEvent const & event ) { onItemKeyDown( control, event ); } ); @@ -312,7 +322,7 @@ namespace castor3d } m_items.clear(); - m_selectedItem.reset(); + m_selectedItem = {}; } void ListBoxCtrl::doSetPosition( castor::Position const & value ) @@ -333,19 +343,19 @@ namespace castor3d } } - void ListBoxCtrl::onItemMouseEnter( ControlSPtr control + void ListBoxCtrl::onItemMouseEnter( ControlRPtr control , MouseEvent const & event ) { auto & style = getStyle(); control->setStyle( &style.getHighlightedItemStyle() ); } - void ListBoxCtrl::onItemMouseLeave( ControlSPtr control + void ListBoxCtrl::onItemMouseLeave( ControlRPtr control , MouseEvent const & event ) { auto & style = getStyle(); - if ( m_selectedItem.lock() == control ) + if ( m_selectedItem == control ) { control->setStyle( &style.getSelectedItemStyle() ); } @@ -355,16 +365,16 @@ namespace castor3d } } - void ListBoxCtrl::onItemMouseLButtonUp( ControlSPtr control + void ListBoxCtrl::onItemMouseLButtonUp( ControlRPtr control , MouseEvent const & event ) { if ( event.getButton() == MouseButton::eLeft ) { - if ( m_selectedItem.lock() != control ) + if ( m_selectedItem != control ) { auto it = std::find_if( m_items.begin() , m_items.end() - , [&control]( StaticCtrlSPtr const & lookup ) + , [&control]( StaticCtrlRPtr const & lookup ) { return lookup == control; } ); @@ -409,7 +419,7 @@ namespace castor3d } } - void ListBoxCtrl::onItemKeyDown( ControlSPtr control + void ListBoxCtrl::onItemKeyDown( ControlRPtr control , KeyboardEvent const & event ) { onKeyDown( event ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp index 149f9302fe..b3ef273274 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp @@ -48,16 +48,17 @@ namespace castor3d title->setPixelSize( getClientSize() ); title->setVisible( true ); - m_container = std::make_shared< PanelCtrl >( m_scene + auto & manager = *getEngine().getControlsManager(); + m_container = manager.registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Container" ) , &style->getContainerStyle() - , this ); + , this ) ); m_container->setVisible( true ); - m_progress = std::make_shared< PanelCtrl >( m_scene + m_progress = manager.registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Progress" ) , &style->getProgressStyle() - , m_container.get() ); + , m_container ) ); m_progress->setVisible( true ); auto text = m_scene @@ -95,6 +96,10 @@ namespace castor3d } } + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_progress ); + manager.unregisterControl( *m_container ); + if ( auto overlay = m_title ) { if ( m_scene ) diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp index c034ce8993..b4628099bb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp @@ -57,6 +57,7 @@ namespace castor3d , m_scrolling{ false } { CU_Require( isScrollableControl( *parent ) ); + auto & manager = *getEngine().getControlsManager(); setBorderSize( castor::Point4ui{} ); EventHandler::connect( KeyboardEventType::ePushed , [this]( KeyboardEvent const & event ) @@ -64,13 +65,13 @@ namespace castor3d onKeyDown( event ); } ); - m_begin = std::make_shared< ButtonCtrl >( m_scene + m_begin = manager.registerControlT( castor::makeUnique< ButtonCtrl >( m_scene , cuT( "Begin" ) , &style->getBeginStyle() , this , U"-" , castor::Position{} - , castor::Size{} ); + , castor::Size{} ) ); m_begin->setVisible( visible ); m_onBeginClick = m_begin->connect( ButtonEvent::eClicked , [this]() @@ -78,13 +79,13 @@ namespace castor3d doScroll( -1 ); } ); - m_end = std::make_shared< ButtonCtrl >( m_scene + m_end = manager.registerControlT( castor::makeUnique< ButtonCtrl >( m_scene , cuT( "End" ) , &style->getEndStyle() , this , U"+" , castor::Position{} - , castor::Size{} ); + , castor::Size{} ) ); m_end->setVisible( visible ); m_onEndClick = m_end->connect( ButtonEvent::eClicked , [this]() @@ -92,54 +93,59 @@ namespace castor3d doScroll( 1 ); } ); - auto bar = std::make_shared< PanelCtrl >( m_scene + m_bar = manager.registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Line" ) , &style->getBarStyle() , this , castor::Position{} - , castor::Size{} ); - bar->setVisible( visible ); - bar->connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control, KeyboardEvent const & event ) + , castor::Size{} ) ); + m_bar->setVisible( visible ); + m_bar->connectNC( KeyboardEventType::ePushed + , [this]( ControlRPtr control, KeyboardEvent const & event ) { onNcKeyDown( control, event ); } ); - m_bar = bar; - auto thumb = std::make_shared< PanelCtrl >( m_scene + m_thumb = manager.registerControlT( castor::makeUnique< PanelCtrl >( m_scene , cuT( "Thumb" ) , &style->getThumbStyle() - , bar.get() + , m_bar , castor::Position{} - , castor::Size{} ); - thumb->setBorderSize( { 1u, 1u, 1u, 1u } ); - thumb->setVisible( visible ); - thumb->setCatchesMouseEvents( true ); - thumb->connectNC( MouseEventType::eMove - , [this]( ControlSPtr control, MouseEvent const & event ) + , castor::Size{} ) ); + m_thumb->setBorderSize( { 1u, 1u, 1u, 1u } ); + m_thumb->setVisible( visible ); + m_thumb->setCatchesMouseEvents( true ); + m_thumb->connectNC( MouseEventType::eMove + , [this]( ControlRPtr control, MouseEvent const & event ) { onThumbMouseMove( control, event ); } ); - thumb->connectNC( MouseEventType::ePushed - , [this]( ControlSPtr control, MouseEvent const & event ) + m_thumb->connectNC( MouseEventType::ePushed + , [this]( ControlRPtr control, MouseEvent const & event ) { onThumbMouseButtonDown( control, event ); } ); - thumb->connectNC( MouseEventType::eReleased - , [this]( ControlSPtr control, MouseEvent const & event ) + m_thumb->connectNC( MouseEventType::eReleased + , [this]( ControlRPtr control, MouseEvent const & event ) { onThumbMouseButtonUp( control, event ); } ); - thumb->connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control, KeyboardEvent const & event ) + m_thumb->connectNC( KeyboardEventType::ePushed + , [this]( ControlRPtr control, KeyboardEvent const & event ) { onNcKeyDown( control, event ); } ); - m_thumb = thumb; setStyle( style ); } + ScrollBarCtrl::~ScrollBarCtrl()noexcept + { + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_thumb ); + manager.unregisterControl( *m_bar ); + } + void ScrollBarCtrl::setRange( castor::Range< uint32_t > const & value ) { m_totalRange = value; @@ -257,8 +263,8 @@ namespace castor3d if ( m_scrolling && focusedControl != this - && focusedControl != m_thumb.get() - && focusedControl != m_bar.get() ) + && focusedControl != m_thumb + && focusedControl != m_bar ) { doMoveMouse( event.getPosition() ); m_signals[size_t( ScrollBarEvent::eThumbRelease )]( int32_t( m_value.value() ) ); @@ -274,13 +280,13 @@ namespace castor3d { } - void ScrollBarCtrl::onThumbMouseMove( ControlSPtr control + void ScrollBarCtrl::onThumbMouseMove( ControlRPtr control , MouseEvent const & event ) { doOnMouseMove( event ); } - void ScrollBarCtrl::onThumbMouseButtonDown( ControlSPtr control + void ScrollBarCtrl::onThumbMouseButtonDown( ControlRPtr control , MouseEvent const & event ) { if ( event.getButton() == MouseButton::eLeft ) @@ -290,7 +296,7 @@ namespace castor3d } } - void ScrollBarCtrl::onThumbMouseButtonUp( ControlSPtr control, MouseEvent const & event ) + void ScrollBarCtrl::onThumbMouseButtonUp( ControlRPtr control, MouseEvent const & event ) { doOnMouseButtonUp( event ); } @@ -310,7 +316,7 @@ namespace castor3d } } - void ScrollBarCtrl::onNcKeyDown( ControlSPtr control + void ScrollBarCtrl::onNcKeyDown( ControlRPtr control , KeyboardEvent const & event ) { onKeyDown( event ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp index 52af5fc788..8f592a2cd5 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp @@ -28,22 +28,23 @@ namespace castor3d , ScrollBarStyle & ( ScrollableStyle::* get )()const noexcept , uint32_t rangeMax , castor::Size dim - , ScrollBarCtrlSPtr & scrollBar ) + , ScrollBarCtrlRPtr & scrollBar ) { if ( castor::checkFlag( control.getFlags(), flag ) ) { if ( !scrollBar ) { CU_Require( style && ( style->*has )() ); + auto & manager = *control.getEngine().getControlsManager(); auto scene = control.hasScene() ? &control.getScene() : nullptr; - scrollBar = std::make_shared< ScrollBarCtrl >( scene + scrollBar = manager.registerControlT( castor::makeUnique< ScrollBarCtrl >( scene , "Scroll/" + prefix , &( style->*get )() , &control , castor::makeRangedValue( 0.0f, 0.0f, float( rangeMax ) ) , castor::Position{} , std::move( dim ) - , ControlFlagType( flag ) ); + , ControlFlagType( flag ) ) ); } scrollBar->setVisible( control.isBackgroundVisible() ); @@ -92,6 +93,18 @@ namespace castor3d m_target.getEngine().removeOverlay( m_target.getName() + cuT( "/Scroll/Corner" ), true ); } } + + auto & manager = *m_target.getEngine().getControlsManager(); + + if ( m_verticalScrollBar ) + { + manager.unregisterControl( *m_verticalScrollBar ); + } + + if ( m_horizontalScrollBar ) + { + manager.unregisterControl( *m_horizontalScrollBar ); + } } castor::Position ScrollableCtrl::getScrollPosition()const @@ -325,8 +338,8 @@ namespace castor3d return; } - if ( &control != m_verticalScrollBar.get() - && &control != m_horizontalScrollBar.get() ) + if ( &control != m_verticalScrollBar + && &control != m_horizontalScrollBar ) { m_controls.emplace( &control , ScrolledControl{ control.onChanged.connect( [this, &control]( Control const & ctrl ) @@ -343,6 +356,27 @@ namespace castor3d } } + void ScrollableCtrl::unregisterControl( Control & control ) + { + if ( !m_verticalScrollBar + && !m_horizontalScrollBar ) + { + return; + } + + if ( &control != m_verticalScrollBar + && &control != m_horizontalScrollBar ) + { + auto it = m_controls.find( &control ); + + if ( it != m_controls.end() ) + { + m_controls.erase( it ); + doUpdateScrollableContent(); + } + } + } + void ScrollableCtrl::updateTotalSize( castor::Size const & size ) { if ( m_verticalScrollBar ) diff --git a/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp b/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp index def8686186..bb72966acb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp @@ -50,6 +50,7 @@ namespace castor3d , m_value{ value } , m_scrolling{ false } { + auto & manager = *getEngine().getControlsManager(); setBorderSize( castor::Point4ui{} ); EventHandler::connect( KeyboardEventType::ePushed , [this]( KeyboardEvent const & event ) @@ -57,55 +58,60 @@ namespace castor3d onKeyDown( event ); } ); - auto line = std::make_shared< StaticCtrl >( m_scene + m_line = manager.registerControlT( castor::makeUnique< StaticCtrl >( m_scene , cuT( "Line" ) , &style->getLineStyle() , this , castor::U32String{} , castor::Position{} - , castor::Size{} ); - line->setVisible( visible ); - line->connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control, KeyboardEvent const & event ) + , castor::Size{} ) ); + m_line->setVisible( visible ); + m_line->connectNC( KeyboardEventType::ePushed + , [this]( ControlRPtr control, KeyboardEvent const & event ) { onNcKeyDown( control, event ); } ); - m_line = line; - auto tick = std::make_shared< StaticCtrl >( m_scene + m_tick = manager.registerControlT( castor::makeUnique< StaticCtrl >( m_scene , cuT( "Tick" ) , &style->getTickStyle() , this , castor::U32String{} , castor::Position{} - , castor::Size{} ); - tick->setVisible( visible ); - tick->setCatchesMouseEvents( true ); - tick->connectNC( MouseEventType::eMove - , [this]( ControlSPtr control, MouseEvent const & event ) + , castor::Size{} ) ); + m_tick->setVisible( visible ); + m_tick->setCatchesMouseEvents( true ); + m_tick->connectNC( MouseEventType::eMove + , [this]( ControlRPtr control, MouseEvent const & event ) { onTickMouseMove( control, event ); } ); - tick->connectNC( MouseEventType::ePushed - , [this]( ControlSPtr control, MouseEvent const & event ) + m_tick->connectNC( MouseEventType::ePushed + , [this]( ControlRPtr control, MouseEvent const & event ) { onTickMouseButtonDown( control, event ); } ); - tick->connectNC( MouseEventType::eReleased - , [this]( ControlSPtr control, MouseEvent const & event ) + m_tick->connectNC( MouseEventType::eReleased + , [this]( ControlRPtr control, MouseEvent const & event ) { onTickMouseButtonUp( control, event ); } ); - tick->connectNC( KeyboardEventType::ePushed - , [this]( ControlSPtr control, KeyboardEvent const & event ) + m_tick->connectNC( KeyboardEventType::ePushed + , [this]( ControlRPtr control, KeyboardEvent const & event ) { onNcKeyDown( control, event ); } ); - m_tick = tick; setStyle( style ); } + SliderCtrl::~SliderCtrl()noexcept + { + auto & manager = *getEngine().getControlsManager(); + manager.unregisterControl( *m_tick ); + manager.unregisterControl( *m_line ); + } + void SliderCtrl::setRange( castor::Range< int32_t > const & value ) { m_value.updateRange( value ); @@ -148,14 +154,14 @@ namespace castor3d tickPosition.y() = int32_t( tickSize.getHeight() / 2 ); } - if ( auto line = m_line.lock() ) + if ( auto line = m_line ) { line->setPosition( linePosition ); line->setSize( lineSize ); line->setVisible( isBackgroundVisible() ); } - if ( auto tick = m_tick.lock() ) + if ( auto tick = m_tick ) { tick->setPosition( tickPosition ); tick->setSize( tickSize ); @@ -167,12 +173,12 @@ namespace castor3d { auto & style = getStyle(); - if ( auto line = m_line.lock() ) + if ( auto line = m_line ) { line->setStyle( &style.getLineStyle() ); } - if ( auto tick = m_tick.lock() ) + if ( auto tick = m_tick ) { tick->setStyle( &style.getTickStyle() ); } @@ -182,11 +188,8 @@ namespace castor3d { CU_Require( getControlsManager() ); auto & manager = *getControlsManager(); - StaticCtrlSPtr line = m_line.lock(); - manager.create( line ); - - StaticCtrlSPtr tick = m_tick.lock(); - manager.create( tick ); + manager.create( m_line ); + manager.create( m_tick ); doUpdateLineAndTick(); manager.connectEvents( *this ); @@ -197,16 +200,8 @@ namespace castor3d CU_Require( getControlsManager() ); auto & manager = *getControlsManager(); manager.disconnectEvents( *this ); - - if ( auto line = m_line.lock() ) - { - manager.destroy( line ); - } - - if ( auto tick = m_tick.lock() ) - { - manager.destroy( tick ); - } + manager.destroy( m_line ); + manager.destroy( m_tick ); } void SliderCtrl::doSetPosition( castor::Position const & value ) @@ -221,12 +216,12 @@ namespace castor3d void SliderCtrl::doSetVisible( bool value ) { - if ( auto line = m_line.lock() ) + if ( auto line = m_line ) { line->setVisible( value ); } - if ( auto tick = m_tick.lock() ) + if ( auto tick = m_tick ) { tick->setVisible( value ); } @@ -254,8 +249,8 @@ namespace castor3d if ( m_scrolling && focusedControl != this - && focusedControl != m_tick.lock().get() - && focusedControl != m_line.lock().get() + && focusedControl != m_tick + && focusedControl != m_line ) { doMoveMouse( event.getPosition() ); @@ -270,7 +265,7 @@ namespace castor3d { if ( !m_scrolling ) { - m_mouse = m_tick.lock()->getPosition(); + m_mouse = m_tick->getPosition(); } doMoveMouse( event.getPosition() ); @@ -279,13 +274,13 @@ namespace castor3d } } - void SliderCtrl::onTickMouseMove( ControlSPtr control + void SliderCtrl::onTickMouseMove( ControlRPtr control , MouseEvent const & event ) { doOnMouseMove( event ); } - void SliderCtrl::onTickMouseButtonDown( ControlSPtr control + void SliderCtrl::onTickMouseButtonDown( ControlRPtr control , MouseEvent const & event ) { if ( event.getButton() == MouseButton::eLeft ) @@ -296,7 +291,7 @@ namespace castor3d } } - void SliderCtrl::onTickMouseButtonUp( ControlSPtr control, MouseEvent const & event ) + void SliderCtrl::onTickMouseButtonUp( ControlRPtr control, MouseEvent const & event ) { doOnMouseButtonUp( event ); } @@ -334,7 +329,7 @@ namespace castor3d } } - void SliderCtrl::onNcKeyDown( ControlSPtr control + void SliderCtrl::onNcKeyDown( ControlRPtr control , KeyboardEvent const & event ) { onKeyDown( event ); @@ -353,12 +348,12 @@ namespace castor3d realDelta.y() = 0; } - if ( auto tick = m_tick.lock() ) + if ( auto tick = m_tick ) { castor::Point2i position = tick->getPosition() + realDelta; double tickValue = 0; - if ( auto line = m_line.lock() ) + if ( auto line = m_line ) { auto size = line->getSize(); diff --git a/source/Core/Castor3D/Gui/ControlsManager.cpp b/source/Core/Castor3D/Gui/ControlsManager.cpp index 487d4f2651..43041b021f 100644 --- a/source/Core/Castor3D/Gui/ControlsManager.cpp +++ b/source/Core/Castor3D/Gui/ControlsManager.cpp @@ -615,21 +615,30 @@ namespace castor3d return StylesHolder::getStaticStyle( name ); } - void ControlsManager::create( ControlSPtr control ) + void ControlsManager::create( ControlRPtr control ) { addControl( control ); control->create( shared_from_this() ); } - void ControlsManager::destroy( ControlSPtr control ) + void ControlsManager::destroy( ControlRPtr control ) { control->destroy(); removeControl( control->getId() ); } - void ControlsManager::addControl( ControlSPtr control ) + ControlRPtr ControlsManager::registerControl( ControlUPtr control ) + { + return &static_cast< Control & >( *doAddHandler( castor::ptrCast< EventHandler >( control ) ) ); + } + + void ControlsManager::unregisterControl( Control & control ) + { + doRemoveHandlerNL( control ); + } + + void ControlsManager::addControl( ControlRPtr control ) { - doAddHandler( control ); { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsById ) }; @@ -642,7 +651,7 @@ namespace castor3d if ( !control->getParent() ) { - m_rootControls.push_back( control.get() ); + m_rootControls.push_back( control ); } } doMarkDirty(); @@ -650,7 +659,6 @@ namespace castor3d void ControlsManager::removeControl( ControlID id ) { - EventHandler * handler; { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsById ) }; auto it = m_controlsById.find( id ); @@ -660,8 +668,7 @@ namespace castor3d CU_Exception( "This control does not exist in the manager." ); } - auto control = it->second.lock().get(); - handler = control; + auto control = it->second; m_controlsById.erase( it ); if ( !control->getParent() ) @@ -676,12 +683,10 @@ namespace castor3d } } } - doMarkDirty(); - doRemoveHandler( *handler ); } - ControlSPtr ControlsManager::getControl( ControlID id )const + ControlRPtr ControlsManager::getControl( ControlID id )const { auto controls = doGetControlsById(); auto it = controls.find( id ); @@ -691,21 +696,21 @@ namespace castor3d CU_Exception( "This control does not exist in the manager" ); } - return it->second.lock(); + return it->second; } - ControlSPtr ControlsManager::findControl( castor::String const & name )const + ControlRPtr ControlsManager::findControl( castor::String const & name )const { auto controls = doGetHandlers(); auto it = std::find_if( controls.begin() , controls.end() - , [&name]( EventHandlerSPtr lookup ) + , [&name]( EventHandlerRPtr lookup ) { return lookup->getName() == name; } ); return it == controls.end() ? nullptr - : std::static_pointer_cast< Control >( *it ); + : &static_cast< Control & >( **it ); } bool ControlsManager::setMovedControl( ControlRPtr control @@ -748,7 +753,7 @@ namespace castor3d return true; } - std::vector< Control * > ControlsManager::getRootControls()const + std::vector< ControlRPtr > ControlsManager::getRootControls()const { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsById ) }; return m_rootControls; @@ -957,7 +962,7 @@ namespace castor3d { for ( auto cit : m_controlsById ) { - if ( auto control = cit.second.lock() ) + if ( auto control = cit.second ) { control->destroy(); } @@ -990,7 +995,7 @@ namespace castor3d cleanupStyles(); } - EventHandler * ControlsManager::doGetMouseTargetableHandler( castor::Position const & position )const + EventHandlerRPtr ControlsManager::doGetMouseTargetableHandler( castor::Position const & position )const { if ( m_movedControl && m_movedControl->isMoving() ) @@ -1005,12 +1010,12 @@ namespace castor3d } auto controls = doGetControlsByZIndex(); - EventHandler * result{}; + EventHandlerRPtr result{}; auto it = controls.rbegin(); while ( !result && it != controls.rend() ) { - Control * control = *it; + ControlRPtr control = *it; if ( control && !control->isBackgroundInvisible() @@ -1063,8 +1068,8 @@ namespace castor3d void ControlsManager::doUpdate() { - std::vector< Control * > result; - std::vector< Control * > top; + std::vector< ControlRPtr > result; + std::vector< ControlRPtr > top; auto controls = getRootControls(); result.reserve( controls.size() ); top.reserve( controls.size() ); @@ -1089,19 +1094,19 @@ namespace castor3d doSetControlsByZIndex( std::move( result ) ); } - void ControlsManager::doSetControlsByZIndex( std::vector< Control * > v ) + void ControlsManager::doSetControlsByZIndex( std::vector< ControlRPtr > v ) { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsByZIndex ) }; m_controlsByZIndex = std::move( v ); } - std::vector< Control * > ControlsManager::doGetControlsByZIndex()const + std::vector< ControlRPtr > ControlsManager::doGetControlsByZIndex()const { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsByZIndex ) }; return m_controlsByZIndex; } - std::map< ControlID, ControlWPtr > ControlsManager::doGetControlsById()const + std::map< ControlID, ControlRPtr > ControlsManager::doGetControlsById()const { ctrlmgr::LockType lock{ castor::makeUniqueLock( m_mutexControlsById ) }; return m_controlsById; diff --git a/source/Core/Castor3D/Gui/Gui_Parsers.cpp b/source/Core/Castor3D/Gui/Gui_Parsers.cpp index b087d5e0b3..0a939b4581 100644 --- a/source/Core/Castor3D/Gui/Gui_Parsers.cpp +++ b/source/Core/Castor3D/Gui/Gui_Parsers.cpp @@ -40,14 +40,15 @@ namespace castor3d } template< typename StyleT, typename ControlT > - std::shared_ptr< ControlT > createControl( castor::FileParserContext & context + ControlT * createControl( castor::FileParserContext & context , GuiParserContext & guiContext , SceneRPtr scene , castor::String const & controlName , castor::String const & styleName - , std::shared_ptr< ControlT > & control ) + , ControlT *& control ) { - auto style = guiparse::getControlsManager( guiContext ).template getStyle< StyleT >( styleName ); + auto & manager = guiparse::getControlsManager( guiContext ); + auto style = manager.template getStyle< StyleT >( styleName ); if ( style == nullptr ) { @@ -55,18 +56,18 @@ namespace castor3d return nullptr; } - control = std::make_shared< ControlT >( scene + control = manager.registerControlT( castor::makeUnique< ControlT >( scene , controlName , style - , guiContext.getTopControl() ); + , guiContext.getTopControl() ) ); guiContext.parents.push( control ); return control; } - template< typename T > + template< typename ControlT > void finishControl( ControlsManager & manager , GuiParserContext & context - , std::shared_ptr< T > control ) + , ControlT * control ) { if ( control ) { @@ -84,7 +85,7 @@ namespace castor3d if ( !parents.empty() ) { - result = parents.top().get(); + result = parents.top(); } return result; @@ -92,55 +93,55 @@ namespace castor3d void GuiParserContext::popControl() { - button.reset(); - edit.reset(); - listbox.reset(); - slider.reset(); - staticTxt.reset(); - combo.reset(); - panel.reset(); - progress.reset(); - expandablePanel.reset(); + button = nullptr; + edit = nullptr; + listbox = nullptr; + slider = nullptr; + staticTxt = nullptr; + combo = nullptr; + panel = nullptr; + progress = nullptr; + expandablePanel = nullptr; scrollable = nullptr; if ( !parents.empty() ) { - ControlSPtr top; + ControlRPtr top; top = parents.top(); switch ( top->getType() ) { case ControlType::eStatic: - staticTxt = std::static_pointer_cast< StaticCtrl >( top ); + staticTxt = &static_cast< StaticCtrl & >( *top ); break; case ControlType::eEdit: - edit = std::static_pointer_cast< EditCtrl >( top ); + edit = &static_cast< EditCtrl & >( *top ); scrollable = edit; break; case ControlType::eSlider: - slider = std::static_pointer_cast< SliderCtrl >( top ); + slider = &static_cast< SliderCtrl & >( *top ); break; case ControlType::eComboBox: - combo = std::static_pointer_cast< ComboBoxCtrl >( top ); + combo = &static_cast< ComboBoxCtrl & >( *top ); break; case ControlType::eListBox: - listbox = std::static_pointer_cast< ListBoxCtrl >( top ); + listbox = &static_cast< ListBoxCtrl & >( *top ); break; case ControlType::eButton: - button = std::static_pointer_cast< ButtonCtrl >( top ); + button = &static_cast< ButtonCtrl & >( *top ); break; case ControlType::ePanel: - panel = std::static_pointer_cast< PanelCtrl >( top ); + panel = &static_cast< PanelCtrl & >( *top ); scrollable = panel; break; case ControlType::eProgress: - progress = std::static_pointer_cast< ProgressCtrl >( top ); + progress = &static_cast< ProgressCtrl & >( *top ); break; case ControlType::eExpandablePanel: - expandablePanel = std::static_pointer_cast< ExpandablePanelCtrl >( top ); + expandablePanel = &static_cast< ExpandablePanelCtrl & >( *top ); break; case ControlType::eFrame: - frame = std::static_pointer_cast< FrameCtrl >( top ); + frame = &static_cast< FrameCtrl & >( *top ); break; default: CU_Failure( "Unsupported Control Type" ); @@ -388,9 +389,8 @@ namespace castor3d CU_ImplementAttributeParser( parserComboBoxItem ) { auto & guiContext = guiparse::getParserContext( context ); - ComboBoxCtrlSPtr combo = guiContext.combo; - if ( combo ) + if ( auto combo = guiContext.combo ) { castor::String text; params[0]->get( text ); @@ -443,9 +443,8 @@ namespace castor3d CU_ImplementAttributeParser( parserEditCaption ) { auto & guiContext = guiparse::getParserContext( context ); - EditCtrlSPtr edit = guiContext.edit; - if ( edit ) + if ( auto edit = guiContext.edit ) { auto text = params[0]->get< castor::String >(); castor::string::replace( text, "\\?", "\?" ); @@ -470,9 +469,8 @@ namespace castor3d CU_ImplementAttributeParser( parserEditMultiLine ) { auto & guiContext = guiparse::getParserContext( context ); - EditCtrlSPtr edit = guiContext.edit; - if ( edit ) + if ( auto edit = guiContext.edit ) { bool value; params[0]->get( value ); @@ -525,9 +523,8 @@ namespace castor3d CU_ImplementAttributeParser( parserListBoxItem ) { auto & guiContext = guiparse::getParserContext( context ); - ListBoxCtrlSPtr listbox = guiContext.listbox; - if ( listbox ) + if ( auto listbox = guiContext.listbox ) { castor::String text; params[0]->get( text ); @@ -1204,7 +1201,7 @@ namespace castor3d CU_ImplementAttributeParser( parserControlEnd ) { auto & guiContext = guiparse::getParserContext( context ); - guiparse::finishControl( guiparse::getControlsManager( context ), guiContext, guiContext.getTopControl()->shared_from_this() ); + guiparse::finishControl( guiparse::getControlsManager( context ), guiContext, guiContext.getTopControl() ); guiContext.popControl(); } CU_EndAttributePop() diff --git a/source/Core/Castor3D/Overlay/DebugOverlays.cpp b/source/Core/Castor3D/Overlay/DebugOverlays.cpp index 55d57c28b2..9816a8ca99 100644 --- a/source/Core/Castor3D/Overlay/DebugOverlays.cpp +++ b/source/Core/Castor3D/Overlay/DebugOverlays.cpp @@ -61,38 +61,68 @@ namespace castor3d auto panelStyle = parent.getStyle().getStyle< PanelStyle >( "Entry" ); auto labelStyle = panelStyle->getStyle< StaticStyle >( "Label" ); auto valueStyle = panelStyle->getStyle< StaticStyle >( "Value" ); - m_panel = std::make_shared< PanelCtrl >( nullptr + m_panel = manager.registerControlT( castor::makeUnique< PanelCtrl >( nullptr , name , panelStyle , &parent , castor::Position{} - , castor::Size{ DebugLineWidth, PanelHeight } ); - m_label = std::make_shared< StaticCtrl >( nullptr + , castor::Size{ DebugLineWidth, PanelHeight } ) ); + m_label = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "Label" , labelStyle - , m_panel.get() + , m_panel , castor::string::toU32String( label ) , castor::Position{ 0, 2 } - , castor::Size{ DebugLabelWidth, PanelHeight } ); - m_value = std::make_shared< StaticCtrl >( nullptr + , castor::Size{ DebugLabelWidth, PanelHeight } ) ); + m_value = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "Value" , valueStyle - , m_panel.get() + , m_panel , U"" , castor::Position{ DebugLabelWidth, 2 } - , castor::Size{ DebugValueWidth, PanelHeight } ); + , castor::Size{ DebugValueWidth, PanelHeight } ) ); + manager.create( m_panel ); manager.create( m_label ); manager.create( m_value ); - manager.create( m_panel ); parent.getLayout()->addControl( *m_panel , LayoutItemFlags{} .padLeft( DebugPanelWidth - DebugLineWidth ) ); } - DebugOverlays::DebugPanel::~DebugPanel() + DebugOverlays::DebugPanel::DebugPanel( DebugPanel && rhs )noexcept + : m_engine{ rhs.m_engine } + , m_v{ std::move( rhs.m_v ) } + , m_panel{ std::move( rhs.m_panel ) } + , m_label{ std::move( rhs.m_label ) } + , m_value{ std::move( rhs.m_value ) } + { + rhs.m_panel = {}; + rhs.m_label = {}; + rhs.m_value = {}; + } + + DebugOverlays::DebugPanel::~DebugPanel()noexcept { + if ( m_panel ) + { + auto & layout = *static_cast< LayoutControl & >( *m_panel->getParent() ).getLayout(); + layout.removeControl( *m_panel ); + + auto & manager = *m_engine.getControlsManager(); + manager.destroy( m_label ); + manager.destroy( m_value ); + manager.destroy( m_panel ); + + manager.unregisterControl( *m_label ); + manager.unregisterControl( *m_value ); + manager.unregisterControl( *m_panel ); + + m_panel = {}; + m_label = {}; + m_value = {}; + } } void DebugOverlays::DebugPanel::update() @@ -110,33 +140,60 @@ namespace castor3d auto & manager = dbgovl::getControlsManager( m_engine ); auto containerStyle = manager.getStyle< ExpandablePanelStyle >( "Debug/Main/Container" ); auto titleStyle = containerStyle->getHeaderStyle().getStyle< StaticStyle >( "Title" ); - m_panel = std::make_shared< ExpandablePanelCtrl >( nullptr + m_panel = manager.registerControlT( castor::makeUnique< ExpandablePanelCtrl >( nullptr , title , containerStyle , &parent , castor::Position{} , castor::Size{ DebugPanelWidth, PanelHeight } , PanelHeight - , true ); + , true ) ); m_panel->getContent()->setLayout( castor::makeUniqueDerived< Layout, LayoutBox >( *m_panel->getContent() ) ); - m_title = std::make_shared< StaticCtrl >( nullptr + m_title = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "Title" , titleStyle - , m_panel->getHeader().get() + , m_panel->getHeader() , castor::string::toU32String( title ) , castor::Position{ 0, 3 } - , castor::Size{ DebugPanelWidth - PanelHeight, PanelHeight } ); + , castor::Size{ DebugPanelWidth - PanelHeight, PanelHeight } ) ); m_title->setHAlign( HAlign::eCenter ); - manager.create( m_title ); manager.create( m_panel ); + manager.create( m_title ); parent.getLayout()->addControl( *m_panel ); } - DebugOverlays::DebugPanels::~DebugPanels() + DebugOverlays::DebugPanels::DebugPanels( DebugPanels && rhs )noexcept + : m_engine{ rhs.m_engine } + , m_panel{ std::move( rhs.m_panel ) } + , m_title{ std::move( rhs.m_title ) } + , m_panels{ std::move( rhs.m_panels ) } + { + rhs.m_panel = {}; + rhs.m_title = {}; + } + + DebugOverlays::DebugPanels::~DebugPanels()noexcept { + m_panels.clear(); + + if ( m_panel ) + { + auto & layout = *static_cast< LayoutControl & >( *m_panel->getParent() ).getLayout(); + layout.removeControl( *m_panel ); + + auto & manager = *m_engine.getControlsManager(); + manager.destroy( m_title ); + manager.destroy( m_panel ); + + manager.unregisterControl( *m_title ); + manager.unregisterControl( *m_panel ); + + m_panel = {}; + m_title = {}; + } } void DebugOverlays::DebugPanels::update() @@ -177,22 +234,33 @@ namespace castor3d : m_engine{ engine } { auto & manager = dbgovl::getControlsManager( m_engine ); - m_panel = std::make_shared< PanelCtrl >( nullptr + m_panel = manager.registerControlT( castor::makeUnique< PanelCtrl >( nullptr , cuT( "Debug/Main" ) , manager.getStyle< PanelStyle >( "Debug/Main" ) , nullptr , castor::Position{} , castor::Size{ DebugPanelWidth, PanelHeight } - , ControlFlagType( ControlFlag::eAlwaysOnTop ) ); + , ControlFlagType( ControlFlag::eAlwaysOnTop ) ) ); m_panel->setLayout( castor::makeUniqueDerived< Layout, LayoutBox >( *m_panel ) ); + manager.create( m_panel ); + m_times = std::make_unique< DebugPanels >( cuT( "Times" ), m_engine, *m_panel ); m_fps = std::make_unique< DebugPanels >( cuT( "FPS" ), m_engine, *m_panel ); m_counts = std::make_unique< DebugPanels >( cuT( "Counts" ), m_engine, *m_panel ); - manager.create( m_panel ); } - DebugOverlays::MainDebugPanel::~MainDebugPanel() + DebugOverlays::MainDebugPanel::~MainDebugPanel()noexcept { + m_counts.reset(); + m_fps.reset(); + m_times.reset(); + + auto & manager = *m_engine.getControlsManager(); + manager.destroy( m_panel ); + + manager.unregisterControl( *m_panel ); + + m_panel = {}; } void DebugOverlays::MainDebugPanel::update() @@ -263,53 +331,53 @@ namespace castor3d auto nameStyle = panelStyle->getStyle< StaticStyle >( "Name" ); auto counterStyle = panelStyle->getStyle< StaticStyle >( "Counter" ); auto maxWidth = CategoryLineWidth - leftOffset; - m_panel = std::make_shared< PanelCtrl >( nullptr + m_panel = manager.registerControlT( castor::makeUnique< PanelCtrl >( nullptr , m_name + "Pass" , panelStyle - , &parent + , m_parent , castor::Position{} - , castor::Size{ maxWidth, PanelHeight } ); + , castor::Size{ maxWidth, PanelHeight } ) ); int32_t posX{}; auto nameWidth = CategoryNameWidth - leftOffset; - m_passName = std::make_shared< StaticCtrl >( nullptr + m_passName = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "PassName" , nameStyle - , m_panel.get() + , m_panel , castor::string::toU32String( m_name ) , castor::Position{ posX, 2 } - , castor::Size{ nameWidth, PanelHeight } ); + , castor::Size{ nameWidth, PanelHeight } ) ); posX += nameWidth; - m_cpu.name = std::make_shared< StaticCtrl >( nullptr + m_cpu.name = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "CPUName" , counterStyle - , m_panel.get() + , m_panel , U"CPU:" , castor::Position{ posX, 0 } - , castor::Size{ CpuNameWidth, PanelHeight } ); + , castor::Size{ CpuNameWidth, PanelHeight } ) ); posX += CpuNameWidth; - m_cpu.value = std::make_shared< StaticCtrl >( nullptr + m_cpu.value = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "CPUValue" , counterStyle - , m_panel.get() + , m_panel , U"" , castor::Position{ posX, 0 } - , castor::Size{ CpuValueWidth, PanelHeight } ); + , castor::Size{ CpuValueWidth, PanelHeight } ) ); posX += CpuValueWidth; - m_gpu.name = std::make_shared< StaticCtrl >( nullptr + m_gpu.name = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "GPUName" , counterStyle - , m_panel.get() + , m_panel , U"GPU:" , castor::Position{ posX, 0 } - , castor::Size{ GpuNameWidth, PanelHeight } ); + , castor::Size{ GpuNameWidth, PanelHeight } ) ); posX += GpuNameWidth; - m_gpu.value = std::make_shared< StaticCtrl >( nullptr + m_gpu.value = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "GPUValue" , counterStyle - , m_panel.get() + , m_panel , U"" , castor::Position{ posX, 0 } - , castor::Size{ GpuValueWidth, PanelHeight } ); + , castor::Size{ GpuValueWidth, PanelHeight } ) ); m_cpu.name->setVAlign( VAlign::eCenter ); m_gpu.name->setVAlign( VAlign::eCenter ); @@ -330,10 +398,30 @@ namespace castor3d manager.create( m_cpu.value ); manager.create( m_gpu.value ); - parent.getLayout()->addControl( *m_panel, LayoutItemFlags{}.padLeft( leftOffset ) ); + m_parent->getLayout()->addControl( *m_panel, LayoutItemFlags{}.padLeft( leftOffset ) ); } - DebugOverlays::PassOverlays::~PassOverlays() + DebugOverlays::PassOverlays::PassOverlays( PassOverlays && rhs )noexcept + : m_parent{ std::move( rhs.m_parent ) } + , m_name{ std::move( rhs.m_name ) } + , m_visible{ std::move( rhs.m_visible ) } + , m_timers{ std::move( rhs.m_timers ) } + , m_panel{ std::move( rhs.m_panel ) } + , m_passName{ std::move( rhs.m_passName ) } + , m_cpu{ std::move( rhs.m_cpu ) } + , m_gpu{ std::move( rhs.m_gpu ) } + { + rhs.m_parent = {}; + rhs.m_visible = {}; + rhs.m_panel = {}; + rhs.m_passName = {}; + rhs.m_cpu.name = {}; + rhs.m_cpu.value = {}; + rhs.m_gpu.name = {}; + rhs.m_gpu.value = {}; + } + + DebugOverlays::PassOverlays::~PassOverlays()noexcept { if ( m_panel ) { @@ -347,12 +435,26 @@ namespace castor3d m_gpu.value->setVisible( false ); auto & manager = *m_panel->getControlsManager(); - manager.destroy( std::move( m_gpu.name ) ); - manager.destroy( std::move( m_gpu.value ) ); - manager.destroy( std::move( m_cpu.name ) ); - manager.destroy( std::move( m_cpu.value ) ); - manager.destroy( std::move( m_passName ) ); - manager.destroy( std::move( m_panel ) ); + manager.destroy( m_gpu.name ); + manager.destroy( m_gpu.value ); + manager.destroy( m_cpu.name ); + manager.destroy( m_cpu.value ); + manager.destroy( m_passName ); + manager.destroy( m_panel ); + + manager.unregisterControl( *m_gpu.name ); + manager.unregisterControl( *m_gpu.value ); + manager.unregisterControl( *m_cpu.name ); + manager.unregisterControl( *m_cpu.value ); + manager.unregisterControl( *m_passName ); + manager.unregisterControl( *m_panel ); + + m_gpu.name = {}; + m_gpu.value = {}; + m_cpu.name = {}; + m_cpu.value = {}; + m_passName = {}; + m_panel = {}; } } @@ -441,55 +543,55 @@ namespace castor3d auto containerStyle = manager.getStyle< ExpandablePanelStyle >( "Debug/RenderPasses/Category" ); auto nameStyle = containerStyle->getHeaderStyle().getStyle< StaticStyle >( "Name" ); auto counterStyle = containerStyle->getHeaderStyle().getStyle< StaticStyle >( "Counter" ); - m_container = std::make_shared< ExpandablePanelCtrl >( nullptr - , m_categoryName + "Category" + m_container = manager.registerControlT( castor::makeUnique< ExpandablePanelCtrl >( nullptr + , m_categoryName , containerStyle , m_parent , castor::Position{} , castor::Size{ CategoryLineWidth, PanelHeight } , PanelHeight - , expanded ); + , expanded ) ); m_container->getContent()->setLayout( castor::makeUniqueDerived< Layout, LayoutBox >( *m_container->getContent() ) ); auto nameWidth = CategoryNameWidth - m_leftOffset; - m_name = std::make_shared< StaticCtrl >( nullptr + m_name = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "Title" , nameStyle - , m_container->getHeader().get() + , m_container->getHeader() , castor::string::toU32String( m_categoryName ) , castor::Position{ m_posX, 2 } - , castor::Size{ nameWidth, PanelHeight } ); + , castor::Size{ nameWidth, PanelHeight } ) ); m_posX += nameWidth; - m_cpu.name = std::make_shared< StaticCtrl >( nullptr + m_cpu.name = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "CPUName" , counterStyle - , m_container->getHeader().get() + , m_container->getHeader() , U"CPU:" , castor::Position{ m_posX, 0 } - , castor::Size{ CpuNameWidth, PanelHeight } ); + , castor::Size{ CpuNameWidth, PanelHeight } ) ); m_posX += CpuNameWidth; - m_cpu.value = std::make_shared< StaticCtrl >( nullptr + m_cpu.value = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "CPUValue" , counterStyle - , m_container->getHeader().get() + , m_container->getHeader() , U"" , castor::Position{ m_posX, 0 } - , castor::Size{ CpuValueWidth, PanelHeight } ); + , castor::Size{ CpuValueWidth, PanelHeight } ) ); m_posX += CpuValueWidth; - m_gpu.name = std::make_shared< StaticCtrl >( nullptr + m_gpu.name = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "GPUName" , counterStyle - , m_container->getHeader().get() + , m_container->getHeader() , U"GPU:" , castor::Position{ m_posX, 0 } - , castor::Size{ GpuNameWidth, PanelHeight } ); + , castor::Size{ GpuNameWidth, PanelHeight } ) ); m_posX += GpuNameWidth; - m_gpu.value = std::make_shared< StaticCtrl >( nullptr + m_gpu.value = manager.registerControlT( castor::makeUnique< StaticCtrl >( nullptr , "GPUValue" , counterStyle - , m_container->getHeader().get() + , m_container->getHeader() , U"" , castor::Position{ m_posX, 0 } - , castor::Size{ GpuValueWidth, PanelHeight } ); + , castor::Size{ GpuValueWidth, PanelHeight } ) ); m_posX += GpuValueWidth; m_cpu.name->setVAlign( VAlign::eCenter ); @@ -514,7 +616,68 @@ namespace castor3d m_parent->getLayout()->addControl( *m_container ); } - DebugOverlays::CategoryOverlays::~CategoryOverlays() + DebugOverlays::CategoryOverlays & DebugOverlays::CategoryOverlays::operator=( CategoryOverlays && rhs )noexcept + { + m_engine = std::move( rhs.m_engine ); + m_parent = std::move( rhs.m_parent ); + m_categoryName = std::move( rhs.m_categoryName ); + m_leftOffset = std::move( rhs.m_leftOffset ); + m_posX = std::move( rhs.m_posX ); + m_visible = std::move( rhs.m_visible ); + m_parentVisible = std::move( rhs.m_parentVisible ); + m_passes = std::move( rhs.m_passes ); + m_categories = std::move( rhs.m_categories ); + m_container = std::move( rhs.m_container ); + m_name = std::move( rhs.m_name ); + m_cpu = std::move( rhs.m_cpu ); + m_gpu = std::move( rhs.m_gpu ); + + rhs.m_engine = {}; + rhs.m_parent = {}; + rhs.m_leftOffset = {}; + rhs.m_posX = {}; + rhs.m_visible = {}; + rhs.m_parentVisible = {}; + rhs.m_container = {}; + rhs.m_name = {}; + rhs.m_cpu.name = {}; + rhs.m_cpu.value = {}; + rhs.m_gpu.name = {}; + rhs.m_gpu.value = {}; + + return *this; + } + + DebugOverlays::CategoryOverlays::CategoryOverlays( CategoryOverlays && rhs )noexcept + : m_engine{ std::move( rhs.m_engine ) } + , m_parent{ std::move( rhs.m_parent ) } + , m_categoryName{ std::move( rhs.m_categoryName ) } + , m_leftOffset{ std::move( rhs.m_leftOffset ) } + , m_posX{ std::move( rhs.m_posX ) } + , m_visible{ std::move( rhs.m_visible ) } + , m_parentVisible{ std::move( rhs.m_parentVisible ) } + , m_passes{ std::move( rhs.m_passes ) } + , m_categories{ std::move( rhs.m_categories ) } + , m_container{ std::move( rhs.m_container ) } + , m_name{ std::move( rhs.m_name ) } + , m_cpu{ std::move( rhs.m_cpu ) } + , m_gpu{ std::move( rhs.m_gpu ) } + { + rhs.m_engine = {}; + rhs.m_parent = {}; + rhs.m_leftOffset = {}; + rhs.m_posX = {}; + rhs.m_visible = {}; + rhs.m_parentVisible = {}; + rhs.m_container = {}; + rhs.m_name = {}; + rhs.m_cpu.name = {}; + rhs.m_cpu.value = {}; + rhs.m_gpu.name = {}; + rhs.m_gpu.value = {}; + } + + DebugOverlays::CategoryOverlays::~CategoryOverlays()noexcept { if ( m_container ) { @@ -531,12 +694,26 @@ namespace castor3d m_categories.clear(); auto & manager = dbgovl::getControlsManager( *m_engine ); - manager.destroy( std::move( m_cpu.value ) ); - manager.destroy( std::move( m_gpu.value ) ); - manager.destroy( std::move( m_cpu.name ) ); - manager.destroy( std::move( m_gpu.name ) ); - manager.destroy( std::move( m_name ) ); - manager.destroy( std::move( m_container ) ); + manager.destroy( m_cpu.value ); + manager.destroy( m_gpu.value ); + manager.destroy( m_cpu.name ); + manager.destroy( m_gpu.name ); + manager.destroy( m_name ); + manager.destroy( m_container ); + + manager.unregisterControl( *m_cpu.value ); + manager.unregisterControl( *m_gpu.value ); + manager.unregisterControl( *m_cpu.name ); + manager.unregisterControl( *m_gpu.name ); + manager.unregisterControl( *m_name ); + manager.unregisterControl( *m_container ); + + m_cpu.value = {}; + m_gpu.value = {}; + m_cpu.name = {}; + m_gpu.name = {}; + m_name = {}; + m_container = {}; } } @@ -609,6 +786,7 @@ namespace castor3d { if ( ( *it )->removeTimer( timer ) ) { + auto pass = std::move( *it ); m_passes.erase( it ); } } @@ -632,6 +810,7 @@ namespace castor3d { if ( ( *it )->removeTimer( name, categories, timer ) ) { + auto category = std::move( *it ); m_categories.erase( it ); } } @@ -736,7 +915,7 @@ namespace castor3d PanelCtrl * DebugOverlays::CategoryOverlays::getContainer()const { - return m_container->getContent().get(); + return m_container->getContent(); } void DebugOverlays::CategoryOverlays::dumpFrameTimes( castor::String prefix @@ -925,19 +1104,19 @@ namespace castor3d { auto & engine = *getEngine(); auto & manager = dbgovl::getControlsManager( engine ); - m_passesContainer = std::make_shared< PanelCtrl >( nullptr + m_passesContainer = manager.registerControlT( castor::makeUnique< PanelCtrl >( nullptr , "Debug/RenderPasses" , manager.getPanelStyle( "Debug/RenderPasses" ) , nullptr , castor::Position{ PassPanelLeft, 0 } , castor::Size{ CategoryLineWidth, 600u } - , ControlFlagType( ControlFlag::eAlwaysOnTop ) ); + , ControlFlagType( ControlFlag::eAlwaysOnTop ) ) ); m_passesContainer->setLayout( castor::makeUniqueDerived< Layout, LayoutBox >( *m_passesContainer ) ); manager.create( m_passesContainer ); m_passesContainer->setVisible( m_visible ); - m_renderPasses = { "Render Passes" + m_renderPasses = { "Passes" , engine , *m_passesContainer , 0u diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index 8dbc62e3a2..26385776b1 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -334,7 +334,7 @@ namespace castor3d , ashes::WindowHandle handle ) : OwnedBy< Engine >{ engine } , castor::Named{ name } - , m_evtHandler{ std::make_shared< EvtHandler >( *this ) } + , m_evtHandler{ std::make_unique< EvtHandler >( *this ) } , m_index{ s_nbRenderWindows++ } , m_device{ engine.getRenderSystem()->getRenderDevice() } , m_surface{ m_device.renderSystem.getInstance().createSurface( m_device.renderSystem.getPhysicalDevice() @@ -1165,13 +1165,13 @@ namespace castor3d if ( !m_progressBar ) { m_progressBar = castor::makeUnique< ProgressBar >( *getEngine() - , static_cast< ProgressCtrl * >( control.get() ) ); + , static_cast< ProgressCtrl * >( control ) ); m_progressBar->setTitle( "Initialising..." ); m_progressBar->setLabel( "" ); } else { - m_progressBar->update( static_cast< ProgressCtrl * >( control.get() ) ); + m_progressBar->update( static_cast< ProgressCtrl * >( control ) ); } m_loadingScreen = castor::makeUnique< LoadingScreen >( *m_progressBar diff --git a/source/Core/Castor3D/Scene/Background/Image.cpp b/source/Core/Castor3D/Scene/Background/Image.cpp index 7e4e39d8a5..ce04463917 100644 --- a/source/Core/Castor3D/Scene/Background/Image.cpp +++ b/source/Core/Castor3D/Scene/Background/Image.cpp @@ -110,8 +110,8 @@ namespace castor3d , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "ImageBackground_Colour" ) ); texture->setSource( folder, relative, { false, false, false } ); - m_2dTexture = std::move( texture ); m_2dTexturePath = texture->getImage().getPath(); + m_2dTexture = std::move( texture ); notifyChanged(); result = true; } diff --git a/source/Core/Castor3D/Scene/Background/Skybox.cpp b/source/Core/Castor3D/Scene/Background/Skybox.cpp index 9896781e35..a79a114856 100644 --- a/source/Core/Castor3D/Scene/Background/Skybox.cpp +++ b/source/Core/Castor3D/Scene/Background/Skybox.cpp @@ -262,7 +262,7 @@ namespace castor3d , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT , cuT( "SkyboxBackgroundEquirectangular" ) ); texture->setSource( folder, relative, { false, false, false } ); - setCrossTexture( std::move( texture ) ); + setEquiTexture( std::move( texture ), size ); } void SkyboxBackground::setEquiTexture( TextureLayoutUPtr texture diff --git a/source/Core/SceneExporter/Text/TextCtrlLayoutControl.cpp b/source/Core/SceneExporter/Text/TextCtrlLayoutControl.cpp index 2ac7c6843c..af4e0d8a58 100644 --- a/source/Core/SceneExporter/Text/TextCtrlLayoutControl.cpp +++ b/source/Core/SceneExporter/Text/TextCtrlLayoutControl.cpp @@ -39,13 +39,13 @@ namespace castor { auto result = TextWriter< Control >{ tabs(), m_customStyle }( control, file ); - for ( auto & child : control.getChildren() ) + for ( auto ctrl : control.getChildren() ) { if ( result ) { result = false; - if ( auto ctrl = child.lock() ) + if ( ctrl ) { result = writeControl( *this, *ctrl, file, control.getName() + "/" ); } diff --git a/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp b/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp index b31c9f31c0..c887e281e6 100644 --- a/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp +++ b/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp @@ -118,12 +118,12 @@ namespace water , VK_IMAGE_VIEW_TYPE_2D , img.data->info.format , { VK_IMAGE_ASPECT_COLOR_BIT, 0u, image.getLevels(), 0u, 1u } } ); - auto buffer = image.getPixels(); engine.postEvent( castor3d::makeGpuFunctorEvent( castor3d::EventType::ePreRender - , [format, dim, buffer, &img, &view, &result, &runnable]( castor3d::RenderDevice const & device + , [format, dim, image, &img, &view, &result, &runnable]( castor3d::RenderDevice const & device , castor3d::QueueData const & queue ) { + auto buffer = image.getPixels(); auto staging = device->createStagingTexture( VkFormat( format ) , VkExtent2D{ dim.getWidth(), dim.getHeight() } , buffer->getLevels() ); diff --git a/tools/GuiCommon/System/SceneObjectsList.cpp b/tools/GuiCommon/System/SceneObjectsList.cpp index 7d7c6662ce..9247201af6 100644 --- a/tools/GuiCommon/System/SceneObjectsList.cpp +++ b/tools/GuiCommon/System/SceneObjectsList.cpp @@ -753,9 +753,9 @@ namespace GuiCommon { auto & layout = static_cast< castor3d::LayoutControl & >( control ); - for ( auto & sub : layout.getChildren() ) + for ( auto ctrl : layout.getChildren() ) { - if ( auto ctrl = sub.lock() ) + if ( ctrl ) { doAddControl( parentId, ctrl->getName(), *ctrl, true, layout.getLayout() != nullptr ); } From 6f2084b95a9b203debaa4fe4510cfd2c8890685c Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 18:53:17 +0200 Subject: [PATCH 22/35] Castor3D: Removed all direct uses of weak_ptr --- .../CastorDvpTD/CastorDvpTDPrerequisites.hpp | 2 +- demos/CastorDvpTD/Game.cpp | 6 ++-- demos/CastorDvpTD/Game.hpp | 8 ++--- demos/CastorDvpTD/Hud.cpp | 4 +-- demos/CastorDvpTD/RenderPanel.cpp | 14 ++++----- demos/CastorDvpTD/RenderPanel.hpp | 12 ++++---- include/Core/Castor3D/Cache/CacheModule.hpp | 16 +++++----- include/Core/Castor3D/Cache/CacheView.hpp | 2 +- include/Core/Castor3D/Cache/CacheView.inl | 8 +++-- include/Core/Castor3D/Engine.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlControl.hpp | 6 ++-- .../Animation/SkeletonAnimationObject.hpp | 6 ++-- include/Core/Castor3D/Plugin/Plugin.hpp | 2 +- .../Castor3D/Render/Passes/PickingPass.hpp | 2 +- include/Core/Castor3D/Render/RenderWindow.hpp | 6 ++-- include/Core/Castor3D/Scene/Scene.hpp | 10 +++---- .../CastorUtils/Design/ResourceCacheBase.hpp | 8 +++-- source/Core/Castor3D/Engine.cpp | 12 ++++---- .../Castor3D/Gui/Controls/CtrlControl.cpp | 2 +- .../Animation/SkeletonAnimationObject.cpp | 2 +- source/Core/Castor3D/Plugin/Plugin.cpp | 30 ++++++++----------- source/Core/Castor3D/Render/RenderWindow.cpp | 5 ++-- source/Core/Castor3D/Scene/Scene.cpp | 2 +- .../CastorUtils/Graphics/StbImageLoader.cpp | 4 +-- test/CastorTest/UnitTest.hpp | 4 +-- tools/CastorViewer/MainFrame.cpp | 6 ++-- tools/CastorViewer/MainFrame.hpp | 6 ++-- tools/CastorViewer/MouseNodeEvent.cpp | 2 +- tools/CastorViewer/MouseNodeEvent.hpp | 8 ++--- tools/CastorViewer/RenderPanel.cpp | 14 ++++----- tools/CastorViewer/RenderPanel.hpp | 6 ++-- tools/CastorViewer/RotateNodeEvent.cpp | 10 +++---- tools/CastorViewer/TranslateNodeEvent.cpp | 8 ++--- .../AnimatedObjectTreeItemProperty.cpp | 2 +- .../AnimatedObjectTreeItemProperty.hpp | 6 ++-- .../TreeItems/PassTreeItemProperty.cpp | 8 ++--- .../TreeItems/PassTreeItemProperty.hpp | 6 ++-- tools/GuiCommon/System/SceneObjectsList.cpp | 8 ++--- tools/GuiCommon/System/SceneObjectsList.hpp | 4 +-- 39 files changed, 131 insertions(+), 138 deletions(-) diff --git a/demos/CastorDvpTD/CastorDvpTDPrerequisites.hpp b/demos/CastorDvpTD/CastorDvpTDPrerequisites.hpp index 518287d5ce..36d1dfbb7c 100644 --- a/demos/CastorDvpTD/CastorDvpTDPrerequisites.hpp +++ b/demos/CastorDvpTD/CastorDvpTDPrerequisites.hpp @@ -28,7 +28,7 @@ namespace castortd using EnemyPtr = std::shared_ptr< Enemy >; using TowerPtr = std::shared_ptr< Tower >; - using TowerWPtr = std::weak_ptr< Tower >; + using TowerRPtr = Tower *; using TowerArray = std::vector< TowerPtr >; using EnemyArray = std::vector< EnemyPtr >; diff --git a/demos/CastorDvpTD/Game.cpp b/demos/CastorDvpTD/Game.cpp index f08a1eb335..ad185fec54 100644 --- a/demos/CastorDvpTD/Game.cpp +++ b/demos/CastorDvpTD/Game.cpp @@ -155,7 +155,7 @@ namespace castortd m_lives = game::InitialLives; m_ore = game::InitialOre; m_kills = 0u; - m_selectedTower.reset(); + m_selectedTower = {}; m_paused = false; m_ended = false; @@ -458,7 +458,7 @@ namespace castortd if ( it != m_towers.end() ) { result = *it; - m_selectedTower = result; + m_selectedTower = result.get(); } } @@ -649,7 +649,7 @@ namespace castortd } m_scene.addGeometry( geometry ); - m_lastMapCube = geometry; + m_lastMapCube = geometry.get(); cell.m_state = Cell::State::Empty; } diff --git a/demos/CastorDvpTD/Game.hpp b/demos/CastorDvpTD/Game.hpp index a3904487cd..24e1fdd2ea 100644 --- a/demos/CastorDvpTD/Game.hpp +++ b/demos/CastorDvpTD/Game.hpp @@ -44,9 +44,9 @@ namespace castortd void upgradeTowerDamage( Tower & tower ); bool canAfford( uint32_t price ); - TowerPtr getSelectedTower()const + Tower * getSelectedTower()const { - return m_selectedTower.lock(); + return m_selectedTower; } float getCellHeight()const @@ -189,7 +189,7 @@ namespace castortd bool m_started{ false }; bool m_paused{ false }; bool m_ended{ false }; - TowerWPtr m_selectedTower; - castor3d::GeometrySPtr m_lastMapCube; + TowerRPtr m_selectedTower{}; + castor3d::GeometryRPtr m_lastMapCube{}; }; } diff --git a/demos/CastorDvpTD/Hud.cpp b/demos/CastorDvpTD/Hud.cpp index 8d3afd3024..1647390a8e 100644 --- a/demos/CastorDvpTD/Hud.cpp +++ b/demos/CastorDvpTD/Hud.cpp @@ -161,9 +161,7 @@ namespace castortd text->setCaption( castor::string::toU32String( m_game.getEnemiesBounty() ) ); } - TowerPtr tower = m_game.getSelectedTower(); - - if ( tower ) + if ( auto tower = m_game.getSelectedTower() ) { text = m_towerDamage; diff --git a/demos/CastorDvpTD/RenderPanel.cpp b/demos/CastorDvpTD/RenderPanel.cpp index 874421a0d3..07640cfb55 100644 --- a/demos/CastorDvpTD/RenderPanel.cpp +++ b/demos/CastorDvpTD/RenderPanel.cpp @@ -88,7 +88,7 @@ namespace castortd if ( scene ) { - m_marker = scene->findSceneNode( cuT( "MapMouse" ) ).lock(); + m_marker = scene->findSceneNode( cuT( "MapMouse" ) ).lock().get(); m_marker->setVisible( false ); m_listener = m_renderWindow->getListener(); @@ -103,7 +103,7 @@ namespace castortd } else if ( m_listener ) { - m_listener.reset(); + m_listener = {}; } } @@ -137,15 +137,15 @@ namespace castortd void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometrySPtr geometry ) { - auto curGeometry = m_selectedGeometry.lock(); + auto curGeometry = m_selectedGeometry; - if ( geometry != curGeometry ) + if ( geometry.get() != curGeometry ) { bool freeCell = false; if ( !geometry || geometry->getName() == cuT( "MapBase" ) ) { - m_selectedGeometry.reset(); + m_selectedGeometry = {}; } else { @@ -197,7 +197,7 @@ namespace castortd break; } - m_selectedGeometry = geometry; + m_selectedGeometry = geometry.get(); } } @@ -530,7 +530,7 @@ namespace castortd PopupMenu( &menu, event.GetPosition() ); } - else if ( !m_selectedGeometry.expired() ) + else if ( m_selectedGeometry ) { wxMenu menu; menu.Append( int( panel::MenuID::eNewLRTower ), wxString( "Nouvelle Tour Longue Distance (" ) << m_longRange.getTowerCost() << wxT( ")" ) ); diff --git a/demos/CastorDvpTD/RenderPanel.hpp b/demos/CastorDvpTD/RenderPanel.hpp index b3451b99bd..9757f22fac 100644 --- a/demos/CastorDvpTD/RenderPanel.hpp +++ b/demos/CastorDvpTD/RenderPanel.hpp @@ -84,13 +84,13 @@ namespace castortd float m_oldY{ 0.0f }; bool m_mouseLeftDown{ false }; std::array< wxTimer *, size_t( TimerID::eCount ) > m_timers; - GuiCommon::NodeStatePtr m_cameraState; - castor3d::RenderWindowPtr m_renderWindow; - castor3d::FrameListenerSPtr m_listener; - castor3d::GeometryWPtr m_selectedGeometry; - castor3d::SceneNodeSPtr m_marker; + GuiCommon::NodeStatePtr m_cameraState{}; + castor3d::RenderWindowPtr m_renderWindow{}; + castor3d::FrameListenerRPtr m_listener{}; + castor3d::GeometryRPtr m_selectedGeometry{}; + castor3d::SceneNodeRPtr m_marker{}; Game & m_game; - TowerPtr m_selectedTower; + TowerPtr m_selectedTower{}; LongRangeTower m_longRange; ShortRangeTower m_shortRange; }; diff --git a/include/Core/Castor3D/Cache/CacheModule.hpp b/include/Core/Castor3D/Cache/CacheModule.hpp index 9d22f38261..d4191ac6f0 100644 --- a/include/Core/Castor3D/Cache/CacheModule.hpp +++ b/include/Core/Castor3D/Cache/CacheModule.hpp @@ -280,10 +280,10 @@ namespace castor3d {\ return m_##memberName##Cache->add( key, element, initialise );\ }\ - void remove##className( className##Cache::ElementKeyT const & key\ + className##Cache::ElementPtrT remove##className( className##Cache::ElementKeyT const & key\ , bool cleanup = false )\ {\ - m_##memberName##Cache->remove( key, cleanup );\ + return m_##memberName##Cache->remove( key, cleanup );\ }\ className##Cache::ElementObsT find##className( className##Cache::ElementKeyT const & key )const\ {\ @@ -317,10 +317,10 @@ namespace castor3d return m_##memberName##Cache->create( key\ , std::forward< ParametersT >( parameters )... );\ }\ - void remove##className( className##Cache::ElementKeyT const & key\ + className##Cache::ElementPtrT remove##className( className##Cache::ElementKeyT const & key\ , bool cleanup = false )\ {\ - m_##memberName##Cache->remove( key, cleanup );\ + return m_##memberName##Cache->remove( key, cleanup );\ }\ className##Cache::ElementObsT find##className( className##Cache::ElementKeyT const & key )const\ {\ @@ -382,9 +382,9 @@ namespace castor3d {\ return m_##memberName##CacheView->add( key, element, initialise );\ }\ - void remove##className( className##Cache::ElementKeyT const & key )\ + className##Cache::ElementObsT remove##className( className##Cache::ElementKeyT const & key )\ {\ - m_##memberName##CacheView->remove( key );\ + return m_##memberName##CacheView->remove( key );\ }\ className##Cache::ElementObsT find##className( className##Cache::ElementKeyT const & key )const\ {\ @@ -424,9 +424,9 @@ namespace castor3d {\ return m_##memberName##CacheView->add( key, element, initialise );\ }\ - void remove##className( castor::className##Cache::ElementKeyT const & key )\ + castor::className##Cache::ElementObsT remove##className( castor::className##Cache::ElementKeyT const & key )\ {\ - m_##memberName##CacheView->remove( key );\ + return m_##memberName##CacheView->remove( key );\ }\ castor::className##Cache::ElementObsT find##className( castor::className##Cache::ElementKeyT const & key )const\ {\ diff --git a/include/Core/Castor3D/Cache/CacheView.hpp b/include/Core/Castor3D/Cache/CacheView.hpp index 1058f21146..3a8d6c436c 100644 --- a/include/Core/Castor3D/Cache/CacheView.hpp +++ b/include/Core/Castor3D/Cache/CacheView.hpp @@ -184,7 +184,7 @@ namespace castor3d *\brief Retire un objet à partir d'un nom. *\param[in] name Le nom d'objet. */ - inline void remove( ElementKeyT const & name ); + inline ElementObsT remove( ElementKeyT const & name ); /** *\~english *\name Iteration. diff --git a/include/Core/Castor3D/Cache/CacheView.inl b/include/Core/Castor3D/Cache/CacheView.inl index b550fb07b6..6fc2fc4ff7 100644 --- a/include/Core/Castor3D/Cache/CacheView.inl +++ b/include/Core/Castor3D/Cache/CacheView.inl @@ -179,11 +179,15 @@ namespace castor3d } template< typename CacheT, EventType EventT > - inline void CacheViewT< CacheT, EventT >::remove( ElementKeyT const & name ) + inline typename CacheViewT< CacheT, EventT >::ElementObsT CacheViewT< CacheT, EventT >::remove( ElementKeyT const & name ) { - if ( ElementCacheTraitsT::isElementObsNull( tryRemove( name ) ) ) + auto result = tryRemove( name ); + + if ( ElementCacheTraitsT::isElementObsNull( result ) ) { m_cache.reportUnknown( name ); } + + return result; } } diff --git a/include/Core/Castor3D/Engine.hpp b/include/Core/Castor3D/Engine.hpp index fae2621596..fad5936bec 100644 --- a/include/Core/Castor3D/Engine.hpp +++ b/include/Core/Castor3D/Engine.hpp @@ -1075,7 +1075,7 @@ namespace castor3d DECLARE_CACHE_MEMBER( overlay, Overlay ); DECLARE_CACHE_MEMBER( scene, Scene ); DECLARE_CACHE_MEMBER( listener, FrameListener ); - FrameListenerWPtr m_defaultListener; + FrameListenerRPtr m_defaultListener{}; std::map< castor::String, RenderWindow * > m_renderWindows; std::map< RenderWindow const *, UserInputListenerSPtr > m_windowInputListeners; UserInputListenerSPtr m_userInputListener; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index 7483052afc..a5ab0f8b4f 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -201,9 +201,9 @@ namespace castor3d return m_borders; } - ControlsManagerSPtr getControlsManager()const noexcept + ControlsManagerRPtr getControlsManager()const noexcept { - return m_ctrlManager.lock(); + return m_ctrlManager; } MouseCursor getCursor()const noexcept @@ -612,7 +612,7 @@ namespace castor3d castor::Point4ui m_borders{}; BorderPanelOverlayRPtr m_background{}; std::vector< ControlRPtr > m_children{}; - ControlsManagerWPtr m_ctrlManager{}; + ControlsManagerRPtr m_ctrlManager{}; bool m_moving{}; bool m_resizingN{}; bool m_resizingW{}; diff --git a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp index bab07c5980..ed7d961f02 100644 --- a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp +++ b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp @@ -110,9 +110,9 @@ namespace castor3d *\~french *\return L'objet parent. */ - SkeletonAnimationObjectSPtr getParent()const + SkeletonAnimationObjectRPtr getParent()const { - return m_parent.lock(); + return m_parent; } protected: @@ -127,7 +127,7 @@ namespace castor3d SkeletonAnimationObjectPtrArray m_children; //!\~english The parent object. //!\~french L'objet parent. - SkeletonAnimationObjectWPtr m_parent; + SkeletonAnimationObjectRPtr m_parent{}; //!\~english The bounding box. //!\~french La bounding box. castor::BoundingBox m_boundingBox; diff --git a/include/Core/Castor3D/Plugin/Plugin.hpp b/include/Core/Castor3D/Plugin/Plugin.hpp index 39e24627af..852ea6ba0f 100644 --- a/include/Core/Castor3D/Plugin/Plugin.hpp +++ b/include/Core/Castor3D/Plugin/Plugin.hpp @@ -120,7 +120,7 @@ namespace castor3d PluginType m_type; //!\~english The plug-in library. //!\~french La bibliothèque du plug-in. - castor::DynamicLibraryWPtr m_library; + castor::DynamicLibraryRPtr m_library{}; }; } diff --git a/include/Core/Castor3D/Render/Passes/PickingPass.hpp b/include/Core/Castor3D/Render/Passes/PickingPass.hpp index 80bb7b7599..e7f9174b68 100644 --- a/include/Core/Castor3D/Render/Passes/PickingPass.hpp +++ b/include/Core/Castor3D/Render/Passes/PickingPass.hpp @@ -113,7 +113,7 @@ namespace castor3d C3D_API static uint32_t const UboBindingPoint; private: - std::map< castor::String, GeometryWPtr > m_pickable; + std::map< castor::String, GeometryRPtr > m_pickable{}; }; } diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index 19dc12c202..1607fa7e74 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -402,9 +402,9 @@ namespace castor3d return m_index; } - FrameListenerSPtr getListener()const + FrameListenerRPtr getListener()const { - return m_listener.lock(); + return m_listener; } RenderDevice const & getDevice()const @@ -557,7 +557,7 @@ namespace castor3d ashes::PipelineShaderStageCreateInfoArray m_program; RenderQuadUPtr m_renderQuad; RenderTargetRPtr m_renderTarget{}; - FrameListenerWPtr m_listener; + FrameListenerRPtr m_listener{}; bool m_vsync{ false }; bool m_fullscreen{ false }; castor::Size m_size; diff --git a/include/Core/Castor3D/Scene/Scene.hpp b/include/Core/Castor3D/Scene/Scene.hpp index 7c9c74bb10..02b4bb621a 100644 --- a/include/Core/Castor3D/Scene/Scene.hpp +++ b/include/Core/Castor3D/Scene/Scene.hpp @@ -350,14 +350,14 @@ namespace castor3d FrameListener const & getListener()const { - CU_Require( !m_listener.expired() ); - return *m_listener.lock(); + CU_Require( m_listener ); + return *m_listener; } FrameListener & getListener() { - CU_Require( !m_listener.expired() ); - return *m_listener.lock(); + CU_Require( m_listener ); + return *m_listener; } bool isInitialised()const @@ -498,7 +498,7 @@ namespace castor3d SceneBackgroundSPtr m_background; LightFactorySPtr m_lightFactory; Fog m_fog; - FrameListenerWPtr m_listener; + FrameListenerRPtr m_listener{}; std::unique_ptr< EnvironmentMap > m_reflectionMap; bool m_needsSubsurfaceScattering{ false }; bool m_hasOpaqueObjects{ false }; diff --git a/include/Core/CastorUtils/Design/ResourceCacheBase.hpp b/include/Core/CastorUtils/Design/ResourceCacheBase.hpp index 91d46d3c37..f526f46828 100644 --- a/include/Core/CastorUtils/Design/ResourceCacheBase.hpp +++ b/include/Core/CastorUtils/Design/ResourceCacheBase.hpp @@ -323,7 +323,7 @@ namespace castor *\param[in] name Le nom d'élément. *\param[in] cleanup \p true si l'évènement doit être nettoyé. */ - void remove( ElementKeyT const & name + ElementPtrT remove( ElementKeyT const & name , bool cleanup = false ) { auto lock( castor::makeUniqueLock( *this ) ); @@ -333,6 +333,8 @@ namespace castor { this->reportUnknown( name ); } + + return result; } /** *\~english @@ -344,7 +346,7 @@ namespace castor *\param[in] name Le nom d'élément. *\param[in] cleanup \p true si l'évènement doit être nettoyé. */ - void removeNoLock( ElementKeyT const & name + ElementPtrT removeNoLock( ElementKeyT const & name , bool cleanup = false ) { auto result = this->doTryRemoveNoLock( name, cleanup ); @@ -353,6 +355,8 @@ namespace castor { this->reportUnknown( name ); } + + return result; } /** *\~english diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index ef01b2ec0e..e8fbe2511b 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -187,12 +187,12 @@ namespace castor3d m_listenerCache = castor::makeCache< FrameListener, castor::String, FrameListenerCacheTraits >( getLogger() , castor::DummyFunctorT< FrameListenerCache >{} , listenerClean ); - m_defaultListener = m_listenerCache->add( eng::defaultName ); + m_defaultListener = m_listenerCache->add( eng::defaultName ).lock().get(); m_shaderCache = makeCache( *this ); m_samplerCache = castor::makeCache< Sampler, castor::String, SamplerCacheTraits >( getLogger() - , GpuEventInitialiserT< SamplerCache >{ *m_defaultListener.lock() } - , CpuEventCleanerT< SamplerCache >{ *m_defaultListener.lock() } ); + , GpuEventInitialiserT< SamplerCache >{ *m_defaultListener } + , CpuEventCleanerT< SamplerCache >{ *m_defaultListener } ); m_materialCache = castor::makeCache< Material, castor::String, MaterialCacheTraits >( *this ); m_pluginCache = castor::makeCache< Plugin, castor::String, PluginCacheTraits >( *this ); m_overlayCache = castor::makeCache< Overlay, castor::String, OverlayCacheTraits >( *this ); @@ -455,9 +455,8 @@ namespace castor3d CpuFrameEvent * Engine::postEvent( CpuFrameEventUPtr event ) { CpuFrameEvent * result = nullptr; - FrameListenerSPtr listener = m_defaultListener.lock(); - if ( listener ) + if ( auto listener = m_defaultListener ) { result = event.get(); listener->postEvent( std::move( event ) ); @@ -476,9 +475,8 @@ namespace castor3d GpuFrameEvent * Engine::postEvent( GpuFrameEventUPtr event ) { GpuFrameEvent * result = nullptr; - FrameListenerSPtr listener = m_defaultListener.lock(); - if ( listener ) + if ( auto listener = m_defaultListener ) { result = event.get(); listener->postEvent( std::move( event ) ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index 6c5a6bc55e..d76bf8f6aa 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -305,7 +305,7 @@ namespace castor3d void Control::create( ControlsManagerSPtr ctrlManager ) { - m_ctrlManager = ctrlManager; + m_ctrlManager = ctrlManager.get(); if ( auto parent = getParent() ) { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp index 323b0804f0..557d6ced1a 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp @@ -12,7 +12,7 @@ namespace castor3d void SkeletonAnimationObject::addChild( SkeletonAnimationObjectSPtr object ) { CU_Require( object.get() != this ); - object->m_parent = shared_from_this(); + object->m_parent = this; m_children.push_back( object ); } } diff --git a/source/Core/Castor3D/Plugin/Plugin.cpp b/source/Core/Castor3D/Plugin/Plugin.cpp index 438cd24165..b96940fcbf 100644 --- a/source/Core/Castor3D/Plugin/Plugin.cpp +++ b/source/Core/Castor3D/Plugin/Plugin.cpp @@ -22,32 +22,32 @@ namespace castor3d , m_pfnGetRequiredVersion( nullptr ) , m_pfnGetName( nullptr ) , m_type( type ) - , m_library( library ) + , m_library( library.get() ) { - if ( !library->getFunction( m_pfnGetName, plugin::GetNameFunctionABIName ) ) + if ( !m_library->getFunction( m_pfnGetName, plugin::GetNameFunctionABIName ) ) { - castor::String strError = cuT( "Error encountered while loading dll [" ) + library->getPath().getFileName() + cuT( "] plug-in getName function : " ); + castor::String strError = cuT( "Error encountered while loading dll [" ) + m_library->getPath().getFileName() + cuT( "] plug-in getName function : " ); strError += castor::System::getLastErrorText(); CASTOR_PLUGIN_EXCEPTION( castor::string::stringCast< char >( strError ), true ); } - if ( !library->getFunction( m_pfnGetRequiredVersion, plugin::GetRequiredVersionFunctionABIName ) ) + if ( !m_library->getFunction( m_pfnGetRequiredVersion, plugin::GetRequiredVersionFunctionABIName ) ) { - castor::String strError = cuT( "Error encountered while loading dll [" ) + library->getPath().getFileName() + cuT( "] plug-in getRequiredVersion function : " ); + castor::String strError = cuT( "Error encountered while loading dll [" ) + m_library->getPath().getFileName() + cuT( "] plug-in getRequiredVersion function : " ); strError += castor::System::getLastErrorText(); CASTOR_PLUGIN_EXCEPTION( castor::string::stringCast< char >( strError ), true ); } - if ( !library->getFunction( m_pfnOnLoad, plugin::GetOnLoadFunctionABIName ) ) + if ( !m_library->getFunction( m_pfnOnLoad, plugin::GetOnLoadFunctionABIName ) ) { - castor::String strError = cuT( "Error encountered while loading dll [" ) + library->getPath().getFileName() + cuT( "] plug-in OnLoad function : " ); + castor::String strError = cuT( "Error encountered while loading dll [" ) + m_library->getPath().getFileName() + cuT( "] plug-in OnLoad function : " ); strError += castor::System::getLastErrorText(); CASTOR_PLUGIN_EXCEPTION( castor::string::stringCast< char >( strError ), true ); } - if ( !library->getFunction( m_pfnOnUnload, plugin::GetOnUnloadFunctionABIName ) ) + if ( !m_library->getFunction( m_pfnOnUnload, plugin::GetOnUnloadFunctionABIName ) ) { - castor::String strError = cuT( "Error encountered while loading dll [" ) + library->getPath().getFileName() + cuT( "] plug-in OnUnload function : " ); + castor::String strError = cuT( "Error encountered while loading dll [" ) + m_library->getPath().getFileName() + cuT( "] plug-in OnUnload function : " ); strError += castor::System::getLastErrorText(); CASTOR_PLUGIN_EXCEPTION( castor::string::stringCast< char >( strError ), true ); } @@ -86,11 +86,9 @@ namespace castor3d if ( m_pfnOnLoad ) { #if !defined( NDEBUG ) - auto library = m_library.lock(); - - if ( library ) + if ( m_library ) { - castor::Debug::loadModule( *library ); + castor::Debug::loadModule( *m_library ); } #endif @@ -105,11 +103,9 @@ namespace castor3d m_pfnOnUnload( getEngine() ); #if !defined( NDEBUG ) - auto library = m_library.lock(); - - if ( library ) + if ( m_library ) { - castor::Debug::unloadModule( *library ); + castor::Debug::unloadModule( *m_library ); } #endif } diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index 26385776b1..0976a3cf30 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -344,7 +344,7 @@ namespace castor3d , m_commandBufferPool{ m_device->createCommandPool( m_device.getGraphicsQueueFamilyIndex() , VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT ) } , m_resources{ engine.getGraphResourceHandler() } - , m_listener{ getEngine()->addNewFrameListener( getName() + castor::string::toString( m_index ) ) } + , m_listener{ getEngine()->addNewFrameListener( getName() + castor::string::toString( m_index ) ).lock().get() } , m_size{ size } , m_loading{ engine.isThreaded() } , m_configUbo{ m_device.uboPool->getBuffer< Configuration >( 0u ) } @@ -387,8 +387,7 @@ namespace castor3d { log::debug << "Destroyed render window " << m_index << std::endl; auto & engine = *getEngine(); - auto listener = getListener(); - engine.removeFrameListener( getName() + castor::string::toString( m_index ) ); + auto listener = engine.removeFrameListener( getName() + castor::string::toString( m_index ) ); #if C3D_PersistLoadingScreen if ( engine.isThreaded() ) diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index 6fcb90a946..e14d94d279 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -104,7 +104,7 @@ namespace castor3d , m_rootObjectNode{ std::make_shared< SceneNode >( ObjectRootNode, *this ) } , m_background{ std::make_shared< ColourBackground >( engine, *this ) } , m_lightFactory{ std::make_shared< LightFactory >() } - , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ) } + , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ).lock().get() } , m_renderNodes{ castor::makeUnique< SceneRenderNodes >( *this ) } { m_rootCameraNode->attachTo( *m_rootNode ); diff --git a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp index 702d53f2bd..489fd45130 100644 --- a/source/Core/CastorUtils/Graphics/StbImageLoader.cpp +++ b/source/Core/CastorUtils/Graphics/StbImageLoader.cpp @@ -62,7 +62,7 @@ namespace castor , PixelComponent::eBlue , *redChannel , *result ); - castor::copyBufferComponents( PixelComponent::eAlpha + castor::copyBufferComponents( PixelComponent::eRed , PixelComponent::eAlpha , *alphaChannel , *result ); @@ -145,7 +145,7 @@ namespace castor , PixelComponent::eBlue , *redChannel , *result ); - castor::copyBufferComponents( PixelComponent::eAlpha + castor::copyBufferComponents( PixelComponent::eRed , PixelComponent::eAlpha , *alphaChannel , *result ); diff --git a/test/CastorTest/UnitTest.hpp b/test/CastorTest/UnitTest.hpp index cb670d6032..30f0b3e2fb 100644 --- a/test/CastorTest/UnitTest.hpp +++ b/test/CastorTest/UnitTest.hpp @@ -241,7 +241,7 @@ namespace Testing static std::string get( ValueT const * value ) { std::stringstream stream; - stream << ( value ? toString( *value ) : std::string{ "null_rptr" } ); + stream << ( value ? toString( *value ) : std::string{ "null_crptr" } ); return stream.str(); } }; @@ -263,7 +263,7 @@ namespace Testing static std::string get( std::unique_ptr< ValueT > const & value ) { std::stringstream stream; - stream << ( value ? toString( *value ) : std::string{ "null_sptr" } ); + stream << ( value ? toString( *value ) : std::string{ "null_uptr" } ); return stream.str(); } }; diff --git a/tools/CastorViewer/MainFrame.cpp b/tools/CastorViewer/MainFrame.cpp index a7eebd1485..afc46de5ef 100644 --- a/tools/CastorViewer/MainFrame.cpp +++ b/tools/CastorViewer/MainFrame.cpp @@ -210,7 +210,7 @@ namespace CastorViewer } } - void MainFrame::select( castor3d::GeometrySPtr geometry, castor3d::SubmeshSPtr submesh ) + void MainFrame::select( castor3d::GeometryRPtr geometry, castor3d::SubmeshRPtr submesh ) { if ( m_sceneObjects && m_sceneObjects->getList() ) { @@ -490,8 +490,8 @@ namespace CastorViewer auto engine = wxGetApp().getCastor(); m_sceneObjects->getList()->unloadScene(); - m_mainCamera.reset(); - m_sceneNode.reset(); + m_mainCamera = {}; + m_sceneNode = {}; if ( engine->isThreaded() ) { diff --git a/tools/CastorViewer/MainFrame.hpp b/tools/CastorViewer/MainFrame.hpp index ee8e2fc6ce..8929bb95d2 100644 --- a/tools/CastorViewer/MainFrame.hpp +++ b/tools/CastorViewer/MainFrame.hpp @@ -59,7 +59,7 @@ namespace CastorViewer bool initialise( GuiCommon::SplashScreen & splashScreen ); void loadScene( wxString const & fileName = wxEmptyString ); void toggleFullScreen( bool fullscreen ); - void select( castor3d::GeometrySPtr geometry, castor3d::SubmeshSPtr submesh ); + void select( castor3d::GeometryRPtr geometry, castor3d::SubmeshRPtr submesh ); private: void doInitialiseTimers(); @@ -125,8 +125,8 @@ namespace CastorViewer #endif GuiCommon::TreeListContainerT< GuiCommon::SceneObjectsList > * m_sceneObjects{ nullptr }; castor3d::SceneRPtr m_mainScene{}; - castor3d::CameraWPtr m_mainCamera; - castor3d::SceneNodeWPtr m_sceneNode; + castor3d::CameraRPtr m_mainCamera{}; + castor3d::SceneNodeRPtr m_sceneNode{}; castor::Path m_filePath; wxString m_currentPerspective; wxString m_fullScreenPerspective; diff --git a/tools/CastorViewer/MouseNodeEvent.cpp b/tools/CastorViewer/MouseNodeEvent.cpp index 53ab4a1262..6a5e148704 100644 --- a/tools/CastorViewer/MouseNodeEvent.cpp +++ b/tools/CastorViewer/MouseNodeEvent.cpp @@ -7,7 +7,7 @@ namespace CastorViewer , float dy , float dz ) : CpuFrameEvent( castor3d::EventType::ePostRender ) - , m_node( node ) + , m_node( node.get() ) , m_dx( dx ) , m_dy( dy ) , m_dz( dz ) diff --git a/tools/CastorViewer/MouseNodeEvent.hpp b/tools/CastorViewer/MouseNodeEvent.hpp index 09f4cbe87c..b0e40ef176 100644 --- a/tools/CastorViewer/MouseNodeEvent.hpp +++ b/tools/CastorViewer/MouseNodeEvent.hpp @@ -21,10 +21,10 @@ namespace CastorViewer , float dz ); protected: - castor3d::SceneNodeWPtr m_node; - float m_dx; - float m_dy; - float m_dz; + castor3d::SceneNodeRPtr m_node{}; + float m_dx{}; + float m_dy{}; + float m_dz{}; }; } diff --git a/tools/CastorViewer/RenderPanel.cpp b/tools/CastorViewer/RenderPanel.cpp index 3eb115f87b..6246011145 100644 --- a/tools/CastorViewer/RenderPanel.cpp +++ b/tools/CastorViewer/RenderPanel.cpp @@ -175,15 +175,15 @@ namespace CastorViewer { castor::Logger::logInfo( cuT( "Cleaning up RenderPanel." ) ); doStopMovement(); - m_selectedSubmesh.reset(); - m_selectedGeometry.reset(); + m_selectedSubmesh = {}; + m_selectedGeometry = {}; m_currentState = nullptr; m_nodesStates.clear(); m_camera = {}; m_scene = {}; m_currentNode = nullptr; m_lightsNode = nullptr; - m_listener.reset(); + m_listener = {}; m_cubeManager.reset(); wxGetApp().getCastor()->postEvent( makeCpuCleanupEvent( *m_renderWindow ) ); castor::Logger::logInfo( cuT( "RenderPanel cleaned up." ) ); @@ -411,7 +411,7 @@ namespace CastorViewer auto oldSubmesh = m_selectedSubmesh; auto oldGeometry = m_selectedGeometry; - if ( oldGeometry != geometry ) + if ( oldGeometry != geometry.get() ) { m_selectedSubmesh = nullptr; @@ -425,14 +425,14 @@ namespace CastorViewer m_cubeManager->displayObject( *geometry, *submesh ); } - m_selectedGeometry = geometry; + m_selectedGeometry = geometry.get(); } - if ( oldSubmesh != submesh ) + if ( oldSubmesh != submesh.get() ) { if ( submesh ) { - m_selectedSubmesh = submesh; + m_selectedSubmesh = submesh.get(); wxGetApp().getMainFrame()->select( m_selectedGeometry, m_selectedSubmesh ); } } diff --git a/tools/CastorViewer/RenderPanel.hpp b/tools/CastorViewer/RenderPanel.hpp index adc76c9e63..f80fcebdf5 100644 --- a/tools/CastorViewer/RenderPanel.hpp +++ b/tools/CastorViewer/RenderPanel.hpp @@ -153,12 +153,12 @@ namespace CastorViewer std::map< castor::String, GuiCommon::NodeStatePtr > m_nodesStates{}; GuiCommon::NodeState * m_currentState{}; - castor3d::GeometrySPtr m_selectedGeometry{}; - castor3d::SubmeshSPtr m_selectedSubmesh{}; + castor3d::GeometryRPtr m_selectedGeometry{}; + castor3d::SubmeshRPtr m_selectedSubmesh{}; castor3d::CameraRPtr m_camera{}; castor3d::SceneRPtr m_scene{}; - castor3d::FrameListenerSPtr m_listener{}; + castor3d::FrameListenerRPtr m_listener{}; castor3d::MouseCursor m_cursor{}; std::unique_ptr< wxClipboard > m_clipboard{}; diff --git a/tools/CastorViewer/RotateNodeEvent.cpp b/tools/CastorViewer/RotateNodeEvent.cpp index 9a4e45607f..54f7678ddf 100644 --- a/tools/CastorViewer/RotateNodeEvent.cpp +++ b/tools/CastorViewer/RotateNodeEvent.cpp @@ -24,16 +24,14 @@ namespace CastorViewer void RotateNodeEvent::doApply() { - castor3d::SceneNodeSPtr node = m_node.lock(); - - if ( node && ( rotevt::isNonZero( m_dx ) || rotevt::isNonZero( m_dy ) || rotevt::isNonZero( m_dz ) ) ) + if ( m_node && ( rotevt::isNonZero( m_dx ) || rotevt::isNonZero( m_dy ) || rotevt::isNonZero( m_dz ) ) ) { auto x = castor::Quaternion::fromAxisAngle( castor::Point3f{ 1.0, 0.0, 0.0 }, castor::Angle::fromDegrees( m_dx ) ); auto y = castor::Quaternion::fromAxisAngle( castor::Point3f{ 0.0, 1.0, 0.0 }, castor::Angle::fromDegrees( m_dy ) ); auto z = castor::Quaternion::fromAxisAngle( castor::Point3f{ 0.0, 0.0, 1.0 }, castor::Angle::fromDegrees( m_dz ) ); - node->rotate( x ); - node->rotate( y ); - node->rotate( z ); + m_node->rotate( x ); + m_node->rotate( y ); + m_node->rotate( z ); } m_dx = 0; diff --git a/tools/CastorViewer/TranslateNodeEvent.cpp b/tools/CastorViewer/TranslateNodeEvent.cpp index 1b4ce923ee..cf182f28ef 100644 --- a/tools/CastorViewer/TranslateNodeEvent.cpp +++ b/tools/CastorViewer/TranslateNodeEvent.cpp @@ -14,18 +14,16 @@ namespace CastorViewer void TranslateNodeEvent::doApply() { - castor3d::SceneNodeSPtr node = m_node.lock(); - - if ( node ) + if ( m_node ) { - castor::Quaternion orientation = node->getOrientation(); + castor::Quaternion orientation = m_node->getOrientation(); castor::Point3f right{ 1.0f, 0.0f, 0.0f }; castor::Point3f up{ 0.0f, 1.0f, 0.0f }; castor::Point3f front{ 0.0f, 0.0f, 1.0f }; orientation.transform( right, right ); orientation.transform( up, up ); orientation.transform( front, front ); - node->translate( ( right * m_dx ) + ( up * m_dy ) + ( front * m_dz ) ); + m_node->translate( ( right * m_dx ) + ( up * m_dy ) + ( front * m_dz ) ); } m_dx = 0; diff --git a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp index 20094e5700..1bf40f9231 100644 --- a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp @@ -14,7 +14,7 @@ namespace GuiCommon AnimatedObjectTreeItemProperty::AnimatedObjectTreeItemProperty( castor3d::Engine * engine, bool editable, castor3d::AnimatedObjectSPtr object ) : TreeItemProperty( engine, editable ) - , m_object( object ) + , m_object( object.get() ) { PROPERTY_CATEGORY_ANIMATED_OBJECT = _( "Animated Object: " ); diff --git a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp index d13fd2888b..a66daa0596 100644 --- a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp @@ -42,9 +42,9 @@ namespace GuiCommon *\brief Récupère l'AnimatedObject. *\return La valeur. */ - inline castor3d::AnimatedObjectSPtr getObject() + inline castor3d::AnimatedObjectRPtr getObject() { - return m_object.lock(); + return m_object; } private: @@ -54,7 +54,7 @@ namespace GuiCommon void doCreateProperties( wxPGEditor * editor, wxPropertyGrid * grid )override; private: - castor3d::AnimatedObjectWPtr m_object; + castor3d::AnimatedObjectRPtr m_object{}; }; } diff --git a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp index 2f807e7e28..863cd837a2 100644 --- a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp @@ -681,7 +681,7 @@ namespace GuiCommon , castor3d::Scene & scene , wxWindow * parent ) : TreeItemProperty{ pass->getOwner()->getEngine(), editable } - , m_pass{ pass } + , m_pass{ pass.get() } , m_scene{ scene } , m_parent{ parent } { @@ -694,16 +694,14 @@ namespace GuiCommon static wxString PROPERTY_PASS_SHADER = _( "Shader" ); static wxString PROPERTY_PASS_EDIT_SHADER = _( "View Shaders..." ); - castor3d::PassSPtr pass = getPass(); - - if ( pass ) + if ( auto pass = getPass() ) { addProperty( grid, PROPERTY_CATEGORY_PASS + wxString( pass->getOwner()->getName() ) ); PassTreeGatherer::submit( *pass, this, grid ); addProperty( grid, PROPERTY_PASS_SHADER, editor , [this]( wxVariant const & var ) { - castor3d::PassSPtr lpass = getPass(); + auto lpass = getPass(); ShaderSources sources = PassShaderGatherer::submit( *lpass, m_scene ); ShaderDialog * editor = new ShaderDialog{ lpass->getOwner()->getEngine() , std::move( sources ) diff --git a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp index e4727794c4..27a3d8ed4b 100644 --- a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp @@ -49,9 +49,9 @@ namespace GuiCommon *\brief Récupère la gàomàtrie *\return La valeur */ - inline castor3d::PassSPtr getPass() + inline castor3d::PassRPtr getPass() { - return m_pass.lock(); + return m_pass; } private: @@ -61,7 +61,7 @@ namespace GuiCommon void doCreateProperties( wxPGEditor * editor, wxPropertyGrid * grid )override; private: - castor3d::PassWPtr m_pass; + castor3d::PassRPtr m_pass{}; castor3d::Scene & m_scene; wxWindow * m_parent; }; diff --git a/tools/GuiCommon/System/SceneObjectsList.cpp b/tools/GuiCommon/System/SceneObjectsList.cpp index 9247201af6..d6fa0ce200 100644 --- a/tools/GuiCommon/System/SceneObjectsList.cpp +++ b/tools/GuiCommon/System/SceneObjectsList.cpp @@ -370,14 +370,14 @@ namespace GuiCommon m_scene = {}; } - void SceneObjectsList::select( castor3d::GeometrySPtr geometry - , castor3d::SubmeshSPtr submesh ) + void SceneObjectsList::select( castor3d::GeometryRPtr geometry + , castor3d::SubmeshRPtr submesh ) { - auto itg = m_ids.find( geometry.get() ); + auto itg = m_ids.find( geometry ); if ( itg != m_ids.end() ) { - auto its = itg->second.find( submesh.get() ); + auto its = itg->second.find( submesh ); if ( its != itg->second.end() ) { diff --git a/tools/GuiCommon/System/SceneObjectsList.hpp b/tools/GuiCommon/System/SceneObjectsList.hpp index afabd09cf5..65351cce5d 100644 --- a/tools/GuiCommon/System/SceneObjectsList.hpp +++ b/tools/GuiCommon/System/SceneObjectsList.hpp @@ -30,8 +30,8 @@ namespace GuiCommon , castor3d::RenderWindow & window , castor3d::SceneRPtr scene ); void unloadScene(); - void select( castor3d::GeometrySPtr geometry - , castor3d::SubmeshSPtr submesh ); + void select( castor3d::GeometryRPtr geometry + , castor3d::SubmeshRPtr submesh ); protected: void doAddSubmesh( castor3d::GeometryRPtr geometry From 381ca9269fc3873c9ab0a315aa9d047b819e5def Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Thu, 6 Apr 2023 21:14:02 +0200 Subject: [PATCH 23/35] Castor3D: Object caches now use unique_ptr instead of shared_ptr. --- demos/CastorDvpTD/EnemySpawner.cpp | 6 +- demos/CastorDvpTD/Game.cpp | 20 +-- demos/CastorDvpTD/Game.hpp | 6 +- demos/CastorDvpTD/RenderPanel.cpp | 10 +- demos/CastorDvpTD/RenderPanel.hpp | 2 +- .../Core/Castor3D/Cache/ObjectCacheBase.hpp | 4 +- .../Core/Castor3D/Cache/SceneNodeCache.hpp | 3 - include/Core/Castor3D/Castor3D.natvis | 12 ++ .../Castor3D/Miscellaneous/LoadingScreen.hpp | 2 +- .../EnvironmentMap/EnvironmentMapPass.hpp | 6 +- include/Core/Castor3D/Render/Ray.hpp | 2 +- include/Core/Castor3D/Render/RenderWindow.hpp | 4 +- .../Castor3D/Render/ShadowMap/ShadowMap.hpp | 2 +- .../Render/ShadowMap/ShadowMapDirectional.hpp | 1 - .../Core/Castor3D/Scene/Light/LightModule.hpp | 2 +- .../Scene/ParticleSystem/ParticleSystem.hpp | 6 +- include/Core/Castor3D/Scene/Scene.hpp | 20 +-- .../Core/Castor3D/Scene/SceneFileParser.hpp | 13 +- include/Core/Castor3D/Scene/SceneImporter.hpp | 6 +- include/Core/Castor3D/Scene/SceneModule.hpp | 55 +++----- source/Core/Castor3D/Cache/SceneNodeCache.cpp | 19 ++- source/Core/Castor3D/Cache/TextureCache.cpp | 10 ++ .../Castor3D/Miscellaneous/LoadingScreen.cpp | 16 ++- .../Render/EnvironmentMap/EnvironmentMap.cpp | 26 ++-- .../EnvironmentMap/EnvironmentMapPass.cpp | 8 +- source/Core/Castor3D/Render/Ray.cpp | 2 +- source/Core/Castor3D/Render/RenderWindow.cpp | 8 +- .../Render/ShadowMap/ShadowMapDirectional.cpp | 2 +- .../Render/ShadowMap/ShadowMapSpot.cpp | 2 +- source/Core/Castor3D/Scene/BillboardList.cpp | 3 + source/Core/Castor3D/Scene/Camera.cpp | 2 + source/Core/Castor3D/Scene/Geometry.cpp | 2 + source/Core/Castor3D/Scene/Light/Light.cpp | 2 + source/Core/Castor3D/Scene/MovableObject.cpp | 2 + .../Scene/ParticleSystem/ParticleSystem.cpp | 2 +- source/Core/Castor3D/Scene/Scene.cpp | 89 ++++++------ .../Core/Castor3D/Scene/SceneFileParser.cpp | 3 + .../Scene/SceneFileParser_Parsers.cpp | 129 +++++++++--------- source/Core/Castor3D/Scene/SceneImporter.cpp | 23 ++-- source/Core/Castor3D/Scene/SceneModule.cpp | 1 + source/Core/Castor3D/Scene/SceneNode.cpp | 2 + source/Core/SceneExporter/CscnExporter.cpp | 2 +- .../AtmosphereScattering_Parsers.cpp | 4 +- .../AssimpImporter/AssimpLightImporter.cpp | 14 +- .../AssimpSceneNodeImporter.cpp | 5 +- test/Castor3D/Castor3DTestCommon.cpp | 40 +++--- .../CastorMeshConverter.cpp | 50 ++++--- tools/CastorViewer/MouseNodeEvent.cpp | 4 +- tools/CastorViewer/MouseNodeEvent.hpp | 2 +- tools/CastorViewer/RenderPanel.cpp | 16 +-- tools/CastorViewer/RenderPanel.hpp | 4 +- tools/CastorViewer/RotateNodeEvent.cpp | 2 +- tools/CastorViewer/RotateNodeEvent.hpp | 2 +- tools/CastorViewer/TranslateNodeEvent.cpp | 2 +- tools/CastorViewer/TranslateNodeEvent.hpp | 2 +- tools/GuiCommon/System/CubeBoxManager.cpp | 28 ++-- tools/GuiCommon/System/CubeBoxManager.hpp | 24 ++-- 57 files changed, 380 insertions(+), 356 deletions(-) diff --git a/demos/CastorDvpTD/EnemySpawner.cpp b/demos/CastorDvpTD/EnemySpawner.cpp index 1606a18704..41aa0fdc44 100644 --- a/demos/CastorDvpTD/EnemySpawner.cpp +++ b/demos/CastorDvpTD/EnemySpawner.cpp @@ -56,10 +56,10 @@ namespace castortd if ( m_enemiesCache.empty() ) { castor::String name = cuT( "EnemyCube_" ) + std::to_string( m_totalSpawned ); - auto baseNode = game.getScene().addNewSceneNode( name + cuT( "_Base" ) ).lock(); + auto baseNode = game.getScene().addNewSceneNode( name + cuT( "_Base" ) ); baseNode->setPosition( game.convert( castor::Point2i{ cell.m_x, cell.m_y - 1 } ) + castor::Point3f{ 0, game.getCellHeight(), 0 } ); baseNode->attachTo( *game.getMapNode() ); - auto node = game.getScene().addNewSceneNode( name ).lock(); + auto node = game.getScene().addNewSceneNode( name ); node->setOrientation( castor::Quaternion::fromAxisAngle( castor::Point3f{ 1, 0, 1 }, 45.0_degrees ) ); node->attachTo( *baseNode ); auto geometry = game.getScene().createGeometry( name @@ -72,7 +72,7 @@ namespace castortd geometry->setMaterial( *submesh, game.getEnemyMaterial() ); } - game.getScene().addGeometry( geometry ); + game.getScene().addGeometry( std::move( geometry ) ); auto light = game.getScene().createLight( name , game.getScene() diff --git a/demos/CastorDvpTD/Game.cpp b/demos/CastorDvpTD/Game.cpp index ad185fec54..7ce4575e32 100644 --- a/demos/CastorDvpTD/Game.cpp +++ b/demos/CastorDvpTD/Game.cpp @@ -118,7 +118,7 @@ namespace castortd { 17, 27 }, } { - m_mapNode = m_scene.findSceneNode( cuT( "MapBase" ) ).lock(); + m_mapNode = m_scene.findSceneNode( cuT( "MapBase" ) ); m_mapCubeMesh = m_scene.findMesh( cuT( "MapCube" ) ); m_mapCubeMaterial = m_scene.findMaterial( cuT( "MapCube" ) ); m_shortRangeTowerMesh = m_scene.findMesh( cuT( "ShortRange" ) ); @@ -129,7 +129,7 @@ namespace castortd m_bulletMaterial = m_scene.findMaterial( cuT( "Bullet" ) ); m_boulderMesh = m_scene.findMesh( cuT( "Boulder" ) ); m_boulderMaterial = m_scene.findMaterial( cuT( "Boulder" ) ); - m_targetNode = m_scene.findSceneNode( cuT( "Target" ) ).lock(); + m_targetNode = m_scene.findSceneNode( cuT( "Target" ) ); m_updateTimer = castor::makeUnique< castor3d::FramePassTimer >( m_scene.getEngine()->getRenderSystem()->getRenderDevice().makeContext() , "CastorDvpTD/Update" ); m_scene.getEngine()->registerTimer( "CastorDvpTD/Update", *m_updateTimer ); @@ -337,7 +337,7 @@ namespace castortd if ( m_bulletsCache.empty() ) { castor::String name = cuT( "Bullet_" ) + castor::string::toString( ++m_totalBullets ); - auto node = m_scene.addNewSceneNode( name ).lock(); + auto node = m_scene.addNewSceneNode( name ); auto geometry = m_scene.createGeometry( name , m_scene , *node @@ -350,7 +350,7 @@ namespace castortd geometry->setMaterial( *submesh, m_bulletMaterial.lock().get() ); } - m_scene.addGeometry( geometry ); + m_scene.addGeometry( std::move( geometry ) ); m_bullets.emplace_back( speed, damage, *node, target ); } else @@ -370,7 +370,7 @@ namespace castortd if ( m_bouldersCache.empty() ) { castor::String name = cuT( "Boulder_" ) + castor::string::toString( ++m_totalBoulders ); - auto node = m_scene.addNewSceneNode( name ).lock(); + auto node = m_scene.addNewSceneNode( name ); auto geometry = m_scene.createGeometry( name , m_scene , *node @@ -383,7 +383,7 @@ namespace castortd geometry->setMaterial( *submesh, m_boulderMaterial.lock().get() ); } - m_scene.addGeometry( geometry ); + m_scene.addGeometry( std::move( geometry ) ); m_boulders.emplace_back( speed, damage, *node, target ); } else @@ -635,7 +635,7 @@ namespace castortd void Game::doAddMapCube( Cell & cell ) { castor::String name = cuT( "MapCube_" ) + std::to_string( cell.m_x ) + cuT( "x" ) + std::to_string( cell.m_y ); - auto node = m_scene.addNewSceneNode( name ).lock(); + auto node = m_scene.addNewSceneNode( name ); auto geometry = m_scene.createGeometry( name , m_scene , *node @@ -648,8 +648,8 @@ namespace castortd geometry->setMaterial( *submesh, m_mapCubeMaterial.lock().get() ); } - m_scene.addGeometry( geometry ); m_lastMapCube = geometry.get(); + m_scene.addGeometry( std::move( geometry ) ); cell.m_state = Cell::State::Empty; } @@ -680,7 +680,7 @@ namespace castortd void Game::doAddTower( Cell & cell, Tower::CategoryPtr && category ) { castor::String name = cuT( "Tower_" ) + std::to_string( cell.m_x ) + cuT( "x" ) + std::to_string( cell.m_y ); - auto node = m_scene.addNewSceneNode( name ).lock(); + auto node = m_scene.addNewSceneNode( name ); node->setPosition( convert( castor::Point2i{ cell.m_x, cell.m_y } ) + castor::Point3f{ 0, m_cellDimensions[1], 0 } ); node->attachTo( *m_mapNode ); auto mesh = doSelectMesh( *category ); @@ -726,7 +726,7 @@ namespace castortd game::doUpdateMaterials( *tower , category->getKind() , m_scene.getMaterialView() ); - m_scene.addGeometry( tower ); + m_scene.addGeometry( std::move( tower ) ); cell.m_state = Cell::State::Tower; category->setAttackAnimationTime( time ); animGroup->startAnimation( category->getAttackAnimationName() ); diff --git a/demos/CastorDvpTD/Game.hpp b/demos/CastorDvpTD/Game.hpp index 24e1fdd2ea..923343d58d 100644 --- a/demos/CastorDvpTD/Game.hpp +++ b/demos/CastorDvpTD/Game.hpp @@ -99,7 +99,7 @@ namespace castortd return m_scene; } - castor3d::SceneNodeSPtr getMapNode()const + castor3d::SceneNodeRPtr getMapNode()const { return m_mapNode; } @@ -157,8 +157,8 @@ namespace castortd Hud m_hud; Path m_path; castor::Point3f m_cellDimensions; - castor3d::SceneNodeSPtr m_mapNode; - castor3d::SceneNodeSPtr m_targetNode; + castor3d::SceneNodeRPtr m_mapNode; + castor3d::SceneNodeRPtr m_targetNode; castor3d::MeshResPtr m_mapCubeMesh; castor3d::MaterialResPtr m_mapCubeMaterial; castor3d::MeshResPtr m_shortRangeTowerMesh; diff --git a/demos/CastorDvpTD/RenderPanel.cpp b/demos/CastorDvpTD/RenderPanel.cpp index 07640cfb55..e4ac13d992 100644 --- a/demos/CastorDvpTD/RenderPanel.cpp +++ b/demos/CastorDvpTD/RenderPanel.cpp @@ -88,14 +88,14 @@ namespace castortd if ( scene ) { - m_marker = scene->findSceneNode( cuT( "MapMouse" ) ).lock().get(); + m_marker = scene->findSceneNode( cuT( "MapMouse" ) ); m_marker->setVisible( false ); m_listener = m_renderWindow->getListener(); using LockType = std::unique_lock< castor3d::CameraCache >; LockType lock{ castor::makeUniqueLock( scene->getCameraCache() ) }; - auto camera = scene->getCameraCache().begin()->second; + auto camera = scene->getCameraCache().begin()->second.get(); m_renderWindow->addPickingScene( *scene ); m_cameraState = std::make_unique< GuiCommon::NodeState >( scene->getListener(), camera->getParent(), true ); m_timers[size_t( TimerID::eMouse )]->Start( 30 ); @@ -135,11 +135,11 @@ namespace castortd return result; } - void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometrySPtr geometry ) + void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry ) { auto curGeometry = m_selectedGeometry; - if ( geometry.get() != curGeometry ) + if ( geometry != curGeometry ) { bool freeCell = false; @@ -197,7 +197,7 @@ namespace castortd break; } - m_selectedGeometry = geometry.get(); + m_selectedGeometry = geometry; } } diff --git a/demos/CastorDvpTD/RenderPanel.hpp b/demos/CastorDvpTD/RenderPanel.hpp index 9757f22fac..f622010226 100644 --- a/demos/CastorDvpTD/RenderPanel.hpp +++ b/demos/CastorDvpTD/RenderPanel.hpp @@ -42,7 +42,7 @@ namespace castortd float doTransformY( int y ); int doTransformX( float x ); int doTransformY( float y ); - void doUpdateSelectedGeometry( castor3d::GeometrySPtr geometry ); + void doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry ); void doUpgradeTowerDamage(); void doUpgradeTowerSpeed(); void doUpgradeTowerRange(); diff --git a/include/Core/Castor3D/Cache/ObjectCacheBase.hpp b/include/Core/Castor3D/Cache/ObjectCacheBase.hpp index 3b95d90e7d..2c82ddf7b0 100644 --- a/include/Core/Castor3D/Cache/ObjectCacheBase.hpp +++ b/include/Core/Castor3D/Cache/ObjectCacheBase.hpp @@ -133,11 +133,11 @@ namespace castor3d if ( m_merge ) { - for ( auto it : *this ) + for ( auto & it : *this ) { m_merge( *this , destination.m_resources - , it.second + , std::move( it.second ) , destination.m_rootCameraNode , destination.m_rootObjectNode ); } diff --git a/include/Core/Castor3D/Cache/SceneNodeCache.hpp b/include/Core/Castor3D/Cache/SceneNodeCache.hpp index 78ef2d4dbb..3325ac38d2 100644 --- a/include/Core/Castor3D/Cache/SceneNodeCache.hpp +++ b/include/Core/Castor3D/Cache/SceneNodeCache.hpp @@ -56,9 +56,6 @@ namespace castor3d *\param[in] detach Le détacheur d'objet (d'un noeud de scène). */ C3D_API ObjectCacheT( Scene & scene - , SceneNodeRPtr rootNode - , SceneNodeRPtr rootCameraNode - , SceneNodeRPtr rootObjectNode , ElementInitialiserT initialise , ElementCleanerT clean , ElementMergerT merge diff --git a/include/Core/Castor3D/Castor3D.natvis b/include/Core/Castor3D/Castor3D.natvis index d057266e65..6170252c9d 100644 --- a/include/Core/Castor3D/Castor3D.natvis +++ b/include/Core/Castor3D/Castor3D.natvis @@ -119,9 +119,21 @@ + + {m_name} + + m_name + m_owner + m_type + m_sceneNode + m_notifyIndex + + + {m_name}({m_meshName}) + (castor3d::MovableObject *)this,nd m_ids m_mesh m_meshName diff --git a/include/Core/Castor3D/Miscellaneous/LoadingScreen.hpp b/include/Core/Castor3D/Miscellaneous/LoadingScreen.hpp index 6f014176af..bd6e0d613f 100644 --- a/include/Core/Castor3D/Miscellaneous/LoadingScreen.hpp +++ b/include/Core/Castor3D/Miscellaneous/LoadingScreen.hpp @@ -209,7 +209,7 @@ namespace castor3d SceneBackground & m_background; VkRenderPass m_renderPass; castor::Size m_renderSize; - CameraSPtr m_camera; + CameraRPtr m_camera; SceneCullerUPtr m_culler; Texture m_colour; Texture m_depth; diff --git a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.hpp b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.hpp index 29f887d3c0..a6f9a7a002 100644 --- a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.hpp +++ b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.hpp @@ -52,7 +52,7 @@ namespace castor3d C3D_API EnvironmentMapPass( crg::FrameGraph & graph , RenderDevice const & device , EnvironmentMap & environmentMap - , SceneNodeSPtr faceNode + , SceneNodeUPtr faceNode , uint32_t index , CubeMapFace face , SceneBackground & background ); @@ -110,10 +110,10 @@ namespace castor3d RenderDevice const & m_device; crg::FramePassGroup & m_graph; SceneBackground & m_background; - SceneNodeSPtr m_node; + SceneNodeUPtr m_node; uint32_t m_index; CubeMapFace m_face; - CameraSPtr m_camera; + CameraUPtr m_camera; SceneNode const * m_currentNode{}; SceneCullerUPtr m_culler; CameraUbo m_cameraUbo; diff --git a/include/Core/Castor3D/Render/Ray.hpp b/include/Core/Castor3D/Render/Ray.hpp index 3e05a2eb49..2d8b461b63 100644 --- a/include/Core/Castor3D/Render/Ray.hpp +++ b/include/Core/Castor3D/Render/Ray.hpp @@ -147,7 +147,7 @@ namespace castor3d *\param[out] distance Reçoit la distance. *\return \p castor::Intersection::eIn ou \p castor::Intersection::eOut. */ - C3D_API castor::Intersection intersects( GeometrySPtr geometry + C3D_API castor::Intersection intersects( GeometryRPtr geometry , Face & nearestFace , SubmeshSPtr & nearestSubmesh , float & distance )const; diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index 1607fa7e74..5699d4aaf9 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -392,8 +392,8 @@ namespace castor3d * Accesseurs. */ /**@{*/ - C3D_API GeometrySPtr getPickedGeometry()const; - C3D_API SubmeshSPtr getPickedSubmesh()const; + C3D_API GeometryRPtr getPickedGeometry()const; + C3D_API SubmeshRPtr getPickedSubmesh()const; C3D_API uint32_t getPickedFace()const; C3D_API ShadowMapLightTypeArray getShadowMaps()const; diff --git a/include/Core/Castor3D/Render/ShadowMap/ShadowMap.hpp b/include/Core/Castor3D/Render/ShadowMap/ShadowMap.hpp index 8880d22c48..21369e4b8b 100644 --- a/include/Core/Castor3D/Render/ShadowMap/ShadowMap.hpp +++ b/include/Core/Castor3D/Render/ShadowMap/ShadowMap.hpp @@ -74,7 +74,7 @@ namespace castor3d struct AllPasses { std::vector< std::unique_ptr< CameraUbo > > cameraUbos; - std::vector< CameraSPtr > cameras; + std::vector< CameraUPtr > cameras; Passes staticNodes; Passes otherNodes; }; diff --git a/include/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.hpp b/include/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.hpp index 3a17fde9d8..6ebf35df4f 100644 --- a/include/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.hpp +++ b/include/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.hpp @@ -59,7 +59,6 @@ namespace castor3d } private: - CameraSPtr m_camera; crg::ImageId m_blurIntermediate; crg::ImageViewId m_blurIntermediateView; ShadowType m_shadowType{ ShadowType::eRaw }; diff --git a/include/Core/Castor3D/Scene/Light/LightModule.hpp b/include/Core/Castor3D/Scene/Light/LightModule.hpp index 48a9295146..cf42e92a8d 100644 --- a/include/Core/Castor3D/Scene/Light/LightModule.hpp +++ b/include/Core/Castor3D/Scene/Light/LightModule.hpp @@ -121,7 +121,7 @@ namespace castor3d */ class SpotLight; - CU_DeclareSmartPtr( Light ); + CU_DeclareCUSmartPtr( castor3d, Light, C3D_API ); CU_DeclareSmartPtr( LightFactory ); CU_DeclareSmartPtr( LightCategory ); CU_DeclareSmartPtr( LightImporter ); diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp index 33eebadeb7..3dadfa2996 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp @@ -174,9 +174,9 @@ namespace castor3d *\~french *\return Les billboards. */ - inline BillboardBaseSPtr getBillboards()const + inline BillboardBaseRPtr getBillboards()const { - return m_particlesBillboard; + return m_particlesBillboard.get(); } /** *\~english @@ -231,7 +231,7 @@ namespace castor3d ParticleDeclaration m_inputs; //!\~english The billboards containing the particles. //!\~french Les billboards contenant les particules. - BillboardBaseSPtr m_particlesBillboard; + BillboardBaseUPtr m_particlesBillboard; //!\~english The billboards dimensions. //!\~french Les dimensions des billboards. castor::Point2f m_dimensions; diff --git a/include/Core/Castor3D/Scene/Scene.hpp b/include/Core/Castor3D/Scene/Scene.hpp index 02b4bb621a..df2f6f8f99 100644 --- a/include/Core/Castor3D/Scene/Scene.hpp +++ b/include/Core/Castor3D/Scene/Scene.hpp @@ -320,17 +320,17 @@ namespace castor3d SceneNodeRPtr getRootNode()const { - return m_rootNode.get(); + return m_rootNode; } SceneNodeRPtr getCameraRootNode()const { - return m_rootCameraNode.get(); + return m_rootCameraNode; } SceneNodeRPtr getObjectRootNode()const { - return m_rootObjectNode.get(); + return m_rootObjectNode; } castor::RgbColour const & getAmbientLight()const @@ -438,9 +438,11 @@ namespace castor3d m_ambientLight = value; } - void addGeometry( GeometryCache::ElementPtrT element ) + GeometryCache::ElementObsT addGeometry( GeometryCache::ElementPtrT element ) { - m_geometryCache->add( element ); + auto result = element.get(); + m_geometryCache->add( std::move( element ) ); + return result; } /**@}*/ @@ -476,11 +478,11 @@ namespace castor3d std::vector< SceneNode * > m_dirtyNodes; std::vector< BillboardBase * > m_dirtyBillboards; std::vector< MovableObject * > m_dirtyObjects; - SceneNodeSPtr m_rootNode; - SceneNodeSPtr m_rootCameraNode; - SceneNodeSPtr m_rootObjectNode; - DECLARE_OBJECT_CACHE_MEMBER_MIN( geometry, Geometry ); DECLARE_OBJECT_CACHE_MEMBER( sceneNode, SceneNode ); + SceneNodeRPtr m_rootNode; + SceneNodeRPtr m_rootCameraNode; + SceneNodeRPtr m_rootObjectNode; + DECLARE_OBJECT_CACHE_MEMBER_MIN( geometry, Geometry ); DECLARE_OBJECT_CACHE_MEMBER( camera, Camera ); DECLARE_OBJECT_CACHE_MEMBER( light, Light ); DECLARE_OBJECT_CACHE_MEMBER( billboard, BillboardList ); diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index 6b64c9999b..82f50902fb 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -153,13 +153,14 @@ namespace castor3d bool inWindow{}; SceneNodeConfig nodeConfig{}; SceneNodeRPtr parentNode{}; - GeometrySPtr geometry{}; + GeometryUPtr ownGeometry{}; + GeometryRPtr geometry{}; SkeletonRPtr skeleton{}; MeshResPtr mesh{}; MeshRes ownMesh{}; SubmeshSPtr submesh{}; - LightSPtr light{}; - CameraSPtr camera{}; + LightUPtr ownLight{}; + LightRPtr light{}; castor::PixelFormat pixelFormat{}; MaterialRPtr material{}; MaterialRes ownMaterial{}; @@ -192,7 +193,8 @@ namespace castor3d UniformBufferBaseUPtr uniformBuffer{}; OverlayRes overlay{}; std::vector< OverlayRes > parentOverlays{}; - BillboardListSPtr billboards{}; + BillboardListUPtr ownBillboards{}; + BillboardListRPtr billboards{}; int face1{ -1 }; int face2{ -1 }; LightType lightType{ LightType::eCount }; @@ -220,7 +222,8 @@ namespace castor3d TextureAnimationUPtr textureAnimation{}; MeshAnimationUPtr morphAnimation{}; SceneBackgroundSPtr background{}; - ParticleSystemSPtr particleSystem{}; + ParticleSystemUPtr ownParticleSystem{}; + ParticleSystemRPtr particleSystem{}; SsaoConfig ssaoConfig{}; SubsurfaceScatteringUPtr subsurfaceScattering{}; std::shared_ptr< SkyboxBackground > skybox{}; diff --git a/include/Core/Castor3D/Scene/SceneImporter.hpp b/include/Core/Castor3D/Scene/SceneImporter.hpp index b776ff689f..422279890c 100644 --- a/include/Core/Castor3D/Scene/SceneImporter.hpp +++ b/include/Core/Castor3D/Scene/SceneImporter.hpp @@ -109,11 +109,11 @@ namespace castor3d std::map< castor::String, SkeletonRPtr > doImportSkeletons( Scene & scene ); std::map< castor::String, MeshResPtr > doImportMeshes( Scene & scene , std::map< castor::String, SkeletonRPtr > const & skeletons ); - std::map< castor::String, SceneNodeSPtr > doImportNodes( Scene & scene ); + std::map< castor::String, SceneNodeRPtr > doImportNodes( Scene & scene ); void doImportLights( Scene & scene ); void doCreateGeometries( Scene & scene , std::map< castor::String, MeshResPtr > const & meshes - , std::map< castor::String, SceneNodeSPtr > const & nodes ); + , std::map< castor::String, SceneNodeRPtr > const & nodes ); struct AnimObjects { @@ -136,7 +136,7 @@ namespace castor3d void doTransformScene( Scene & scene , Parameters const & parameters - , std::map< castor::String, SceneNodeSPtr > const & nodes ); + , std::map< castor::String, SceneNodeRPtr > const & nodes ); void doAddAnimationGroup( Geometry & geometry ); void doCenterCamera( Scene & scene diff --git a/include/Core/Castor3D/Scene/SceneModule.hpp b/include/Core/Castor3D/Scene/SceneModule.hpp index e1273ce277..2140206c50 100644 --- a/include/Core/Castor3D/Scene/SceneModule.hpp +++ b/include/Core/Castor3D/Scene/SceneModule.hpp @@ -350,41 +350,22 @@ namespace castor3d */ struct ShadowConfig; - CU_DeclareSmartPtr( BillboardBase ); - CU_DeclareSmartPtr( BillboardList ); - CU_DeclareSmartPtr( Camera ); - CU_DeclareSmartPtr( Geometry ); - CU_DeclareSmartPtr( MovableObject ); - CU_DeclareSmartPtr( SceneFileContext ); - CU_DeclareSmartPtr( SceneFileParser ); - CU_DeclareSmartPtr( SceneImporter ); - CU_DeclareSmartPtr( SceneNode ); - CU_DeclareSmartPtr( SceneNodeImporter ); + CU_DeclareCUSmartPtr( castor3d, BillboardBase, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, BillboardList, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, Camera, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, Geometry, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MovableObject, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SceneFileContext, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SceneFileParser, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SceneNode, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, Scene, C3D_API ); CU_DeclareSmartPtr( SceneImporter ); CU_DeclareSmartPtr( SceneNodeImporter ); - CU_DeclareCUSmartPtr( castor3d, Scene, C3D_API ); - - //! Camera pointer array - CU_DeclareVector( CameraSPtr, CameraPtr ); - //! Geometry pointer array - CU_DeclareVector( GeometrySPtr, GeometryPtr ); //! SceneNode pointer array. - CU_DeclareVector( SceneNodeSPtr, SceneNodePtr ); - //! BillboardList pointer array. - CU_DeclareVector( BillboardListSPtr, BillboardList ); - //! Camera pointer map, sorted by name - CU_DeclareMap( castor::String, CameraSPtr, CameraPtrStr ); - //! MovableObject pointer map, sorted by name. - CU_DeclareMap( castor::String, MovableObjectSPtr, MovableObjectPtrStr ); - //! Geometry pointer map, sorted by name. - CU_DeclareMap( castor::String, GeometrySPtr, GeometryPtrStr ); + CU_DeclareVector( SceneNodeRPtr, SceneNodePtr ); //! Scene pointer map, sorted by name. CU_DeclareMap( castor::String, SceneRPtr, ScenePtrStr ); - //! SceneNode pointer map, sorted by name. - CU_DeclareMap( castor::String, SceneNodeSPtr, SceneNodePtrStr ); - //! BillboardList pointer map, sorted by name. - CU_DeclareMap( castor::String, BillboardListSPtr, BillboardListStr ); using OnSceneChangedFunction = std::function< void( Scene const & ) >; using OnSceneChanged = castor::SignalT< OnSceneChangedFunction >; @@ -481,8 +462,8 @@ namespace castor3d { using ElementT = ObjT; using ElementKeyT = KeyT; - using ElementPtrT = std::shared_ptr< ElementT >; - using ElementObsT = std::weak_ptr< ElementT >; + using ElementPtrT = castor::UniquePtr< ElementT >; + using ElementObsT = ElementT *; using ElementContT = std::unordered_map< KeyT, ElementPtrT >; using ElementCacheT = ObjectCacheBaseT< ElementT, KeyT >; @@ -505,31 +486,31 @@ namespace castor3d , ElementKeyT const & key , ParametersT && ... params ) { - return std::make_shared< ElementT >( key + return castor::makeUnique< ElementT >( key , std::forward< ParametersT >( params )... ); } static ElementObsT makeElementObs( ElementPtrT const & element ) { - return ElementObsT{ element }; + return element.get(); } static bool areElementsEqual( ElementObsT const & lhs , ElementObsT const & rhs ) { - return lhs.lock() == rhs.lock(); + return lhs == rhs; } static bool areElementsEqual( ElementObsT const & lhs , ElementPtrT const & rhs ) { - return lhs.lock() == rhs; + return lhs == rhs.get(); } static bool areElementsEqual( ElementPtrT const & lhs , ElementObsT const & rhs ) { - return lhs == rhs.lock(); + return lhs.get() == rhs; } static bool areElementsEqual( ElementPtrT const & lhs @@ -540,7 +521,7 @@ namespace castor3d static bool isElementObsNull( ElementObsT const & element ) { - return element.lock() == nullptr; + return element == nullptr; } }; /** diff --git a/source/Core/Castor3D/Cache/SceneNodeCache.cpp b/source/Core/Castor3D/Cache/SceneNodeCache.cpp index 53bdb2f60d..a54ab0706f 100644 --- a/source/Core/Castor3D/Cache/SceneNodeCache.cpp +++ b/source/Core/Castor3D/Cache/SceneNodeCache.cpp @@ -1,6 +1,7 @@ #include "Castor3D/Cache/SceneNodeCache.hpp" #include "Castor3D/Scene/SceneNode.hpp" +#include "Castor3D/Scene/Scene.hpp" CU_ImplementCUSmartPtr( castor3d, SceneNodeCache ) @@ -11,24 +12,30 @@ namespace castor3d //********************************************************************************************* ObjectCacheT< SceneNode, castor::String, SceneNodeCacheTraits >::ObjectCacheT( Scene & scene - , SceneNodeRPtr rootNode - , SceneNodeRPtr rootCameraNode - , SceneNodeRPtr rootObjectNode , ElementInitialiserT initialise , ElementCleanerT clean , ElementMergerT merge , ElementAttacherT attach , ElementDetacherT detach ) : ElementObjectCacheT{ scene - , rootNode - , rootCameraNode - , rootObjectNode + , nullptr + , nullptr + , nullptr , initialise , clean , merge , attach , detach } { + auto node = castor::makeUnique< SceneNode >( Scene::RootNode, scene ); + m_rootNode = add( Scene::RootNode, node, false ); + node = castor::makeUnique< SceneNode >( Scene::ObjectRootNode, scene ); + m_rootObjectNode = add( Scene::ObjectRootNode, node, false ); + node = castor::makeUnique< SceneNode >( Scene::CameraRootNode, scene ); + m_rootCameraNode = add( Scene::CameraRootNode, node, false ); + + m_rootCameraNode->attachTo( *m_rootNode ); + m_rootObjectNode->attachTo( *m_rootNode ); } SceneNodeCache::ElementObsT ObjectCacheT< SceneNode, castor::String, SceneNodeCacheTraits >::add( ElementKeyT const & name diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 3ffc5ac16f..473039b4c2 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -523,6 +523,11 @@ namespace castor3d { if ( m_initialised.exchange( false ) ) { + for ( auto & unit : m_loaded ) + { + unit.second->cleanup(); + } + m_bindlessTexSet.reset(); m_bindlessTexPool.reset(); m_bindlessTexLayout.reset(); @@ -592,6 +597,11 @@ namespace castor3d m_loaded.clear(); m_loading.clear(); + m_dirtyWrites.clear(); + m_units.clear(); + m_datas.clear(); + m_pendingUnits.clear(); + m_texturesCombines.clear(); } TextureUnitSPtr TextureUnitCache::getTexture( TextureUnitData & unitData ) diff --git a/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp b/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp index 55a52f34f1..c3288b9088 100644 --- a/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp +++ b/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp @@ -80,10 +80,10 @@ namespace castor3d , VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT ); } - static CameraSPtr createCamera( Scene & scene + static CameraRPtr createCamera( Scene & scene , castor::Size const & size ) { - CameraSPtr result; + CameraRPtr result{}; if ( scene.getCameraCache().isEmpty() ) { @@ -97,15 +97,17 @@ namespace castor3d , farZ ); viewport.resize( size ); viewport.update(); - result = std::make_shared< Camera >( LoadingScreen::SceneName + auto camera = castor::makeUnique< Camera >( LoadingScreen::SceneName , scene , *scene.getCameraRootNode() , std::move( viewport ) ); + result = scene.addCamera( LoadingScreen::SceneName + , camera ); result->update(); } else { - result = scene.getCameraCache().begin()->second; + result = scene.getCameraCache().begin()->second.get(); } return result; @@ -302,7 +304,7 @@ namespace castor3d m_runnable.reset(); m_backgroundRenderer.reset(); m_culler.reset(); - m_camera.reset(); + m_camera = {}; m_depth.destroy(); m_colour.destroy(); } @@ -324,7 +326,7 @@ namespace castor3d auto oldCamera = updater.camera; auto oldScene = updater.scene; auto oldSafeBanded = updater.isSafeBanded; - updater.camera = m_camera.get(); + updater.camera = m_camera; updater.scene = m_scene; updater.isSafeBanded = false; @@ -353,7 +355,7 @@ namespace castor3d { auto oldCamera = updater.camera; auto oldScene = updater.scene; - updater.camera = m_camera.get(); + updater.camera = m_camera; updater.scene = m_scene; m_scene->update( updater ); diff --git a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp index 3280093214..f1ed137ed2 100644 --- a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp +++ b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp @@ -94,14 +94,14 @@ namespace castor3d }; auto & scene = background.getScene(); - std::array< SceneNodeSPtr, size_t( CubeMapFace::eCount ) > nodes + std::array< SceneNodeUPtr, size_t( CubeMapFace::eCount ) > nodes { - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosX" ), scene ), - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegX" ), scene ), - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosY" ), scene ), - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegY" ), scene ), - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosZ" ), scene ), - std::make_shared< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegZ" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosX" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegX" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosY" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegY" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "PosZ" ), scene ), + castor::makeUnique< SceneNode >( "C3D_Env" + scene.getName() + cuT( "NegZ" ), scene ), }; auto i = 0u; @@ -113,12 +113,12 @@ namespace castor3d ++i; } - return { std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[0], index, CubeMapFace::ePositiveX, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[1], index, CubeMapFace::eNegativeX, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[2], index, CubeMapFace::ePositiveY, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[3], index, CubeMapFace::eNegativeY, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[4], index, CubeMapFace::ePositiveZ, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, nodes[5], index, CubeMapFace::eNegativeZ, background ) }; + return { std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[0] ), index, CubeMapFace::ePositiveX, background ) + , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[1] ), index, CubeMapFace::eNegativeX, background ) + , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[2] ), index, CubeMapFace::ePositiveY, background ) + , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[3] ), index, CubeMapFace::eNegativeY, background ) + , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[4] ), index, CubeMapFace::ePositiveZ, background ) + , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[5] ), index, CubeMapFace::eNegativeZ, background ) }; } static std::vector< ashes::ImageView > createViews( Texture const & envMap diff --git a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp index 0dc1fd015d..5a0e71c3e0 100644 --- a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp +++ b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp @@ -26,7 +26,7 @@ namespace castor3d { namespace envpass { - static CameraSPtr doCreateCamera( SceneNode & node + static CameraUPtr doCreateCamera( SceneNode & node , VkExtent3D const & size ) { float const aspect = float( size.width ) / float( size.height ); @@ -39,7 +39,7 @@ namespace castor3d , farZ ); viewport.resize( { size.width, size.height } ); viewport.update(); - auto camera = std::make_shared< Camera >( cuT( "EnvironmentMap_" ) + node.getName() + auto camera = castor::makeUnique< Camera >( cuT( "EnvironmentMap_" ) + node.getName() , *node.getScene() , node , std::move( viewport ) ); @@ -51,7 +51,7 @@ namespace castor3d EnvironmentMapPass::EnvironmentMapPass( crg::FrameGraph & graph , RenderDevice const & device , EnvironmentMap & environmentMap - , SceneNodeSPtr faceNode + , SceneNodeUPtr faceNode , uint32_t index , CubeMapFace face , SceneBackground & background ) @@ -60,7 +60,7 @@ namespace castor3d , m_device{ device } , m_graph{ graph.createPassGroup( getName() ) } , m_background{ background } - , m_node{ faceNode } + , m_node{ std::move( faceNode ) } , m_index{ index } , m_face{ face } , m_camera{ envpass::doCreateCamera( *faceNode, getOwner()->getSize() ) } diff --git a/source/Core/Castor3D/Render/Ray.cpp b/source/Core/Castor3D/Render/Ray.cpp index 33a22ac889..6656cd2103 100644 --- a/source/Core/Castor3D/Render/Ray.cpp +++ b/source/Core/Castor3D/Render/Ray.cpp @@ -274,7 +274,7 @@ namespace castor3d return result; } - castor::Intersection Ray::intersects( GeometrySPtr geometry + castor::Intersection Ray::intersects( GeometryRPtr geometry , Face & nearestFace , SubmeshSPtr & nearestSubmesh , float & distance )const diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index 0976a3cf30..b00f0afaa0 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -892,7 +892,7 @@ namespace castor3d m_renderMutex.unlock(); } - GeometrySPtr RenderWindow::getPickedGeometry()const + GeometryRPtr RenderWindow::getPickedGeometry()const { auto sel = m_picking->getPickedGeometry(); @@ -902,10 +902,10 @@ namespace castor3d } auto geometry = sel->getScene()->findGeometry( sel->getName() ); - return geometry.lock(); + return geometry; } - SubmeshSPtr RenderWindow::getPickedSubmesh()const + SubmeshRPtr RenderWindow::getPickedSubmesh()const { auto sel = m_picking->getPickedSubmesh(); @@ -914,7 +914,7 @@ namespace castor3d return nullptr; } - return sel->getOwner()->getSubmesh( sel->getId() ); + return sel->getOwner()->getSubmesh( sel->getId() ).get(); } uint32_t RenderWindow::getPickedFace()const diff --git a/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp b/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp index e241bcb9b7..16d99257d0 100644 --- a/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp +++ b/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp @@ -247,7 +247,7 @@ namespace castor3d if ( m_passes[m_passesIndex].cameras.size() <= cascade ) { m_passes[m_passesIndex].cameraUbos.push_back( std::make_unique< CameraUbo >( m_device ) ); - m_passes[m_passesIndex].cameras.push_back( std::make_shared< Camera >( shdmapdir::getPassName( cascade, false, false, false ) + m_passes[m_passesIndex].cameras.push_back( m_scene.createCamera( shdmapdir::getPassName( cascade, false, false, false ) , m_scene , *m_scene.getCameraRootNode() , viewport diff --git a/source/Core/Castor3D/Render/ShadowMap/ShadowMapSpot.cpp b/source/Core/Castor3D/Render/ShadowMap/ShadowMapSpot.cpp index 24677bafba..39a1bce1b2 100644 --- a/source/Core/Castor3D/Render/ShadowMap/ShadowMapSpot.cpp +++ b/source/Core/Castor3D/Render/ShadowMap/ShadowMapSpot.cpp @@ -119,7 +119,7 @@ namespace castor3d if ( m_passes[m_passesIndex].cameras.size() <= index ) { m_passes[m_passesIndex].cameraUbos.push_back( std::make_unique< CameraUbo >( m_device ) ); - m_passes[m_passesIndex].cameras.push_back( std::make_shared< Camera >( shdmapspot::getPassName( index, false, false, false ) + m_passes[m_passesIndex].cameras.push_back( m_scene.createCamera( shdmapspot::getPassName( index, false, false, false ) , m_scene , *m_scene.getCameraRootNode() , std::move( viewport ) ) ); diff --git a/source/Core/Castor3D/Scene/BillboardList.cpp b/source/Core/Castor3D/Scene/BillboardList.cpp index b42345aadf..cdeae3a266 100644 --- a/source/Core/Castor3D/Scene/BillboardList.cpp +++ b/source/Core/Castor3D/Scene/BillboardList.cpp @@ -9,6 +9,9 @@ #include "Castor3D/Render/Node/SceneRenderNodes.hpp" #include "Castor3D/Scene/Scene.hpp" +CU_ImplementCUSmartPtr( castor3d, BillboardBase ) +CU_ImplementCUSmartPtr( castor3d, BillboardList ) + namespace castor3d { //************************************************************************************************* diff --git a/source/Core/Castor3D/Scene/Camera.cpp b/source/Core/Castor3D/Scene/Camera.cpp index 3f52c0abc2..b17b6c1eb2 100644 --- a/source/Core/Castor3D/Scene/Camera.cpp +++ b/source/Core/Castor3D/Scene/Camera.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneNode.hpp" +CU_ImplementCUSmartPtr( castor3d, Camera ) + namespace castor3d { Camera::Camera( castor::String const & name diff --git a/source/Core/Castor3D/Scene/Geometry.cpp b/source/Core/Castor3D/Scene/Geometry.cpp index dfe937fc29..c437c20f29 100644 --- a/source/Core/Castor3D/Scene/Geometry.cpp +++ b/source/Core/Castor3D/Scene/Geometry.cpp @@ -8,6 +8,8 @@ #include "Castor3D/Render/Node/SceneRenderNodes.hpp" #include "Castor3D/Scene/Scene.hpp" +CU_ImplementCUSmartPtr( castor3d, Geometry ) + namespace castor3d { Geometry::Geometry( castor::String const & name diff --git a/source/Core/Castor3D/Scene/Light/Light.cpp b/source/Core/Castor3D/Scene/Light/Light.cpp index 28a1de95d3..bca86e46e5 100644 --- a/source/Core/Castor3D/Scene/Light/Light.cpp +++ b/source/Core/Castor3D/Scene/Light/Light.cpp @@ -7,6 +7,8 @@ #include "Castor3D/Scene/Light/PointLight.hpp" #include "Castor3D/Scene/Light/SpotLight.hpp" +CU_ImplementCUSmartPtr( castor3d, Light ) + namespace castor3d { Light::Light( castor::String const & name diff --git a/source/Core/Castor3D/Scene/MovableObject.cpp b/source/Core/Castor3D/Scene/MovableObject.cpp index 39452c6b12..b77c03cae1 100644 --- a/source/Core/Castor3D/Scene/MovableObject.cpp +++ b/source/Core/Castor3D/Scene/MovableObject.cpp @@ -3,6 +3,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneNode.hpp" +CU_ImplementCUSmartPtr( castor3d, MovableObject ) + namespace castor3d { MovableObject::MovableObject( castor::String const & name diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp index adfbd9d948..f77a74563c 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp @@ -144,7 +144,7 @@ namespace castor3d stride += uint32_t( getSize( attribute.m_dataType ) ); } - m_particlesBillboard = std::make_unique< BillboardBase >( *getScene() + m_particlesBillboard = castor::makeUnique< BillboardBase >( *getScene() , getScene()->getObjectRootNode() , std::make_unique< ashes::PipelineVertexInputStateCreateInfo >( 0u , bindings diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index e14d94d279..df12158455 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -99,42 +99,45 @@ namespace castor3d : castor::OwnedBy< Engine >{ engine } , castor::Named{ name } , m_resources{ engine.getGraphResourceHandler() } - , m_rootNode{ std::make_shared< SceneNode >( RootNode, *this ) } - , m_rootCameraNode{ std::make_shared< SceneNode >( CameraRootNode, *this ) } - , m_rootObjectNode{ std::make_shared< SceneNode >( ObjectRootNode, *this ) } + , m_sceneNodeCache{ makeObjectCache< SceneNode, castor::String, SceneNodeCacheTraits >( *this + , castor::DummyFunctorT< SceneNodeCache >{} + , castor::DummyFunctorT< SceneNodeCache >{} + , SceneNodeMergerT< SceneNodeCache >{ getName() } + , SceneNodeAttacherT< SceneNodeCache >{} + , SceneNodeDetacherT< SceneNodeCache >{} ) } + , m_rootNode{ m_sceneNodeCache->find( RootNode ) } + , m_rootCameraNode{ m_sceneNodeCache->find( CameraRootNode ) } + , m_rootObjectNode{ m_sceneNodeCache->find( ObjectRootNode ) } , m_background{ std::make_shared< ColourBackground >( engine, *this ) } , m_lightFactory{ std::make_shared< LightFactory >() } , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ).lock().get() } , m_renderNodes{ castor::makeUnique< SceneRenderNodes >( *this ) } { - m_rootCameraNode->attachTo( *m_rootNode ); - m_rootObjectNode->attachTo( *m_rootNode ); - - m_billboardCache = makeObjectCache< BillboardList, castor::String, BillboardListCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() ); + m_billboardCache = makeObjectCache< BillboardList, castor::String, BillboardListCacheTraits >( *this + , m_rootNode + , m_rootCameraNode + , m_rootObjectNode ); m_cameraCache = makeObjectCache< Camera, castor::String, CameraCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() + , m_rootNode + , m_rootCameraNode + , m_rootObjectNode , castor::DummyFunctorT< CameraCache >{} , castor::DummyFunctorT< CameraCache >{} , MovableMergerT< CameraCache >{ getName() } , MovableAttacherT< CameraCache >{} , MovableDetacherT< CameraCache >{} ); m_geometryCache = makeObjectCache< Geometry, castor::String, GeometryCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() ); + , m_rootNode + , m_rootCameraNode + , m_rootObjectNode ); m_lightCache = makeObjectCache< Light, castor::String, LightCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() ); + , m_rootNode + , m_rootCameraNode + , m_rootObjectNode ); m_particleSystemCache = makeObjectCache< ParticleSystem, castor::String, ParticleSystemCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() + , m_rootNode + , m_rootCameraNode + , m_rootObjectNode , [this]( ParticleSystem & element ) { auto & nodes = getRenderNodes(); @@ -157,15 +160,6 @@ namespace castor3d , MovableMergerT< ParticleSystemCache >{ getName() } , MovableAttacherT< ParticleSystemCache >{} , MovableDetacherT< ParticleSystemCache >{} ); - m_sceneNodeCache = makeObjectCache< SceneNode, castor::String, SceneNodeCacheTraits >( *this - , m_rootNode.get() - , m_rootCameraNode.get() - , m_rootObjectNode.get() - , castor::DummyFunctorT< SceneNodeCache >{} - , castor::DummyFunctorT< SceneNodeCache >{} - , SceneNodeMergerT< SceneNodeCache >{ getName() } - , SceneNodeAttacherT< SceneNodeCache >{} - , SceneNodeDetacherT< SceneNodeCache >{} ); m_animatedObjectGroupCache = castor::makeCache< AnimatedObjectGroup, castor::String, AnimatedObjectGroupCacheTraits >( *this ); m_meshCache = castor::makeCache< Mesh, castor::String, MeshCacheTraits >( getLogger( engine ) , CpuEventInitialiserT< MeshCache >{ getListener() } @@ -216,12 +210,6 @@ namespace castor3d element.cleanup(); } ); - auto node = m_rootNode; - m_sceneNodeCache->add( RootNode, node, false ); - node = m_rootObjectNode; - m_sceneNodeCache->add( ObjectRootNode, node, false ); - node = m_rootCameraNode; - m_sceneNodeCache->add( CameraRootNode, node, false ); m_animatedObjectGroupCache->add( cuT( "C3D_Textures" ), *this ); auto & device = engine.getRenderSystem()->getRenderDevice(); auto data = device.graphicsData(); @@ -258,33 +246,32 @@ namespace castor3d m_geometryCache.reset(); m_lightCache.reset(); + m_meshCache.reset(); + m_skeletonCache.reset(); + m_materialCacheView.reset(); + m_samplerCacheView.reset(); + m_overlayCache.reset(); + m_fontCacheView.reset(); + if ( m_rootCameraNode ) { m_rootCameraNode->detach( true ); - m_rootCameraNode.reset(); + m_rootCameraNode = {}; } if ( m_rootObjectNode ) { m_rootObjectNode->detach( true ); - m_rootObjectNode.reset(); + m_rootObjectNode = {}; } - m_sceneNodeCache.reset(); - - m_meshCache.reset(); - m_skeletonCache.reset(); - m_materialCacheView.reset(); - m_samplerCacheView.reset(); - m_overlayCache.reset(); - m_fontCacheView.reset(); - if ( m_rootNode ) { m_rootNode->detach( true ); + m_rootNode = {}; } - m_rootNode.reset(); + m_sceneNodeCache.reset(); } void Scene::initialise() @@ -506,7 +493,7 @@ namespace castor3d using LockType = std::unique_lock< GeometryCache >; LockType lock{ castor::makeUniqueLock( *m_geometryCache ) }; - for ( auto pair : *m_geometryCache ) + for ( auto & pair : *m_geometryCache ) { auto mesh = pair.second->getMesh().lock(); @@ -525,7 +512,7 @@ namespace castor3d using LockType = std::unique_lock< GeometryCache >; LockType lock{ castor::makeUniqueLock( *m_geometryCache ) }; - for ( auto pair : *m_geometryCache ) + for ( auto & pair : *m_geometryCache ) { auto mesh = pair.second->getMesh().lock(); diff --git a/source/Core/Castor3D/Scene/SceneFileParser.cpp b/source/Core/Castor3D/Scene/SceneFileParser.cpp index ec73c5266e..a66ccf7d64 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser.cpp @@ -13,6 +13,9 @@ #define C3D_PrintParsers 0 +CU_ImplementCUSmartPtr( castor3d, SceneFileContext ) +CU_ImplementCUSmartPtr( castor3d, SceneFileParser ) + namespace castor3d { namespace scnps diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 8ef4ba15ca..12d0a19b3e 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -600,7 +600,7 @@ namespace castor3d { castor::String name; - if ( auto camera = parsingContext.renderTarget->getScene()->findCamera( params[0]->get( name ) ).lock() ) + if ( auto camera = parsingContext.renderTarget->getScene()->findCamera( params[0]->get( name ) ) ) { parsingContext.renderTarget->setCamera( *camera ); } @@ -1138,7 +1138,7 @@ namespace castor3d CU_ImplementAttributeParser( parserSceneLight ) { auto & parsingContext = getParserContext( context ); - parsingContext.light.reset(); + parsingContext.light = {}; parsingContext.strName.clear(); if ( !parsingContext.scene ) @@ -1191,7 +1191,7 @@ namespace castor3d CU_ImplementAttributeParser( parserSceneObject ) { auto & parsingContext = getParserContext( context ); - parsingContext.geometry.reset(); + parsingContext.geometry = {}; castor::String name; if ( !parsingContext.scene ) @@ -1201,8 +1201,9 @@ namespace castor3d else if ( !params.empty() ) { params[0]->get( name ); - parsingContext.geometry = parsingContext.scene->createGeometry( name + parsingContext.ownGeometry = parsingContext.scene->createGeometry( name , *parsingContext.scene ); + parsingContext.geometry = parsingContext.ownGeometry.get(); } } CU_EndAttributePush( CSCNSection::eObject ) @@ -1243,7 +1244,8 @@ namespace castor3d { castor::String name; params[0]->get( name ); - parsingContext.billboards = std::make_shared< BillboardList >( name, *parsingContext.scene ); + parsingContext.ownBillboards = castor::makeUnique< BillboardList >( name, *parsingContext.scene ); + parsingContext.billboards = parsingContext.ownBillboards.get(); } } CU_EndAttributePush( CSCNSection::eBillboard ) @@ -1729,9 +1731,9 @@ namespace castor3d castor::String value; params[0]->get( value ); - if ( auto node = parsingContext.scene->tryFindSceneNode( value ).lock() ) + if ( auto node = parsingContext.scene->tryFindSceneNode( value ) ) { - parsingContext.parentNode = node.get(); + parsingContext.parentNode = node; } else { @@ -1834,7 +1836,7 @@ namespace castor3d parsingContext.material = parsingContext.parser->getEngine()->getMaterialCache().getDefaultMaterial(); } - parsingContext.particleSystem = parsingContext.scene->tryFindParticleSystem( parsingContext.strName ).lock(); + parsingContext.particleSystem = parsingContext.scene->tryFindParticleSystem( parsingContext.strName ); if ( !parsingContext.particleSystem ) { @@ -1846,10 +1848,11 @@ namespace castor3d } parsingContext.parentNode = nullptr; - parsingContext.particleSystem = std::make_shared< ParticleSystem >( parsingContext.strName + parsingContext.ownParticleSystem = parsingContext.scene->createParticleSystem( parsingContext.strName , *parsingContext.scene , *node , parsingContext.particleCount ); + parsingContext.particleSystem = parsingContext.ownParticleSystem.get(); } parsingContext.particleSystem->setMaterial( parsingContext.material ); @@ -1888,10 +1891,15 @@ namespace castor3d else { parsingContext.parentNode = nullptr; - parsingContext.scene->addParticleSystem( parsingContext.particleSystem->getName() - , parsingContext.particleSystem - , true ); - parsingContext.particleSystem.reset(); + + if ( parsingContext.ownParticleSystem ) + { + parsingContext.scene->addParticleSystem( parsingContext.particleSystem->getName() + , parsingContext.ownParticleSystem + , true ); + } + + parsingContext.particleSystem = {}; } } CU_EndAttributePop() @@ -1968,9 +1976,9 @@ namespace castor3d { castor::String name; - if ( auto parent = parsingContext.scene->findSceneNode( params[0]->get( name ) ).lock() ) + if ( auto parent = parsingContext.scene->findSceneNode( params[0]->get( name ) ) ) { - parsingContext.parentNode = parent.get(); + parsingContext.parentNode = parent; if ( parsingContext.light ) { @@ -1998,10 +2006,15 @@ namespace castor3d else { parsingContext.parentNode = nullptr; - parsingContext.scene->addLight( parsingContext.light->getName() - , parsingContext.light - , true ); - parsingContext.light.reset(); + + if ( parsingContext.ownLight ) + { + parsingContext.scene->addLight( parsingContext.light->getName() + , parsingContext.ownLight + , true ); + } + + parsingContext.light = {}; } } CU_EndAttributePop() @@ -2019,7 +2032,7 @@ namespace castor3d uint32_t uiType; params[0]->get( uiType ); parsingContext.lightType = LightType( uiType ); - parsingContext.light = parsingContext.scene->tryFindLight( parsingContext.strName ).lock(); + parsingContext.light = parsingContext.scene->tryFindLight( parsingContext.strName ); if ( !parsingContext.light ) { @@ -2031,11 +2044,12 @@ namespace castor3d } parsingContext.parentNode = nullptr; - parsingContext.light = std::make_shared< Light >( parsingContext.strName + parsingContext.ownLight = parsingContext.scene->createLight( parsingContext.strName , *parsingContext.scene , *node , parsingContext.scene->getLightsFactory() , parsingContext.lightType ); + parsingContext.light = parsingContext.ownLight.get(); } } } @@ -2654,7 +2668,7 @@ namespace castor3d } else { - parent = parsingContext.scene->findSceneNode( name ).lock().get(); + parent = parsingContext.scene->findSceneNode( name ); } if ( parent ) @@ -2752,7 +2766,7 @@ namespace castor3d , nodeConfig.isStatic ); auto name = sceneNode->getName(); - auto node = parsingContext.scene->addSceneNode( name, sceneNode ).lock(); + auto node = parsingContext.scene->addSceneNode( name, sceneNode ); sceneNode.reset(); if ( !nodeConfig.isStatic ) @@ -2808,7 +2822,7 @@ namespace castor3d } else { - parent = parsingContext.scene->findSceneNode( name ).lock().get(); + parent = parsingContext.scene->findSceneNode( name ); } if ( parent ) @@ -2922,7 +2936,13 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); parsingContext.parentNode = nullptr; - parsingContext.scene->addGeometry( std::move( parsingContext.geometry ) ); + + if ( parsingContext.ownGeometry ) + { + parsingContext.scene->addGeometry( std::move( parsingContext.ownGeometry ) ); + } + + parsingContext.geometry = nullptr; } CU_EndAttributePop() @@ -5327,7 +5347,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); castor::String name; - SceneNodeRPtr parent = parsingContext.scene->findSceneNode( params[0]->get( name ) ).lock().get(); + SceneNodeRPtr parent = parsingContext.scene->findSceneNode( params[0]->get( name ) ); if ( parent ) { @@ -5399,7 +5419,7 @@ namespace castor3d auto camera = parsingContext.scene->addNewCamera( parsingContext.strName , *parsingContext.scene , *node - , std::move( *parsingContext.viewport ) ).lock(); + , std::move( *parsingContext.viewport ) ); camera->setGamma( parsingContext.point2f[0] ); camera->setExposure( parsingContext.point2f[1] ); parsingContext.viewport.reset(); @@ -5513,7 +5533,7 @@ namespace castor3d castor::String name; params[0]->get( name ); - if ( auto parent = parsingContext.scene->findSceneNode( name ).lock() ) + if ( auto parent = parsingContext.scene->findSceneNode( name ) ) { parent->attachObject( *parsingContext.billboards ); } @@ -5616,10 +5636,15 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); parsingContext.parentNode = nullptr; - parsingContext.scene->addBillboardList( parsingContext.billboards->getName() - , parsingContext.billboards - , true ); - parsingContext.billboards.reset(); + + if ( parsingContext.ownBillboards ) + { + parsingContext.scene->addBillboardList( parsingContext.billboards->getName() + , parsingContext.ownBillboards + , true ); + } + + parsingContext.billboards = {}; } CU_EndAttributePop() @@ -5640,9 +5665,7 @@ namespace castor3d if ( parsingContext.animGroup ) { - GeometrySPtr geometry = parsingContext.scene->findGeometry( name ).lock(); - - if ( geometry ) + if ( auto geometry = parsingContext.scene->findGeometry( name ) ) { auto node = geometry->getParent(); @@ -5652,9 +5675,7 @@ namespace castor3d , node->getName() ); } - auto mesh = geometry->getMesh().lock(); - - if ( mesh ) + if ( auto mesh = geometry->getMesh().lock() ) { if ( mesh->hasAnimation() ) { @@ -5663,9 +5684,7 @@ namespace castor3d , geometry->getName() ); } - auto skeleton = mesh->getSkeleton(); - - if ( skeleton ) + if ( auto skeleton = mesh->getSkeleton() ) { if ( skeleton->hasAnimation() ) { @@ -5679,9 +5698,7 @@ namespace castor3d } else { - SceneNodeSPtr node = parsingContext.scene->findSceneNode( name ).lock(); - - if ( node ) + if ( auto node = parsingContext.scene->findSceneNode( name ) ) { if ( node->hasAnimation() ) { @@ -5710,13 +5727,9 @@ namespace castor3d if ( parsingContext.animGroup ) { - GeometrySPtr geometry = parsingContext.scene->findGeometry( name ).lock(); - - if ( geometry ) + if ( auto geometry = parsingContext.scene->findGeometry( name ) ) { - auto mesh = geometry->getMesh().lock(); - - if ( mesh ) + if ( auto mesh = geometry->getMesh().lock() ) { if ( mesh->hasAnimation() ) { @@ -5750,17 +5763,11 @@ namespace castor3d if ( parsingContext.animGroup ) { - GeometrySPtr geometry = parsingContext.scene->findGeometry( name ).lock(); - - if ( geometry ) + if ( auto geometry = parsingContext.scene->findGeometry( name ) ) { - auto mesh = geometry->getMesh().lock(); - - if ( mesh ) + if ( auto mesh = geometry->getMesh().lock() ) { - auto skeleton = mesh->getSkeleton(); - - if ( skeleton ) + if ( auto skeleton = mesh->getSkeleton() ) { if ( skeleton->hasAnimation() ) { @@ -5800,9 +5807,7 @@ namespace castor3d if ( parsingContext.animGroup ) { - SceneNodeSPtr node = parsingContext.scene->findSceneNode( name ).lock(); - - if ( node ) + if ( auto node = parsingContext.scene->findSceneNode( name ) ) { if ( node->hasAnimation() ) { diff --git a/source/Core/Castor3D/Scene/SceneImporter.cpp b/source/Core/Castor3D/Scene/SceneImporter.cpp index b634e59fd7..b5b60d2a75 100644 --- a/source/Core/Castor3D/Scene/SceneImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneImporter.cpp @@ -206,10 +206,10 @@ namespace castor3d return result; } - std::map< castor::String, SceneNodeSPtr > SceneImporter::doImportNodes( Scene & scene ) + std::map< castor::String, SceneNodeRPtr > SceneImporter::doImportNodes( Scene & scene ) { Parameters emptyParams; - std::map< castor::String, SceneNodeSPtr > result; + std::map< castor::String, SceneNodeRPtr > result; if ( auto nodeImporter = m_file->createSceneNodeImporter() ) { @@ -223,7 +223,7 @@ namespace castor3d , m_file , emptyParams ) ) { - result.emplace( name, node ); + result.emplace( name, node.get() ); scene.addSceneNode( name, node, true ); } } @@ -259,7 +259,7 @@ namespace castor3d void SceneImporter::doCreateGeometries( Scene & scene , std::map< castor::String, MeshResPtr > const & meshes - , std::map< castor::String, SceneNodeSPtr > const & nodes ) + , std::map< castor::String, SceneNodeRPtr > const & nodes ) { for ( auto geom : m_file->listGeometries() ) { @@ -267,11 +267,10 @@ namespace castor3d CU_Require( meshIt != meshes.end() ); auto nodeIt = nodes.find( geom.node ); CU_Require( nodeIt != nodes.end() ); - auto geometry = scene.createGeometry( geom.name + scene.addGeometry( scene.createGeometry( geom.name , scene , *nodeIt->second - , meshIt->second ); - scene.addGeometry( geometry ); + , meshIt->second ) ); } } @@ -352,7 +351,7 @@ namespace castor3d { for ( auto & animIt : anims ) { - for ( auto geometry : scene.getGeometryCache() ) + for ( auto & geometry : scene.getGeometryCache() ) { auto & mesh = *geometry.second->getMesh().lock(); auto nodeIt = std::find( animIt.second.nodes.begin() @@ -401,14 +400,14 @@ namespace castor3d void SceneImporter::doTransformScene( Scene & scene , Parameters const & parameters - , std::map< castor::String, SceneNodeSPtr > const & nodes ) + , std::map< castor::String, SceneNodeRPtr > const & nodes ) { castor::Point3f scale{ 1.0f, 1.0f, 1.0f }; castor::Quaternion orientation{ castor::Quaternion::identity() }; if ( parseImportParameters( parameters, scale, orientation ) ) { - auto transformNode = scene.addNewSceneNode( m_file->getName() + "TransformNode" ).lock(); + auto transformNode = scene.addNewSceneNode( m_file->getName() + "TransformNode" ); transformNode->setScale( scale ); transformNode->setOrientation( orientation ); transformNode->attachTo( *scene.getObjectRootNode() ); @@ -431,9 +430,7 @@ namespace castor3d if ( parameters.get( cuT( "center_camera" ), centerCamera ) && !centerCamera.empty() ) { - auto cam = scene.getCameraCache().tryFind( centerCamera ); - - if ( auto camera = cam.lock() ) + if ( auto camera = scene.getCameraCache().tryFind( centerCamera ) ) { scene.getSceneNodeCache().forEach( []( SceneNode & node ) { diff --git a/source/Core/Castor3D/Scene/SceneModule.cpp b/source/Core/Castor3D/Scene/SceneModule.cpp index ac776af04c..3b72df6939 100644 --- a/source/Core/Castor3D/Scene/SceneModule.cpp +++ b/source/Core/Castor3D/Scene/SceneModule.cpp @@ -13,6 +13,7 @@ CU_ImplementCUSmartPtr( castor3d, MaterialCacheView ) CU_ImplementCUSmartPtr( castor3d, SamplerCacheView ) CU_ImplementCUSmartPtr( castor3d, FontCacheView ) + namespace castor3d { const castor::String PtrCacheTraitsT< Scene, castor::String >::Name = cuT( "Scene" ); diff --git a/source/Core/Castor3D/Scene/SceneNode.cpp b/source/Core/Castor3D/Scene/SceneNode.cpp index 476e0e82ec..ebf7443297 100644 --- a/source/Core/Castor3D/Scene/SceneNode.cpp +++ b/source/Core/Castor3D/Scene/SceneNode.cpp @@ -8,6 +8,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" +CU_ImplementCUSmartPtr( castor3d, SceneNode ) + namespace castor3d { uint64_t SceneNode::Count = 0; diff --git a/source/Core/SceneExporter/CscnExporter.cpp b/source/Core/SceneExporter/CscnExporter.cpp index 3c9c39a0a5..3c4b6ecdf4 100644 --- a/source/Core/SceneExporter/CscnExporter.cpp +++ b/source/Core/SceneExporter/CscnExporter.cpp @@ -1497,7 +1497,7 @@ namespace castor3d::exporter { if ( !scene.getCameraCache().isEmpty() ) { - auto camera = scene.getCameraCache().begin()->second; + auto camera = scene.getCameraCache().begin()->second.get(); printRenderWindow( scene.getName() , camera->getName() , stream ); diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp index 595b515a10..928788b0f3 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp @@ -78,7 +78,7 @@ namespace atmosphere_scattering auto & atmosphereContext = parser::getParserContext( context ); castor::String name; - if ( auto node = parsingContext.scene->findSceneNode( params[0]->get( name ) ).lock() ) + if ( auto node = parsingContext.scene->findSceneNode( params[0]->get( name ) ) ) { atmosphereContext.background->setSunNode( *node ); } @@ -102,7 +102,7 @@ namespace atmosphere_scattering auto & atmosphereContext = parser::getParserContext( context ); castor::String name; - if ( auto node = parsingContext.scene->findSceneNode( params[0]->get( name ) ).lock() ) + if ( auto node = parsingContext.scene->findSceneNode( params[0]->get( name ) ) ) { atmosphereContext.background->setPlanetNode( *node ); } diff --git a/source/Plugins/Importers/AssimpImporter/AssimpLightImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpLightImporter.cpp index 623398d355..f1560eaffe 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpLightImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpLightImporter.cpp @@ -28,33 +28,33 @@ namespace c3d_assimp auto & aiLight = *it->second; auto & scene = *light.getScene(); - castor3d::SceneNodeSPtr node; + castor3d::SceneNodeRPtr node{}; castor3d::log::info << cuT( " Light found: [" ) << name << cuT( "]" ) << std::endl; if ( scene.hasSceneNode( name ) ) { - node = scene.findSceneNode( name ).lock(); + node = scene.findSceneNode( name ); } else { - node = scene.createSceneNode( name, scene ); + auto ownNode = scene.createSceneNode( name, scene ); if ( aiLight.mType == aiLightSource_DIRECTIONAL || aiLight.mType == aiLightSource_SPOT ) { auto direction = castor::point::getNormalised( castor::Point3f{ aiLight.mDirection.x, aiLight.mDirection.y, aiLight.mDirection.z } ); auto up = castor::point::getNormalised( castor::Point3f{ aiLight.mUp.x, aiLight.mUp.y, aiLight.mUp.z } ); - node->setOrientation( castor::Quaternion::fromMatrix( fromAssimp( direction, up ) ) ); + ownNode->setOrientation( castor::Quaternion::fromMatrix( fromAssimp( direction, up ) ) ); } if ( aiLight.mType != aiLightSource_DIRECTIONAL ) { auto position = castor::Point3f{ aiLight.mPosition.x, aiLight.mPosition.y, aiLight.mPosition.z }; - node->setPosition( position ); + ownNode->setPosition( position ); } - node->attachTo( *scene.getObjectRootNode() ); - node = scene.addSceneNode( name, node ).lock(); + ownNode->attachTo( *scene.getObjectRootNode() ); + node = scene.addSceneNode( name, ownNode ); } switch ( aiLight.mType ) diff --git a/source/Plugins/Importers/AssimpImporter/AssimpSceneNodeImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpSceneNodeImporter.cpp index ef056cba3e..84f0f0d268 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpSceneNodeImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpSceneNodeImporter.cpp @@ -28,11 +28,10 @@ namespace c3d_assimp } castor3d::log::info << cuT( " SceneNode found: [" ) << name << cuT( "]" ) << std::endl; - auto parent = node.getScene()->tryFindSceneNode( it->parent ); - if ( parent.lock() ) + if ( auto parent = node.getScene()->tryFindSceneNode( it->parent ) ) { - node.attachTo( *parent.lock() ); + node.attachTo( *parent ); } else { diff --git a/test/Castor3D/Castor3DTestCommon.cpp b/test/Castor3D/Castor3DTestCommon.cpp index 8a0556a79a..e9489d8339 100644 --- a/test/Castor3D/Castor3DTestCommon.cpp +++ b/test/Castor3D/Castor3DTestCommon.cpp @@ -11,66 +11,66 @@ namespace Testing { namespace details { - std::map< castor::String, SceneNodeSPtr > sortNodes( Scene const & scene ) + std::map< castor::String, SceneNodeRPtr > sortNodes( Scene const & scene ) { - std::map< castor::String, SceneNodeSPtr > result; + std::map< castor::String, SceneNodeRPtr > result; auto lock = castor::makeUniqueLock( scene.getSceneNodeCache() ); - for ( auto it : scene.getSceneNodeCache() ) + for ( auto & it : scene.getSceneNodeCache() ) { - result.emplace( it.first, it.second ); + result.emplace( it.first, it.second.get() ); } return result; } - std::map< castor::String, GeometrySPtr > sortGeometries( Scene const & scene ) + std::map< castor::String, GeometryRPtr > sortGeometries( Scene const & scene ) { - std::map< castor::String, GeometrySPtr > result; + std::map< castor::String, GeometryRPtr > result; auto lock = castor::makeUniqueLock( scene.getGeometryCache() ); - for ( auto it : scene.getGeometryCache() ) + for ( auto & it : scene.getGeometryCache() ) { - result.emplace( it.first, it.second ); + result.emplace( it.first, it.second.get() ); } return result; } - std::map< castor::String, LightSPtr > sortLights( Scene const & scene ) + std::map< castor::String, LightRPtr > sortLights( Scene const & scene ) { - std::map< castor::String, LightSPtr > result; + std::map< castor::String, LightRPtr > result; auto lock = castor::makeUniqueLock( scene.getLightCache() ); - for ( auto it : scene.getLightCache() ) + for ( auto & it : scene.getLightCache() ) { - result.emplace( it.first, it.second ); + result.emplace( it.first, it.second.get() ); } return result; } - std::map< castor::String, CameraSPtr > sortCameras( Scene const & scene ) + std::map< castor::String, CameraRPtr > sortCameras( Scene const & scene ) { - std::map< castor::String, CameraSPtr > result; + std::map< castor::String, CameraRPtr > result; auto lock = castor::makeUniqueLock( scene.getCameraCache() ); - for ( auto it : scene.getCameraCache() ) + for ( auto & it : scene.getCameraCache() ) { - result.emplace( it.first, it.second ); + result.emplace( it.first, it.second.get() ); } return result; } - std::map< castor::String, AnimatedObjectGroupSPtr > sortAnimatedGroups( Scene const & scene ) + std::map< castor::String, AnimatedObjectGroupRPtr > sortAnimatedGroups( Scene const & scene ) { - std::map< castor::String, AnimatedObjectGroupSPtr > result; + std::map< castor::String, AnimatedObjectGroupRPtr > result; auto lock = castor::makeUniqueLock( scene.getAnimatedObjectGroupCache() ); - for ( auto it : scene.getAnimatedObjectGroupCache() ) + for ( auto & it : scene.getAnimatedObjectGroupCache() ) { - result.emplace( it.first, it.second ); + result.emplace( it.first, it.second.get() ); } return result; diff --git a/tools/CastorMeshConverter/CastorMeshConverter.cpp b/tools/CastorMeshConverter/CastorMeshConverter.cpp index dd36d029c4..3564590c00 100644 --- a/tools/CastorMeshConverter/CastorMeshConverter.cpp +++ b/tools/CastorMeshConverter/CastorMeshConverter.cpp @@ -441,18 +441,21 @@ int main( int argc, char * argv[] ) auto cameraNode = scene.createSceneNode( "MainCameraNode", scene ); cameraNode->setPosition( convert::getCameraPosition( scene.getBoundingBox(), farPlane ) ); cameraNode->attachTo( *scene.getCameraRootNode() ); - cameraNode = scene.addSceneNode( "MainCameraNode", cameraNode ).lock(); - castor3d::Viewport viewport{ *scene.getEngine() }; - viewport.setPerspective( 45.0_degrees - , 1.7778f - , std::max( 0.1f, farPlane / 1000.0f ) - , std::min( farPlane, 1000.0f ) ); - auto camera = scene.createCamera( "MainCamera" - , scene - , *cameraNode - , viewport ); - camera->attachTo( *cameraNode ); - scene.addCamera( "MainCamera", camera, false ); + + if ( auto camNode = scene.addSceneNode( "MainCameraNode", cameraNode ) ) + { + castor3d::Viewport viewport{ *scene.getEngine() }; + viewport.setPerspective( 45.0_degrees + , 1.7778f + , std::max( 0.1f, farPlane / 1000.0f ) + , std::min( farPlane, 1000.0f ) ); + auto camera = scene.createCamera( "MainCamera" + , scene + , *camNode + , viewport ); + camera->attachTo( *camNode ); + scene.addCamera( "MainCamera", camera, false ); + } } if ( scene.getLightCache().isEmpty() ) @@ -460,16 +463,19 @@ int main( int argc, char * argv[] ) auto lightNode = scene.createSceneNode( "LightNode", scene ); lightNode->setOrientation( castor::Quaternion::fromAxisAngle( castor::Point3f{ 1.0, 0.0, 0.0 }, 90.0_degrees ) ); lightNode->attachTo( *scene.getObjectRootNode() ); - lightNode = scene.addSceneNode( "LightNode", lightNode ).lock(); - auto light = scene.createLight( "SunLight" - , scene - , *lightNode - , scene.getLightsFactory() - , castor3d::LightType::eDirectional ); - light->setColour( castor::RgbColour::fromComponents( 1.0f, 1.0f, 1.0f ) ); - light->setIntensity( { 8.0f, 10.0f } ); - light->attachTo( *lightNode ); - scene.addLight( "SunLight", light, false ); + + if ( auto lgtNode = scene.addSceneNode( "LightNode", lightNode ) ) + { + auto light = scene.createLight( "SunLight" + , scene + , *lgtNode + , scene.getLightsFactory() + , castor3d::LightType::eDirectional ); + light->setColour( castor::RgbColour::fromComponents( 1.0f, 1.0f, 1.0f ) ); + light->setIntensity( { 8.0f, 10.0f } ); + light->attachTo( *lgtNode ); + scene.addLight( "SunLight", light, false ); + } } castor3d::exporter::CscnSceneExporter exporter{ options.options }; diff --git a/tools/CastorViewer/MouseNodeEvent.cpp b/tools/CastorViewer/MouseNodeEvent.cpp index 6a5e148704..ce66d95d1c 100644 --- a/tools/CastorViewer/MouseNodeEvent.cpp +++ b/tools/CastorViewer/MouseNodeEvent.cpp @@ -2,12 +2,12 @@ namespace CastorViewer { - MouseNodeEvent::MouseNodeEvent( castor3d::SceneNodeSPtr node + MouseNodeEvent::MouseNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ) : CpuFrameEvent( castor3d::EventType::ePostRender ) - , m_node( node.get() ) + , m_node( node ) , m_dx( dx ) , m_dy( dy ) , m_dz( dz ) diff --git a/tools/CastorViewer/MouseNodeEvent.hpp b/tools/CastorViewer/MouseNodeEvent.hpp index b0e40ef176..49e2d9f6b5 100644 --- a/tools/CastorViewer/MouseNodeEvent.hpp +++ b/tools/CastorViewer/MouseNodeEvent.hpp @@ -15,7 +15,7 @@ namespace CastorViewer : public castor3d::CpuFrameEvent { public: - MouseNodeEvent( castor3d::SceneNodeSPtr node + MouseNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ); diff --git a/tools/CastorViewer/RenderPanel.cpp b/tools/CastorViewer/RenderPanel.cpp index 6246011145..db4276304f 100644 --- a/tools/CastorViewer/RenderPanel.cpp +++ b/tools/CastorViewer/RenderPanel.cpp @@ -204,11 +204,11 @@ namespace CastorViewer { if ( scene->hasSceneNode( cuT( "PointLightsNode" ) ) ) { - m_lightsNode = scene->findSceneNode( cuT( "PointLightsNode" ) ).lock().get(); + m_lightsNode = scene->findSceneNode( cuT( "PointLightsNode" ) ); } else if ( scene->hasSceneNode( cuT( "LightNode" ) ) ) { - m_lightsNode = scene->findSceneNode( cuT( "LightNode" ) ).lock().get(); + m_lightsNode = scene->findSceneNode( cuT( "LightNode" ) ); } auto cameraNode = camera->getParent(); @@ -405,13 +405,13 @@ namespace CastorViewer return result; } - void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometrySPtr geometry - , castor3d::SubmeshSPtr submesh ) + void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry + , castor3d::SubmeshRPtr submesh ) { auto oldSubmesh = m_selectedSubmesh; auto oldGeometry = m_selectedGeometry; - if ( oldGeometry != geometry.get() ) + if ( oldGeometry != geometry ) { m_selectedSubmesh = nullptr; @@ -425,14 +425,14 @@ namespace CastorViewer m_cubeManager->displayObject( *geometry, *submesh ); } - m_selectedGeometry = geometry.get(); + m_selectedGeometry = geometry; } - if ( oldSubmesh != submesh.get() ) + if ( oldSubmesh != submesh ) { if ( submesh ) { - m_selectedSubmesh = submesh.get(); + m_selectedSubmesh = submesh; wxGetApp().getMainFrame()->select( m_selectedGeometry, m_selectedSubmesh ); } } diff --git a/tools/CastorViewer/RenderPanel.hpp b/tools/CastorViewer/RenderPanel.hpp index f80fcebdf5..7cf859a175 100644 --- a/tools/CastorViewer/RenderPanel.hpp +++ b/tools/CastorViewer/RenderPanel.hpp @@ -91,8 +91,8 @@ namespace CastorViewer float doTransformY( int y ); int doTransformX( float x ); int doTransformY( float y ); - void doUpdateSelectedGeometry( castor3d::GeometrySPtr geometry - , castor3d::SubmeshSPtr submesh ); + void doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry + , castor3d::SubmeshRPtr submesh ); GuiCommon::NodeState & doAddNodeState( castor3d::SceneNodeRPtr node , bool camera ); void doUpdateMaxSpeed( float factor ); diff --git a/tools/CastorViewer/RotateNodeEvent.cpp b/tools/CastorViewer/RotateNodeEvent.cpp index 54f7678ddf..3e682b8fbe 100644 --- a/tools/CastorViewer/RotateNodeEvent.cpp +++ b/tools/CastorViewer/RotateNodeEvent.cpp @@ -14,7 +14,7 @@ namespace CastorViewer } } - RotateNodeEvent::RotateNodeEvent( castor3d::SceneNodeSPtr node + RotateNodeEvent::RotateNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ) diff --git a/tools/CastorViewer/RotateNodeEvent.hpp b/tools/CastorViewer/RotateNodeEvent.hpp index 1c0f71c610..a01bf77e9d 100644 --- a/tools/CastorViewer/RotateNodeEvent.hpp +++ b/tools/CastorViewer/RotateNodeEvent.hpp @@ -12,7 +12,7 @@ namespace CastorViewer : public MouseNodeEvent { public: - RotateNodeEvent( castor3d::SceneNodeSPtr node + RotateNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ); diff --git a/tools/CastorViewer/TranslateNodeEvent.cpp b/tools/CastorViewer/TranslateNodeEvent.cpp index cf182f28ef..e75574c5bf 100644 --- a/tools/CastorViewer/TranslateNodeEvent.cpp +++ b/tools/CastorViewer/TranslateNodeEvent.cpp @@ -4,7 +4,7 @@ namespace CastorViewer { - TranslateNodeEvent::TranslateNodeEvent( castor3d::SceneNodeSPtr node + TranslateNodeEvent::TranslateNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ) diff --git a/tools/CastorViewer/TranslateNodeEvent.hpp b/tools/CastorViewer/TranslateNodeEvent.hpp index dddc574981..735a0b4416 100644 --- a/tools/CastorViewer/TranslateNodeEvent.hpp +++ b/tools/CastorViewer/TranslateNodeEvent.hpp @@ -12,7 +12,7 @@ namespace CastorViewer : public MouseNodeEvent { public: - TranslateNodeEvent( castor3d::SceneNodeSPtr node + TranslateNodeEvent( castor3d::SceneNodeRPtr node , float dx , float dy , float dz ); diff --git a/tools/GuiCommon/System/CubeBoxManager.cpp b/tools/GuiCommon/System/CubeBoxManager.cpp index 696c8c28ca..96bfa31d05 100644 --- a/tools/GuiCommon/System/CubeBoxManager.cpp +++ b/tools/GuiCommon/System/CubeBoxManager.cpp @@ -120,8 +120,8 @@ namespace GuiCommon m_obbBone = {}; m_obbSelectedSubmesh = {}; m_obbSubmesh = {}; - m_aabbNode.reset(); - m_obbNode.reset(); + m_aabbNode = {}; + m_obbNode = {}; } void CubeBoxManager::displayObject( castor3d::Geometry const & object @@ -200,42 +200,42 @@ namespace GuiCommon m_obbBoneNodes.clear(); m_obbSubmeshNodes.clear(); m_obbSelectedSubmeshNode = nullptr; - m_obbNode.reset(); - m_aabbNode.reset(); + m_obbNode = {}; + m_aabbNode = {}; m_object = nullptr; m_submesh = nullptr; } ) ); } - castor3d::SceneNodeSPtr CubeBoxManager::doAddBB( castor3d::MeshResPtr bbMesh + castor3d::SceneNodeRPtr CubeBoxManager::doAddBB( castor3d::MeshResPtr bbMesh , castor::String const & nameSpec , castor3d::SceneNode & parent , castor::BoundingBox const & bb ) { - castor3d::SceneNodeSPtr result; + castor3d::SceneNodeRPtr result; auto name = m_object->getName() + cuT( "-" ) + nameSpec; if ( !m_scene.hasSceneNode( name ) ) { - result = m_scene.addNewSceneNode( name ).lock(); + result = m_scene.addNewSceneNode( name ); result->setSerialisable( false ); } else { - result = m_scene.findSceneNode( name ).lock(); + result = m_scene.findSceneNode( name ); } - castor3d::GeometrySPtr ownGeometry; - castor3d::GeometrySPtr geometry; + castor3d::GeometryUPtr ownGeometry; + castor3d::GeometryRPtr geometry; if ( !m_scene.hasGeometry( name ) ) { - ownGeometry = std::make_shared< castor3d::Geometry >( name, m_scene, *result, bbMesh ); - geometry = ownGeometry; + ownGeometry = castor::makeUnique< castor3d::Geometry >( name, m_scene, *result, bbMesh ); + geometry = ownGeometry.get(); } else { - geometry = m_scene.findGeometry( name ).lock(); + geometry = m_scene.findGeometry( name ); } geometry->setShadowCaster( false ); @@ -259,7 +259,7 @@ namespace GuiCommon } void CubeBoxManager::doRemoveBB( castor::String const & nameSpec - , castor3d::SceneNodeSPtr bbNode ) + , castor3d::SceneNodeRPtr bbNode ) { bbNode->setVisible( false ); } diff --git a/tools/GuiCommon/System/CubeBoxManager.hpp b/tools/GuiCommon/System/CubeBoxManager.hpp index 13d62b0702..dafbd0485b 100644 --- a/tools/GuiCommon/System/CubeBoxManager.hpp +++ b/tools/GuiCommon/System/CubeBoxManager.hpp @@ -27,28 +27,28 @@ namespace GuiCommon void hideObject( castor3d::Geometry const & object ); private: - castor3d::SceneNodeSPtr doAddBB( castor3d::MeshResPtr bbMesh + castor3d::SceneNodeRPtr doAddBB( castor3d::MeshResPtr bbMesh , castor::String const & name , castor3d::SceneNode & parent , castor::BoundingBox const & bb ); void doRemoveBB( castor::String const & name - , castor3d::SceneNodeSPtr bbNode ); + , castor3d::SceneNodeRPtr bbNode ); void onSceneUpdate( castor3d::Scene const & scene ); private: castor3d::Scene & m_scene; - castor3d::MeshResPtr m_obbMesh; - castor3d::MeshResPtr m_obbSubmesh; - castor3d::MeshResPtr m_obbSelectedSubmesh; - castor3d::MeshResPtr m_obbBone; - castor3d::MeshResPtr m_aabbMesh; - castor3d::Geometry const * m_object{ nullptr }; - castor3d::Submesh const * m_submesh{ nullptr }; - castor3d::SceneNodeSPtr m_obbNode; + castor3d::MeshResPtr m_obbMesh{}; + castor3d::MeshResPtr m_obbSubmesh{}; + castor3d::MeshResPtr m_obbSelectedSubmesh{}; + castor3d::MeshResPtr m_obbBone{}; + castor3d::MeshResPtr m_aabbMesh{}; + castor3d::Geometry const * m_object{}; + castor3d::Submesh const * m_submesh{}; + castor3d::SceneNodeRPtr m_obbNode{}; castor3d::SceneNodePtrArray m_obbSubmeshNodes; - castor3d::SceneNodeSPtr m_obbSelectedSubmeshNode; + castor3d::SceneNodeRPtr m_obbSelectedSubmeshNode{}; castor3d::SceneNodePtrArray m_obbBoneNodes; - castor3d::SceneNodeSPtr m_aabbNode; + castor3d::SceneNodeRPtr m_aabbNode{}; castor3d::OnSceneUpdateConnection m_sceneConnection; }; } From 81633a32c655ef311a443d3c4014fdf2ce6d74d6 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Fri, 7 Apr 2023 02:09:38 +0200 Subject: [PATCH 24/35] Castor3D: Replaced shared_ptr with unique_ptr for caches. --- demos/CastorDvpTD/Game.cpp | 2 +- demos/CastorDvpTD/Hud.cpp | 87 +++++++++-------- include/Core/Castor3D/Cache/CacheModule.hpp | 16 ++-- include/Core/Castor3D/Cache/PluginCache.hpp | 8 +- .../Castor3D/Event/Frame/FrameEventModule.hpp | 2 - .../Event/UserInput/UserInputListener.hpp | 2 +- .../Castor3D/Miscellaneous/ProgressBar.hpp | 2 +- include/Core/Castor3D/Plugin/PluginModule.hpp | 25 ++--- .../Scene/Animation/AnimationModule.hpp | 5 +- .../Core/Castor3D/Scene/Light/LightModule.hpp | 6 -- .../Core/Castor3D/Scene/SceneFileParser.hpp | 7 +- .../CastorUtils/Design/ResourceCacheBase.hpp | 2 +- .../Cache/AnimatedObjectGroupCache.cpp | 2 +- source/Core/Castor3D/Cache/PluginCache.cpp | 44 +++++---- source/Core/Castor3D/Engine.cpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlButton.cpp | 4 +- .../Castor3D/Gui/Controls/CtrlComboBox.cpp | 4 +- .../Castor3D/Gui/Controls/CtrlControl.cpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.cpp | 10 +- .../Castor3D/Gui/Controls/CtrlProgress.cpp | 8 +- .../Castor3D/Gui/Controls/CtrlScrollable.cpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlStatic.cpp | 4 +- .../Castor3D/Miscellaneous/ProgressBar.cpp | 2 +- source/Core/Castor3D/Plugin/DividerPlugin.cpp | 2 + .../Core/Castor3D/Plugin/GeneratorPlugin.cpp | 2 + source/Core/Castor3D/Plugin/GenericPlugin.cpp | 2 + .../Core/Castor3D/Plugin/ImporterPlugin.cpp | 2 + .../Core/Castor3D/Plugin/ParticlePlugin.cpp | 2 + source/Core/Castor3D/Plugin/Plugin.cpp | 2 + source/Core/Castor3D/Plugin/PostFxPlugin.cpp | 2 + .../Castor3D/Plugin/ToneMappingPlugin.cpp | 2 + .../Castor3D/Render/Culling/SceneCuller.cpp | 2 +- source/Core/Castor3D/Render/RenderWindow.cpp | 2 +- .../Scene/Animation/AnimatedObjectGroup.cpp | 2 + source/Core/Castor3D/Scene/Scene.cpp | 4 +- .../Scene/SceneFileParser_Parsers.cpp | 96 +++++++++++-------- source/Core/Castor3D/Scene/SceneImporter.cpp | 4 +- .../AssimpImporter/AssimpImporterPlugin.cpp | 2 +- 38 files changed, 201 insertions(+), 179 deletions(-) diff --git a/demos/CastorDvpTD/Game.cpp b/demos/CastorDvpTD/Game.cpp index 7ce4575e32..cc00463d6b 100644 --- a/demos/CastorDvpTD/Game.cpp +++ b/demos/CastorDvpTD/Game.cpp @@ -689,7 +689,7 @@ namespace castortd , *node , mesh ); auto animGroup = m_scene.addNewAnimatedObjectGroup( name - , m_scene ).lock(); + , m_scene ); castor::Milliseconds time{ 0 }; if ( node->hasAnimation() ) diff --git a/demos/CastorDvpTD/Hud.cpp b/demos/CastorDvpTD/Hud.cpp index 1647390a8e..c50feabf3a 100644 --- a/demos/CastorDvpTD/Hud.cpp +++ b/demos/CastorDvpTD/Hud.cpp @@ -16,9 +16,8 @@ namespace castortd , castor::String const & name ) { castor3d::TextOverlayRPtr result{}; - auto overlay = scene.findOverlay( name ).lock(); - if ( overlay ) + if ( auto overlay = scene.findOverlay( name ) ) { result = overlay->getTextOverlay(); } @@ -44,74 +43,74 @@ namespace castortd void Hud::initialise() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( false ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( false ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( false ); } void Hud::start() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( false ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( false ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( false ); update(); } void Hud::pause() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( false ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( true ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( false ); } void Hud::resume() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( false ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( true ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( false ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( false ); } void Hud::Help() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( true ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( false ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( true ); } void Hud::GameOver() { auto & scene = m_game.getScene(); - scene.findOverlay( cuT( "TitlePanel" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDResources" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDScore" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDDetails" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "HUDPause" ) ).lock()->setVisible( false ); - scene.findOverlay( cuT( "GameEndPanel" ) ).lock()->setVisible( true ); - scene.findOverlay( cuT( "HelpPanel" ) ).lock()->setVisible( false ); + scene.findOverlay( cuT( "TitlePanel" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDResources" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDScore" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDDetails" ) )->setVisible( false ); + scene.findOverlay( cuT( "HUDPause" ) )->setVisible( false ); + scene.findOverlay( cuT( "GameEndPanel" ) )->setVisible( true ); + scene.findOverlay( cuT( "HelpPanel" ) )->setVisible( false ); getTextOverlay( m_game.getScene(), cuT( "ResultLevelValue" ) )->setCaption( castor::string::toU32String( m_game.getWave() ) ); getTextOverlay( m_game.getScene(), cuT( "ResultKillsValue" ) )->setCaption( castor::string::toU32String( m_game.getKills() ) ); diff --git a/include/Core/Castor3D/Cache/CacheModule.hpp b/include/Core/Castor3D/Cache/CacheModule.hpp index d4191ac6f0..3508919d97 100644 --- a/include/Core/Castor3D/Cache/CacheModule.hpp +++ b/include/Core/Castor3D/Cache/CacheModule.hpp @@ -24,8 +24,8 @@ namespace castor3d { using ElementT = ResT; using ElementKeyT = KeyT; - using ElementPtrT = std::shared_ptr< ElementT >; - using ElementObsT = std::weak_ptr< ElementT >; + using ElementPtrT = castor::UniquePtr< ElementT >; + using ElementObsT = ElementT *; using ElementContT = std::unordered_map< ElementKeyT, ElementPtrT >; using ElementCacheT = castor::ResourceCacheBaseT< ElementT, ElementKeyT, PtrCacheTraitsT< ElementT, ElementKeyT > >; @@ -40,31 +40,31 @@ namespace castor3d , ElementKeyT const & key , ParametersT && ... params ) { - return std::make_shared< ElementT >( key + return castor::makeUnique< ElementT >( key , std::forward< ParametersT >( params )... ); } static ElementObsT makeElementObs( ElementPtrT const & element ) { - return ElementObsT{ element }; + return element.get(); } static bool areElementsEqual( ElementObsT const & lhs , ElementObsT const & rhs ) { - return lhs.lock() == rhs.lock(); + return lhs == rhs; } static bool areElementsEqual( ElementObsT const & lhs , ElementPtrT const & rhs ) { - return lhs.lock() == rhs; + return lhs == rhs.get(); } static bool areElementsEqual( ElementPtrT const & lhs , ElementObsT const & rhs ) { - return lhs == rhs.lock(); + return lhs.get() == rhs; } static bool areElementsEqual( ElementPtrT const & lhs @@ -75,7 +75,7 @@ namespace castor3d static bool isElementObsNull( ElementObsT const & element ) { - return element.lock() == nullptr; + return element == nullptr; } }; diff --git a/include/Core/Castor3D/Cache/PluginCache.hpp b/include/Core/Castor3D/Cache/PluginCache.hpp index 3bdda4a1bc..5c6a619df6 100644 --- a/include/Core/Castor3D/Cache/PluginCache.hpp +++ b/include/Core/Castor3D/Cache/PluginCache.hpp @@ -68,7 +68,7 @@ namespace castor *\param[in] pathFolder Un chemin optionnel, pour y trouver le plug-in *\return Le plug-in chargé, \p nullptr si non trouvé (nom incorrect ou non trouvé dans le chemin donné ou le chemin principal) */ - C3D_API ElementPtrT loadPlugin( String const & pluginName + C3D_API ElementObsT loadPlugin( String const & pluginName , Path const & pathFolder )noexcept; /** *\~english @@ -80,7 +80,7 @@ namespace castor *\param[in] fileFullPath Le chemin du plug-in *\return Le plug-in chargé, \p nullptr si le chemin était incorrect ou s'il ne représentait pas un plug-in valide */ - C3D_API ElementPtrT loadPlugin( Path const & fileFullPath )noexcept; + C3D_API ElementObsT loadPlugin( Path const & fileFullPath )noexcept; /** *\~english *\brief Retrieves the plug-ins of given type @@ -91,7 +91,7 @@ namespace castor *\param[in] type Le type de plu-ins *\return \p nullptr si non trouvé */ - C3D_API castor3d::PluginStrMap getPlugins( castor3d::PluginType type ); + C3D_API std::map< castor::String, castor3d::PluginRPtr > getPlugins( castor3d::PluginType type ); /** *\~english *\brief Loads all the plug-ins located in working folder @@ -103,7 +103,7 @@ namespace castor C3D_API void loadAllPlugins( Path const & folder ); private: - ElementPtrT doloadPlugin( Path const & pathFile ); + ElementObsT doloadPlugin( Path const & pathFile ); private: castor3d::Engine & m_engine; diff --git a/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp b/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp index 6bd4e6de61..39cf963018 100644 --- a/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp +++ b/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp @@ -114,8 +114,6 @@ namespace castor3d CU_DeclareVector( CpuFrameEventUPtr, CpuFrameEventPtr ); CU_DeclareVector( GpuFrameEventUPtr, GpuFrameEventPtr ); - - CU_DeclareMap( castor::String, FrameListenerSPtr, FrameListenerPtrStr ); /** *\~english * Helper structure to specialise a cache behaviour. diff --git a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp index f7f622a8f3..ef4f9ce8ed 100644 --- a/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp +++ b/include/Core/Castor3D/Event/UserInput/UserInputListener.hpp @@ -603,7 +603,7 @@ namespace castor3d std::vector< EventHandlerUPtr > m_handlers; //!\~english The associated frame listener. //!\~french Le frame listener associé. - FrameListenerSPtr m_frameListener; + FrameListenerRPtr m_frameListener; private: MouseState m_mouse; diff --git a/include/Core/Castor3D/Miscellaneous/ProgressBar.hpp b/include/Core/Castor3D/Miscellaneous/ProgressBar.hpp index 73a3d763d9..5323047a00 100644 --- a/include/Core/Castor3D/Miscellaneous/ProgressBar.hpp +++ b/include/Core/Castor3D/Miscellaneous/ProgressBar.hpp @@ -44,7 +44,7 @@ namespace castor3d void doStep(); private: - FrameListenerRes m_listener; + FrameListenerRPtr m_listener; castor::String m_title; castor::String m_label; ProgressCtrlRPtr m_progress; diff --git a/include/Core/Castor3D/Plugin/PluginModule.hpp b/include/Core/Castor3D/Plugin/PluginModule.hpp index b3e81c7c9a..56aacdd7d9 100644 --- a/include/Core/Castor3D/Plugin/PluginModule.hpp +++ b/include/Core/Castor3D/Plugin/PluginModule.hpp @@ -131,15 +131,6 @@ namespace castor3d /** *\~english *\brief - * Render technique plug-in class - *\~french - *\brief - * Classe de plug-in de techniques de rendu - */ - class TechniquePlugin; - /** - *\~english - *\brief * Tone mapping plug-in class. *\~french *\brief @@ -147,14 +138,16 @@ namespace castor3d */ class ToneMappingPlugin; - CU_DeclareSmartPtr( Plugin ); - CU_DeclareSmartPtr( ImporterPlugin ); - CU_DeclareSmartPtr( DividerPlugin ); - CU_DeclareSmartPtr( GenericPlugin ); - CU_DeclareSmartPtr( PostFxPlugin ); - CU_DeclareSmartPtr( ParticlePlugin ); + CU_DeclareCUSmartPtr( castor3d, Plugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, ImporterPlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, DividerPlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, GeneratorPlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, GenericPlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, PostFxPlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, ParticlePlugin, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, ToneMappingPlugin, C3D_API ); - CU_DeclareMap( castor::String, PluginSPtr, PluginStr ); + CU_DeclareMap( castor::String, PluginUPtr, PluginStr ); CU_DeclareArray( PluginStrMap, PluginType::eCount, PluginStrMap ); CU_DeclareMap( castor::Path, castor::DynamicLibrarySPtr, DynamicLibraryPtrPath ); CU_DeclareArray( DynamicLibraryPtrPathMap, PluginType::eCount, DynamicLibraryPtrPathMap ); diff --git a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp index 435cccb7b8..de15f62f88 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp @@ -111,8 +111,9 @@ namespace castor3d using Animable = AnimableT< Engine >; using Animation = AnimationT< Engine >; + CU_DeclareCUSmartPtr( castor3d, AnimatedObjectGroup, C3D_API ); + CU_DeclareSmartPtr( Animable ); - CU_DeclareSmartPtr( AnimatedObjectGroup ); CU_DeclareSmartPtr( AnimatedMesh ); CU_DeclareSmartPtr( AnimatedObject ); CU_DeclareSmartPtr( AnimatedSceneNode ); @@ -121,8 +122,6 @@ namespace castor3d CU_DeclareSmartPtr( Animation ); CU_DeclareSmartPtr( AnimationInstance ); - //! AnimatedObjectGroup pointer map, sorted by name. - CU_DeclareMap( castor::String, AnimatedObjectGroupSPtr, AnimatedObjectGroupPtrStr ); //! AnimatedObject pointer map, sorted by name. CU_DeclareMap( castor::String, AnimatedObjectSPtr, AnimatedObjectPtrStr ); //! Animation pointer map, sorted by name. diff --git a/include/Core/Castor3D/Scene/Light/LightModule.hpp b/include/Core/Castor3D/Scene/Light/LightModule.hpp index cf42e92a8d..f704f288b9 100644 --- a/include/Core/Castor3D/Scene/Light/LightModule.hpp +++ b/include/Core/Castor3D/Scene/Light/LightModule.hpp @@ -132,16 +132,10 @@ namespace castor3d class LightFactory; CU_DeclareSmartPtr( LightFactory ); - //! Array of lights - CU_DeclareVector( LightSPtr, LightPtr ); //! Array of lights CU_DeclareVector( LightRPtr, Lights ); //! Array to non owning light pointers CU_DeclareVector( LightRPtr, LightsRef ); - //! Map of lights, sorted by name - CU_DeclareMap( castor::String, LightSPtr, LightPtrStr ); - //! Map of lights, sorted by index - CU_DeclareMap( int, LightSPtr, LightPtrInt ); //! Array of lights per light type. using LightsMap = std::array< LightsArray, size_t( LightType::eCount ) >; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index 82f50902fb..dafe3bc0f6 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -191,8 +191,9 @@ namespace castor3d castor::ImageSPtr image{}; VkShaderStageFlagBits shaderStage{}; UniformBufferBaseUPtr uniformBuffer{}; - OverlayRes overlay{}; - std::vector< OverlayRes > parentOverlays{}; + OverlayRPtr overlay{}; + OverlayUPtr ownOverlay{}; + std::vector< OverlayResPtr > parentOverlays{}; BillboardListUPtr ownBillboards{}; BillboardListRPtr billboards{}; int face1{ -1 }; @@ -214,7 +215,7 @@ namespace castor3d FloatArray vertexTan{}; FloatArray vertexTex{}; UInt32Array faces{}; - AnimatedObjectGroupSPtr animGroup{}; + AnimatedObjectGroupRPtr animGroup{}; AnimatedObjectSPtr animSkeleton{}; AnimatedObjectSPtr animMesh{}; AnimatedObjectSPtr animNode{}; diff --git a/include/Core/CastorUtils/Design/ResourceCacheBase.hpp b/include/Core/CastorUtils/Design/ResourceCacheBase.hpp index f526f46828..a072aaf358 100644 --- a/include/Core/CastorUtils/Design/ResourceCacheBase.hpp +++ b/include/Core/CastorUtils/Design/ResourceCacheBase.hpp @@ -482,7 +482,7 @@ namespace castor { for ( auto & it : *this ) { - m_merge( *this, destination.m_resources, it.second ); + m_merge( *this, destination.m_resources, std::move( it.second ) ); } } diff --git a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp index 7220b6c4bd..a83d6cc483 100644 --- a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp +++ b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp @@ -211,7 +211,7 @@ namespace castor std::vector< AnimatedObject * > result; auto lock( castor::makeUniqueLock( *this ) ); - for ( auto it : *this ) + for ( auto & it : *this ) { if ( auto animObject = it.second->findObject( name ) ) { diff --git a/source/Core/Castor3D/Cache/PluginCache.cpp b/source/Core/Castor3D/Cache/PluginCache.cpp index 2b96f9cc8a..a4497e39fa 100644 --- a/source/Core/Castor3D/Cache/PluginCache.cpp +++ b/source/Core/Castor3D/Cache/PluginCache.cpp @@ -62,10 +62,10 @@ namespace castor } } - PluginSPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::loadPlugin( String const & pluginName, Path const & pathFolder )noexcept + PluginRPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::loadPlugin( String const & pluginName, Path const & pathFolder )noexcept { Path strFilePath{ CU_SharedLibPrefix + pluginName + cuT( "." ) + CU_SharedLibExt }; - PluginSPtr result; + PluginRPtr result{}; try { @@ -98,9 +98,9 @@ namespace castor return result; } - PluginSPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::loadPlugin( Path const & fileFullPath )noexcept + PluginRPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::loadPlugin( Path const & fileFullPath )noexcept { - PluginSPtr result; + PluginRPtr result{}; try { @@ -126,10 +126,17 @@ namespace castor return result; } - PluginStrMap ResourceCacheT< Plugin, String, PluginCacheTraits >::getPlugins( PluginType type ) + std::map< castor::String, PluginRPtr > ResourceCacheT< Plugin, String, PluginCacheTraits >::getPlugins( PluginType type ) { auto lock( makeUniqueLock( m_mutexLoadedPlugins ) ); - return m_loadedPlugins[size_t( type )]; + std::map< castor::String, PluginRPtr > result; + + for ( auto & it : m_loadedPlugins[size_t( type )] ) + { + result.emplace( it.first, it.second.get() ); + } + + return result; } void ResourceCacheT< Plugin, String, PluginCacheTraits >::loadAllPlugins( Path const & folder ) @@ -156,9 +163,9 @@ namespace castor } } - PluginSPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::doloadPlugin( Path const & pathFile ) + PluginRPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::doloadPlugin( Path const & pathFile ) { - PluginSPtr result; + PluginRPtr result{}; auto lockTypes( makeUniqueLock( m_mutexLoadedPluginTypes ) ); auto it = m_loadedPluginTypes.find( pathFile ); @@ -180,35 +187,36 @@ namespace castor PluginType type{ PluginType::eCount }; pfnGetType( &type ); + PluginUPtr plugin; switch ( type ) { case PluginType::eDivider: - result = std::make_shared< DividerPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, DividerPlugin >( library, &m_engine ); break; case PluginType::eImporter: - result = std::make_shared< ImporterPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ImporterPlugin >( library, &m_engine ); break; case PluginType::eGeneric: - result = std::make_shared< GenericPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, GenericPlugin >( library, &m_engine ); break; case PluginType::eToneMapping: - result = std::make_shared< ToneMappingPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ToneMappingPlugin >( library, &m_engine ); break; case PluginType::ePostEffect: - result = std::make_shared< PostFxPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, PostFxPlugin >( library, &m_engine ); break; case PluginType::eParticle: - result = std::make_shared< ParticlePlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ParticlePlugin >( library, &m_engine ); break; case PluginType::eGenerator: - result = std::make_shared< GeneratorPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, GeneratorPlugin >( library, &m_engine ); break; default: @@ -220,7 +228,7 @@ namespace castor } Version toCheck( 0, 0 ); - result->getRequiredVersion( toCheck ); + plugin->getRequiredVersion( toCheck ); Version version = m_engine.getVersion(); if ( toCheck <= version ) @@ -228,7 +236,7 @@ namespace castor m_loadedPluginTypes.insert( std::make_pair( pathFile, type ) ); { auto lockPlugins( makeUniqueLock( m_mutexLoadedPlugins ) ); - m_loadedPlugins[size_t( type )].insert( std::make_pair( pathFile, result ) ); + result = m_loadedPlugins[size_t( type )].emplace( pathFile, std::move( plugin ) ).first->second.get(); } { auto lockLibraries( makeUniqueLock( m_mutexLibraries ) ); @@ -245,7 +253,7 @@ namespace castor { PluginType type = it->second; auto lockPlugins( makeUniqueLock( m_mutexLoadedPlugins ) ); - result = m_loadedPlugins[size_t( type )].find( pathFile )->second; + result = m_loadedPlugins[size_t( type )].find( pathFile )->second.get(); } return result; diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index e8fbe2511b..df0102b0ce 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -187,7 +187,7 @@ namespace castor3d m_listenerCache = castor::makeCache< FrameListener, castor::String, FrameListenerCacheTraits >( getLogger() , castor::DummyFunctorT< FrameListenerCache >{} , listenerClean ); - m_defaultListener = m_listenerCache->add( eng::defaultName ).lock().get(); + m_defaultListener = m_listenerCache->add( eng::defaultName ); m_shaderCache = makeCache( *this ); m_samplerCache = castor::makeCache< Sampler, castor::String, SamplerCacheTraits >( getLogger() diff --git a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp index a576bd45e3..b799333e1e 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp @@ -80,12 +80,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay() + , &getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Text" ) , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay(); + , &getBackgroundOverlay() )->getTextOverlay(); text->setPixelPosition( getClientOffset() ); text->setPixelSize( getClientSize() ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp index ef850d59cc..18f961a5fb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp @@ -92,12 +92,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay() + , &getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Text" ) , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay(); + , &getBackgroundOverlay() )->getTextOverlay(); text->setPixelPosition( getClientOffset() ); text->setPixelSize( { clientSize->x - clientSize->x, clientSize->y } ); text->setVAlign( VAlign::eCenter ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index d76bf8f6aa..748cfba6c6 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -78,12 +78,12 @@ namespace castor3d , getEngine() , OverlayType::eBorderPanel , nullptr - , parentOv ).lock() + , parentOv ) : getEngine().addNewOverlay( getName() , getEngine() , OverlayType::eBorderPanel , nullptr - , parentOv ).lock(); + , parentOv ); if ( !overlay ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp index f2d94adef0..063260393f 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp @@ -95,12 +95,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay() + , &getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Text" ) , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay(); + , &getBackgroundOverlay() )->getTextOverlay(); text->setPixelPosition( getClientOffset() ); text->setPixelSize( getClientSize() ); text->setVAlign( VAlign::eCenter ); @@ -112,12 +112,12 @@ namespace castor3d , getEngine() , OverlayType::ePanel , nullptr - , &text->getOverlay() ).lock()->getPanelOverlay() + , &text->getOverlay() )->getPanelOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Caret" ) , getEngine() , OverlayType::ePanel , nullptr - , &text->getOverlay() ).lock()->getPanelOverlay(); + , &text->getOverlay() )->getPanelOverlay(); caret->setPixelPosition( getClientOffset() ); caret->setPixelSize( {} ); caret->setVisible( false ); @@ -1093,7 +1093,7 @@ namespace castor3d , getEngine() , OverlayType::ePanel , nullptr - , &text->getOverlay() ).lock()->getPanelOverlay(); + , &text->getOverlay() )->getPanelOverlay(); panel->setPixelPosition( {} ); panel->setPixelSize( {} ); panel->setMaterial( style.getSelectionMaterial() ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp index b3ef273274..2e0ef2d3d9 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp @@ -37,12 +37,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay() + , &getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Title" ) , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay(); + , &getBackgroundOverlay() )->getTextOverlay(); m_title = title; title->setVAlign( VAlign::eTop ); title->setPixelSize( getClientSize() ); @@ -66,12 +66,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &m_container->getBackgroundOverlay() ).lock()->getTextOverlay() + , &m_container->getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Text" ) , getEngine() , OverlayType::eText , nullptr - , &m_container->getBackgroundOverlay() ).lock()->getTextOverlay(); + , &m_container->getBackgroundOverlay() )->getTextOverlay(); m_text = text; text->setPixelSize( getClientSize() ); text->setVisible( true ); diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp index 8f592a2cd5..d2b551baca 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp @@ -218,12 +218,12 @@ namespace castor3d , m_target.getEngine() , OverlayType::ePanel , nullptr - , &m_target.getBackgroundOverlay() ).lock()->getPanelOverlay() + , &m_target.getBackgroundOverlay() )->getPanelOverlay() : m_target.getEngine().addNewOverlay( m_target.getName() + cuT( "/Scroll/Corner" ) , m_target.getEngine() , OverlayType::ePanel , nullptr - , &m_target.getBackgroundOverlay() ).lock()->getPanelOverlay(); + , &m_target.getBackgroundOverlay() )->getPanelOverlay(); m_corner = corner; } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp index f80707669b..cfe4719d0a 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp @@ -57,12 +57,12 @@ namespace castor3d , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay() + , &getBackgroundOverlay() )->getTextOverlay() : getEngine().addNewOverlay( getName() + cuT( "/Text" ) , getEngine() , OverlayType::eText , nullptr - , &getBackgroundOverlay() ).lock()->getTextOverlay(); + , &getBackgroundOverlay() )->getTextOverlay(); m_text = text; text->setPixelSize( getClientSize() ); text->setCaption( m_caption ); diff --git a/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp b/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp index a53c1acd0c..fece711790 100644 --- a/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp +++ b/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp @@ -17,7 +17,7 @@ namespace castor3d ProgressBar::ProgressBar( Engine & engine , ProgressCtrlRPtr progress ) - : m_listener{ engine.addNewFrameListener( "C3D_ProgressBar" ).lock() } + : m_listener{ engine.addNewFrameListener( "C3D_ProgressBar" ) } , m_progress{ progress } { } diff --git a/source/Core/Castor3D/Plugin/DividerPlugin.cpp b/source/Core/Castor3D/Plugin/DividerPlugin.cpp index 782afeaee6..3ce9f707d9 100644 --- a/source/Core/Castor3D/Plugin/DividerPlugin.cpp +++ b/source/Core/Castor3D/Plugin/DividerPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, DividerPlugin ) + namespace castor3d { DividerPlugin::DividerPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp index de09e61081..082d8634bb 100644 --- a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, GeneratorPlugin ) + namespace castor3d { GeneratorPlugin::GeneratorPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/GenericPlugin.cpp b/source/Core/Castor3D/Plugin/GenericPlugin.cpp index b16bc3c48c..e33c28184a 100644 --- a/source/Core/Castor3D/Plugin/GenericPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GenericPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, GenericPlugin ) + namespace castor3d { GenericPlugin::GenericPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp index ca8ecc4aeb..3a47bafc94 100644 --- a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, ImporterPlugin ) + namespace castor3d { ImporterPlugin::ImporterPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp index c5fe1450c6..7958fd06d6 100644 --- a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp +++ b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, ParticlePlugin ) + namespace castor3d { ParticlePlugin::ParticlePlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/Plugin.cpp b/source/Core/Castor3D/Plugin/Plugin.cpp index b96940fcbf..98cdedab98 100644 --- a/source/Core/Castor3D/Plugin/Plugin.cpp +++ b/source/Core/Castor3D/Plugin/Plugin.cpp @@ -7,6 +7,8 @@ #include #include +CU_ImplementCUSmartPtr( castor3d, Plugin ) + namespace castor3d { namespace plugin diff --git a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp index 47f4e30b3a..e4333343e0 100644 --- a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp +++ b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, PostFxPlugin ) + namespace castor3d { PostFxPlugin::PostFxPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp index b86a0effba..500b876503 100644 --- a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp @@ -2,6 +2,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, ToneMappingPlugin ) + namespace castor3d { ToneMappingPlugin::ToneMappingPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) diff --git a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp index 38eb9aee70..89d159f385 100644 --- a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp +++ b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp @@ -44,7 +44,7 @@ namespace castor3d using LockType = std::unique_lock< AnimatedObjectGroupCache const >; LockType lock{ castor::makeUniqueLock( cache ) }; - for ( auto group : cache ) + for ( auto & group : cache ) { if ( !result ) { diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index b00f0afaa0..d69b844a5c 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -344,7 +344,7 @@ namespace castor3d , m_commandBufferPool{ m_device->createCommandPool( m_device.getGraphicsQueueFamilyIndex() , VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT ) } , m_resources{ engine.getGraphResourceHandler() } - , m_listener{ getEngine()->addNewFrameListener( getName() + castor::string::toString( m_index ) ).lock().get() } + , m_listener{ getEngine()->addNewFrameListener( getName() + castor::string::toString( m_index ) ) } , m_size{ size } , m_loading{ engine.isThreaded() } , m_configUbo{ m_device.uboPool->getBuffer< Configuration >( 0u ) } diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp index 419b69cf11..2d503e26cc 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp @@ -13,6 +13,8 @@ #include "Castor3D/Scene/Animation/AnimatedTexture.hpp" #include "Castor3D/Scene/Geometry.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedObjectGroup ) + namespace castor3d { namespace anmobjgrp diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index df12158455..ce1d614f0c 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -110,7 +110,7 @@ namespace castor3d , m_rootObjectNode{ m_sceneNodeCache->find( ObjectRootNode ) } , m_background{ std::make_shared< ColourBackground >( engine, *this ) } , m_lightFactory{ std::make_shared< LightFactory >() } - , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ).lock().get() } + , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ) } , m_renderNodes{ castor::makeUnique< SceneRenderNodes >( *this ) } { m_billboardCache = makeObjectCache< BillboardList, castor::String, BillboardListCacheTraits >( *this @@ -651,7 +651,7 @@ namespace castor3d , Pass & pass ) { auto & cache = getAnimatedObjectGroupCache(); - auto group = cache.find( cuT( "C3D_Textures" ) ).lock(); + auto group = cache.find( cuT( "C3D_Textures" ) ); return group->addObject( sourceInfo, config, pass ); } diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 12d0a19b3e..91301620df 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -366,15 +366,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel , nullptr , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -395,15 +396,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel , nullptr , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -424,15 +426,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText , nullptr , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -1262,7 +1265,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - parsingContext.animGroup = parsingContext.scene->addNewAnimatedObjectGroup( name, *parsingContext.scene ).lock(); + parsingContext.animGroup = parsingContext.scene->addNewAnimatedObjectGroup( name, *parsingContext.scene ); } } CU_EndAttributePush( CSCNSection::eAnimGroup ) @@ -1279,15 +1282,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel , parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -1308,15 +1312,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel , parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -1337,15 +1342,16 @@ namespace castor3d { castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock(); + auto parent = parsingContext.parentOverlays.back(); + parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText , parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -4952,17 +4958,18 @@ namespace castor3d auto & parsingContext = getParserContext( context ); castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); + auto parent = parsingContext.parentOverlays.back(); parsingContext.overlay = parsingContext.scene - ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock() - : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) + : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel , parent ? parent->getScene() : parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -4975,17 +4982,18 @@ namespace castor3d auto & parsingContext = getParserContext( context ); castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); + auto parent = parsingContext.parentOverlays.back(); parsingContext.overlay = parsingContext.scene - ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock() - : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) + : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel , parent ? parent->getScene() : parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -4998,17 +5006,18 @@ namespace castor3d auto & parsingContext = getParserContext( context ); castor::String name; parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back().get(); + auto parent = parsingContext.parentOverlays.back(); parsingContext.overlay = parsingContext.scene - ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ).lock() - : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ).lock(); + ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) + : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); if ( !parsingContext.overlay ) { - parsingContext.overlay = std::make_shared< Overlay >( *parsingContext.parser->getEngine() + parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText , parent ? parent->getScene() : parsingContext.scene , parent ); + parsingContext.overlay = parsingContext.ownOverlay.get(); parsingContext.overlay->rename( name ); } @@ -5039,17 +5048,20 @@ namespace castor3d parsingContext.overlay->setVisible( true ); } - if ( parsingContext.scene ) + if ( parsingContext.ownOverlay ) { - parsingContext.scene->addOverlay( parsingContext.overlay->getName() - , parsingContext.overlay - , true ); - } - else - { - parsingContext.parser->getEngine()->addOverlay( parsingContext.overlay->getName() - , parsingContext.overlay - , true ); + if ( parsingContext.scene ) + { + parsingContext.scene->addOverlay( parsingContext.overlay->getName() + , parsingContext.ownOverlay + , true ); + } + else + { + parsingContext.parser->getEngine()->addOverlay( parsingContext.overlay->getName() + , parsingContext.ownOverlay + , true ); + } } CU_Require( !parsingContext.parentOverlays.empty() ); @@ -5886,7 +5898,7 @@ namespace castor3d CU_ParsingError( cuT( "No animated object group initialised" ) ); } - parsingContext.animGroup.reset(); + parsingContext.animGroup = {}; } CU_EndAttributePop() diff --git a/source/Core/Castor3D/Scene/SceneImporter.cpp b/source/Core/Castor3D/Scene/SceneImporter.cpp index b5b60d2a75..1d49a57c66 100644 --- a/source/Core/Castor3D/Scene/SceneImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneImporter.cpp @@ -371,8 +371,8 @@ namespace castor3d || skelIt != animIt.second.skeletons.end() ) { auto animGroup = ( scene.hasAnimatedObjectGroup( geometry.first ) - ? scene.findAnimatedObjectGroup( geometry.first ).lock() - : scene.addNewAnimatedObjectGroup( geometry.first, scene ).lock() ); + ? scene.findAnimatedObjectGroup( geometry.first ) + : scene.addNewAnimatedObjectGroup( geometry.first, scene ) ); if ( animGroup->addAnimation( animIt.first ) ) { diff --git a/source/Plugins/Importers/AssimpImporter/AssimpImporterPlugin.cpp b/source/Plugins/Importers/AssimpImporter/AssimpImporterPlugin.cpp index cc12507fa5..604082be5c 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpImporterPlugin.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpImporterPlugin.cpp @@ -91,7 +91,7 @@ namespace for ( auto it : engine->getPluginCache().getPlugins( castor3d::PluginType::eImporter ) ) { - auto const importer = std::static_pointer_cast< castor3d::ImporterPlugin >( it.second ); + auto const importer = &static_cast< castor3d::ImporterPlugin & >( *it.second ); if ( importer->getName() != c3d_assimp::AssimpImporterFile::Name ) { From 4ee0e14e220a41537dd64947f379be047fb943e7 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 11:55:29 +0200 Subject: [PATCH 25/35] Castor3D: Replaced use of shared_ptr with unique_ptr for Pass. --- include/Core/Castor3D/Material/Material.hpp | 10 +-- include/Core/Castor3D/Material/Pass/Pass.hpp | 23 ++--- .../Castor3D/Material/Pass/PassFactory.hpp | 6 +- .../Castor3D/Material/Pass/PassModule.hpp | 8 +- .../Core/Castor3D/Material/Pass/PbrPass.hpp | 2 +- .../Core/Castor3D/Material/Pass/PhongPass.hpp | 2 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 4 +- source/Core/Castor3D/Material/Material.cpp | 49 ++++++----- source/Core/Castor3D/Material/Pass/Pass.cpp | 84 ++++++++++--------- .../Castor3D/Material/Pass/PassFactory.cpp | 11 ++- .../Core/Castor3D/Material/Pass/PbrPass.cpp | 4 +- .../Core/Castor3D/Material/Pass/PhongPass.cpp | 4 +- .../Model/Mesh/Generator/Cylinder.cpp | 1 - .../Castor3D/Render/Node/SceneRenderNodes.cpp | 4 +- .../Scene/SceneFileParser_Parsers.cpp | 2 +- .../Core/SceneExporter/Text/TextMaterial.cpp | 2 +- .../ToonMaterial/ToonMaterialPlugin.cpp | 4 +- .../TreeItems/PassTreeItemProperty.cpp | 6 +- .../TreeItems/PassTreeItemProperty.hpp | 2 +- tools/GuiCommon/System/MaterialsList.cpp | 10 +-- tools/GuiCommon/System/MaterialsList.hpp | 2 +- 21 files changed, 130 insertions(+), 110 deletions(-) diff --git a/include/Core/Castor3D/Material/Material.hpp b/include/Core/Castor3D/Material/Material.hpp index 9eab7f55ea..5af9793b0e 100644 --- a/include/Core/Castor3D/Material/Material.hpp +++ b/include/Core/Castor3D/Material/Material.hpp @@ -46,7 +46,7 @@ namespace castor3d *\param[in] LightingModelID L'ID du modèle d'éclairage de la passe. *\return La passe créée. */ - C3D_API PassSPtr createPass( LightingModelID lightingModelId ); + C3D_API PassRPtr createPass( LightingModelID lightingModelId ); /** *\~english *\brief Creates a pass. @@ -55,7 +55,7 @@ namespace castor3d *\brief Crée une passe. *\return La passe créée. */ - C3D_API PassSPtr createPass(); + C3D_API PassRPtr createPass(); /** *\~english *\brief Adds a pass, cloning the given one. @@ -71,7 +71,7 @@ namespace castor3d *\brief Supprime une passe externe. *\param[in] pass La passe. */ - C3D_API void removePass( PassSPtr pass ); + C3D_API void removePass( PassRPtr pass ); /** *\~english *\brief Retrieves a pass and returns it. @@ -82,7 +82,7 @@ namespace castor3d *\param[in] index L'index de la passe voulue. *\return La passe récupére ou nullptr si non trouvés. */ - C3D_API PassSPtr getPass( uint32_t index )const; + C3D_API PassRPtr getPass( uint32_t index )const; /** *\~english *\brief Destroys the pass at the given index. @@ -188,7 +188,7 @@ namespace castor3d private: PassPtrArray m_passes; LightingModelID m_lightingModelId; - std::map< PassSPtr, OnPassChangedConnection > m_passListeners; + std::map< PassRPtr, OnPassChangedConnection > m_passListeners; RenderPassRegisterInfo * m_renderPassInfo{}; bool m_serialisable{ true }; }; diff --git a/include/Core/Castor3D/Material/Pass/Pass.hpp b/include/Core/Castor3D/Material/Pass/Pass.hpp index 5d5d3b0164..de6faba23a 100644 --- a/include/Core/Castor3D/Material/Pass/Pass.hpp +++ b/include/Core/Castor3D/Material/Pass/Pass.hpp @@ -50,13 +50,25 @@ namespace castor3d */ C3D_API explicit Pass( Material & parent , LightingModelID lightingModelId ); + /** + *\~english + *\brief Copy constructor. + *\param[in] parent The parent material. + *\param[in] rhs The pass top copy. + *\~french + *\brief Constructeur par copie. + *\param[in] parent Le matériau parent. + *\param[in] rhs La passe à copier. + */ + C3D_API Pass( Material & parent + , Pass const & rhs ); /** *\~english *\brief Destructor *\~french *\brief Destructeur */ - C3D_API ~Pass(); + C3D_API ~Pass()noexcept; /** *\~english *\brief Initialises the pass and all it's dependencies. @@ -283,15 +295,6 @@ namespace castor3d */ C3D_API void fillBuffer( PassBuffer & buffer , uint16_t passTypeIndex )const; - /** - *\~english - *\brief Clones this pass. - *\return The clone. - *\~french - *\brief Clone cette pass. - *\return Le clone. - */ - C3D_API PassSPtr clone( Material & material )const; /** *\~english *\brief Writes the component content to text. diff --git a/include/Core/Castor3D/Material/Pass/PassFactory.hpp b/include/Core/Castor3D/Material/Pass/PassFactory.hpp index acf2b70ee3..9d77a671d1 100644 --- a/include/Core/Castor3D/Material/Pass/PassFactory.hpp +++ b/include/Core/Castor3D/Material/Pass/PassFactory.hpp @@ -47,8 +47,10 @@ namespace castor3d C3D_API void registerType( LightingModelID lightingModelId , PassRegisterInfo info ); - C3D_API PassSPtr create( LightingModelID lightingModelId - , Material & parent )const; + C3D_API PassUPtr create( Material & parent + , LightingModelID lightingModelId )const; + C3D_API PassUPtr create( Material & parent + , Pass const & rhs )const; C3D_API LightingModelID getNameId( castor::String const & passType )const; C3D_API castor::String getIdName( LightingModelID lightingModelId )const; diff --git a/include/Core/Castor3D/Material/Pass/PassModule.hpp b/include/Core/Castor3D/Material/Pass/PassModule.hpp index 2e715ede21..e2216344d3 100644 --- a/include/Core/Castor3D/Material/Pass/PassModule.hpp +++ b/include/Core/Castor3D/Material/Pass/PassModule.hpp @@ -116,7 +116,7 @@ namespace castor3d */ class SubsurfaceScattering; - CU_DeclareSmartPtr( Pass ); + CU_DeclareCUSmartPtr( castor3d, Pass, C3D_API ); CU_DeclareSmartPtr( SubsurfaceScattering ); CU_DeclareCUSmartPtr( castor3d, PassFactory, C3D_API ); @@ -124,7 +124,7 @@ namespace castor3d //! Pass array CU_DeclareVector( Pass, Pass ); //! Pass pointer array - CU_DeclareVector( PassSPtr, PassPtr ); + CU_DeclareVector( PassUPtr, PassPtr ); using OnPassChangedFunction = std::function< void( Pass const & ) >; using OnPassChanged = castor::SignalT< OnPassChangedFunction >; @@ -147,7 +147,7 @@ namespace castor3d ShaderBufferDeclarator declare; }; - using PassCreator = std::function< PassSPtr( LightingModelID, Material & ) >; + using PassCreator = std::function< PassUPtr( LightingModelID, Material & ) >; struct PassFactoryEntry { @@ -160,7 +160,7 @@ namespace castor3d using PassFactoryBase = castor::Factory< Pass , LightingModelID - , PassSPtr + , PassUPtr , PassCreator , PassTypeID , PassFactoryEntry >; diff --git a/include/Core/Castor3D/Material/Pass/PbrPass.hpp b/include/Core/Castor3D/Material/Pass/PbrPass.hpp index 67d8b20cc4..a72145bf7b 100644 --- a/include/Core/Castor3D/Material/Pass/PbrPass.hpp +++ b/include/Core/Castor3D/Material/Pass/PbrPass.hpp @@ -11,7 +11,7 @@ namespace castor3d class PbrPass { public: - C3D_API static PassSPtr create( LightingModelID lightingModelId + C3D_API static PassUPtr create( LightingModelID lightingModelId , Material & parent ); C3D_API static castor::String const Type; diff --git a/include/Core/Castor3D/Material/Pass/PhongPass.hpp b/include/Core/Castor3D/Material/Pass/PhongPass.hpp index 9104718a00..d1d00b48e9 100644 --- a/include/Core/Castor3D/Material/Pass/PhongPass.hpp +++ b/include/Core/Castor3D/Material/Pass/PhongPass.hpp @@ -11,7 +11,7 @@ namespace castor3d class PhongPass { public: - C3D_API static PassSPtr create( LightingModelID lightingModelId + C3D_API static PassUPtr create( LightingModelID lightingModelId , Material & parent ); C3D_API static castor::String const Type; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index dafe3bc0f6..1aecf0b190 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -171,7 +171,7 @@ namespace castor3d TargetType targetType{}; RenderTargetRPtr renderTarget{}; RenderTargetRPtr textureRenderTarget{}; - PassSPtr pass{}; + PassRPtr pass{}; PassComponent * passComponent{}; bool createPass{ true }; uint32_t unitIndex{}; @@ -295,7 +295,7 @@ namespace castor3d ComponentT & getPassComponent( SceneFileContext & parsingContext ) { if ( !parsingContext.passComponent - || parsingContext.passComponent->getOwner() != parsingContext.pass.get() + || parsingContext.passComponent->getOwner() != parsingContext.pass || getPassComponentType( *parsingContext.passComponent ) != ComponentT::TypeName ) { if ( parsingContext.pass->template hasComponent< ComponentT >() ) diff --git a/source/Core/Castor3D/Material/Material.cpp b/source/Core/Castor3D/Material/Material.cpp index c2e18719d1..3d83e8c4e7 100644 --- a/source/Core/Castor3D/Material/Material.cpp +++ b/source/Core/Castor3D/Material/Material.cpp @@ -24,7 +24,7 @@ namespace castor3d { log::debug << cuT( "Initialising material [" ) << getName() << cuT( "]" ) << std::endl; - for ( auto pass : m_passes ) + for ( auto & pass : m_passes ) { pass->initialise(); } @@ -32,13 +32,13 @@ namespace castor3d void Material::cleanup() { - for ( auto pass : m_passes ) + for ( auto & pass : m_passes ) { pass->cleanup(); } } - PassSPtr Material::createPass( LightingModelID lightingModelId ) + PassRPtr Material::createPass( LightingModelID lightingModelId ) { if ( m_passes.size() == MaxPassLayers ) { @@ -47,20 +47,21 @@ namespace castor3d return nullptr; } - auto result = getEngine()->getPassFactory().create( lightingModelId - , *this ); + auto result = getEngine()->getPassFactory().create( *this + , lightingModelId ); CU_Require( result ); - m_passListeners.emplace( result + auto ret = result.get(); + m_passListeners.emplace( ret , result->onChanged.connect( [this]( Pass const & p ) { onPassChanged( p ); } ) ); - m_passes.push_back( result ); + m_passes.emplace_back( std::move( result ) ); onChanged( *this ); - return result; + return ret; } - PassSPtr Material::createPass() + PassRPtr Material::createPass() { return createPass( m_lightingModelId ); } @@ -74,39 +75,45 @@ namespace castor3d return; } - auto newPass = pass.clone( *this ); + auto newPass = getEngine()->getPassFactory().create( *this + , pass ); CU_Require( newPass ); - m_passListeners.emplace( newPass + m_passListeners.emplace( newPass.get() , newPass->onChanged.connect( [this]( Pass const & p ) { onPassChanged( p ); } ) ); - m_passes.push_back( newPass ); + m_passes.emplace_back( std::move( newPass ) ); onChanged( *this ); } - void Material::removePass( PassSPtr pass ) + void Material::removePass( PassRPtr pass ) { - auto it = std::find( m_passes.begin(), m_passes.end(), pass ); + auto it = std::find_if( m_passes.begin() + , m_passes.end() + , [pass]( PassUPtr const & lookup ) + { + return lookup.get() == pass; + } ); if ( it != m_passes.end() ) { - m_passListeners.erase( *it ); + m_passListeners.erase( it->get() ); m_passes.erase( it ); onChanged( *this ); } } - PassSPtr Material::getPass( uint32_t index )const + PassRPtr Material::getPass( uint32_t index )const { CU_Require( index < m_passes.size() ); - return m_passes[index]; + return m_passes[index].get(); } void Material::destroyPass( uint32_t index ) { CU_Require( index < m_passes.size() ); - m_passListeners.erase( *( m_passes.begin() + index ) ); + m_passListeners.erase( ( m_passes.begin() + index )->get() ); m_passes.erase( m_passes.begin() + index ); onChanged( *this ); } @@ -115,7 +122,7 @@ namespace castor3d { return m_passes.end() == std::find_if( m_passes.begin() , m_passes.end() - , []( PassSPtr pass ) + , []( PassUPtr const & pass ) { return !pass->hasAlphaBlending(); } ); @@ -125,7 +132,7 @@ namespace castor3d { return m_passes.end() != std::find_if( m_passes.begin() , m_passes.end() - , []( PassSPtr pass ) + , []( PassUPtr const & pass ) { return pass->hasEnvironmentMapping(); } ); @@ -135,7 +142,7 @@ namespace castor3d { return m_passes.end() != std::find_if( m_passes.begin() , m_passes.end() - , []( PassSPtr pass ) + , []( PassUPtr const & pass ) { return pass->hasSubsurfaceScattering(); } ); diff --git a/source/Core/Castor3D/Material/Pass/Pass.cpp b/source/Core/Castor3D/Material/Pass/Pass.cpp index d429af4b8a..2be71245a6 100644 --- a/source/Core/Castor3D/Material/Pass/Pass.cpp +++ b/source/Core/Castor3D/Material/Pass/Pass.cpp @@ -41,6 +41,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, Pass ) + namespace castor3d { //********************************************************************************************* @@ -184,7 +186,47 @@ namespace castor3d createComponent< PickableComponent >(); } - Pass::~Pass() + Pass::Pass( Material & parent + , Pass const & rhs ) + : Pass{ parent, rhs.getLightingModelId() } + { + m_implicit = rhs.m_implicit; + m_automaticShader = rhs.m_automaticShader; + m_renderPassInfo = rhs.m_renderPassInfo; + + for ( auto & component : rhs.m_components ) + { + addComponent( component.second->clone( *this ) ); + } + + for ( auto & source : rhs.m_sources ) + { + auto it = rhs.m_animations.find( source.first ); + + if ( it != rhs.m_animations.end() + && it->second ) + { + auto & srcAnim = static_cast< TextureAnimation const & >( *it->second ); + auto clonedAnim = std::make_unique< TextureAnimation >( *srcAnim.getEngine() + , srcAnim.getName() ); + clonedAnim->setRotateSpeed( srcAnim.getRotateSpeed() ); + clonedAnim->setScaleSpeed( srcAnim.getScaleSpeed() ); + clonedAnim->setTranslateSpeed( srcAnim.getTranslateSpeed() ); + registerTexture( source.first + , source.second + , std::move( clonedAnim ) ); + } + else + { + registerTexture( source.first + , source.second ); + } + } + + prepareTextures(); + } + + Pass::~Pass()noexcept { CU_Assert( getId() == 0u, "Did you forget to call Pass::cleanup ?" ); } @@ -641,46 +683,6 @@ namespace castor3d getPassComponentsRegister().fillBuffer( *this, buffer ); } - PassSPtr Pass::clone( Material & material )const - { - auto result = std::make_unique< Pass >( material, getLightingModelId() ); - result->m_implicit = m_implicit; - result->m_automaticShader = m_automaticShader; - result->m_renderPassInfo = m_renderPassInfo; - - for ( auto & component : m_components ) - { - result->addComponent( component.second->clone( *result ) ); - } - - for ( auto & source : m_sources ) - { - auto it = m_animations.find( source.first ); - - if ( it != m_animations.end() - && it->second ) - { - auto & srcAnim = static_cast< TextureAnimation const & >( *it->second ); - auto clonedAnim = std::make_unique< TextureAnimation >( *srcAnim.getEngine() - , srcAnim.getName() ); - clonedAnim->setRotateSpeed( srcAnim.getRotateSpeed() ); - clonedAnim->setScaleSpeed( srcAnim.getScaleSpeed() ); - clonedAnim->setTranslateSpeed( srcAnim.getTranslateSpeed() ); - result->registerTexture( source.first - , source.second - , std::move( clonedAnim ) ); - } - else - { - result->registerTexture( source.first - , source.second ); - } - } - - result->prepareTextures(); - return result; - } - bool Pass::writeText( castor::String const & tabs , castor::Path const & folder , castor::String const & subfolder diff --git a/source/Core/Castor3D/Material/Pass/PassFactory.cpp b/source/Core/Castor3D/Material/Pass/PassFactory.cpp index 2afc6a8fc6..2c2e17a4f2 100644 --- a/source/Core/Castor3D/Material/Pass/PassFactory.cpp +++ b/source/Core/Castor3D/Material/Pass/PassFactory.cpp @@ -1,6 +1,7 @@ #include "Castor3D/Material/Pass/PassFactory.hpp" #include "Castor3D/Engine.hpp" +#include "Castor3D/Material/Pass/Pass.hpp" #include "Castor3D/Shader/Shaders/GlslLighting.hpp" CU_ImplementCUSmartPtr( castor3d, PassFactory ) @@ -31,12 +32,18 @@ namespace castor3d } } - PassSPtr PassFactory::create( LightingModelID lightingModelId - , Material & parent )const + PassUPtr PassFactory::create( Material & parent + , LightingModelID lightingModelId )const { return create( lightingModelId, lightingModelId, parent ); } + PassUPtr PassFactory::create( Material & parent + , Pass const & rhs )const + { + return castor::makeUnique< Pass >( parent, rhs ); + } + LightingModelID PassFactory::getNameId( castor::String const & passType )const { auto it = std::find_if( m_registered.begin() diff --git a/source/Core/Castor3D/Material/Pass/PbrPass.cpp b/source/Core/Castor3D/Material/Pass/PbrPass.cpp index 9c99ab4894..2428c1494a 100644 --- a/source/Core/Castor3D/Material/Pass/PbrPass.cpp +++ b/source/Core/Castor3D/Material/Pass/PbrPass.cpp @@ -13,10 +13,10 @@ namespace castor3d castor::String const PbrPass::Type = "pbr"; castor::String const PbrPass::LightingModel = shader::PbrLightingModel::getName(); - PassSPtr PbrPass::create( LightingModelID lightingModelId + PassUPtr PbrPass::create( LightingModelID lightingModelId , Material & parent ) { - auto result = std::make_shared< Pass >( parent + auto result = castor::makeUnique< Pass >( parent , lightingModelId ); result->createComponent< ColourComponent >(); result->createComponent< MetalnessComponent >(); diff --git a/source/Core/Castor3D/Material/Pass/PhongPass.cpp b/source/Core/Castor3D/Material/Pass/PhongPass.cpp index 077f7b71cb..7e9cf1dc64 100644 --- a/source/Core/Castor3D/Material/Pass/PhongPass.cpp +++ b/source/Core/Castor3D/Material/Pass/PhongPass.cpp @@ -12,10 +12,10 @@ namespace castor3d castor::String const PhongPass::Type = "blinn_phong"; castor::String const PhongPass::LightingModel = shader::PhongLightingModel::getName(); - PassSPtr PhongPass::create( LightingModelID lightingModelId + PassUPtr PhongPass::create( LightingModelID lightingModelId , Material & parent ) { - auto result = std::make_shared< Pass >( parent + auto result = castor::makeUnique< Pass >( parent , lightingModelId ); result->createComponent< ColourComponent >(); result->createComponent< RoughnessComponent >( Pass::computeRoughnessFromShininess( 50.0f ) ); diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp index 9dc3e165e7..e93c8fdb24 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp @@ -92,7 +92,6 @@ namespace castor3d auto topCenterIndex = uint32_t( topVertex.size() ); auto bottomCenterIndex = uint32_t( baseVertex.size() ); - FaceSPtr pFace; topVertex.push_back( InterleavedVertex{} .position( castor::Point3f{ 0.0, m_height / 2, 0.0 } ) .normal( castor::Point3f{ 0.0, 1.0, 0.0 } ) diff --git a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp index 8a70f9c299..fdd87dd75e 100644 --- a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp +++ b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp @@ -311,7 +311,7 @@ namespace castor3d { std::vector< std::pair< uint32_t, SubmeshRenderNodeUPtr > > nodes; - for ( auto pass : oldMaterial ) + for ( auto & pass : oldMaterial ) { auto submeshIt = m_submeshNodes.find( scnrendnd::makeNodeHash( *pass, data, instance ) ); @@ -392,7 +392,7 @@ namespace castor3d { std::vector< std::pair< uint32_t, BillboardRenderNodeUPtr > > nodes; - for ( auto pass : oldMaterial ) + for ( auto & pass : oldMaterial ) { auto billboardIt = m_billboardNodes.find( scnrendnd::makeNodeHash( *pass, billboard ) ); diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 91301620df..01d1b5d9d0 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -4179,7 +4179,7 @@ namespace castor3d else { parsingContext.pass->prepareTextures(); - parsingContext.pass.reset(); + parsingContext.pass = {}; parsingContext.passComponent = nullptr; } } diff --git a/source/Core/SceneExporter/Text/TextMaterial.cpp b/source/Core/SceneExporter/Text/TextMaterial.cpp index 6fd3e4e768..0276813f67 100644 --- a/source/Core/SceneExporter/Text/TextMaterial.cpp +++ b/source/Core/SceneExporter/Text/TextMaterial.cpp @@ -33,7 +33,7 @@ namespace castor result = writeName( file, "render_pass", material.getRenderPassInfo()->name ); } - for ( auto pass : material ) + for ( auto & pass : material ) { result = result && writeSub( file, *pass, m_folder, m_subfolder ); diff --git a/source/Plugins/Generic/ToonMaterial/ToonMaterialPlugin.cpp b/source/Plugins/Generic/ToonMaterial/ToonMaterialPlugin.cpp index 1b432aa0b0..3294b3fe39 100644 --- a/source/Plugins/Generic/ToonMaterial/ToonMaterialPlugin.cpp +++ b/source/Plugins/Generic/ToonMaterial/ToonMaterialPlugin.cpp @@ -14,7 +14,7 @@ namespace toon { struct ToonPbrPass { - static castor3d::PassSPtr create( castor3d::LightingModelID lightingModelId + static castor3d::PassUPtr create( castor3d::LightingModelID lightingModelId , castor3d::Material & parent ) { auto result = castor3d::PbrPass::create( lightingModelId, parent ); @@ -25,7 +25,7 @@ namespace toon struct ToonPhongPass { - static castor3d::PassSPtr create( castor3d::LightingModelID lightingModelId + static castor3d::PassUPtr create( castor3d::LightingModelID lightingModelId , castor3d::Material & parent ) { auto result = castor3d::PhongPass::create( lightingModelId, parent ); diff --git a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp index 863cd837a2..14af6edb31 100644 --- a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.cpp @@ -677,11 +677,11 @@ namespace GuiCommon } PassTreeItemProperty::PassTreeItemProperty( bool editable - , castor3d::PassSPtr pass + , castor3d::Pass & pass , castor3d::Scene & scene , wxWindow * parent ) - : TreeItemProperty{ pass->getOwner()->getEngine(), editable } - , m_pass{ pass.get() } + : TreeItemProperty{ pass.getOwner()->getEngine(), editable } + , m_pass{ &pass } , m_scene{ scene } , m_parent{ parent } { diff --git a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp index 27a3d8ed4b..44d34a68bf 100644 --- a/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/PassTreeItemProperty.hpp @@ -38,7 +38,7 @@ namespace GuiCommon *\param[in] scene La scène. */ PassTreeItemProperty( bool editable - , castor3d::PassSPtr pass + , castor3d::Pass & pass , castor3d::Scene & scene , wxWindow * parent ); /** diff --git a/tools/GuiCommon/System/MaterialsList.cpp b/tools/GuiCommon/System/MaterialsList.cpp index 4ef53d9bf1..a0c3fac0db 100644 --- a/tools/GuiCommon/System/MaterialsList.cpp +++ b/tools/GuiCommon/System/MaterialsList.cpp @@ -123,14 +123,14 @@ namespace GuiCommon , new MaterialTreeItemProperty( editable, *material ) ); uint32_t passIndex = 0; - for ( auto pass : *material ) + for ( auto & pass : *material ) { doAddPass( treeCtrl , scene , editable , materialId , ++passIndex - , pass + , *pass , iconOffset ); } } @@ -140,7 +140,7 @@ namespace GuiCommon , bool editable , wxTreeItemId id , uint32_t index - , castor3d::PassSPtr pass + , castor3d::Pass & pass , uint32_t iconOffset ) { wxTreeItemId passId = treeCtrl->AppendItem( id @@ -153,14 +153,14 @@ namespace GuiCommon , treeCtrl ) ); uint32_t unitIndex = 0; - for ( auto unit : *pass ) + for ( auto unit : pass ) { doAddTexture( treeCtrl , editable , passId , ++unitIndex - , *pass , unit + , pass , iconOffset ); } } diff --git a/tools/GuiCommon/System/MaterialsList.hpp b/tools/GuiCommon/System/MaterialsList.hpp index d732e57779..998125c325 100644 --- a/tools/GuiCommon/System/MaterialsList.hpp +++ b/tools/GuiCommon/System/MaterialsList.hpp @@ -36,7 +36,7 @@ namespace GuiCommon , bool editable , wxTreeItemId id , uint32_t index - , castor3d::PassSPtr pass + , castor3d::Pass & pass , uint32_t iconOffset ); static void doAddTexture( wxTreeCtrl * treeCtrl , bool editable From 9f016c92f4147a7c3b498e8566c7e92dd48f5f09 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 11:58:13 +0200 Subject: [PATCH 26/35] Castor3D: Replaced use of shared_ptr with unique_ptr for TextureUnit. --- include/Core/Castor3D/Cache/TextureCache.hpp | 4 +- include/Core/Castor3D/Material/Pass/Pass.hpp | 26 +-- .../Material/Texture/TextureModule.hpp | 4 - .../Render/ShadowMap/ShadowMapResult.hpp | 3 - source/Core/Castor3D/Cache/TextureCache.cpp | 12 +- source/Core/Castor3D/Gui/GuiModule.cpp | 2 +- source/Core/Castor3D/Material/Pass/Pass.cpp | 12 +- tools/CastorViewer/MainFrame.cpp | 32 ++-- tools/GuiCommon/GuiCommonPrerequisites.cpp | 34 ++-- tools/GuiCommon/GuiCommonPrerequisites.hpp | 4 +- .../Properties/AdditionalProperties.cpp | 2 +- .../TreeItems/TextureTreeItemProperty.cpp | 164 +++++++++--------- .../TreeItems/TextureTreeItemProperty.hpp | 2 +- tools/GuiCommon/System/MaterialsList.cpp | 6 +- tools/GuiCommon/System/MaterialsList.hpp | 2 +- 15 files changed, 154 insertions(+), 155 deletions(-) diff --git a/include/Core/Castor3D/Cache/TextureCache.hpp b/include/Core/Castor3D/Cache/TextureCache.hpp index 718ab6eb91..db0f1526a0 100644 --- a/include/Core/Castor3D/Cache/TextureCache.hpp +++ b/include/Core/Castor3D/Cache/TextureCache.hpp @@ -89,7 +89,7 @@ namespace castor3d * Fonctions de gestion de textures. */ /**@{*/ - C3D_API TextureUnitSPtr getTexture( TextureUnitData & unitData ); + C3D_API TextureUnitRPtr getTexture( TextureUnitData & unitData ); C3D_API TextureUnitData & getSourceData( TextureSourceInfo const & sourceInfo , PassTextureConfig const & config , AnimationUPtr animation ); @@ -146,7 +146,7 @@ namespace castor3d std::unordered_set< Pass * > m_dirty; castor::CheckedMutex m_loadMtx; std::vector< std::unique_ptr< ThreadData > > m_loading; - std::unordered_map< size_t, TextureUnitSPtr > m_loaded; + std::unordered_map< size_t, TextureUnitUPtr > m_loaded; ashes::DescriptorSetLayoutPtr m_bindlessTexLayout; ashes::DescriptorPoolPtr m_bindlessTexPool; ashes::DescriptorSetPtr m_bindlessTexSet; diff --git a/include/Core/Castor3D/Material/Pass/Pass.hpp b/include/Core/Castor3D/Material/Pass/Pass.hpp index de6faba23a..f6ded04b9a 100644 --- a/include/Core/Castor3D/Material/Pass/Pass.hpp +++ b/include/Core/Castor3D/Material/Pass/Pass.hpp @@ -38,6 +38,7 @@ namespace castor3d friend struct PassComponent; public: + using UnitArray = std::vector< TextureUnitRPtr >; /** *\~english *\brief Constructor. @@ -171,7 +172,7 @@ namespace castor3d *\param[in] index L'index voulu. *\return \p nullptr si index était hors bornes. */ - C3D_API TextureUnitSPtr getTextureUnit( uint32_t index )const; + C3D_API TextureUnitRPtr getTextureUnit( uint32_t index )const; /** *\~english *\brief Adds a texture. @@ -372,7 +373,7 @@ namespace castor3d C3D_API bool hasEnvironmentMapping()const; C3D_API bool hasSubsurfaceScattering()const; C3D_API bool isTwoSided()const; - C3D_API TextureUnitPtrArray getTextureUnits()const; + C3D_API UnitArray getTextureUnits()const; C3D_API uint32_t getTextureUnitsCount()const; C3D_API TextureCombine getTexturesMask()const; C3D_API bool hasLighting()const; @@ -487,23 +488,26 @@ namespace castor3d m_dirty = false; } /**@}*/ + /** + *name + * Signals. + */ + /**@{*/ + OnPassChanged onChanged; + /**@}*/ protected: C3D_API static void parseError( castor::String const & error ); + mutable std::atomic_bool m_dirty{ true }; + private: void onSssChanged( SubsurfaceScattering const & sss ); void doAddUnit( TextureUnitData & unitData - , TextureUnitSPtr unit - , TextureUnitPtrArray & result ); + , TextureUnitRPtr unit + , UnitArray & result ); void doUpdateTextureFlags(); - public: - OnPassChanged onChanged; - - protected: - mutable std::atomic_bool m_dirty{ true }; - private: PassComponentCombine m_componentCombine; TextureCombine m_textureCombine; @@ -513,7 +517,7 @@ namespace castor3d std::unordered_map< TextureSourceInfo, AnimationUPtr, TextureSourceInfoHasher > m_animations; uint32_t m_maxTexcoordSet{}; std::atomic_bool m_texturesReduced{ false }; - TextureUnitPtrArray m_textureUnits; + UnitArray m_textureUnits; uint32_t m_id{ 0u }; bool m_implicit{ false }; bool m_automaticShader{ true }; diff --git a/include/Core/Castor3D/Material/Texture/TextureModule.hpp b/include/Core/Castor3D/Material/Texture/TextureModule.hpp index 12d9d165b1..2457395dee 100644 --- a/include/Core/Castor3D/Material/Texture/TextureModule.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureModule.hpp @@ -222,10 +222,6 @@ namespace castor3d //! TextureUnit array CU_DeclareVector( TextureUnit, TextureUnit ); - //! TextureUnit pointer array - CU_DeclareVector( TextureUnitSPtr, TextureUnitPtr ); - //! TextureUnit reference array - CU_DeclareVector( std::reference_wrapper< TextureUnit >, DepthMap ); // ARGB => 4 components => 4 channels per configuration. using TextureFlagConfigurations = std::array< TextureFlagConfiguration, 4u >; diff --git a/include/Core/Castor3D/Render/ShadowMap/ShadowMapResult.hpp b/include/Core/Castor3D/Render/ShadowMap/ShadowMapResult.hpp index d11b84108d..46b4b697c7 100644 --- a/include/Core/Castor3D/Render/ShadowMap/ShadowMapResult.hpp +++ b/include/Core/Castor3D/Render/ShadowMap/ShadowMapResult.hpp @@ -20,9 +20,6 @@ namespace castor3d , VkImageCreateFlags createFlags , castor::Size const & size , uint32_t layerCount ); - - private: - TextureUnitArray m_owned; }; } diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 473039b4c2..bd81770451 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -331,9 +331,9 @@ namespace castor3d static bool findUnit( Engine & engine , castor::CheckedMutex & loadMtx - , std::unordered_map< size_t, TextureUnitSPtr > & loaded + , std::unordered_map< size_t, TextureUnitUPtr > & loaded , TextureUnitData & data - , TextureUnitSPtr & result ) + , TextureUnitRPtr & result ) { auto hash = makeHash( data.sourceInfo, data.passConfig ); auto lock( makeUniqueLock( loadMtx ) ); @@ -342,7 +342,7 @@ namespace castor3d if ( ires.second ) { - it->second = std::make_shared< TextureUnit >( engine, data ); + it->second = castor::makeUnique< TextureUnit >( engine, data ); it->second->setConfiguration( data.passConfig.config ); } else @@ -367,7 +367,7 @@ namespace castor3d } } - result = it->second; + result = it->second.get(); return !ires.second; } @@ -604,9 +604,9 @@ namespace castor3d m_texturesCombines.clear(); } - TextureUnitSPtr TextureUnitCache::getTexture( TextureUnitData & unitData ) + TextureUnitRPtr TextureUnitCache::getTexture( TextureUnitData & unitData ) { - TextureUnitSPtr result{}; + TextureUnitRPtr result{}; if ( !cachetex::findUnit( *getEngine(), m_loadMtx, m_loaded, unitData, result ) ) { diff --git a/source/Core/Castor3D/Gui/GuiModule.cpp b/source/Core/Castor3D/Gui/GuiModule.cpp index 72dceb2ec1..7d8e022c30 100644 --- a/source/Core/Castor3D/Gui/GuiModule.cpp +++ b/source/Core/Castor3D/Gui/GuiModule.cpp @@ -108,7 +108,7 @@ namespace castor3d //pass->addTextureUnit( unit ); } - TextureUnitSPtr unit = pass->getTextureUnit( 0 ); + auto unit = pass->getTextureUnit( 0 ); unit->setTexture( std::move( texture ) ); return result.lock().get(); } diff --git a/source/Core/Castor3D/Material/Pass/Pass.cpp b/source/Core/Castor3D/Material/Pass/Pass.cpp index 2be71245a6..a78a47ddb8 100644 --- a/source/Core/Castor3D/Material/Pass/Pass.cpp +++ b/source/Core/Castor3D/Material/Pass/Pass.cpp @@ -342,7 +342,7 @@ namespace castor3d return getPassComponentsRegister().getTextureCombineID( m_textureCombine ); } - TextureUnitSPtr Pass::getTextureUnit( uint32_t index )const + TextureUnitRPtr Pass::getTextureUnit( uint32_t index )const { CU_Require( index < m_textureUnits.size() ); return m_textureUnits[index]; @@ -539,7 +539,7 @@ namespace castor3d it = remaining.begin(); } - TextureUnitPtrArray newUnits; + Pass::UnitArray newUnits; // Then add the other ones. for ( auto & source : sources ) @@ -858,7 +858,7 @@ namespace castor3d return false; } - TextureUnitPtrArray Pass::getTextureUnits()const + Pass::UnitArray Pass::getTextureUnits()const { return m_textureUnits; } @@ -1001,8 +1001,8 @@ namespace castor3d } void Pass::doAddUnit( TextureUnitData & unitData - , TextureUnitSPtr unit - , TextureUnitPtrArray & result ) + , TextureUnitRPtr unit + , Pass::UnitArray & result ) { if ( unitData.animation && !unit->hasAnimation() ) { @@ -1014,7 +1014,7 @@ namespace castor3d auto it = std::find_if( result.begin() , result.end() - , [&unitData]( TextureUnitSPtr lookup ) + , [&unitData]( TextureUnitRPtr lookup ) { return shallowEqual( unitData.passConfig.config, lookup->getConfiguration() ); } ); diff --git a/tools/CastorViewer/MainFrame.cpp b/tools/CastorViewer/MainFrame.cpp index afc46de5ef..913315d033 100644 --- a/tools/CastorViewer/MainFrame.cpp +++ b/tools/CastorViewer/MainFrame.cpp @@ -100,6 +100,20 @@ namespace CastorViewer } } } + + static void addWildcard( wxString & result + , wxString const & name + , wxString const & extensions ) + { + if ( !result.empty() ) + { + result += wxT( "|" ); + } + + result += name + + wxT( " (" ) + extensions + + wxT( ")|" ) + extensions; + } } MainFrame::MainFrame( wxString const & title ) @@ -539,20 +553,16 @@ namespace CastorViewer window.enableSaveFrame(); castor.getRenderLoop().renderSyncFrame(); auto buffer = window.getSavedFrame(); - GuiCommon::createBitmapFromBuffer( buffer + GuiCommon::createBitmapFromBuffer( *buffer , false , bitmap ); - wxString strWildcard = _( "All supported files" ); - strWildcard += wxT( " (*.bmp;*.gif;*.png;*.jpg)|*.bmp;*.gif;*.png;*.jpg|" ); - strWildcard += _( "BITMAP files" ); - strWildcard += wxT( " (*.bmp)|*.bmp|" ); - strWildcard += _( "GIF files" ); - strWildcard += wxT( " (*.gif)|*.gif|" ); - strWildcard += _( "JPEG files" ); - strWildcard += wxT( " (*.jpg)|*.jpg|" ); - strWildcard += _( "PNG files" ); - strWildcard += wxT( " (*.png)|*.png" ); + wxString strWildcard; + main::addWildcard( strWildcard, _( "All supported image types" ), wxT( "*.bmp;*.gif;*.png;*.jpg" ) ); + main::addWildcard( strWildcard, _( "BITMAP image" ), wxT( "*.bmp" ) ); + main::addWildcard( strWildcard, _( "GIF image" ), wxT( "*.gif" ) ); + main::addWildcard( strWildcard, _( "JPEG image" ), wxT( "*.jpg" ) ); + main::addWildcard( strWildcard, _( "PNG image" ), wxT( "*.png" ) ); wxFileDialog dialog( this, _( "Please choose an image file name" ), wxEmptyString, wxEmptyString, strWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if ( dialog.ShowModal() == wxID_OK ) diff --git a/tools/GuiCommon/GuiCommonPrerequisites.cpp b/tools/GuiCommon/GuiCommonPrerequisites.cpp index 0ac62c958d..41368b1033 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.cpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.cpp @@ -180,55 +180,51 @@ namespace GuiCommon } } - void createBitmapFromBuffer( castor::PxBufferBaseRPtr buffer, bool flip, wxBitmap & bitmap ) + void createBitmapFromBuffer( castor::PxBufferBase const & buffer, bool flip, wxBitmap & bitmap ) { - castor::PxBufferBaseUPtr buf; - - if ( buffer->getFormat() != castor::PixelFormat::eR8G8B8A8_UNORM ) + if ( buffer.getFormat() != castor::PixelFormat::eR8G8B8A8_UNORM ) { - buf = castor::PxBufferBase::create( buffer->getDimensions() + auto buf = castor::PxBufferBase::create( buffer.getDimensions() , castor::PixelFormat::eR8G8B8A8_UNORM - , buffer->getConstPtr() - , buffer->getFormat() ); + , buffer.getConstPtr() + , buffer.getFormat() ); + createBitmapFromBuffer( *buf, flip, bitmap ); } else { - buf = buffer->clone(); + createBitmapFromBuffer( buffer.getConstPtr(), buffer.getWidth(), buffer.getHeight(), flip, bitmap ); } - createBitmapFromBuffer( buf->getConstPtr(), buf->getWidth(), buf->getHeight(), flip, bitmap ); } - void createBitmapFromBuffer( castor3d::TextureUnitSPtr unit, bool flip, wxBitmap & bitmap ) + void createBitmapFromBuffer( castor3d::TextureUnit const & unit, bool flip, wxBitmap & bitmap ) { - if ( unit->getTexture()->getDefaultView().hasBuffer() ) + if ( unit.getTexture()->getDefaultView().hasBuffer() ) { - createBitmapFromBuffer( unit->getTexture()->getImage().getPixels(), flip, bitmap ); + createBitmapFromBuffer( *unit.getTexture()->getImage().getPixels(), flip, bitmap ); } else { - castor::Path path{ unit->getTexture()->getDefaultView().toString() }; + castor::Path path{ unit.getTexture()->getDefaultView().toString() }; if ( !path.empty() ) { - wxImageHandler * pHandler = wxImage::FindHandler( path.getExtension(), wxBITMAP_TYPE_ANY ); - - if ( pHandler ) + if ( auto handler = wxImage::FindHandler( path.getExtension(), wxBITMAP_TYPE_ANY ) ) { wxImage image; - if ( image.LoadFile( path, pHandler->GetType() ) && image.IsOk() ) + if ( image.LoadFile( path, handler->GetType() ) && image.IsOk() ) { bitmap = wxBitmap( image ); } else { - castor::Logger::logWarning( cuT( "CreateBitmapFromBuffer encountered a problem loading file [" ) + path + cuT( "]" ) ); + castor::Logger::logWarning( cuT( "createBitmapFromBuffer encountered a problem loading file [" ) + path + cuT( "]" ) ); } } else { - castor::Logger::logWarning( cuT( "CreateBitmapFromBuffer encountered a problem loading file [" ) + path + cuT( "] : Unsupported format" ) ); + castor::Logger::logWarning( cuT( "createBitmapFromBuffer encountered a problem loading file [" ) + path + cuT( "] : Unsupported format" ) ); } } } diff --git a/tools/GuiCommon/GuiCommonPrerequisites.hpp b/tools/GuiCommon/GuiCommonPrerequisites.hpp index c7fc03b9e3..43562b3b29 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.hpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.hpp @@ -194,7 +194,7 @@ namespace GuiCommon *\param[in] flip Tells if the image mut be flipped. *\param[out] bitmap Reçoit le bitmap généré. */ - void createBitmapFromBuffer( castor::PxBufferBaseRPtr buffer + void createBitmapFromBuffer( castor::PxBufferBase const & buffer , bool flip , wxBitmap & bitmap ); /** @@ -211,7 +211,7 @@ namespace GuiCommon *\param[in] flip Tells if the image must be flipped. *\param[out] bitmap Reçoit le bitmap généré. */ - void createBitmapFromBuffer( castor3d::TextureUnitSPtr unit + void createBitmapFromBuffer( castor3d::TextureUnit const & unit , bool flip , wxBitmap & bitmap ); /** diff --git a/tools/GuiCommon/Properties/AdditionalProperties.cpp b/tools/GuiCommon/Properties/AdditionalProperties.cpp index 066a9fdd31..679baf23fa 100644 --- a/tools/GuiCommon/Properties/AdditionalProperties.cpp +++ b/tools/GuiCommon/Properties/AdditionalProperties.cpp @@ -150,7 +150,7 @@ namespace GuiCommon { m_image->resample( { uint32_t( rect.width ), uint32_t( rect.height ) } ); m_bitmap = std::make_unique< wxBitmap >(); - createBitmapFromBuffer( m_image->getPixels() + createBitmapFromBuffer( *m_image->getPixels() , false , *m_bitmap ); } diff --git a/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.cpp index c8286dec79..d8e0ae424b 100644 --- a/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.cpp @@ -365,104 +365,100 @@ namespace GuiCommon TextureTreeItemProperty::TextureTreeItemProperty( bool editable , castor3d::Pass & pass - , castor3d::TextureUnitSPtr texture ) - : TreeItemProperty( texture->getEngine(), editable ) + , castor3d::TextureUnit & texture ) + : TreeItemProperty( texture.getEngine(), editable ) , m_pass{ pass } - , m_texture{ *texture } - , m_configuration{ texture->getConfiguration() } + , m_texture{ texture } + , m_configuration{ m_texture.getConfiguration() } { CreateTreeItemMenu(); } void TextureTreeItemProperty::doCreateProperties( wxPGEditor * editor, wxPropertyGrid * grid ) { + static wxString const CATEGORY_TEXTURE = _( "Texture " ); + static wxString const PROPERTY_TEXTURE_IMAGE = _( "Image" ); + static wxString const PROPERTY_TEXTURE_TEXCOORDSET = _( "Texcoord Set" ); + auto unit = &m_texture; + grid->Append( new wxPropertyCategory( wxString{ CATEGORY_TEXTURE } << unit->getId() ) ); - if ( unit ) + if ( unit->getTexture()->isStatic() ) { - static wxString const CATEGORY_TEXTURE = _( "Texture " ); - static wxString const PROPERTY_TEXTURE_IMAGE = _( "Image" ); - static wxString const PROPERTY_TEXTURE_TEXCOORDSET = _( "Texcoord Set" ); - - grid->Append( new wxPropertyCategory( wxString{ CATEGORY_TEXTURE } << unit->getId() ) ); - - if ( unit->getTexture()->isStatic() ) - { - m_path = castor::Path{ unit->getTexture()->getPath() }; - addProperty( grid, PROPERTY_TEXTURE_IMAGE, m_path - , [this]( wxVariant const & var ) - { - onImageChange( var ); - } ); - } - - addPropertyT( grid, PROPERTY_TEXTURE_TEXCOORDSET, unit->getTexcoordSet(), unit, &castor3d::TextureUnit::setTexcoordSet ); - m_properties = UnitTreeGatherer::submit( m_pass - , m_configuration - , castor::PixelFormat( unit->getTexture()->getPixelFormat() ) - , this - , grid - , [this]( wxVariant const & var - , castor3d::PassComponentTextureFlag flag - , uint32_t componentsCount ) - { - onChange( var, flag, componentsCount ); - } ); - - auto & transform = unit->getTransform(); - m_translate->x = transform.translate->x; - m_translate->y = transform.translate->y; - m_scale->x = transform.scale->x; - m_scale->y = transform.scale->y; - m_rotate = transform.rotate; - static wxString const CATEGORY_TRANSFORM = _( "Transform" ); - static wxString const PROPERTY_TRANSFORM_UV_TRANSLATE = _( "UV Translate" ); - static wxString const PROPERTY_TRANSFORM_UV_ROTATE = _( "UV Rotate" ); - static wxString const PROPERTY_TRANSFORM_UV_SCALE = _( "UV Scale" ); - grid->Append( new wxPropertyCategory( CATEGORY_TRANSFORM ) ); - addProperty( grid, PROPERTY_TRANSFORM_UV_TRANSLATE - , m_translate - , [this]( wxVariant const & value ) + m_path = castor::Path{ unit->getTexture()->getPath() }; + addProperty( grid, PROPERTY_TEXTURE_IMAGE, m_path + , [this]( wxVariant const & var ) { - m_translate = variantCast< castor::Point2f >( value ); - auto transform = m_texture.getTransform(); - transform.translate->x = m_translate->x; - transform.translate->y = m_translate->y; - m_texture.setTransform( transform ); - } ); - addProperty( grid, PROPERTY_TRANSFORM_UV_ROTATE - , m_rotate - , [this]( wxVariant const & value ) - { - m_rotate = variantCast< castor::Angle >( value ); - auto transform = m_texture.getTransform(); - transform.rotate = m_rotate; - m_texture.setTransform( transform ); - } ); - addProperty( grid, PROPERTY_TRANSFORM_UV_SCALE - , m_scale - , [this]( wxVariant const & value ) - { - m_scale = variantCast< castor::Point2f >( value ); - auto transform = m_texture.getTransform(); - transform.scale->x = m_scale->x; - transform.scale->y = m_scale->y; - m_texture.setTransform( transform ); + onImageChange( var ); } ); + } - if ( unit->hasAnimation() ) + addPropertyT( grid, PROPERTY_TEXTURE_TEXCOORDSET, unit->getTexcoordSet(), unit, &castor3d::TextureUnit::setTexcoordSet ); + m_properties = UnitTreeGatherer::submit( m_pass + , m_configuration + , castor::PixelFormat( unit->getTexture()->getPixelFormat() ) + , this + , grid + , [this]( wxVariant const & var + , castor3d::PassComponentTextureFlag flag + , uint32_t componentsCount ) { - static wxString const CATEGORY_ANIMATION = _( "Animation" ); - static wxString const PROPERTY_ANIMATION_TRANSLATE = _( "Translate" ); - static wxString const PROPERTY_ANIMATION_ROTATE = _( "Rotate" ); - static wxString const PROPERTY_ANIMATION_SCALE = _( "Scale" ); - - auto & anim = unit->getAnimation(); - grid->Append( new wxPropertyCategory( CATEGORY_ANIMATION ) ); - addPropertyT( grid, PROPERTY_ANIMATION_TRANSLATE, anim.getTranslateSpeed(), &anim, &castor3d::TextureAnimation::setTranslateSpeed ); - addPropertyT( grid, PROPERTY_ANIMATION_ROTATE, anim.getRotateSpeed(), &anim, &castor3d::TextureAnimation::setRotateSpeed ); - addPropertyT( grid, PROPERTY_ANIMATION_SCALE, anim.getScaleSpeed(), &anim, &castor3d::TextureAnimation::setScaleSpeed ); - } + onChange( var, flag, componentsCount ); + } ); + + auto & transform = unit->getTransform(); + m_translate->x = transform.translate->x; + m_translate->y = transform.translate->y; + m_scale->x = transform.scale->x; + m_scale->y = transform.scale->y; + m_rotate = transform.rotate; + static wxString const CATEGORY_TRANSFORM = _( "Transform" ); + static wxString const PROPERTY_TRANSFORM_UV_TRANSLATE = _( "UV Translate" ); + static wxString const PROPERTY_TRANSFORM_UV_ROTATE = _( "UV Rotate" ); + static wxString const PROPERTY_TRANSFORM_UV_SCALE = _( "UV Scale" ); + grid->Append( new wxPropertyCategory( CATEGORY_TRANSFORM ) ); + addProperty( grid, PROPERTY_TRANSFORM_UV_TRANSLATE + , m_translate + , [this]( wxVariant const & value ) + { + m_translate = variantCast< castor::Point2f >( value ); + auto transform = m_texture.getTransform(); + transform.translate->x = m_translate->x; + transform.translate->y = m_translate->y; + m_texture.setTransform( transform ); + } ); + addProperty( grid, PROPERTY_TRANSFORM_UV_ROTATE + , m_rotate + , [this]( wxVariant const & value ) + { + m_rotate = variantCast< castor::Angle >( value ); + auto transform = m_texture.getTransform(); + transform.rotate = m_rotate; + m_texture.setTransform( transform ); + } ); + addProperty( grid, PROPERTY_TRANSFORM_UV_SCALE + , m_scale + , [this]( wxVariant const & value ) + { + m_scale = variantCast< castor::Point2f >( value ); + auto transform = m_texture.getTransform(); + transform.scale->x = m_scale->x; + transform.scale->y = m_scale->y; + m_texture.setTransform( transform ); + } ); + + if ( unit->hasAnimation() ) + { + static wxString const CATEGORY_ANIMATION = _( "Animation" ); + static wxString const PROPERTY_ANIMATION_TRANSLATE = _( "Translate" ); + static wxString const PROPERTY_ANIMATION_ROTATE = _( "Rotate" ); + static wxString const PROPERTY_ANIMATION_SCALE = _( "Scale" ); + + auto & anim = unit->getAnimation(); + grid->Append( new wxPropertyCategory( CATEGORY_ANIMATION ) ); + addPropertyT( grid, PROPERTY_ANIMATION_TRANSLATE, anim.getTranslateSpeed(), &anim, &castor3d::TextureAnimation::setTranslateSpeed ); + addPropertyT( grid, PROPERTY_ANIMATION_ROTATE, anim.getRotateSpeed(), &anim, &castor3d::TextureAnimation::setRotateSpeed ); + addPropertyT( grid, PROPERTY_ANIMATION_SCALE, anim.getScaleSpeed(), &anim, &castor3d::TextureAnimation::setScaleSpeed ); } } diff --git a/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.hpp index 8b526d46b0..cc5ed9b47e 100644 --- a/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/TextureTreeItemProperty.hpp @@ -43,7 +43,7 @@ namespace GuiCommon */ TextureTreeItemProperty( bool editable , castor3d::Pass & pass - , castor3d::TextureUnitSPtr texture ); + , castor3d::TextureUnit & texture ); private: /** diff --git a/tools/GuiCommon/System/MaterialsList.cpp b/tools/GuiCommon/System/MaterialsList.cpp index a0c3fac0db..b2f75cc8b2 100644 --- a/tools/GuiCommon/System/MaterialsList.cpp +++ b/tools/GuiCommon/System/MaterialsList.cpp @@ -159,8 +159,8 @@ namespace GuiCommon , editable , passId , ++unitIndex - , unit , pass + , *unit , iconOffset ); } } @@ -170,7 +170,7 @@ namespace GuiCommon , wxTreeItemId id , uint32_t index , castor3d::Pass & pass - , castor3d::TextureUnitSPtr texture + , castor3d::TextureUnit & texture , uint32_t iconOffset ) { wxTreeItemId unitId = treeCtrl->AppendItem( id @@ -181,7 +181,7 @@ namespace GuiCommon , pass , texture } ); - if ( auto target = texture->getRenderTarget() ) + if ( auto target = texture.getRenderTarget() ) { appendRenderTarget( treeCtrl , editable diff --git a/tools/GuiCommon/System/MaterialsList.hpp b/tools/GuiCommon/System/MaterialsList.hpp index 998125c325..06b7a79527 100644 --- a/tools/GuiCommon/System/MaterialsList.hpp +++ b/tools/GuiCommon/System/MaterialsList.hpp @@ -43,7 +43,7 @@ namespace GuiCommon , wxTreeItemId id , uint32_t index , castor3d::Pass & pass - , castor3d::TextureUnitSPtr texture + , castor3d::TextureUnit & texture , uint32_t iconOffset ); #pragma clang diagnostic push From 961be7bc8c93d4b47be656aa9e47bbb4a384f94b Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 14:57:10 +0200 Subject: [PATCH 27/35] Castor3D: Replaced use of shared_ptr with unique_ptr for Submesh. --- demos/CastorDvpTD/EnemySpawner.cpp | 2 +- demos/CastorDvpTD/Game.cpp | 6 +-- include/Core/Castor3D/Cache/PluginCache.hpp | 6 --- include/Core/Castor3D/Engine.hpp | 18 ++++++--- .../Castor3D/Gui/Controls/CtrlControl.hpp | 2 +- include/Core/Castor3D/Gui/ControlsManager.hpp | 3 +- include/Core/Castor3D/Model/Mesh/Mesh.hpp | 13 +------ .../Model/Mesh/Submesh/SubmeshModule.hpp | 5 +-- .../Core/Castor3D/Plugin/DividerPlugin.hpp | 2 +- .../Core/Castor3D/Plugin/GeneratorPlugin.hpp | 2 +- .../Core/Castor3D/Plugin/GenericPlugin.hpp | 2 +- .../Core/Castor3D/Plugin/ImporterPlugin.hpp | 2 +- .../Core/Castor3D/Plugin/ParticlePlugin.hpp | 2 +- include/Core/Castor3D/Plugin/Plugin.hpp | 8 ++-- include/Core/Castor3D/Plugin/PluginModule.hpp | 2 - include/Core/Castor3D/Plugin/PostFxPlugin.hpp | 2 +- .../Castor3D/Plugin/ToneMappingPlugin.hpp | 2 +- include/Core/Castor3D/Render/Ray.hpp | 2 +- include/Core/Castor3D/Render/RenderWindow.hpp | 2 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 2 +- .../Miscellaneous/MiscellaneousModule.hpp | 2 +- .../Castor3D/Animation/AnimationImporter.cpp | 2 +- source/Core/Castor3D/Binary/BinaryMesh.cpp | 9 ++--- .../Castor3D/Binary/BinaryMeshMorphTarget.cpp | 6 +-- .../BinarySceneNodeAnimationKeyFrame.cpp | 1 - .../Cache/AnimatedObjectGroupCache.cpp | 6 +-- source/Core/Castor3D/Cache/PluginCache.cpp | 29 ++++----------- source/Core/Castor3D/Engine.cpp | 17 ++++----- .../Castor3D/Gui/Controls/CtrlControl.cpp | 4 +- source/Core/Castor3D/Gui/ControlsManager.cpp | 2 +- .../Castor3D/Model/Mesh/Generator/Cube.cpp | 12 +++--- .../Model/Mesh/Generator/Icosahedron.cpp | 2 +- .../Castor3D/Model/Mesh/Generator/Plane.cpp | 2 +- .../Model/Mesh/Generator/Projection.cpp | 2 +- source/Core/Castor3D/Model/Mesh/Mesh.cpp | 37 ++++++------------- .../Castor3D/Model/Mesh/MeshGenerator.cpp | 4 +- .../Core/Castor3D/Model/Mesh/MeshImporter.cpp | 4 +- .../Core/Castor3D/Model/Mesh/MeshPreparer.cpp | 2 +- .../Castor3D/Model/Mesh/Submesh/Submesh.cpp | 2 + source/Core/Castor3D/Plugin/DividerPlugin.cpp | 4 +- .../Core/Castor3D/Plugin/GeneratorPlugin.cpp | 4 +- source/Core/Castor3D/Plugin/GenericPlugin.cpp | 4 +- .../Core/Castor3D/Plugin/ImporterPlugin.cpp | 4 +- .../Core/Castor3D/Plugin/ParticlePlugin.cpp | 4 +- source/Core/Castor3D/Plugin/Plugin.cpp | 4 +- source/Core/Castor3D/Plugin/PostFxPlugin.cpp | 4 +- .../Castor3D/Plugin/ToneMappingPlugin.cpp | 4 +- source/Core/Castor3D/Render/Ray.cpp | 4 +- source/Core/Castor3D/Render/RenderWindow.cpp | 11 +----- source/Core/Castor3D/Scene/Geometry.cpp | 4 +- .../Scene/SceneFileParser_Parsers.cpp | 22 +++++------ .../Miscellaneous/DynamicLibrary.cpp | 2 + .../Core/SceneExporter/Text/TextGeometry.cpp | 4 +- source/Core/SceneExporter/Text/TextMesh.cpp | 2 +- .../AssimpAnimationImporter.cpp | 2 +- test/Castor3D/BinaryExportTest.cpp | 2 +- tools/CastorViewer/MainFrame.cpp | 2 +- tools/CastorViewer/MainFrame.hpp | 2 +- tools/CastorViewer/RenderPanel.cpp | 2 +- tools/CastorViewer/RenderPanel.hpp | 4 +- tools/GuiCommon/System/SceneObjectsList.cpp | 4 +- tools/GuiCommon/System/SceneObjectsList.hpp | 4 +- 62 files changed, 141 insertions(+), 192 deletions(-) diff --git a/demos/CastorDvpTD/EnemySpawner.cpp b/demos/CastorDvpTD/EnemySpawner.cpp index 41aa0fdc44..07d32db0b7 100644 --- a/demos/CastorDvpTD/EnemySpawner.cpp +++ b/demos/CastorDvpTD/EnemySpawner.cpp @@ -67,7 +67,7 @@ namespace castortd , *node , game.getEnemyMesh() ); - for ( auto submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh().lock() ) { geometry->setMaterial( *submesh, game.getEnemyMaterial() ); } diff --git a/demos/CastorDvpTD/Game.cpp b/demos/CastorDvpTD/Game.cpp index cc00463d6b..6ea9d0ddc7 100644 --- a/demos/CastorDvpTD/Game.cpp +++ b/demos/CastorDvpTD/Game.cpp @@ -345,7 +345,7 @@ namespace castortd node->setPosition( origin ); node->attachTo( *m_mapNode ); - for ( auto submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh().lock() ) { geometry->setMaterial( *submesh, m_bulletMaterial.lock().get() ); } @@ -378,7 +378,7 @@ namespace castortd node->setPosition( origin ); node->attachTo( *m_mapNode ); - for ( auto submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh().lock() ) { geometry->setMaterial( *submesh, m_boulderMaterial.lock().get() ); } @@ -643,7 +643,7 @@ namespace castortd node->setPosition( convert( castor::Point2i{ cell.m_x, cell.m_y } ) + castor::Point3f{ 0, m_cellDimensions[1] / 2, 0 } ); node->attachTo( *m_mapNode ); - for ( auto submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh().lock() ) { geometry->setMaterial( *submesh, m_mapCubeMaterial.lock().get() ); } diff --git a/include/Core/Castor3D/Cache/PluginCache.hpp b/include/Core/Castor3D/Cache/PluginCache.hpp index 5c6a619df6..c3d121f03f 100644 --- a/include/Core/Castor3D/Cache/PluginCache.hpp +++ b/include/Core/Castor3D/Cache/PluginCache.hpp @@ -107,12 +107,6 @@ namespace castor private: castor3d::Engine & m_engine; - //!\~english The loaded shared libraries map. - //!\~french La map des shared libraries chargées. - castor3d::DynamicLibraryPtrPathMapArray m_libraries; - //!\~english The mutex protecting the loaded shared libraries map. - //!\~french Le mutex protégeant la map des shared libraries chargées. - std::recursive_mutex m_mutexLibraries; //!\~english The loaded plug-ins map. //!\~french La map des plug-ins chargés. castor3d::PluginStrMapArray m_loadedPlugins; diff --git a/include/Core/Castor3D/Engine.hpp b/include/Core/Castor3D/Engine.hpp index fad5936bec..20b4aa1016 100644 --- a/include/Core/Castor3D/Engine.hpp +++ b/include/Core/Castor3D/Engine.hpp @@ -715,9 +715,9 @@ namespace castor3d return m_fontCache; } - UserInputListenerSPtr getUserInputListener()noexcept + UserInputListenerRPtr getUserInputListener()noexcept { - return m_userInputListener; + return m_userInputListener.get(); } RenderSystem * getRenderSystem()const noexcept @@ -906,9 +906,15 @@ namespace castor3d /**@{*/ C3D_API void setLoadingScene( SceneUPtr scene ); - void setUserInputListener( UserInputListenerSPtr listener )noexcept + void setUserInputListener( UserInputListenerUPtr listener )noexcept { - m_userInputListener = listener; + m_userInputListener = std::move( listener ); + } + + template< typename ListenerT > + void setUserInputListenerT( castor::UniquePtr< ListenerT > listener )noexcept + { + m_userInputListener = castor::ptrCast< UserInputListener >( listener ); } void setDefaultLightingModel( LightingModelID value )noexcept @@ -1077,8 +1083,8 @@ namespace castor3d DECLARE_CACHE_MEMBER( listener, FrameListener ); FrameListenerRPtr m_defaultListener{}; std::map< castor::String, RenderWindow * > m_renderWindows; - std::map< RenderWindow const *, UserInputListenerSPtr > m_windowInputListeners; - UserInputListenerSPtr m_userInputListener; + std::map< RenderWindow const *, UserInputListenerUPtr > m_windowInputListeners; + UserInputListenerUPtr m_userInputListener; DECLARE_CACHE_MEMBER_MIN( target, RenderTarget ); DECLARE_CACHE_MEMBER_MIN( texture, TextureUnit ); castor::FontCache m_fontCache; diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index a5ab0f8b4f..b3501a8b75 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -328,7 +328,7 @@ namespace castor3d /** Creates the control's overlays. *\param[in] ctrlManager The controls manager. */ - C3D_API void create( ControlsManagerSPtr ctrlManager ); + C3D_API void create( ControlsManager & ctrlManager ); /** Destroys the control's overlays. */ diff --git a/include/Core/Castor3D/Gui/ControlsManager.hpp b/include/Core/Castor3D/Gui/ControlsManager.hpp index c6f8fd7bcc..eeaa94a926 100644 --- a/include/Core/Castor3D/Gui/ControlsManager.hpp +++ b/include/Core/Castor3D/Gui/ControlsManager.hpp @@ -15,8 +15,7 @@ See LICENSE file in root folder namespace castor3d { class ControlsManager - : public std::enable_shared_from_this< ControlsManager > - , public UserInputListener + : public UserInputListener , public StylesHolder { friend class Control; diff --git a/include/Core/Castor3D/Model/Mesh/Mesh.hpp b/include/Core/Castor3D/Model/Mesh/Mesh.hpp index bef293195d..fb0fb1482c 100644 --- a/include/Core/Castor3D/Model/Mesh/Mesh.hpp +++ b/include/Core/Castor3D/Model/Mesh/Mesh.hpp @@ -117,7 +117,7 @@ namespace castor3d *\param[in] index L'indice du sous maillage voulu *\return Le sous maillage trouvé, nullptr si non trouvé */ - C3D_API SubmeshSPtr getSubmesh( uint32_t index )const; + C3D_API SubmeshRPtr getSubmesh( uint32_t index )const; /** *\~english *\brief Creates a submesh @@ -126,7 +126,7 @@ namespace castor3d *\brief Crée un sous maillage *\return Le sous maillage créé */ - C3D_API SubmeshSPtr createSubmesh( SubmeshFlags const & flags = SubmeshFlags{} ); + C3D_API SubmeshRPtr createSubmesh( SubmeshFlags const & flags = SubmeshFlags{} ); /** *\~english *\brief Deletes a given submesh if it is in the mesh's submeshes @@ -136,15 +136,6 @@ namespace castor3d *\param[in] submesh Le submesh à supprimer */ C3D_API void deleteSubmesh( SubmeshRPtr submesh ); - /** - *\~english - *\brief Deletes a given submesh if it is in the mesh's submeshes - *\param[in] submesh The submesh to delete - *\~french - *\brief Supprime le submesh s'il est dans les submesh du mesh - *\param[in] submesh Le submesh à supprimer - */ - C3D_API void deleteSubmesh( SubmeshSPtr & submesh ); /** *\~english *\brief Generates normals and tangents diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp index 133add4a99..36cebc7c80 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp @@ -352,11 +352,10 @@ namespace castor3d castor::BoundingBox boundingBox{}; }; - CU_DeclareSmartPtr( Submesh ); + CU_DeclareCUSmartPtr( castor3d, Submesh, C3D_API ); //! Submesh pointer array - CU_DeclareVector( SubmeshSPtr, SubmeshPtr ); - CU_DeclareMap( castor::String, SubmeshSPtr, SubmeshPtrStr ); + CU_DeclareVector( SubmeshUPtr, SubmeshPtr ); CU_DeclareMap( Submesh const *, castor::BoundingBox, SubmeshBoundingBox ); CU_DeclareMap( Submesh const *, castor::BoundingSphere, SubmeshBoundingSphere ); CU_DeclareMap( uint32_t, std::vector< float >, SubmeshTargetWeight ); diff --git a/include/Core/Castor3D/Plugin/DividerPlugin.hpp b/include/Core/Castor3D/Plugin/DividerPlugin.hpp index 5b35ddbf61..f0892009fa 100644 --- a/include/Core/Castor3D/Plugin/DividerPlugin.hpp +++ b/include/Core/Castor3D/Plugin/DividerPlugin.hpp @@ -26,7 +26,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API DividerPlugin( castor::DynamicLibrarySPtr library + C3D_API DividerPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/GeneratorPlugin.hpp b/include/Core/Castor3D/Plugin/GeneratorPlugin.hpp index aeb22ce14a..590dfb2f34 100644 --- a/include/Core/Castor3D/Plugin/GeneratorPlugin.hpp +++ b/include/Core/Castor3D/Plugin/GeneratorPlugin.hpp @@ -26,7 +26,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API GeneratorPlugin( castor::DynamicLibrarySPtr library + C3D_API GeneratorPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/GenericPlugin.hpp b/include/Core/Castor3D/Plugin/GenericPlugin.hpp index 57dd3ced49..8a5d8c95ae 100644 --- a/include/Core/Castor3D/Plugin/GenericPlugin.hpp +++ b/include/Core/Castor3D/Plugin/GenericPlugin.hpp @@ -31,7 +31,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API GenericPlugin( castor::DynamicLibrarySPtr library + C3D_API GenericPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/ImporterPlugin.hpp b/include/Core/Castor3D/Plugin/ImporterPlugin.hpp index 835641824c..f950f231f3 100644 --- a/include/Core/Castor3D/Plugin/ImporterPlugin.hpp +++ b/include/Core/Castor3D/Plugin/ImporterPlugin.hpp @@ -30,7 +30,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API ImporterPlugin( castor::DynamicLibrarySPtr library + C3D_API ImporterPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/ParticlePlugin.hpp b/include/Core/Castor3D/Plugin/ParticlePlugin.hpp index 3542b112bf..46cd0d903a 100644 --- a/include/Core/Castor3D/Plugin/ParticlePlugin.hpp +++ b/include/Core/Castor3D/Plugin/ParticlePlugin.hpp @@ -25,7 +25,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API ParticlePlugin( castor::DynamicLibrarySPtr library + C3D_API ParticlePlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/Plugin.hpp b/include/Core/Castor3D/Plugin/Plugin.hpp index 852ea6ba0f..9ce6ca3bc2 100644 --- a/include/Core/Castor3D/Plugin/Plugin.hpp +++ b/include/Core/Castor3D/Plugin/Plugin.hpp @@ -44,7 +44,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API Plugin( PluginType type, castor::DynamicLibrarySPtr library + C3D_API Plugin( PluginType type, castor::DynamicLibraryUPtr library , Engine & engine ); public: @@ -103,6 +103,9 @@ namespace castor3d void unload(); protected: + //!\~english The plug-in library. + //!\~french La bibliothèque du plug-in. + castor::DynamicLibraryUPtr m_library{}; //!\~english The plug-in's version checking function. //!\~french La fonction de récupération de la version requise. PGetRequiredVersionFunction m_pfnGetRequiredVersion; @@ -118,9 +121,6 @@ namespace castor3d //!\~english The plug-in type. //!\~french Le type du plug-in. PluginType m_type; - //!\~english The plug-in library. - //!\~french La bibliothèque du plug-in. - castor::DynamicLibraryRPtr m_library{}; }; } diff --git a/include/Core/Castor3D/Plugin/PluginModule.hpp b/include/Core/Castor3D/Plugin/PluginModule.hpp index 56aacdd7d9..77bb204c1d 100644 --- a/include/Core/Castor3D/Plugin/PluginModule.hpp +++ b/include/Core/Castor3D/Plugin/PluginModule.hpp @@ -149,8 +149,6 @@ namespace castor3d CU_DeclareMap( castor::String, PluginUPtr, PluginStr ); CU_DeclareArray( PluginStrMap, PluginType::eCount, PluginStrMap ); - CU_DeclareMap( castor::Path, castor::DynamicLibrarySPtr, DynamicLibraryPtrPath ); - CU_DeclareArray( DynamicLibraryPtrPathMap, PluginType::eCount, DynamicLibraryPtrPathMap ); CU_DeclareMap( castor::Path, PluginType, PluginTypePath ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/PostFxPlugin.hpp b/include/Core/Castor3D/Plugin/PostFxPlugin.hpp index 80ce3fca5a..c1a2090efb 100644 --- a/include/Core/Castor3D/Plugin/PostFxPlugin.hpp +++ b/include/Core/Castor3D/Plugin/PostFxPlugin.hpp @@ -25,7 +25,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in *\param[in] engine Le moteur */ - C3D_API PostFxPlugin( castor::DynamicLibrarySPtr library + C3D_API PostFxPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Plugin/ToneMappingPlugin.hpp b/include/Core/Castor3D/Plugin/ToneMappingPlugin.hpp index bca4dbd855..8a85b6264a 100644 --- a/include/Core/Castor3D/Plugin/ToneMappingPlugin.hpp +++ b/include/Core/Castor3D/Plugin/ToneMappingPlugin.hpp @@ -25,7 +25,7 @@ namespace castor3d *\param[in] library La bibliothèque partagée contenant le plug-in. *\param[in] engine Le moteur. */ - C3D_API ToneMappingPlugin( castor::DynamicLibrarySPtr library + C3D_API ToneMappingPlugin( castor::DynamicLibraryUPtr library , Engine * engine ); /** *\~english diff --git a/include/Core/Castor3D/Render/Ray.hpp b/include/Core/Castor3D/Render/Ray.hpp index 2d8b461b63..287d692745 100644 --- a/include/Core/Castor3D/Render/Ray.hpp +++ b/include/Core/Castor3D/Render/Ray.hpp @@ -149,7 +149,7 @@ namespace castor3d */ C3D_API castor::Intersection intersects( GeometryRPtr geometry , Face & nearestFace - , SubmeshSPtr & nearestSubmesh + , SubmeshRPtr & nearestSubmesh , float & distance )const; /** *\~english diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index 5699d4aaf9..096a48ebc8 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -393,7 +393,7 @@ namespace castor3d */ /**@{*/ C3D_API GeometryRPtr getPickedGeometry()const; - C3D_API SubmeshRPtr getPickedSubmesh()const; + C3D_API Submesh const * getPickedSubmesh()const; C3D_API uint32_t getPickedFace()const; C3D_API ShadowMapLightTypeArray getShadowMaps()const; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index 1aecf0b190..f620d0930b 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -158,7 +158,7 @@ namespace castor3d SkeletonRPtr skeleton{}; MeshResPtr mesh{}; MeshRes ownMesh{}; - SubmeshSPtr submesh{}; + SubmeshRPtr submesh{}; LightUPtr ownLight{}; LightRPtr light{}; castor::PixelFormat pixelFormat{}; diff --git a/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp b/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp index eca7660f7e..f1db621f6d 100644 --- a/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp +++ b/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp @@ -87,7 +87,7 @@ namespace castor static const String cuEmptyString; - CU_DeclareSmartPtr( DynamicLibrary ); + CU_DeclareCUSmartPtr( castor, DynamicLibrary, CU_API ); //@} } diff --git a/source/Core/Castor3D/Animation/AnimationImporter.cpp b/source/Core/Castor3D/Animation/AnimationImporter.cpp index 1ba74909d9..d5453f3542 100644 --- a/source/Core/Castor3D/Animation/AnimationImporter.cpp +++ b/source/Core/Castor3D/Animation/AnimationImporter.cpp @@ -24,7 +24,7 @@ namespace castor3d { auto mesh = static_cast< Mesh * >( animation.getAnimable() ); - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { if ( auto component = submesh->getComponent< MorphComponent >() ) { diff --git a/source/Core/Castor3D/Binary/BinaryMesh.cpp b/source/Core/Castor3D/Binary/BinaryMesh.cpp index 0ecad1c40a..d605a1dca3 100644 --- a/source/Core/Castor3D/Binary/BinaryMesh.cpp +++ b/source/Core/Castor3D/Binary/BinaryMesh.cpp @@ -15,7 +15,7 @@ namespace castor3d { bool result = true; - for ( auto submesh : obj ) + for ( auto & submesh : obj ) { result = result && BinaryWriter< Submesh >{}.write( *submesh, m_chunk ); } @@ -31,7 +31,7 @@ namespace castor3d bool BinaryParser< Mesh >::doParse( Mesh & obj ) { bool result = true; - SubmeshSPtr submesh; + SubmeshUPtr submesh{}; BinaryChunk chunk; while ( result && doGetSubChunk( chunk ) ) @@ -39,13 +39,13 @@ namespace castor3d switch ( chunk.getChunkType() ) { case ChunkType::eSubmesh: - submesh = std::make_shared< Submesh >( obj, obj.getSubmeshCount() ); + submesh = castor::makeUnique< Submesh >( obj, obj.getSubmeshCount() ); result = createBinaryParser< Submesh >().parse( *submesh, chunk ); checkError( result, "Couldn't parse submesh." ); if ( result ) { - obj.m_submeshes.push_back( submesh ); + obj.m_submeshes.push_back( std::move( submesh ) ); } break; @@ -61,7 +61,6 @@ namespace castor3d bool BinaryParser< Mesh >::doParse_v1_2( Mesh & obj ) { bool result = true; - SubmeshSPtr submesh; SkeletonRPtr skeleton; BinaryChunk chunk; diff --git a/source/Core/Castor3D/Binary/BinaryMeshMorphTarget.cpp b/source/Core/Castor3D/Binary/BinaryMeshMorphTarget.cpp index 505fae7c47..107905d68d 100644 --- a/source/Core/Castor3D/Binary/BinaryMeshMorphTarget.cpp +++ b/source/Core/Castor3D/Binary/BinaryMeshMorphTarget.cpp @@ -100,7 +100,7 @@ namespace castor3d BinaryChunk chunk; uint32_t id{ 0 }; double time{ 0.0 }; - SubmeshSPtr submesh; + SubmeshRPtr submesh{}; std::vector< float > weights; while ( result && doGetSubChunk( chunk ) ) @@ -113,7 +113,7 @@ namespace castor3d obj.doSetTimeIndex( castor::Milliseconds{ int64_t( time * 1000 ) } ); break; case ChunkType::eMeshMorphTargetSubmeshID: - submesh = nullptr; + submesh = {}; result = doParseChunk( id, chunk ); checkError( result, "Couldn't parse submesh ID." ); if ( result ) @@ -154,7 +154,6 @@ namespace castor3d v1_3::OldInterleavedVertexTArray< double > pointsd; InterleavedVertexArray points; BinaryChunk chunk; - SubmeshSPtr submesh; while ( result && doGetSubChunk( chunk ) ) { @@ -200,7 +199,6 @@ namespace castor3d v1_3::OldInterleavedVertexTArray< double > bufferd; InterleavedVertexArray points; BinaryChunk chunk; - SubmeshSPtr submesh; while ( result && doGetSubChunk( chunk ) ) { diff --git a/source/Core/Castor3D/Binary/BinarySceneNodeAnimationKeyFrame.cpp b/source/Core/Castor3D/Binary/BinarySceneNodeAnimationKeyFrame.cpp index 5ae61d5e94..524ddba052 100644 --- a/source/Core/Castor3D/Binary/BinarySceneNodeAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Binary/BinarySceneNodeAnimationKeyFrame.cpp @@ -38,7 +38,6 @@ namespace castor3d castor::Point3f vec{}; castor::Quaternion quat{}; double time{ 0.0 }; - SubmeshSPtr submesh; while ( result && doGetSubChunk( chunk ) ) { diff --git a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp index a83d6cc483..cd85c235f3 100644 --- a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp +++ b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp @@ -275,7 +275,7 @@ namespace castor , [this, &pgroup, &mesh]( RenderDevice const & device , QueueData const & queueData ) { - for ( auto submesh : mesh.getMesh() ) + for ( auto & submesh : mesh.getMesh() ) { if ( submesh->getMorphTargetsCount() ) { @@ -295,7 +295,7 @@ namespace castor , [this, &mesh]( RenderDevice const & device , QueueData const & queueData ) { - for ( auto submesh : mesh.getMesh() ) + for ( auto & submesh : mesh.getMesh() ) { if ( submesh->getMorphTargetsCount() ) { @@ -360,7 +360,7 @@ namespace castor switch ( pair.second->getKind() ) { case AnimationType::eMesh: - for ( auto submesh : static_cast< AnimatedMesh const & >( *pair.second ).getMesh() ) + for ( auto & submesh : static_cast< AnimatedMesh const & >( *pair.second ).getMesh() ) { doRemoveEntry( device , static_cast< AnimatedMesh const & >( *pair.second ) diff --git a/source/Core/Castor3D/Cache/PluginCache.cpp b/source/Core/Castor3D/Cache/PluginCache.cpp index a4497e39fa..9713ba1433 100644 --- a/source/Core/Castor3D/Cache/PluginCache.cpp +++ b/source/Core/Castor3D/Cache/PluginCache.cpp @@ -51,15 +51,6 @@ namespace castor it.clear(); } } - - { - auto lock( makeUniqueLock( m_mutexLibraries ) ); - - for ( auto & it : m_libraries ) - { - it.clear(); - } - } } PluginRPtr ResourceCacheT< Plugin, String, PluginCacheTraits >::loadPlugin( String const & pluginName, Path const & pathFolder )noexcept @@ -176,7 +167,7 @@ namespace castor CU_Exception( string::stringCast< char >( cuT( "File [" ) + pathFile + cuT( "] does not exist" ) ) ); } - DynamicLibrarySPtr library{ std::make_shared< DynamicLibrary >( pathFile ) }; + DynamicLibraryUPtr library{ castor::makeUnique< DynamicLibrary >( pathFile ) }; Plugin::PGetTypeFunction pfnGetType; if ( !library->getFunction( pfnGetType, cacheplgn::getTypeFunctionABIName ) ) @@ -192,31 +183,31 @@ namespace castor switch ( type ) { case PluginType::eDivider: - plugin = castor::makeUniqueDerived< Plugin, DividerPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, DividerPlugin >( std::move( library ), &m_engine ); break; case PluginType::eImporter: - plugin = castor::makeUniqueDerived< Plugin, ImporterPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ImporterPlugin >( std::move( library ), &m_engine ); break; case PluginType::eGeneric: - plugin = castor::makeUniqueDerived< Plugin, GenericPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, GenericPlugin >( std::move( library ), &m_engine ); break; case PluginType::eToneMapping: - plugin = castor::makeUniqueDerived< Plugin, ToneMappingPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ToneMappingPlugin >( std::move( library ), &m_engine ); break; case PluginType::ePostEffect: - plugin = castor::makeUniqueDerived< Plugin, PostFxPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, PostFxPlugin >( std::move( library ), &m_engine ); break; case PluginType::eParticle: - plugin = castor::makeUniqueDerived< Plugin, ParticlePlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, ParticlePlugin >( std::move( library ), &m_engine ); break; case PluginType::eGenerator: - plugin = castor::makeUniqueDerived< Plugin, GeneratorPlugin >( library, &m_engine ); + plugin = castor::makeUniqueDerived< Plugin, GeneratorPlugin >( std::move( library ), &m_engine ); break; default: @@ -238,10 +229,6 @@ namespace castor auto lockPlugins( makeUniqueLock( m_mutexLoadedPlugins ) ); result = m_loadedPlugins[size_t( type )].emplace( pathFile, std::move( plugin ) ).first->second.get(); } - { - auto lockLibraries( makeUniqueLock( m_mutexLibraries ) ); - m_libraries[size_t( type )].insert( std::make_pair( pathFile, library ) ); - } log::info << cuT( "Plug-in [" ) << result->getName() << cuT( "] - Required engine version : " ) << toCheck << cuT( ", loaded" ) << std::endl; } else diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index df0102b0ce..c8ca149421 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -230,7 +230,7 @@ namespace castor3d , std::move( ControlsManager::createParsers( *this ) ) , std::move( ControlsManager::createSections() ) , &ControlsManager::createContext ); - setUserInputListener( std::make_shared< ControlsManager >( *this ) ); + setUserInputListenerT( castor::makeUnique< ControlsManager >( *this ) ); log::info << cuT( "Castor3D - Core engine version : " ) << Version{} << std::endl; log::info << m_cpuInformations << std::endl; @@ -962,9 +962,9 @@ namespace castor3d m_renderWindows.emplace( window.getName(), &window ); #endif m_windowInputListeners.emplace( &window - , std::make_shared< RenderWindow::InputListener >( *this, window ) ); - auto listener = m_windowInputListeners.find( &window )->second; - log::trace << "Created InputListener [0x" << std::hex << listener.get() << "] - " << window.getName() << std::endl; + , castor::makeUniqueDerived< UserInputListener, RenderWindow::InputListener >( *this, window ) ); + auto listener = m_windowInputListeners.find( &window )->second.get(); + log::trace << "Created InputListener [0x" << std::hex << listener << "] - " << window.getName() << std::endl; } void Engine::unregisterWindow( RenderWindow const & window ) @@ -973,16 +973,15 @@ namespace castor3d if ( it != m_windowInputListeners.end() ) { - auto listener = m_windowInputListeners.find( &window )->second; + auto listener = m_windowInputListeners.find( &window )->second.get(); listener->cleanup(); - auto plistener = listener.get(); auto pwindow = &window; - log::trace << "Removing InputListener [0x" << std::hex << plistener << "]" << std::endl; + log::trace << "Removing InputListener [0x" << std::hex << listener << "]" << std::endl; listener->getFrameListener().postEvent( makeCpuFunctorEvent( EventType::ePostRender - , [this, plistener, pwindow]() + , [this, listener, pwindow]() { m_windowInputListeners.erase( pwindow ); - log::trace << "Removed InputListener [0x" << std::hex << plistener << "]" << std::endl; + log::trace << "Removed InputListener [0x" << std::hex << listener << "]" << std::endl; } ) ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index 748cfba6c6..61394e9c30 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -303,9 +303,9 @@ namespace castor3d } } - void Control::create( ControlsManagerSPtr ctrlManager ) + void Control::create( ControlsManager & ctrlManager ) { - m_ctrlManager = ctrlManager.get(); + m_ctrlManager = &ctrlManager; if ( auto parent = getParent() ) { diff --git a/source/Core/Castor3D/Gui/ControlsManager.cpp b/source/Core/Castor3D/Gui/ControlsManager.cpp index 43041b021f..c9c79330b0 100644 --- a/source/Core/Castor3D/Gui/ControlsManager.cpp +++ b/source/Core/Castor3D/Gui/ControlsManager.cpp @@ -618,7 +618,7 @@ namespace castor3d void ControlsManager::create( ControlRPtr control ) { addControl( control ); - control->create( shared_from_this() ); + control->create( *this ); } void ControlsManager::destroy( ControlRPtr control ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp index 37461f256c..78a3f287f5 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp @@ -55,12 +55,12 @@ namespace castor3d CptNegatif++; } - SubmeshSPtr submesh1 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); - SubmeshSPtr submesh2 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); - SubmeshSPtr submesh3 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); - SubmeshSPtr submesh4 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); - SubmeshSPtr submesh5 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); - SubmeshSPtr submesh6 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh1 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh2 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh3 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh4 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh5 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh6 = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); static castor::Point3f const zero; // Face avant diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp index 75cc4c7283..e3508c5fd2 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp @@ -37,7 +37,7 @@ namespace castor3d m_radius = -m_radius; } - SubmeshSPtr submesh = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); auto normals = submesh->getComponent< NormalsComponent >(); auto texcoords = submesh->getComponent< Texcoords0Component >(); diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp index 75abe28cf4..d1762236f3 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp @@ -63,7 +63,7 @@ namespace castor3d : -depth / 2 ); float gapW = width / float( subDivisionsW ); float gapH = depth / float( subDivisionsD ); - SubmeshSPtr submesh = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); + auto submesh = mesh.createSubmesh( SubmeshFlag::ePosNmlTanTex ); InterleavedVertexArray points; points.reserve( size_t( nbVertexW ) * nbVertexH ); diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp index 1d308e6941..ee0981affd 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp @@ -35,7 +35,7 @@ namespace castor3d // m_depth = dimensions[0]; // uint32_t nbElem = m_pattern.getSize(); // real totalDistance = 0.0; - // SubmeshSPtr submesh; + // SubmeshRPtr submesh{}; // real distanceToOrigin = 0.0; // Point3f currentUV; // Point3f previousUV; diff --git a/source/Core/Castor3D/Model/Mesh/Mesh.cpp b/source/Core/Castor3D/Model/Mesh/Mesh.cpp index 4c69dc6f59..ec79230f1d 100644 --- a/source/Core/Castor3D/Model/Mesh/Mesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Mesh.cpp @@ -29,7 +29,7 @@ namespace castor3d void Mesh::initialise() { - for ( auto submesh : m_submeshes ) + for ( auto & submesh : m_submeshes ) { submesh->initialise( getEngine()->getRenderSystem()->getRenderDevice() ); } @@ -39,7 +39,7 @@ namespace castor3d { Animable::cleanupAnimations(); - for ( auto submesh : m_submeshes ) + for ( auto & submesh : m_submeshes ) { submesh->cleanup( getEngine()->getRenderSystem()->getRenderDevice() ); } @@ -76,7 +76,7 @@ namespace castor3d { uint32_t nbFaces = 0; - for ( auto submesh : m_submeshes ) + for ( auto & submesh : m_submeshes ) { nbFaces += submesh->getFaceCount(); } @@ -88,7 +88,7 @@ namespace castor3d { uint32_t nbFaces = 0; - for ( auto submesh : m_submeshes ) + for ( auto & submesh : m_submeshes ) { nbFaces += submesh->getPointsCount(); } @@ -96,32 +96,30 @@ namespace castor3d return nbFaces; } - SubmeshSPtr Mesh::getSubmesh( uint32_t index )const + SubmeshRPtr Mesh::getSubmesh( uint32_t index )const { - SubmeshSPtr result; + SubmeshRPtr result{}; if ( index < m_submeshes.size() ) { - result = m_submeshes[index]; + result = m_submeshes[index].get(); } return result; } - SubmeshSPtr Mesh::createSubmesh( SubmeshFlags const & flags ) + SubmeshRPtr Mesh::createSubmesh( SubmeshFlags const & flags ) { - auto submesh = std::make_shared< Submesh >( *this + return m_submeshes.emplace_back( castor::makeUnique< Submesh >( *this , getSubmeshCount() - , flags ); - m_submeshes.push_back( submesh ); - return submesh; + , flags ) ).get(); } void Mesh::deleteSubmesh( SubmeshRPtr submesh ) { auto it = std::find_if( m_submeshes.begin() , m_submeshes.end() - , [&submesh]( SubmeshSPtr lookup ) + , [&submesh]( SubmeshUPtr & lookup ) { return submesh == lookup.get(); } ); @@ -132,20 +130,9 @@ namespace castor3d } } - void Mesh::deleteSubmesh( SubmeshSPtr & submesh ) - { - auto it = std::find( m_submeshes.begin(), m_submeshes.end(), submesh ); - - if ( it != m_submeshes.end() ) - { - m_submeshes.erase( it ); - submesh.reset(); - } - } - void Mesh::computeNormals( bool reverted ) { - for ( auto submesh : m_submeshes ) + for ( auto & submesh : m_submeshes ) { submesh->computeNormals( reverted ); } diff --git a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp index 24c2d9dfb0..0c9d2d2982 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp @@ -32,7 +32,7 @@ namespace castor3d MeshPreparer::prepare( mesh, parameters ); mesh.computeContainers(); - for ( auto submesh : mesh ) + for ( auto & submesh : mesh ) { mesh.getScene()->getListener().postEvent( makeGpuInitialiseEvent( *submesh ) ); } @@ -40,7 +40,7 @@ namespace castor3d void MeshGenerator::computeNormals( Mesh & mesh, bool reverted ) { - for ( auto submesh : mesh ) + for ( auto & submesh : mesh ) { submesh->computeNormals( reverted ); } diff --git a/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp b/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp index 6a55fc4290..7cb00a6e21 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp @@ -17,7 +17,7 @@ namespace castor3d static void transformMesh( castor::Matrix4x4f const & transform , Mesh & mesh ) { - for ( auto submesh : mesh ) + for ( auto & submesh : mesh ) { for ( auto & vertex : submesh->getPositions() ) { @@ -97,7 +97,7 @@ namespace castor3d } else { - for ( auto submesh : mesh ) + for ( auto & submesh : mesh ) { submesh->instantiate( nullptr, {}, submesh->getDefaultMaterial(), false ); } diff --git a/source/Core/Castor3D/Model/Mesh/MeshPreparer.cpp b/source/Core/Castor3D/Model/Mesh/MeshPreparer.cpp index 4564bcc179..43db94ae39 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshPreparer.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshPreparer.cpp @@ -365,7 +365,7 @@ namespace castor3d { return std::all_of( mesh.begin() , mesh.end() - , [¶meters]( SubmeshSPtr const & submesh ) + , [¶meters]( SubmeshUPtr const & submesh ) { return prepare( *submesh, parameters ); } ); diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp index de0ec09b49..f7a91e16b7 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp @@ -21,6 +21,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, Submesh ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Plugin/DividerPlugin.cpp b/source/Core/Castor3D/Plugin/DividerPlugin.cpp index 3ce9f707d9..8a29bf6648 100644 --- a/source/Core/Castor3D/Plugin/DividerPlugin.cpp +++ b/source/Core/Castor3D/Plugin/DividerPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, DividerPlugin ) namespace castor3d { - DividerPlugin::DividerPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::eDivider, library, *engine ) + DividerPlugin::DividerPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::eDivider, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp index 082d8634bb..30333c7ddd 100644 --- a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, GeneratorPlugin ) namespace castor3d { - GeneratorPlugin::GeneratorPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::eGenerator, library, *engine ) + GeneratorPlugin::GeneratorPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::eGenerator, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/GenericPlugin.cpp b/source/Core/Castor3D/Plugin/GenericPlugin.cpp index e33c28184a..a0e839b338 100644 --- a/source/Core/Castor3D/Plugin/GenericPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GenericPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, GenericPlugin ) namespace castor3d { - GenericPlugin::GenericPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::eGeneric, library, *engine ) + GenericPlugin::GenericPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::eGeneric, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp index 3a47bafc94..521ca1964c 100644 --- a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, ImporterPlugin ) namespace castor3d { - ImporterPlugin::ImporterPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::eImporter, library, *engine ) + ImporterPlugin::ImporterPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::eImporter, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp index 7958fd06d6..a46d886264 100644 --- a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp +++ b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, ParticlePlugin ) namespace castor3d { - ParticlePlugin::ParticlePlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::eParticle, library, *engine ) + ParticlePlugin::ParticlePlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::eParticle, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/Plugin.cpp b/source/Core/Castor3D/Plugin/Plugin.cpp index 98cdedab98..46f4ce121b 100644 --- a/source/Core/Castor3D/Plugin/Plugin.cpp +++ b/source/Core/Castor3D/Plugin/Plugin.cpp @@ -19,12 +19,12 @@ namespace castor3d static const castor::String GetOnUnloadFunctionABIName = cuT( "OnUnload" ); } - Plugin::Plugin( PluginType type, castor::DynamicLibrarySPtr library, Engine & engine ) + Plugin::Plugin( PluginType type, castor::DynamicLibraryUPtr library, Engine & engine ) : OwnedBy< Engine >( engine ) + , m_library( std::move( library ) ) , m_pfnGetRequiredVersion( nullptr ) , m_pfnGetName( nullptr ) , m_type( type ) - , m_library( library.get() ) { if ( !m_library->getFunction( m_pfnGetName, plugin::GetNameFunctionABIName ) ) { diff --git a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp index e4333343e0..9fd3a41f3b 100644 --- a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp +++ b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, PostFxPlugin ) namespace castor3d { - PostFxPlugin::PostFxPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin( PluginType::ePostEffect, library, *engine ) + PostFxPlugin::PostFxPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin( PluginType::ePostEffect, std::move( library ), *engine ) { load(); } diff --git a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp index 500b876503..a61ee0b249 100644 --- a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp @@ -6,8 +6,8 @@ CU_ImplementCUSmartPtr( castor3d, ToneMappingPlugin ) namespace castor3d { - ToneMappingPlugin::ToneMappingPlugin( castor::DynamicLibrarySPtr library, Engine * engine ) - : Plugin{ PluginType::eToneMapping, library, *engine } + ToneMappingPlugin::ToneMappingPlugin( castor::DynamicLibraryUPtr library, Engine * engine ) + : Plugin{ PluginType::eToneMapping, std::move( library ), *engine } { load(); } diff --git a/source/Core/Castor3D/Render/Ray.cpp b/source/Core/Castor3D/Render/Ray.cpp index 6656cd2103..5793caf5e7 100644 --- a/source/Core/Castor3D/Render/Ray.cpp +++ b/source/Core/Castor3D/Render/Ray.cpp @@ -276,7 +276,7 @@ namespace castor3d castor::Intersection Ray::intersects( GeometryRPtr geometry , Face & nearestFace - , SubmeshSPtr & nearestSubmesh + , SubmeshRPtr & nearestSubmesh , float & distance )const { auto mesh = geometry->getMesh().lock(); @@ -287,7 +287,7 @@ namespace castor3d if ( intersects( sphere, distance ) != castor::Intersection::eOut ) { - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { sphere.load( center, submesh->getBoundingSphere().getRadius() ); diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index d69b844a5c..641ea5b6bc 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -905,16 +905,9 @@ namespace castor3d return geometry; } - SubmeshRPtr RenderWindow::getPickedSubmesh()const + Submesh const * RenderWindow::getPickedSubmesh()const { - auto sel = m_picking->getPickedSubmesh(); - - if ( !sel ) - { - return nullptr; - } - - return sel->getOwner()->getSubmesh( sel->getId() ).get(); + return m_picking->getPickedSubmesh(); } uint32_t RenderWindow::getPickedFace()const diff --git a/source/Core/Castor3D/Scene/Geometry.cpp b/source/Core/Castor3D/Scene/Geometry.cpp index c437c20f29..55968b0811 100644 --- a/source/Core/Castor3D/Scene/Geometry.cpp +++ b/source/Core/Castor3D/Scene/Geometry.cpp @@ -60,7 +60,7 @@ namespace castor3d doUpdateContainers(); bool hasEnvironmentMapping = std::any_of( mesh.lock()->begin() , mesh.lock()->end() - , []( SubmeshSPtr const & submesh ) + , []( SubmeshUPtr const & submesh ) { return submesh->getDefaultMaterial() ? submesh->getDefaultMaterial()->hasEnvironmentMapping() @@ -275,7 +275,7 @@ namespace castor3d { m_meshName = mesh->getName(); - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { CU_Require( &submesh->getParent() == mesh.get() ); auto material = submesh->getDefaultMaterial(); diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 01d1b5d9d0..402586a70b 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -2864,7 +2864,7 @@ namespace castor3d if ( material ) { - for ( auto submesh : *parsingContext.geometry->getMesh().lock() ) + for ( auto & submesh : *parsingContext.geometry->getMesh().lock() ) { parsingContext.geometry->setMaterial( *submesh, material ); } @@ -2972,7 +2972,7 @@ namespace castor3d { if ( parsingContext.geometry->getMesh().lock()->getSubmeshCount() > params[0]->get( index ) ) { - SubmeshSPtr submesh = parsingContext.geometry->getMesh().lock()->getSubmesh( index ); + auto submesh = parsingContext.geometry->getMesh().lock()->getSubmesh( index ); parsingContext.geometry->setMaterial( *submesh, material ); } else @@ -3153,7 +3153,7 @@ namespace castor3d auto & parsingContext = getParserContext( context ); parsingContext.face1 = -1; parsingContext.face2 = -1; - parsingContext.submesh.reset(); + parsingContext.submesh = {}; if ( !parsingContext.mesh.lock() ) { @@ -3269,7 +3269,7 @@ namespace castor3d } else if ( mesh.getSubmeshCount() == parsingContext.mesh.lock()->getSubmeshCount() ) { - for ( auto morphSubmesh : mesh ) + for ( auto & morphSubmesh : mesh ) { auto id = morphSubmesh->getId(); auto submesh = parsingContext.mesh.lock()->getSubmesh( id ); @@ -3395,7 +3395,7 @@ namespace castor3d if ( material ) { - for ( auto submesh : *parsingContext.mesh.lock() ) + for ( auto & submesh : *parsingContext.mesh.lock() ) { submesh->setDefaultMaterial( material ); } @@ -3488,7 +3488,7 @@ namespace castor3d parsingContext.importer.reset(); parsingContext.mesh.reset(); - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { mesh->getScene()->getListener().postEvent( makeGpuInitialiseEvent( *submesh ) ); } @@ -3526,7 +3526,7 @@ namespace castor3d params[2]->get( targetWeight ); auto & animation = *parsingContext.morphAnimation; - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { MeshAnimationSubmesh animSubmesh{ animation, *submesh }; animation.addChild( std::move( animSubmesh ) ); @@ -3596,7 +3596,7 @@ namespace castor3d { if ( parsingContext.mesh.lock()->getSubmeshCount() > params[0]->get( index ) ) { - SubmeshSPtr submesh = parsingContext.mesh.lock()->getSubmesh( index ); + auto submesh = parsingContext.mesh.lock()->getSubmesh( index ); submesh->setDefaultMaterial( material ); } else @@ -3768,7 +3768,6 @@ namespace castor3d { castor::String strParams; params[0]->get( strParams ); - SubmeshSPtr submesh = parsingContext.submesh; if ( parsingContext.vertexTex.empty() ) { @@ -3812,7 +3811,6 @@ namespace castor3d { castor::String strParams; params[0]->get( strParams ); - SubmeshSPtr submesh = parsingContext.submesh; if ( parsingContext.vertexTex.empty() ) { @@ -3862,7 +3860,6 @@ namespace castor3d { castor::String strParams; params[0]->get( strParams ); - SubmeshSPtr submesh = parsingContext.submesh; if ( parsingContext.vertexNml.empty() ) { @@ -3912,7 +3909,6 @@ namespace castor3d { castor::String strParams; params[0]->get( strParams ); - SubmeshSPtr submesh = parsingContext.submesh; if ( parsingContext.vertexTan.empty() ) { @@ -4034,7 +4030,7 @@ namespace castor3d parsingContext.vertexTex.clear(); parsingContext.faces.clear(); parsingContext.submesh->getParent().getScene()->getListener().postEvent( makeGpuInitialiseEvent( *parsingContext.submesh ) ); - parsingContext.submesh.reset(); + parsingContext.submesh = {}; } } CU_EndAttributePop() diff --git a/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp b/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp index 188abfb0fc..4f2eb47bb4 100644 --- a/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp +++ b/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp @@ -1,5 +1,7 @@ #include "CastorUtils/Miscellaneous/DynamicLibrary.hpp" +CU_ImplementCUSmartPtr( castor, DynamicLibrary ) + namespace castor { DynamicLibrary::DynamicLibrary( Path const & pathFile )noexcept diff --git a/source/Core/SceneExporter/Text/TextGeometry.cpp b/source/Core/SceneExporter/Text/TextGeometry.cpp index 0a58af4216..e2059afca3 100644 --- a/source/Core/SceneExporter/Text/TextGeometry.cpp +++ b/source/Core/SceneExporter/Text/TextGeometry.cpp @@ -37,7 +37,7 @@ namespace castor { auto it = std::find_if( mesh->begin() , mesh->end() - , [&geometry]( SubmeshSPtr lookup ) + , [&geometry]( SubmeshUPtr const & lookup ) { return geometry.getMaterial( *lookup ) != lookup->getDefaultMaterial(); } ); @@ -50,7 +50,7 @@ namespace castor } else if ( auto matsBlock{ beginBlock( file, "materials" ) } ) { - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { auto material = geometry.getMaterial( *submesh ); diff --git a/source/Core/SceneExporter/Text/TextMesh.cpp b/source/Core/SceneExporter/Text/TextMesh.cpp index e3cd300d74..d557a3c33a 100644 --- a/source/Core/SceneExporter/Text/TextMesh.cpp +++ b/source/Core/SceneExporter/Text/TextMesh.cpp @@ -52,7 +52,7 @@ namespace castor auto it = std::find_if( object.begin() , object.end() - , []( SubmeshSPtr lookup ) + , []( SubmeshUPtr const & lookup ) { return lookup->getDefaultMaterial() != nullptr; } ); diff --git a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp index a574dd5ff6..196ea7bc11 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp @@ -140,7 +140,7 @@ namespace c3d_assimp auto name = animation.getName(); auto & mesh = static_cast< castor3d::Mesh const & >( *animation.getAnimable() ); - for ( auto submesh : mesh ) + for ( auto & submesh : mesh ) { auto index = submesh->getId(); auto & animations = file.getMeshesAnimations( mesh, index ); diff --git a/test/Castor3D/BinaryExportTest.cpp b/test/Castor3D/BinaryExportTest.cpp index d06c5c09b7..4651081037 100644 --- a/test/Castor3D/BinaryExportTest.cpp +++ b/test/Castor3D/BinaryExportTest.cpp @@ -150,7 +150,7 @@ namespace Testing } } - for ( auto submesh : *dst ) + for ( auto & submesh : *dst ) { submesh->initialise( device ); } diff --git a/tools/CastorViewer/MainFrame.cpp b/tools/CastorViewer/MainFrame.cpp index 913315d033..7b50a97b80 100644 --- a/tools/CastorViewer/MainFrame.cpp +++ b/tools/CastorViewer/MainFrame.cpp @@ -224,7 +224,7 @@ namespace CastorViewer } } - void MainFrame::select( castor3d::GeometryRPtr geometry, castor3d::SubmeshRPtr submesh ) + void MainFrame::select( castor3d::GeometryRPtr geometry, castor3d::Submesh const * submesh ) { if ( m_sceneObjects && m_sceneObjects->getList() ) { diff --git a/tools/CastorViewer/MainFrame.hpp b/tools/CastorViewer/MainFrame.hpp index 8929bb95d2..dfc6b6745f 100644 --- a/tools/CastorViewer/MainFrame.hpp +++ b/tools/CastorViewer/MainFrame.hpp @@ -59,7 +59,7 @@ namespace CastorViewer bool initialise( GuiCommon::SplashScreen & splashScreen ); void loadScene( wxString const & fileName = wxEmptyString ); void toggleFullScreen( bool fullscreen ); - void select( castor3d::GeometryRPtr geometry, castor3d::SubmeshRPtr submesh ); + void select( castor3d::GeometryRPtr geometry, castor3d::Submesh const * submesh ); private: void doInitialiseTimers(); diff --git a/tools/CastorViewer/RenderPanel.cpp b/tools/CastorViewer/RenderPanel.cpp index db4276304f..8c263dc61a 100644 --- a/tools/CastorViewer/RenderPanel.cpp +++ b/tools/CastorViewer/RenderPanel.cpp @@ -406,7 +406,7 @@ namespace CastorViewer } void RenderPanel::doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry - , castor3d::SubmeshRPtr submesh ) + , castor3d::Submesh const * submesh ) { auto oldSubmesh = m_selectedSubmesh; auto oldGeometry = m_selectedGeometry; diff --git a/tools/CastorViewer/RenderPanel.hpp b/tools/CastorViewer/RenderPanel.hpp index 7cf859a175..2a53f5265e 100644 --- a/tools/CastorViewer/RenderPanel.hpp +++ b/tools/CastorViewer/RenderPanel.hpp @@ -92,7 +92,7 @@ namespace CastorViewer int doTransformX( float x ); int doTransformY( float y ); void doUpdateSelectedGeometry( castor3d::GeometryRPtr geometry - , castor3d::SubmeshRPtr submesh ); + , castor3d::Submesh const * submesh ); GuiCommon::NodeState & doAddNodeState( castor3d::SceneNodeRPtr node , bool camera ); void doUpdateMaxSpeed( float factor ); @@ -154,7 +154,7 @@ namespace CastorViewer std::map< castor::String, GuiCommon::NodeStatePtr > m_nodesStates{}; GuiCommon::NodeState * m_currentState{}; castor3d::GeometryRPtr m_selectedGeometry{}; - castor3d::SubmeshRPtr m_selectedSubmesh{}; + castor3d::Submesh const * m_selectedSubmesh{}; castor3d::CameraRPtr m_camera{}; castor3d::SceneRPtr m_scene{}; diff --git a/tools/GuiCommon/System/SceneObjectsList.cpp b/tools/GuiCommon/System/SceneObjectsList.cpp index d6fa0ce200..471c63eb85 100644 --- a/tools/GuiCommon/System/SceneObjectsList.cpp +++ b/tools/GuiCommon/System/SceneObjectsList.cpp @@ -371,7 +371,7 @@ namespace GuiCommon } void SceneObjectsList::select( castor3d::GeometryRPtr geometry - , castor3d::SubmeshRPtr submesh ) + , castor3d::Submesh const * submesh ) { auto itg = m_ids.find( geometry ); @@ -408,7 +408,7 @@ namespace GuiCommon { int count = 0; - for ( auto submesh : *mesh ) + for ( auto & submesh : *mesh ) { wxString name = _( "Submesh " ); name << count++; diff --git a/tools/GuiCommon/System/SceneObjectsList.hpp b/tools/GuiCommon/System/SceneObjectsList.hpp index 65351cce5d..e11499c0ba 100644 --- a/tools/GuiCommon/System/SceneObjectsList.hpp +++ b/tools/GuiCommon/System/SceneObjectsList.hpp @@ -17,7 +17,7 @@ namespace GuiCommon : public wxTreeCtrl { private: - using SubmeshIdMap = std::map< castor3d::SubmeshRPtr, wxTreeItemId >; + using SubmeshIdMap = std::map< castor3d::Submesh const *, wxTreeItemId >; using GeometrySubmeshIdMap = std::map< castor3d::GeometryRPtr, SubmeshIdMap >; public: @@ -31,7 +31,7 @@ namespace GuiCommon , castor3d::SceneRPtr scene ); void unloadScene(); void select( castor3d::GeometryRPtr geometry - , castor3d::SubmeshRPtr submesh ); + , castor3d::Submesh const * submesh ); protected: void doAddSubmesh( castor3d::GeometryRPtr geometry From 5b678e51197a53428eace4bdb9bdf5044a97b166 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 16:17:58 +0200 Subject: [PATCH 28/35] Castor3D: Replaced use of shared_ptr with unique_ptr for SubmeshComponent. --- include/Core/Castor3D/Engine.hpp | 2 +- include/Core/Castor3D/Gui/ControlsManager.hpp | 2 +- .../Mesh/Animation/MeshAnimationSubmesh.hpp | 2 +- .../Submesh/Component/BaseDataComponent.hpp | 6 +-- .../Submesh/Component/ComponentModule.hpp | 20 +++---- .../Component/InstantiationComponent.hpp | 2 +- .../Mesh/Submesh/Component/LinesMapping.hpp | 2 +- .../Submesh/Component/MeshletComponent.hpp | 2 +- .../Mesh/Submesh/Component/MorphComponent.hpp | 2 +- .../Submesh/Component/PassMasksComponent.hpp | 2 +- .../Mesh/Submesh/Component/SkinComponent.hpp | 2 +- .../Submesh/Component/SubmeshComponent.hpp | 2 +- .../Mesh/Submesh/Component/TriFaceMapping.hpp | 2 +- .../Castor3D/Model/Mesh/Submesh/Submesh.hpp | 21 ++++---- .../Castor3D/Model/Mesh/Submesh/Submesh.inl | 52 +++++++++++-------- include/Core/CastorUtils/Config/SmartPtr.hpp | 32 +++++++++++- source/Core/Castor3D/Binary/BinarySubmesh.cpp | 46 ++++++++-------- source/Core/Castor3D/Gui/ControlsManager.cpp | 2 +- .../Mesh/Submesh/Component/IndexMapping.cpp | 2 + .../Component/InstantiationComponent.cpp | 8 +-- .../Mesh/Submesh/Component/LinesMapping.cpp | 8 +-- .../Submesh/Component/MeshletComponent.cpp | 8 +-- .../Mesh/Submesh/Component/MorphComponent.cpp | 8 +-- .../Submesh/Component/PassMasksComponent.cpp | 8 +-- .../Mesh/Submesh/Component/SkinComponent.cpp | 8 +-- .../Submesh/Component/SubmeshComponent.cpp | 2 + .../Mesh/Submesh/Component/TriFaceMapping.cpp | 8 +-- .../Castor3D/Model/Mesh/Submesh/Submesh.cpp | 2 +- source/Core/SceneExporter/CscnExporter.cpp | 2 +- 29 files changed, 160 insertions(+), 105 deletions(-) diff --git a/include/Core/Castor3D/Engine.hpp b/include/Core/Castor3D/Engine.hpp index 20b4aa1016..57f954c6ed 100644 --- a/include/Core/Castor3D/Engine.hpp +++ b/include/Core/Castor3D/Engine.hpp @@ -914,7 +914,7 @@ namespace castor3d template< typename ListenerT > void setUserInputListenerT( castor::UniquePtr< ListenerT > listener )noexcept { - m_userInputListener = castor::ptrCast< UserInputListener >( listener ); + m_userInputListener = castor::ptrRefCast< UserInputListener >( listener ); } void setDefaultLightingModel( LightingModelID value )noexcept diff --git a/include/Core/Castor3D/Gui/ControlsManager.hpp b/include/Core/Castor3D/Gui/ControlsManager.hpp index eeaa94a926..f83721a578 100644 --- a/include/Core/Castor3D/Gui/ControlsManager.hpp +++ b/include/Core/Castor3D/Gui/ControlsManager.hpp @@ -131,7 +131,7 @@ namespace castor3d template< typename ControlT > ControlT * registerControlT( castor::UniquePtr< ControlT > control ) { - return &static_cast< ControlT & >( *registerControl( castor::ptrCast< Control >( control ) ) ); + return &static_cast< ControlT & >( *registerControl( castor::ptrRefCast< Control >( control ) ) ); } /** Removes a control that has been destroyed. diff --git a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.hpp b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.hpp index 46039ba1b2..de50078e62 100644 --- a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.hpp +++ b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.hpp @@ -101,7 +101,7 @@ namespace castor3d Submesh & m_submesh; //!\~english The bones component. //!\~french Le composant des os. - MorphComponentSPtr m_component; + MorphComponentRPtr m_component; friend class MeshAnimationInstanceSubmesh; }; diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp index 2b637edc1a..8d4709aa3a 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp @@ -62,11 +62,11 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - SubmeshComponentSPtr clone( Submesh & submesh )const override + SubmeshComponentUPtr clone( Submesh & submesh )const override { - auto result = std::make_shared< BaseDataComponentT >( submesh ); + auto result = castor::makeUnique< BaseDataComponentT >( submesh ); result->m_data = m_data; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } /** *\copydoc castor3d::SubmeshComponent::getSubmeshFlags diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp index ebc207af59..fefe5c6448 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp @@ -189,18 +189,20 @@ namespace castor3d */ using ColoursComponent = BaseDataComponentT< SubmeshFlag::eColours >; - CU_DeclareSmartPtr( Face ); - CU_DeclareSmartPtr( IndexMapping ); - CU_DeclareSmartPtr( InstantiationComponent ); - CU_DeclareSmartPtr( MorphComponent ); - CU_DeclareSmartPtr( SubmeshComponent ); - CU_DeclareSmartPtr( TriFaceMapping ); + CU_DeclareCUSmartPtr( castor3d, IndexMapping, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, InstantiationComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, LinesMapping, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MeshletComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MorphComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, PassMasksComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkinComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SubmeshComponent, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, TriFaceMapping, C3D_API ); + CU_DeclareCUEnumTemplateSmartPtr( castor3d, BaseDataComponentT, castor3d::SubmeshFlag ); //! Face array CU_DeclareVector( Face, Face ); - //! Face pointer array - CU_DeclareVector( FaceSPtr, FacePtr ); - CU_DeclareMap( uint32_t, SubmeshComponentSPtr, SubmeshComponentID ); + CU_DeclareMap( uint32_t, SubmeshComponentUPtr, SubmeshComponentID ); //@} //@} diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp index 55137b6e4b..326850f939 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp @@ -119,7 +119,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\copydoc castor3d::SubmeshComponent::getProgramFlags */ diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.hpp index d9643d4ac8..262e453296 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.hpp @@ -76,7 +76,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\~english *\brief Creates and adds lines to the submesh. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp index c93bb41044..5e408fb71a 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp @@ -48,7 +48,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\copydoc castor3d::SubmeshComponent::getProgramFlags */ diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp index e90f74c20c..f8ea81b03a 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp @@ -46,7 +46,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\~english *\brief Adds a morph target. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp index 2b4a3d8baa..c15ebe3c4a 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp @@ -38,7 +38,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\~english *\brief Adds bone datas. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp index 1ddbe42a60..62781fe93c 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp @@ -59,7 +59,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\~english *\brief adds bone datas. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp index a2054dd9d6..152fd2abac 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp @@ -129,7 +129,7 @@ namespace castor3d *\return Clone ce composant dans le submesh donné. *\param[in,out] submesh Reçoit le composant cloné. */ - C3D_API virtual SubmeshComponentSPtr clone( Submesh & submesh )const = 0; + C3D_API virtual SubmeshComponentUPtr clone( Submesh & submesh )const = 0; /** *\~english *\return The component type name. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.hpp index 777e98be0a..cab8ef8378 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.hpp @@ -208,7 +208,7 @@ namespace castor3d /** *\copydoc castor3d::SubmeshComponent::clone */ - C3D_API SubmeshComponentSPtr clone( Submesh & submesh )const override; + C3D_API SubmeshComponentUPtr clone( Submesh & submesh )const override; /** *\~english *\brief Creates and adds faces to the submesh. diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp index f565882f82..11bb267d8d 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp @@ -34,13 +34,12 @@ namespace castor3d template< typename T > struct SubmeshComponentAdder { - static inline void add( std::shared_ptr< T > component + static inline void add( castor::UniquePtr< T > component , Submesh & submesh ); }; class Submesh : public castor::OwnedBy< Mesh > - , public std::enable_shared_from_this< Submesh > { private: CU_DeclareList( castor::ByteArray, BytePtr ); @@ -283,13 +282,13 @@ namespace castor3d template< size_t Count > inline void addPoints( std::array< InterleavedVertex, Count > const & vertices ); inline void setDefaultMaterial( MaterialRPtr material ); - inline void setIndexMapping( IndexMappingSPtr mapping ); - inline IndexMappingSPtr getIndexMapping()const; + inline void setIndexMapping( IndexMappingUPtr mapping ); + inline IndexMappingRPtr getIndexMapping()const; template< typename ComponentT, typename ... ParamsT > - inline std::shared_ptr< ComponentT > createComponent( ParamsT && ... params ); - inline void addComponent( SubmeshComponentSPtr component ); + inline ComponentT * createComponent( ParamsT && ... params ); + inline void addComponent( SubmeshComponentUPtr component ); template< typename ComponentT > - inline void addComponent( std::shared_ptr< ComponentT > component ); + inline void addComponent( castor::UniquePtr< ComponentT > component ); inline void setTopology( VkPrimitiveTopology value ); /** *\~english @@ -347,9 +346,9 @@ namespace castor3d inline Mesh & getParent(); inline uint32_t getId()const; inline bool hasComponent( castor::String const & name )const; - inline SubmeshComponentSPtr getComponent( castor::String const & name )const; + inline SubmeshComponentRPtr getComponent( castor::String const & name )const; template< typename ComponentT > - inline std::shared_ptr< ComponentT > getComponent()const; + inline ComponentT * getComponent()const; inline InstantiationComponent & getInstantiation(); inline InstantiationComponent const & getInstantiation()const; inline SubmeshComponentIDMap const & getComponents()const; @@ -363,8 +362,8 @@ namespace castor3d castor::BoundingBox m_box; castor::BoundingSphere m_sphere; SubmeshComponentIDMap m_components; - InstantiationComponentSPtr m_instantiation; - IndexMappingSPtr m_indexMapping; + InstantiationComponentRPtr m_instantiation{}; + IndexMappingRPtr m_indexMapping{}; SubmeshFlags m_submeshFlags{ 0u }; bool m_generated{ false }; bool m_initialised{ false }; diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl index c9be8faf5d..b9aece114a 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl @@ -10,22 +10,25 @@ namespace castor3d //********************************************************************************************* template< typename T > - inline void SubmeshComponentAdder< T >::add( std::shared_ptr< T > component + inline void SubmeshComponentAdder< T >::add( castor::UniquePtr< T > component , Submesh & submesh ) { if constexpr ( std::is_base_of_v< IndexMapping, T > ) { - submesh.setIndexMapping( component ); + submesh.setIndexMapping( castor::ptrRefCast< IndexMapping >( component ) ); } else { - submesh.m_components.emplace( component->getID(), component ); + auto id = component->getID(); + auto comp = component.get(); + submesh.m_components.emplace( id + , castor::ptrRefCast< SubmeshComponent >( component ) ); if constexpr ( std::is_same_v< InstantiationComponent, T > ) { - if ( submesh.m_instantiation != component ) + if ( submesh.m_instantiation != comp ) { - submesh.m_instantiation = component; + submesh.m_instantiation = comp; } } } @@ -110,19 +113,20 @@ namespace castor3d m_dirty = true; } - inline void Submesh::setIndexMapping( IndexMappingSPtr mapping ) + inline void Submesh::setIndexMapping( IndexMappingUPtr mapping ) { if ( m_indexMapping - && m_indexMapping != mapping ) + && m_indexMapping != mapping.get() ) { m_components.erase( m_indexMapping->getID() ); } - m_indexMapping = mapping; - m_components.emplace( mapping->getID(), mapping ); + m_indexMapping = mapping.get(); + auto id = mapping->getID(); + m_components.emplace( id, castor::ptrRefCast< SubmeshComponent >( mapping ) ); } - inline IndexMappingSPtr Submesh::getIndexMapping()const + inline IndexMappingRPtr Submesh::getIndexMapping()const { return m_indexMapping; } @@ -139,28 +143,30 @@ namespace castor3d } template< typename ComponentT, typename ... ParamsT > - inline std::shared_ptr< ComponentT > Submesh::createComponent( ParamsT && ... params ) + inline ComponentT * Submesh::createComponent( ParamsT && ... params ) { - auto component = std::make_shared< ComponentT >( *this + auto component = castor::makeUnique< ComponentT >( *this , std::forward< ParamsT >( params )... ); - addComponent( component ); - return component; + auto result = component.get(); + addComponent( std::move( component ) ); + return result; } - inline void Submesh::addComponent( SubmeshComponentSPtr component ) + inline void Submesh::addComponent( SubmeshComponentUPtr component ) { - m_components.emplace( component->getID(), component ); + auto id = component->getID(); + m_components.emplace( id, std::move( component ) ); } template< typename T > - inline void Submesh::addComponent( std::shared_ptr< T > component ) + inline void Submesh::addComponent( castor::UniquePtr< T > component ) { - SubmeshComponentAdder< T >::add( component, *this ); + SubmeshComponentAdder< T >::add( std::move( component ), *this ); } - inline SubmeshComponentSPtr Submesh::getComponent( castor::String const & name )const + inline SubmeshComponentRPtr Submesh::getComponent( castor::String const & name )const { - SubmeshComponentSPtr result; + SubmeshComponentRPtr result{}; auto it = std::find_if( m_components.begin() , m_components.end() , [&name]( SubmeshComponentIDMap::value_type const & lookup ) @@ -170,16 +176,16 @@ namespace castor3d if ( it != m_components.end() ) { - result = it->second; + result = it->second.get(); } return result; } template< typename T > - inline std::shared_ptr< T > Submesh::getComponent()const + inline T * Submesh::getComponent()const { - return std::static_pointer_cast< T >( getComponent( T::Name ) ); + return &static_cast< T & >( *getComponent( T::Name ) ); } inline InstantiationComponent & Submesh::getInstantiation() diff --git a/include/Core/CastorUtils/Config/SmartPtr.hpp b/include/Core/CastorUtils/Config/SmartPtr.hpp index ef0e597e63..bb555ec2d4 100644 --- a/include/Core/CastorUtils/Config/SmartPtr.hpp +++ b/include/Core/CastorUtils/Config/SmartPtr.hpp @@ -55,7 +55,13 @@ namespace castor } template< typename TypeU, typename TypeT > - UniquePtr< TypeU > ptrCast( UniquePtr< TypeT > & ptr ) + UniquePtr< TypeU > ptrCast( UniquePtr< TypeT > ptr ) + { + return UniquePtr< TypeU >( &static_cast< TypeU & >( *ptr.release() ) ); + } + + template< typename TypeU, typename TypeT > + UniquePtr< TypeU > ptrRefCast( UniquePtr< TypeT > & ptr ) { return UniquePtr< TypeU >( &static_cast< TypeU & >( *ptr.release() ) ); } @@ -111,4 +117,28 @@ namespace nmspc\ template< typename InstT >\ using class_name_t##RPtrT = class_name_t< InstT > * +#define CU_DeclareCUEnumTemplateSmartPtr( nmspc, class_name_t, enum_name_t )\ +}\ +namespace castor\ +{\ + template< enum_name_t EnumT >\ + struct Deleter< nmspc::class_name_t< EnumT > >\ + {\ + void operator()( nmspc::class_name_t< EnumT > * pointer )noexcept\ + {\ + delete pointer;\ + }\ + };\ +}\ +namespace nmspc\ +{\ + template< enum_name_t EnumT >\ + using class_name_t##SPtrT = std::shared_ptr< class_name_t< EnumT > >;\ + template< enum_name_t EnumT >\ + using class_name_t##WPtrT = std::weak_ptr< class_name_t< EnumT > >;\ + template< enum_name_t EnumT >\ + using class_name_t##UPtrT = castor::UniquePtr< class_name_t< EnumT > >;\ + template< enum_name_t EnumT >\ + using class_name_t##RPtrT = class_name_t< EnumT > * + #endif diff --git a/source/Core/Castor3D/Binary/BinarySubmesh.cpp b/source/Core/Castor3D/Binary/BinarySubmesh.cpp index 44be98d731..6c60f31069 100644 --- a/source/Core/Castor3D/Binary/BinarySubmesh.cpp +++ b/source/Core/Castor3D/Binary/BinarySubmesh.cpp @@ -260,7 +260,7 @@ namespace castor3d } break; case ChunkType::eSubmeshPositions: - if ( auto component = std::make_shared< PositionsComponent >( obj ) ) + if ( auto component = castor::makeUnique< PositionsComponent >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex positions." ); @@ -268,12 +268,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshNormals: - if ( auto component = std::make_shared< NormalsComponent >( obj ) ) + if ( auto component = castor::makeUnique< NormalsComponent >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex normals." ); @@ -281,12 +281,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshTangents: - if ( auto component = std::make_shared< TangentsComponent >( obj ) ) + if ( auto component = castor::makeUnique< TangentsComponent >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex tangents." ); @@ -294,12 +294,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshTexcoords0: - if ( auto component = std::make_shared< Texcoords0Component >( obj ) ) + if ( auto component = castor::makeUnique< Texcoords0Component >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex texcoords." ); @@ -307,12 +307,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshTexcoords1: - if ( auto component = std::make_shared< Texcoords1Component >( obj ) ) + if ( auto component = castor::makeUnique< Texcoords1Component >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex texcoords." ); @@ -320,12 +320,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshTexcoords2: - if ( auto component = std::make_shared< Texcoords2Component >( obj ) ) + if ( auto component = castor::makeUnique< Texcoords2Component >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex texcoords." ); @@ -333,12 +333,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshTexcoords3: - if ( auto component = std::make_shared< Texcoords3Component >( obj ) ) + if ( auto component = castor::makeUnique< Texcoords3Component >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex texcoords." ); @@ -346,12 +346,12 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eSubmeshColours: - if ( auto component = std::make_shared< ColoursComponent >( obj ) ) + if ( auto component = castor::makeUnique< ColoursComponent >( obj ) ) { result = doParseChunk( values, chunk ); checkError( result, "Couldn't parse vertex colours." ); @@ -359,31 +359,31 @@ namespace castor3d if ( result ) { component->setData( values ); - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eBonesComponent: - if ( auto component = std::make_shared< SkinComponent >( obj ) ) + if ( auto component = castor::makeUnique< SkinComponent >( obj ) ) { result = createBinaryParser< SkinComponent >().parse( *component, chunk ); checkError( result, "Couldn't parse bones component." ); if ( result ) { - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; case ChunkType::eMorphComponent: - if ( auto component = std::make_shared< MorphComponent >( obj, MorphFlags{} ) ) + if ( auto component = castor::makeUnique< MorphComponent >( obj, MorphFlags{} ) ) { result = createBinaryParser< MorphComponent >().parse( *component, chunk ); checkError( result, "Couldn't parse morph component." ); if ( result ) { - obj.addComponent( component ); + obj.addComponent( std::move( component ) ); } } break; @@ -458,7 +458,7 @@ namespace castor3d BinaryChunk chunk; uint32_t boneCount{ 0u }; std::vector< VertexBoneData > bones; - std::shared_ptr< SkinComponent > bonesComponent; + castor::UniquePtr< SkinComponent > bonesComponent; while ( result && doGetSubChunk( chunk ) ) { @@ -537,8 +537,8 @@ namespace castor3d case ChunkType::eSubmeshBoneCount: if ( !bonesComponent ) { - bonesComponent = std::make_shared< SkinComponent >( obj ); - obj.addComponent( bonesComponent ); + bonesComponent = castor::makeUnique< SkinComponent >( obj ); + obj.addComponent( std::move( bonesComponent ) ); } result = doParseChunk( count, chunk ); checkError( result, "Couldn't parse bones count." ); diff --git a/source/Core/Castor3D/Gui/ControlsManager.cpp b/source/Core/Castor3D/Gui/ControlsManager.cpp index c9c79330b0..62e7c22e50 100644 --- a/source/Core/Castor3D/Gui/ControlsManager.cpp +++ b/source/Core/Castor3D/Gui/ControlsManager.cpp @@ -629,7 +629,7 @@ namespace castor3d ControlRPtr ControlsManager::registerControl( ControlUPtr control ) { - return &static_cast< Control & >( *doAddHandler( castor::ptrCast< EventHandler >( control ) ) ); + return &static_cast< Control & >( *doAddHandler( castor::ptrRefCast< EventHandler >( control ) ) ); } void ControlsManager::unregisterControl( Control & control ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp index d3ed9b6954..d91738aa93 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp @@ -1,5 +1,7 @@ #include "Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp" +CU_ImplementCUSmartPtr( castor3d, IndexMapping ) + namespace castor3d { IndexMapping::IndexMapping( Submesh & submesh diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp index df97d7f750..1bf093b7dd 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, InstantiationComponent ) + namespace castor3d { //********************************************************************************************* @@ -201,10 +203,10 @@ namespace castor3d } } - SubmeshComponentSPtr InstantiationComponent::clone( Submesh & submesh )const + SubmeshComponentUPtr InstantiationComponent::clone( Submesh & submesh )const { - auto result = std::make_shared< InstantiationComponent >( submesh, m_threshold ); - return std::static_pointer_cast< SubmeshComponent >( result ); + auto result = castor::makeUnique< InstantiationComponent >( submesh, m_threshold ); + return castor::ptrRefCast< SubmeshComponent >( result ); } ProgramFlags InstantiationComponent::getProgramFlags( Material const & material )const diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp index 8063604450..aef9c227f0 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp @@ -12,6 +12,8 @@ //************************************************************************************************* +CU_ImplementCUSmartPtr( castor3d, LinesMapping ) + namespace castor3d { namespace smshcompline @@ -81,12 +83,12 @@ namespace castor3d { } - SubmeshComponentSPtr LinesMapping::clone( Submesh & submesh )const + SubmeshComponentUPtr LinesMapping::clone( Submesh & submesh )const { - auto result = std::make_shared< LinesMapping >( submesh ); + auto result = castor::makeUnique< LinesMapping >( submesh ); result->m_lines = m_lines; result->m_cameraPosition = m_cameraPosition; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } uint32_t LinesMapping::getCount()const diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp index 96ab91a7fd..e3566f0b7e 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp @@ -12,6 +12,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, MeshletComponent ) + namespace castor3d { #if VK_NV_mesh_shader @@ -33,12 +35,12 @@ namespace castor3d { } - SubmeshComponentSPtr MeshletComponent::clone( Submesh & submesh )const + SubmeshComponentUPtr MeshletComponent::clone( Submesh & submesh )const { - auto result = submesh.createComponent< MeshletComponent >(); + auto result = castor::makeUnique< MeshletComponent >( submesh ); result->m_meshlets = m_meshlets; result->m_cull = m_cull; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } void MeshletComponent::createDescriptorSet( Geometry const & geometry ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp index 9b8999e04c..42a738be04 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp @@ -16,6 +16,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, MorphComponent ) + namespace castor3d { namespace smshcompmorph @@ -97,11 +99,11 @@ namespace castor3d } } - SubmeshComponentSPtr MorphComponent::clone( Submesh & submesh )const + SubmeshComponentUPtr MorphComponent::clone( Submesh & submesh )const { - auto result = submesh.createComponent< MorphComponent >( m_flags ); + auto result = castor::makeUnique< MorphComponent >( submesh, m_flags ); result->m_targets = m_targets; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } void MorphComponent::addMorphTarget( SubmeshAnimationBuffer data ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp index 52564d5afc..b39780655b 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, PassMasksComponent ) + namespace castor3d { namespace passflags @@ -101,11 +103,11 @@ namespace castor3d m_data.insert( m_data.end(), begin, end ); } - SubmeshComponentSPtr PassMasksComponent::clone( Submesh & submesh )const + SubmeshComponentUPtr PassMasksComponent::clone( Submesh & submesh )const { - auto result = std::make_shared< PassMasksComponent >( submesh ); + auto result = castor::makeUnique< PassMasksComponent >( submesh ); result->m_data = m_data; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } void PassMasksComponent::addDatas( std::vector< PassMasks > const & boneData ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp index 983f2f0c41..5c061ddc65 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, SkinComponent ) + namespace castor3d { castor::String const SkinComponent::Name = cuT( "bones" ); @@ -35,11 +37,11 @@ namespace castor3d return getOwner()->getParent().getSkeleton(); } - SubmeshComponentSPtr SkinComponent::clone( Submesh & submesh )const + SubmeshComponentUPtr SkinComponent::clone( Submesh & submesh )const { - auto result = std::make_shared< SkinComponent >( submesh ); + auto result = castor::makeUnique< SkinComponent >( submesh ); result->m_bones = m_bones; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } void SkinComponent::addDatas( std::vector< VertexBoneData > const & boneData ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp index 7122aa0b17..1d494b07d1 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp @@ -1,5 +1,7 @@ #include "Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp" +CU_ImplementCUSmartPtr( castor3d, SubmeshComponent ) + namespace castor3d { SubmeshComponent::SubmeshComponent( Submesh & submesh diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp index cd76eddacb..e3918bbc98 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp @@ -15,6 +15,8 @@ //************************************************************************************************* +CU_ImplementCUSmartPtr( castor3d, TriFaceMapping ) + namespace castor3d { namespace smshcomptri @@ -260,13 +262,13 @@ namespace castor3d , *tangents ); } - SubmeshComponentSPtr TriFaceMapping::clone( Submesh & submesh )const + SubmeshComponentUPtr TriFaceMapping::clone( Submesh & submesh )const { - auto result = std::make_shared< TriFaceMapping >( submesh ); + auto result = castor::makeUnique< TriFaceMapping >( submesh ); result->m_faces = m_faces; result->m_hasNormals = m_hasNormals; result->m_cameraPosition = m_cameraPosition; - return std::static_pointer_cast< SubmeshComponent >( result ); + return castor::ptrRefCast< SubmeshComponent >( result ); } void TriFaceMapping::doCleanup( RenderDevice const & device ) diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp index f7a91e16b7..fd0fb35b4f 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp @@ -142,7 +142,7 @@ namespace castor3d , m_defaultMaterial{ mesh.getScene()->getEngine()->getMaterialCache().getDefaultMaterial() } , m_submeshFlags{ SubmeshFlag::eIndex | flags } { - addComponent( std::make_shared< InstantiationComponent >( *this, 2u ) ); + addComponent( castor::makeUnique< InstantiationComponent >( *this, 2u ) ); if ( checkFlag( flags, SubmeshFlag::ePositions ) ) { diff --git a/source/Core/SceneExporter/CscnExporter.cpp b/source/Core/SceneExporter/CscnExporter.cpp index 3c4b6ecdf4..6c1b30f5c2 100644 --- a/source/Core/SceneExporter/CscnExporter.cpp +++ b/source/Core/SceneExporter/CscnExporter.cpp @@ -707,7 +707,7 @@ namespace castor3d::exporter if ( auto indexMapping = srcSubmesh->getIndexMapping() ) { - dstSubmesh->addComponent( std::static_pointer_cast< castor3d::IndexMapping >( indexMapping->clone( *dstSubmesh ) ) ); + dstSubmesh->addComponent( castor::ptrCast< castor3d::IndexMapping >( indexMapping->clone( *dstSubmesh ) ) ); } if ( auto bones = srcSubmesh->getComponent< castor3d::SkinComponent >() ) From 433338eacabd54c9cf3e8aeadd48fa2122f3cb2c Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 19:04:25 +0200 Subject: [PATCH 29/35] Castor3D: Replaced use of shared_ptr with unique_ptr for PostEffect. --- .../Render/PostEffect/PostEffectModule.hpp | 7 ++-- include/Core/Castor3D/Render/RenderTarget.hpp | 13 ++++---- .../Castor3D/Render/PostEffect/PostEffect.cpp | 2 ++ source/Core/Castor3D/Render/RenderTarget.cpp | 32 +++++++++---------- .../BloomPostEffect/BloomPostEffect.cpp | 4 +-- .../BloomPostEffect/BloomPostEffect.hpp | 2 +- .../DrawEdgesPostEffect.cpp | 4 +-- .../DrawEdgesPostEffect.hpp | 2 +- .../FilmGrainPostEffect.cpp | 4 +-- .../FilmGrainPostEffect.hpp | 2 +- .../FxaaPostEffect/FxaaPostEffect.cpp | 4 +-- .../FxaaPostEffect/FxaaPostEffect.hpp | 2 +- .../GrayScalePostEffect.cpp | 4 +-- .../GrayScalePostEffect.hpp | 2 +- .../LightStreaksPostEffect.cpp | 4 +-- .../LightStreaksPostEffect.hpp | 2 +- .../LinearMotionBlurPostEffect.cpp | 4 +-- .../LinearMotionBlurPostEffect.hpp | 2 +- .../PbrBloomPostEffect/PbrBloomPostEffect.cpp | 4 +-- .../PbrBloomPostEffect/PbrBloomPostEffect.hpp | 2 +- .../SmaaPostEffect/SmaaPostEffect.cpp | 4 +-- .../SmaaPostEffect/SmaaPostEffect.hpp | 2 +- 22 files changed, 55 insertions(+), 53 deletions(-) diff --git a/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp b/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp index e7d061eae3..d5eb18d783 100644 --- a/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp +++ b/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp @@ -45,8 +45,7 @@ namespace castor3d */ struct PostEffectSurface; - CU_DeclareSmartPtr( PostEffect ); - CU_DeclareVector( PostEffectSPtr, PostEffectPtr ); + CU_DeclareCUSmartPtr( castor3d, PostEffect, C3D_API ); /** *\~english *\brief @@ -57,8 +56,8 @@ namespace castor3d */ using PostEffectFactory = castor::Factory< PostEffect , castor::String - , PostEffectSPtr - , std::function< PostEffectSPtr( RenderTarget &, RenderSystem &, Parameters const & ) > >; + , PostEffectUPtr + , std::function< PostEffectUPtr( RenderTarget &, RenderSystem &, Parameters const & ) > >; //@} //@} diff --git a/include/Core/Castor3D/Render/RenderTarget.hpp b/include/Core/Castor3D/Render/RenderTarget.hpp index 6704a7efb2..d612372f72 100644 --- a/include/Core/Castor3D/Render/RenderTarget.hpp +++ b/include/Core/Castor3D/Render/RenderTarget.hpp @@ -43,6 +43,7 @@ namespace castor3d using OnInitialisedFunc = std::function< void( RenderTarget const &, QueueData const & ) >; using OnInitialised = castor::SignalT< OnInitialisedFunc >; using OnInitialisedConnection = castor::ConnectionT< OnInitialised >; + using PostEffectArray = std::vector< PostEffectUPtr >; public: /** @@ -225,7 +226,7 @@ namespace castor3d *\brief Ajoute un effet post rendu à la liste. *\param[in] name Le nom de l'effet. */ - C3D_API PostEffectSPtr getPostEffect( castor::String const & name )const; + C3D_API PostEffectRPtr getPostEffect( castor::String const & name )const; C3D_API void resetSemaphore(); C3D_API crg::FramePass const & createVertexTransformPass( crg::FramePassGroup & graph ); /** @@ -310,12 +311,12 @@ namespace castor3d return m_index; } - PostEffectPtrArray const & getHDRPostEffects()const + PostEffectArray const & getHDRPostEffects()const { return m_hdrPostEffects; } - PostEffectPtrArray const & getSRGBPostEffects()const + PostEffectArray const & getSRGBPostEffects()const { return m_srgbPostEffects; } @@ -450,7 +451,7 @@ namespace castor3d void doInitCombineProgram( ProgressBar * progress ); void doCleanupCombineProgram(); Texture const & doUpdatePostEffects( CpuUpdater & updater - , PostEffectPtrArray const & effects + , PostEffectArray const & effects , std::vector< Texture const * > const & images )const; crg::SemaphoreWaitArray doRender( ashes::Queue const & queue , crg::SemaphoreWaitArray signalsToWait ); @@ -476,10 +477,10 @@ namespace castor3d uint32_t m_index{}; castor::String m_name; Parameters m_techniqueParameters; - PostEffectPtrArray m_hdrPostEffects; + PostEffectArray m_hdrPostEffects; castor::String m_toneMappingName{ cuT( "linear" ) }; ToneMappingSPtr m_toneMapping; - PostEffectPtrArray m_srgbPostEffects; + PostEffectArray m_srgbPostEffects; FramePassTimerUPtr m_overlaysTimer; FramePassTimerUPtr m_cpuUpdateTimer; FramePassTimerUPtr m_gpuUpdateTimer; diff --git a/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp b/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp index 3599d29eda..6f5e6ddc3c 100644 --- a/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp +++ b/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp @@ -12,6 +12,8 @@ #include #include +CU_ImplementCUSmartPtr( castor3d, PostEffect ) + namespace castor3d { PostEffect::PostEffect( castor::String const & name diff --git a/source/Core/Castor3D/Render/RenderTarget.cpp b/source/Core/Castor3D/Render/RenderTarget.cpp index 2a19dd6e51..8b1f2647b2 100644 --- a/source/Core/Castor3D/Render/RenderTarget.cpp +++ b/source/Core/Castor3D/Render/RenderTarget.cpp @@ -421,7 +421,7 @@ namespace castor3d for ( auto entry : engine.getPostEffectFactory().listRegisteredTypes() ) { - PostEffectSPtr effect = engine.getPostEffectFactory().create( entry.key + auto effect = engine.getPostEffectFactory().create( entry.key , *this , *engine.getRenderSystem() , Parameters{} ); @@ -429,11 +429,11 @@ namespace castor3d if ( effect->isAfterToneMapping() ) { - m_srgbPostEffects.push_back( effect ); + m_srgbPostEffects.push_back( std::move( effect ) ); } else { - m_hdrPostEffects.push_back( effect ); + m_hdrPostEffects.push_back( std::move( effect ) ); } } @@ -544,14 +544,14 @@ namespace castor3d m_combinePassSource = {}; m_combinePass = {}; - for ( auto effect : m_srgbPostEffects ) + for ( auto & effect : m_srgbPostEffects ) { effect->cleanup( device ); } m_toneMapping.reset(); - for ( auto effect : m_hdrPostEffects ) + for ( auto & effect : m_hdrPostEffects ) { effect->cleanup( device ); } @@ -621,12 +621,12 @@ namespace castor3d m_renderTechnique->update( updater ); m_overlayPass->update( updater ); - for ( auto effect : m_hdrPostEffects ) + for ( auto & effect : m_hdrPostEffects ) { effect->update( updater ); } - for ( auto effect : m_srgbPostEffects ) + for ( auto & effect : m_srgbPostEffects ) { effect->update( updater ); } @@ -738,30 +738,30 @@ namespace castor3d } } - PostEffectSPtr RenderTarget::getPostEffect( castor::String const & name )const + PostEffectRPtr RenderTarget::getPostEffect( castor::String const & name )const { auto it = std::find_if( m_srgbPostEffects.begin() , m_srgbPostEffects.end() - , [&name]( PostEffectSPtr lookup ) + , [&name]( PostEffectUPtr const & lookup ) { return lookup->getName() == name; } ); if ( it != m_srgbPostEffects.end() ) { - return *it; + return it->get(); } it = std::find_if( m_hdrPostEffects.begin() , m_hdrPostEffects.end() - , [&name]( PostEffectSPtr lookup ) + , [&name]( PostEffectUPtr const & lookup ) { return lookup->getName() == name; } ); if ( it != m_hdrPostEffects.end() ) { - return *it; + return it->get(); } return nullptr; @@ -862,7 +862,7 @@ namespace castor3d if ( !m_hdrPostEffects.empty() ) { - for ( auto effect : m_hdrPostEffects ) + for ( auto & effect : m_hdrPostEffects ) { if ( result ) { @@ -901,7 +901,7 @@ namespace castor3d if ( !m_srgbPostEffects.empty() ) { - for ( auto effect : m_srgbPostEffects ) + for ( auto & effect : m_srgbPostEffects ) { if ( result ) { @@ -1176,13 +1176,13 @@ namespace castor3d } Texture const & RenderTarget::doUpdatePostEffects( CpuUpdater & updater - , PostEffectPtrArray const & effects + , PostEffectArray const & effects , std::vector< Texture const * > const & images )const { Texture const * src = images.front(); Texture const * dst = images.back(); - for ( auto effect : effects ) + for ( auto & effect : effects ) { if ( effect->update( updater, *src ) ) { diff --git a/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.cpp b/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.cpp index 8fcd1bad78..7e424a3437 100644 --- a/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.cpp +++ b/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.cpp @@ -39,11 +39,11 @@ namespace Bloom setParameters( params ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.hpp b/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.hpp index 214c72e175..2647b7c046 100644 --- a/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.hpp +++ b/source/Plugins/PostEffects/BloomPostEffect/BloomPostEffect.hpp @@ -19,7 +19,7 @@ namespace Bloom PostEffect( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & param ); - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & param ); /** diff --git a/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.cpp b/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.cpp index ec8af6f042..32f90e05fd 100644 --- a/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.cpp +++ b/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.cpp @@ -207,11 +207,11 @@ namespace draw_edges { } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.hpp b/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.hpp index 58fae004cc..cd6d8ca346 100644 --- a/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.hpp +++ b/source/Plugins/PostEffects/DrawEdgesPostEffect/DrawEdgesPostEffect.hpp @@ -28,7 +28,7 @@ namespace draw_edges , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); ~PostEffect()override; - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.cpp b/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.cpp index 1a03912220..fa4204c90b 100644 --- a/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.cpp +++ b/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.cpp @@ -212,11 +212,11 @@ namespace film_grain getRenderSystem()->getRenderDevice().uboPool->putBuffer( m_configUbo ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.hpp b/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.hpp index 08e6af727d..f6c2cf9a53 100644 --- a/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.hpp +++ b/source/Plugins/PostEffects/FilmGrainPostEffect/FilmGrainPostEffect.hpp @@ -36,7 +36,7 @@ namespace film_grain , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); ~PostEffect()override; - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.cpp b/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.cpp index 66cf783dad..6aeaf9be9c 100644 --- a/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.cpp +++ b/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.cpp @@ -178,11 +178,11 @@ namespace fxaa { } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.hpp b/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.hpp index d374de459d..02ec1d7603 100644 --- a/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.hpp +++ b/source/Plugins/PostEffects/FxaaPostEffect/FxaaPostEffect.hpp @@ -26,7 +26,7 @@ namespace fxaa , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); ~PostEffect()override; - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.cpp b/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.cpp index 9bab904d11..290435688f 100644 --- a/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.cpp +++ b/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.cpp @@ -119,11 +119,11 @@ namespace grayscale getRenderSystem()->getRenderDevice().uboPool->putBuffer( m_configUbo ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.hpp b/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.hpp index f70cf57722..7bcf3a8d64 100644 --- a/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.hpp +++ b/source/Plugins/PostEffects/GrayScalePostEffect/GrayScalePostEffect.hpp @@ -23,7 +23,7 @@ namespace grayscale , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); ~PostEffect()override; - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.cpp b/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.cpp index a44caddecc..65fef17cf0 100644 --- a/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.cpp +++ b/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.cpp @@ -46,11 +46,11 @@ namespace light_streaks setParameters( params ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.hpp b/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.hpp index 3a807795e6..c05257141d 100644 --- a/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.hpp +++ b/source/Plugins/PostEffects/LightStreaksPostEffect/LightStreaksPostEffect.hpp @@ -19,7 +19,7 @@ namespace light_streaks PostEffect( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.cpp b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.cpp index 8a839e1aee..ab6ef04e38 100644 --- a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.cpp +++ b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.cpp @@ -138,11 +138,11 @@ namespace motion_blur getRenderSystem()->getRenderDevice().uboPool->putBuffer( m_ubo ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget, renderSystem, params ); + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget, renderSystem, params ); } void PostEffect::accept( castor3d::PipelineVisitorBase & visitor ) diff --git a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.hpp b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.hpp index 78b743faf7..18ae385973 100644 --- a/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.hpp +++ b/source/Plugins/PostEffects/LinearMotionBlurPostEffect/LinearMotionBlurPostEffect.hpp @@ -25,7 +25,7 @@ namespace motion_blur , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & parameters ); ~PostEffect()override; - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ); /** diff --git a/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.cpp b/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.cpp index 2359f0ca9c..72b69ecb29 100644 --- a/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.cpp +++ b/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.cpp @@ -35,11 +35,11 @@ namespace PbrBloom setParameters( params ); } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & params ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , params ); } diff --git a/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.hpp b/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.hpp index 880f9b68d2..999a108c6c 100644 --- a/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.hpp +++ b/source/Plugins/PostEffects/PbrBloomPostEffect/PbrBloomPostEffect.hpp @@ -23,7 +23,7 @@ namespace PbrBloom PostEffect( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & param ); - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & param ); /** diff --git a/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.cpp b/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.cpp index a191c54e30..8ec831b044 100644 --- a/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.cpp +++ b/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.cpp @@ -205,11 +205,11 @@ namespace smaa } } - castor3d::PostEffectSPtr PostEffect::create( castor3d::RenderTarget & renderTarget + castor3d::PostEffectUPtr PostEffect::create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & parameters ) { - return std::make_shared< PostEffect >( renderTarget + return castor::makeUniqueDerived< castor3d::PostEffect, PostEffect >( renderTarget , renderSystem , parameters ); } diff --git a/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.hpp b/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.hpp index 81b0e9f0a6..8dcf653e68 100644 --- a/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.hpp +++ b/source/Plugins/PostEffects/SmaaPostEffect/SmaaPostEffect.hpp @@ -25,7 +25,7 @@ namespace smaa PostEffect( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & parameters ); - static castor3d::PostEffectSPtr create( castor3d::RenderTarget & renderTarget + static castor3d::PostEffectUPtr create( castor3d::RenderTarget & renderTarget , castor3d::RenderSystem & renderSystem , castor3d::Parameters const & parameters ); /** From 2ae44244eda2b5a8edb4b94927d229d55360893a Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 19:08:58 +0200 Subject: [PATCH 30/35] Castor3D: Replaced use of shared_ptr with unique_ptr for ToneMapping. --- include/Core/Castor3D/Render/RenderTarget.hpp | 6 +++--- .../Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp | 5 +---- source/Core/Castor3D/Render/RenderTarget.cpp | 2 +- source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp | 2 ++ 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/Core/Castor3D/Render/RenderTarget.hpp b/include/Core/Castor3D/Render/RenderTarget.hpp index d612372f72..e1e5ec2d32 100644 --- a/include/Core/Castor3D/Render/RenderTarget.hpp +++ b/include/Core/Castor3D/Render/RenderTarget.hpp @@ -321,10 +321,10 @@ namespace castor3d return m_srgbPostEffects; } - ToneMappingSPtr getToneMapping()const + ToneMappingRPtr getToneMapping()const { CU_Require( m_toneMapping ); - return m_toneMapping; + return m_toneMapping.get(); } crg::SemaphoreWaitArray const & getSemaphore()const @@ -479,7 +479,7 @@ namespace castor3d Parameters m_techniqueParameters; PostEffectArray m_hdrPostEffects; castor::String m_toneMappingName{ cuT( "linear" ) }; - ToneMappingSPtr m_toneMapping; + ToneMappingUPtr m_toneMapping; PostEffectArray m_srgbPostEffects; FramePassTimerUPtr m_overlaysTimer; FramePassTimerUPtr m_cpuUpdateTimer; diff --git a/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp b/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp index 3c50ba947a..026f82ef07 100644 --- a/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp +++ b/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp @@ -46,9 +46,6 @@ namespace castor3d */ class ToneMapping; /** - \author Sylvain DOREMUS - \version 0.11.0 - \date 16/05/2018 \~english \brief Post effect visitor base class. \~french @@ -56,7 +53,7 @@ namespace castor3d */ class ToneMappingVisitor; - CU_DeclareSmartPtr( ToneMapping ); + CU_DeclareCUSmartPtr( castor3d, ToneMapping, C3D_API ); /** *\~english *\brief diff --git a/source/Core/Castor3D/Render/RenderTarget.cpp b/source/Core/Castor3D/Render/RenderTarget.cpp index 8b1f2647b2..8e9ae73b2e 100644 --- a/source/Core/Castor3D/Render/RenderTarget.cpp +++ b/source/Core/Castor3D/Render/RenderTarget.cpp @@ -881,7 +881,7 @@ namespace castor3d { m_hdrLastPass = previousPass; stepProgressBar( progress, "Creating tone mapping pass" ); - m_toneMapping = std::make_shared< ToneMapping >( *getEngine() + m_toneMapping = castor::makeUnique< ToneMapping >( *getEngine() , device , m_size , m_graph diff --git a/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp b/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp index 1b239ed118..cb54f3df95 100644 --- a/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp +++ b/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp @@ -18,6 +18,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, ToneMapping ) + namespace castor3d { namespace rendtonmap From ea7b25239d3b4aa83ffadd56521e8ee7cb0b1ef4 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 23:24:45 +0200 Subject: [PATCH 31/35] Castor3D: Replaced use of shared_ptr with unique_ptr for remaining caches. --- demos/CastorDvpTD/EnemySpawner.cpp | 2 +- demos/CastorDvpTD/Game.cpp | 36 ++--- demos/CastorDvpTD/Game.hpp | 28 ++-- demos/CastorDvpTD/RenderPanel.cpp | 2 +- include/Core/Castor3D/Cache/CacheModule.hpp | 64 +-------- include/Core/Castor3D/Cache/CacheView.hpp | 4 +- include/Core/Castor3D/Cache/CacheView.inl | 16 +-- include/Core/Castor3D/Cache/MaterialCache.hpp | 4 +- include/Core/Castor3D/Engine.hpp | 6 +- .../Core/Castor3D/Gui/Controls/CtrlButton.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlControl.hpp | 8 +- include/Core/Castor3D/Gui/GuiModule.hpp | 4 +- .../Core/Castor3D/Gui/Theme/StyleButton.hpp | 60 ++++---- .../Core/Castor3D/Gui/Theme/StyleControl.hpp | 18 +-- include/Core/Castor3D/Gui/Theme/StyleEdit.hpp | 14 +- .../Core/Castor3D/Gui/Theme/StyleFrame.hpp | 4 +- .../Core/Castor3D/Gui/Theme/StyleProgress.hpp | 14 +- .../Core/Castor3D/Gui/Theme/StyleStatic.hpp | 6 +- .../Core/Castor3D/Gui/Theme/StylesHolder.hpp | 6 +- include/Core/Castor3D/Material/Material.hpp | 6 + .../Castor3D/Material/MaterialImporter.hpp | 14 +- .../Core/Castor3D/Material/MaterialModule.hpp | 21 ++- .../Castor3D/Material/Texture/Sampler.hpp | 2 +- .../Material/Texture/TextureModule.hpp | 13 +- .../Material/Texture/TextureSourceInfo.hpp | 12 +- .../Castor3D/Material/Texture/TextureUnit.hpp | 13 +- .../Submesh/Component/BaseDataComponent.hpp | 2 +- .../Mesh/Submesh/Component/IndexMapping.hpp | 2 +- .../Component/InstantiationComponent.hpp | 10 +- .../Submesh/Component/MeshletComponent.hpp | 2 +- .../Mesh/Submesh/Component/MorphComponent.hpp | 2 +- .../Submesh/Component/PassMasksComponent.hpp | 2 +- .../Mesh/Submesh/Component/SkinComponent.hpp | 2 +- .../Submesh/Component/SubmeshComponent.hpp | 2 +- .../Castor3D/Model/Mesh/Submesh/Submesh.hpp | 10 +- .../Castor3D/Model/Mesh/Submesh/Submesh.inl | 4 +- .../Model/Skeleton/SkeletonModule.hpp | 4 +- .../Castor3D/Overlay/BorderPanelOverlay.hpp | 6 +- include/Core/Castor3D/Overlay/FontTexture.hpp | 8 +- include/Core/Castor3D/Overlay/Overlay.hpp | 4 +- .../Core/Castor3D/Overlay/OverlayCategory.hpp | 6 +- .../Render/Node/SubmeshRenderNode.hpp | 2 +- .../Render/PBR/EnvironmentPrefilter.hpp | 11 +- .../Core/Castor3D/Render/PBR/IblTextures.hpp | 7 +- .../Castor3D/Render/PBR/RadianceComputer.hpp | 2 +- .../Castor3D/Render/Passes/RenderQuad.hpp | 4 +- .../Castor3D/Render/ToTexture/RenderCube.hpp | 4 +- .../Castor3D/Scene/Background/Background.hpp | 7 +- include/Core/Castor3D/Scene/BillboardList.hpp | 6 +- include/Core/Castor3D/Scene/Geometry.hpp | 6 +- .../Scene/ParticleSystem/ParticleSystem.hpp | 6 +- include/Core/Castor3D/Scene/Scene.hpp | 2 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 13 +- include/Core/Castor3D/Scene/SceneModule.hpp | 6 +- .../Core/CastorUtils/Design/DesignModule.hpp | 26 ++-- include/Core/CastorUtils/Design/Resource.hpp | 4 +- include/Core/CastorUtils/Design/Resource.inl | 8 ++ source/Core/Castor3D/Cache/GeometryCache.cpp | 2 +- source/Core/Castor3D/Cache/MaterialCache.cpp | 10 +- source/Core/Castor3D/Cache/OverlayCache.cpp | 2 +- source/Core/Castor3D/Cache/TextureCache.cpp | 22 ++- source/Core/Castor3D/Engine.cpp | 24 ++-- .../Castor3D/Gui/Controls/CtrlControl.cpp | 4 +- source/Core/Castor3D/Gui/GuiModule.cpp | 24 ++-- source/Core/Castor3D/Gui/Gui_Parsers.cpp | 38 ++--- source/Core/Castor3D/Material/Material.cpp | 16 +++ .../Castor3D/Material/MaterialImporter.cpp | 22 +-- .../Castor3D/Material/Texture/Sampler.cpp | 10 +- .../Material/Texture/TextureLayout.cpp | 15 +- .../Material/Texture/TextureModule.cpp | 2 +- .../Material/Texture/TextureSourceInfo.cpp | 10 +- .../Castor3D/Material/Texture/TextureUnit.cpp | 6 +- .../Component/InstantiationComponent.cpp | 10 +- .../Submesh/Component/PassMasksComponent.cpp | 2 +- .../Castor3D/Model/Mesh/Submesh/Submesh.cpp | 6 +- .../Castor3D/Overlay/BorderPanelOverlay.cpp | 2 +- source/Core/Castor3D/Overlay/FontTexture.cpp | 18 +-- .../Core/Castor3D/Overlay/OverlayCategory.cpp | 2 +- source/Core/Castor3D/Overlay/TextOverlay.cpp | 2 +- .../Render/Node/SubmeshRenderNode.cpp | 2 +- .../Render/Opaque/Lighting/LightsPipeline.cpp | 4 +- .../Render/Overlays/OverlayRenderer.cpp | 4 +- .../Render/PBR/EnvironmentPrefilter.cpp | 10 +- .../Core/Castor3D/Render/PBR/IblTextures.cpp | 8 +- .../Castor3D/Render/PBR/RadianceComputer.cpp | 8 +- source/Core/Castor3D/Render/Ray.cpp | 2 +- source/Core/Castor3D/Render/RenderTarget.cpp | 4 +- .../Render/ShadowMap/ShadowMapDirectional.cpp | 20 +-- source/Core/Castor3D/Render/Texture.cpp | 4 +- .../Castor3D/Render/ToTexture/RenderCube.cpp | 14 +- .../Castor3D/Scene/Background/Background.cpp | 6 +- source/Core/Castor3D/Scene/BillboardList.cpp | 2 +- source/Core/Castor3D/Scene/Geometry.cpp | 20 ++- .../Scene/ParticleSystem/ParticleSystem.cpp | 4 +- source/Core/Castor3D/Scene/Scene.cpp | 25 ++-- .../Scene/SceneFileParser_Parsers.cpp | 130 +++++++++--------- source/Core/Castor3D/Scene/SceneImporter.cpp | 4 +- .../Core/CastorUtils/Graphics/ImageCache.cpp | 6 +- source/Core/SceneExporter/CscnExporter.cpp | 18 +-- .../SceneExporter/Text/TextCtrlButton.cpp | 2 +- .../Core/SceneExporter/Text/TextGeometry.cpp | 2 +- source/Core/SceneExporter/Text/TextScene.cpp | 4 +- .../SceneExporter/Text/TextTextureUnit.cpp | 4 +- .../DiamondSquare_Parsers.cpp | 2 +- .../FFTOceanRendering/OceanFFT_Parsers.hpp | 2 +- .../Generic/OceanRendering/Ocean_Parsers.hpp | 2 +- .../Generic/WaterRendering/Water_Parsers.hpp | 2 +- .../AssimpImporter/AssimpMaterialImporter.cpp | 14 +- .../AssimpImporter/AssimpMeshImporter.cpp | 8 +- test/Castor3D/BinaryExportTest.cpp | 18 ++- test/Castor3D/Castor3DTestCommon.cpp | 4 +- tools/GuiCommon/GuiCommonPrerequisites.cpp | 6 +- tools/GuiCommon/GuiCommonPrerequisites.hpp | 2 +- .../Properties/AdditionalProperties.inl | 8 +- .../TreeItems/BillboardTreeItemProperty.cpp | 2 +- .../TreeItems/MaterialTreeItemProperty.hpp | 2 +- .../TreeItems/OverlayTreeItemProperty.cpp | 6 +- .../RenderTargetTreeItemProperty.cpp | 4 +- .../TreeItems/StyleTreeItemProperty.cpp | 28 ++-- .../TreeItems/SubmeshTreeItemProperty.cpp | 2 +- .../Properties/TreeItems/TreeItemProperty.cpp | 10 +- .../Properties/TreeItems/TreeItemProperty.hpp | 4 +- tools/GuiCommon/System/CubeBoxManager.cpp | 40 +++--- tools/GuiCommon/System/MaterialsList.cpp | 2 +- tools/GuiCommon/System/MaterialsList.hpp | 2 +- tools/GuiCommon/System/SceneObjectsList.cpp | 5 +- 126 files changed, 619 insertions(+), 671 deletions(-) diff --git a/demos/CastorDvpTD/EnemySpawner.cpp b/demos/CastorDvpTD/EnemySpawner.cpp index 07d32db0b7..12eddefd86 100644 --- a/demos/CastorDvpTD/EnemySpawner.cpp +++ b/demos/CastorDvpTD/EnemySpawner.cpp @@ -67,7 +67,7 @@ namespace castortd , *node , game.getEnemyMesh() ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { geometry->setMaterial( *submesh, game.getEnemyMaterial() ); } diff --git a/demos/CastorDvpTD/Game.cpp b/demos/CastorDvpTD/Game.cpp index 6ea9d0ddc7..446f9b7bb1 100644 --- a/demos/CastorDvpTD/Game.cpp +++ b/demos/CastorDvpTD/Game.cpp @@ -78,19 +78,19 @@ namespace castortd , Tower::Category::Kind kind , castor3d::CacheViewT< castor3d::MaterialCache, castor3d::EventType::ePreRender > const & materials ) { - if ( auto mesh = geometry.getMesh().lock() ) + if ( auto mesh = geometry.getMesh() ) { switch ( kind ) { case Tower::Category::Kind::eLongRange: - geometry.setMaterial( *mesh->getSubmesh( 0u ), materials.find( cuT( "splash_accessories" ) ).lock().get() ); - geometry.setMaterial( *mesh->getSubmesh( 1u ), materials.find( cuT( "splash_accessories" ) ).lock().get() ); - geometry.setMaterial( *mesh->getSubmesh( 2u ), materials.find( cuT( "splash_body" ) ).lock().get() ); + geometry.setMaterial( *mesh->getSubmesh( 0u ), materials.find( cuT( "splash_accessories" ) ) ); + geometry.setMaterial( *mesh->getSubmesh( 1u ), materials.find( cuT( "splash_accessories" ) ) ); + geometry.setMaterial( *mesh->getSubmesh( 2u ), materials.find( cuT( "splash_body" ) ) ); break; case Tower::Category::Kind::eShortRange: - geometry.setMaterial( *mesh->getSubmesh( 0u ), materials.find( cuT( "short_range_body" ) ).lock().get() ); - geometry.setMaterial( *mesh->getSubmesh( 1u ), materials.find( cuT( "short_range_accessories" ) ).lock().get() ); + geometry.setMaterial( *mesh->getSubmesh( 0u ), materials.find( cuT( "short_range_body" ) ) ); + geometry.setMaterial( *mesh->getSubmesh( 1u ), materials.find( cuT( "short_range_accessories" ) ) ); break; } } @@ -133,9 +133,9 @@ namespace castortd m_updateTimer = castor::makeUnique< castor3d::FramePassTimer >( m_scene.getEngine()->getRenderSystem()->getRenderDevice().makeContext() , "CastorDvpTD/Update" ); m_scene.getEngine()->registerTimer( "CastorDvpTD/Update", *m_updateTimer ); - m_cellDimensions[0] = m_mapCubeMesh.lock()->getBoundingBox().getMax()[0] - m_mapCubeMesh.lock()->getBoundingBox().getMin()[0]; - m_cellDimensions[1] = m_mapCubeMesh.lock()->getBoundingBox().getMax()[1] - m_mapCubeMesh.lock()->getBoundingBox().getMin()[1]; - m_cellDimensions[2] = m_mapCubeMesh.lock()->getBoundingBox().getMax()[2] - m_mapCubeMesh.lock()->getBoundingBox().getMin()[2]; + m_cellDimensions[0] = m_mapCubeMesh->getBoundingBox().getMax()[0] - m_mapCubeMesh->getBoundingBox().getMin()[0]; + m_cellDimensions[1] = m_mapCubeMesh->getBoundingBox().getMax()[1] - m_mapCubeMesh->getBoundingBox().getMin()[1]; + m_cellDimensions[2] = m_mapCubeMesh->getBoundingBox().getMax()[2] - m_mapCubeMesh->getBoundingBox().getMin()[2]; m_hud.initialise(); reset(); @@ -345,9 +345,9 @@ namespace castortd node->setPosition( origin ); node->attachTo( *m_mapNode ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { - geometry->setMaterial( *submesh, m_bulletMaterial.lock().get() ); + geometry->setMaterial( *submesh, m_bulletMaterial ); } m_scene.addGeometry( std::move( geometry ) ); @@ -378,9 +378,9 @@ namespace castortd node->setPosition( origin ); node->attachTo( *m_mapNode ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { - geometry->setMaterial( *submesh, m_boulderMaterial.lock().get() ); + geometry->setMaterial( *submesh, m_boulderMaterial ); } m_scene.addGeometry( std::move( geometry ) ); @@ -643,9 +643,9 @@ namespace castortd node->setPosition( convert( castor::Point2i{ cell.m_x, cell.m_y } ) + castor::Point3f{ 0, m_cellDimensions[1] / 2, 0 } ); node->attachTo( *m_mapNode ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { - geometry->setMaterial( *submesh, m_mapCubeMaterial.lock().get() ); + geometry->setMaterial( *submesh, m_mapCubeMaterial ); } m_lastMapCube = geometry.get(); @@ -661,7 +661,7 @@ namespace castortd castor3d::MeshResPtr Game::doSelectMesh( Tower::Category & category ) { - castor3d::MeshResPtr result; + castor3d::MeshResPtr result{}; switch ( category.getKind() ) { @@ -697,9 +697,9 @@ namespace castortd animGroup->addObject( *node, tower->getName() ); } - if ( tower->getMesh().lock() ) + if ( tower->getMesh() ) { - auto tmesh = tower->getMesh().lock(); + auto tmesh = tower->getMesh(); if ( tmesh->hasAnimation() ) { diff --git a/demos/CastorDvpTD/Game.hpp b/demos/CastorDvpTD/Game.hpp index 923343d58d..47f65abff2 100644 --- a/demos/CastorDvpTD/Game.hpp +++ b/demos/CastorDvpTD/Game.hpp @@ -104,9 +104,9 @@ namespace castortd return m_mapNode; } - castor3d::MaterialRPtr getEnemyMaterial()const + castor3d::MaterialObs getEnemyMaterial()const { - return m_enemyCubeMaterial.lock().get(); + return m_enemyCubeMaterial; } castor3d::MeshResPtr getEnemyMesh()const @@ -157,18 +157,18 @@ namespace castortd Hud m_hud; Path m_path; castor::Point3f m_cellDimensions; - castor3d::SceneNodeRPtr m_mapNode; - castor3d::SceneNodeRPtr m_targetNode; - castor3d::MeshResPtr m_mapCubeMesh; - castor3d::MaterialResPtr m_mapCubeMaterial; - castor3d::MeshResPtr m_shortRangeTowerMesh; - castor3d::MeshResPtr m_longRangeTowerMesh; - castor3d::MeshResPtr m_enemyCubeMesh; - castor3d::MaterialResPtr m_enemyCubeMaterial; - castor3d::MeshResPtr m_bulletMesh; - castor3d::MaterialResPtr m_bulletMaterial; - castor3d::MeshResPtr m_boulderMesh; - castor3d::MaterialResPtr m_boulderMaterial; + castor3d::SceneNodeRPtr m_mapNode{}; + castor3d::SceneNodeRPtr m_targetNode{}; + castor3d::MeshResPtr m_mapCubeMesh{}; + castor3d::MaterialObs m_mapCubeMaterial{}; + castor3d::MeshResPtr m_shortRangeTowerMesh{}; + castor3d::MeshResPtr m_longRangeTowerMesh{}; + castor3d::MeshResPtr m_enemyCubeMesh{}; + castor3d::MaterialObs m_enemyCubeMaterial{}; + castor3d::MeshResPtr m_bulletMesh{}; + castor3d::MaterialObs m_bulletMaterial{}; + castor3d::MeshResPtr m_boulderMesh{}; + castor3d::MaterialObs m_boulderMaterial{}; castor3d::FramePassTimerUPtr m_updateTimer; // Varying data Clock::time_point m_saved; diff --git a/demos/CastorDvpTD/RenderPanel.cpp b/demos/CastorDvpTD/RenderPanel.cpp index e4ac13d992..bc270b3a5f 100644 --- a/demos/CastorDvpTD/RenderPanel.cpp +++ b/demos/CastorDvpTD/RenderPanel.cpp @@ -175,7 +175,7 @@ namespace castortd { castor::Point3f position = node->getPosition(); - if ( auto mesh = geometry->getMesh().lock() ) + if ( auto mesh = geometry->getMesh() ) { auto height = mesh->getBoundingBox().getMax()[1] - mesh->getBoundingBox().getMin()[1]; m_marker->setPosition( castor::Point3f{ position[0], height + 1, position[2] } ); diff --git a/include/Core/Castor3D/Cache/CacheModule.hpp b/include/Core/Castor3D/Cache/CacheModule.hpp index 3508919d97..78dbd07d58 100644 --- a/include/Core/Castor3D/Cache/CacheModule.hpp +++ b/include/Core/Castor3D/Cache/CacheModule.hpp @@ -78,66 +78,6 @@ namespace castor3d return element == nullptr; } }; - - template< typename ResT, typename KeyT > - struct CUPtrCacheTraitsBaseT - { - using ElementT = ResT; - using ElementKeyT = KeyT; - using ElementPtrT = castor::UniquePtr< ElementT >; - using ElementObsT = ElementT *; - using ElementContT = std::unordered_map< ElementKeyT, ElementPtrT >; - using ElementCacheT = castor::ResourceCacheBaseT< ElementT, ElementKeyT, PtrCacheTraitsT< ElementT, ElementKeyT > >; - - using ElementInitialiserT = std::function< void( ElementT & ) >; - using ElementCleanerT = std::function< void( ElementT & ) >; - using ElementMergerT = std::function< void( ElementCacheT const & - , ElementContT & - , ElementPtrT ) >; - - template< typename ... ParametersT > - static ElementPtrT makeElement( ElementCacheT const & cache - , ElementKeyT const & key - , ParametersT && ... params ) - { - return castor::makeUnique< ElementT >( key - , std::forward< ParametersT >( params )... ); - } - - static ElementObsT makeElementObs( ElementPtrT const & element ) - { - return element.get(); - } - - static bool areElementsEqual( ElementObsT const & lhs - , ElementObsT const & rhs ) - { - return lhs == rhs; - } - - static bool areElementsEqual( ElementObsT const & lhs - , ElementPtrT const & rhs ) - { - return lhs == rhs.get(); - } - - static bool areElementsEqual( ElementPtrT const & lhs - , ElementObsT const & rhs ) - { - return lhs.get() == rhs; - } - - static bool areElementsEqual( ElementPtrT const & lhs - , ElementPtrT const & rhs ) - { - return lhs == rhs; - } - - static bool isElementObsNull( ElementObsT const & element ) - { - return element == nullptr; - } - }; /** *\~english * View on a resource cache. @@ -382,7 +322,7 @@ namespace castor3d {\ return m_##memberName##CacheView->add( key, element, initialise );\ }\ - className##Cache::ElementObsT remove##className( className##Cache::ElementKeyT const & key )\ + className##Cache::ElementPtrT remove##className( className##Cache::ElementKeyT const & key )\ {\ return m_##memberName##CacheView->remove( key );\ }\ @@ -424,7 +364,7 @@ namespace castor3d {\ return m_##memberName##CacheView->add( key, element, initialise );\ }\ - castor::className##Cache::ElementObsT remove##className( castor::className##Cache::ElementKeyT const & key )\ + castor::className##Cache::ElementPtrT remove##className( castor::className##Cache::ElementKeyT const & key )\ {\ return m_##memberName##CacheView->remove( key );\ }\ diff --git a/include/Core/Castor3D/Cache/CacheView.hpp b/include/Core/Castor3D/Cache/CacheView.hpp index 3a8d6c436c..7111dac2b7 100644 --- a/include/Core/Castor3D/Cache/CacheView.hpp +++ b/include/Core/Castor3D/Cache/CacheView.hpp @@ -175,7 +175,7 @@ namespace castor3d *\brief Retire un élément à partir d'un nom. *\param[in] name Le nom d'élément. */ - inline ElementObsT tryRemove( ElementKeyT const & name ); + inline ElementPtrT tryRemove( ElementKeyT const & name ); /** *\~english *\brief Removes an object, given a name. @@ -184,7 +184,7 @@ namespace castor3d *\brief Retire un objet à partir d'un nom. *\param[in] name Le nom d'objet. */ - inline ElementObsT remove( ElementKeyT const & name ); + inline ElementPtrT remove( ElementKeyT const & name ); /** *\~english *\name Iteration. diff --git a/include/Core/Castor3D/Cache/CacheView.inl b/include/Core/Castor3D/Cache/CacheView.inl index 6fc2fc4ff7..4b7082c2a3 100644 --- a/include/Core/Castor3D/Cache/CacheView.inl +++ b/include/Core/Castor3D/Cache/CacheView.inl @@ -49,11 +49,11 @@ namespace castor3d , created , std::forward< ParametersT >( params )... ); - if ( result.lock() == created.lock() ) + if ( ElementCacheTraitsT::areElementsEqual( result, created ) ) { if ( m_initialise && initialise ) { - m_initialise( *result.lock() ); + m_initialise( *result ); } auto elemsLock( castor::makeUniqueLock( m_elementsMutex ) ); @@ -89,7 +89,7 @@ namespace castor3d { if ( initialise && m_initialise ) { - m_initialise( *result.lock() ); + m_initialise( *result ); } auto elemsLock( castor::makeUniqueLock( m_elementsMutex ) ); @@ -113,7 +113,7 @@ namespace castor3d { if ( initialise && m_initialise ) { - m_initialise( *result.lock() ); + m_initialise( *result ); } auto elemsLock( castor::makeUniqueLock( m_elementsMutex ) ); @@ -153,7 +153,7 @@ namespace castor3d { auto result = tryFind( name ); - if ( !result.lock() ) + if ( ElementCacheTraitsT::isElementObsNull( result ) ) { m_cache.reportUnknown( name ); } @@ -162,7 +162,7 @@ namespace castor3d } template< typename CacheT, EventType EventT > - inline typename CacheViewT< CacheT, EventT >::ElementObsT CacheViewT< CacheT, EventT >::tryRemove( ElementKeyT const & name ) + inline typename CacheViewT< CacheT, EventT >::ElementPtrT CacheViewT< CacheT, EventT >::tryRemove( ElementKeyT const & name ) { auto elemsLock( castor::makeUniqueLock( m_elementsMutex ) ); auto lock( castor::makeUniqueLock( m_cache ) ); @@ -179,11 +179,11 @@ namespace castor3d } template< typename CacheT, EventType EventT > - inline typename CacheViewT< CacheT, EventT >::ElementObsT CacheViewT< CacheT, EventT >::remove( ElementKeyT const & name ) + inline typename CacheViewT< CacheT, EventT >::ElementPtrT CacheViewT< CacheT, EventT >::remove( ElementKeyT const & name ) { auto result = tryRemove( name ); - if ( ElementCacheTraitsT::isElementObsNull( result ) ) + if ( !result ) { m_cache.reportUnknown( name ); } diff --git a/include/Core/Castor3D/Cache/MaterialCache.hpp b/include/Core/Castor3D/Cache/MaterialCache.hpp index 48e22975b4..e3c7d47486 100644 --- a/include/Core/Castor3D/Cache/MaterialCache.hpp +++ b/include/Core/Castor3D/Cache/MaterialCache.hpp @@ -225,7 +225,7 @@ namespace castor C3D_API void unregisterTexture( castor3d::AnimatedTexture const & texture ); C3D_API uint32_t getCurrentPassTypeCount()const; - castor3d::MaterialRPtr getDefaultMaterial()const + castor3d::MaterialObs getDefaultMaterial()const { return m_defaultMaterial; } @@ -314,7 +314,7 @@ namespace castor private: castor3d::Engine & m_engine; - castor3d::MaterialRPtr m_defaultMaterial{}; + castor3d::MaterialObs m_defaultMaterial{}; castor3d::PassBufferUPtr m_passBuffer; castor3d::SssProfileBufferUPtr m_sssProfileBuffer; castor3d::TextureConfigurationBufferUPtr m_texConfigBuffer; diff --git a/include/Core/Castor3D/Engine.hpp b/include/Core/Castor3D/Engine.hpp index 57f954c6ed..65b8511d0e 100644 --- a/include/Core/Castor3D/Engine.hpp +++ b/include/Core/Castor3D/Engine.hpp @@ -679,7 +679,7 @@ namespace castor3d C3D_API PostEffectFactory const & getPostEffectFactory()const; C3D_API PostEffectFactory & getPostEffectFactory(); C3D_API uint32_t getWantedFps()const; - C3D_API castor3d::MaterialRPtr getDefaultMaterial()const; + C3D_API castor3d::MaterialObs getDefaultMaterial()const; C3D_API bool hasMeshShaders()const; C3D_API uint32_t getMaxPassTypeCount()const; C3D_API RenderDevice * getRenderDevice()const; @@ -1070,8 +1070,8 @@ namespace castor3d Texture m_brdf; bool m_cleaned{ true }; bool m_threaded{ false }; - SamplerResPtr m_defaultSampler; - SamplerResPtr m_lightsSampler; + SamplerObs m_defaultSampler{}; + SamplerObs m_lightsSampler{}; castor::ImageLoader m_imageLoader; castor::ImageWriter m_imageWriter; DECLARE_CACHE_MEMBER_MIN( shader, ShaderProgram ); diff --git a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp index cc407e4e3d..8a29cd685d 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp @@ -163,7 +163,7 @@ namespace castor3d *\param[in] offset The colour offset. *\return The created material. */ - MaterialRPtr doCreateMaterial( MaterialRPtr material + MaterialObs doCreateMaterial( MaterialObs material , float offset ); private: diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index b3501a8b75..01f1d49a68 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -308,7 +308,7 @@ namespace castor3d /** Sets the background material. *\param[in] value The new value. */ - C3D_API void setBackgroundMaterial( MaterialRPtr value ); + C3D_API void setBackgroundMaterial( MaterialObs value ); /** Sets the background size. *\param[in] value The new value. @@ -323,7 +323,7 @@ namespace castor3d /** Sets the background borders material. *\param[in] value The new value. */ - C3D_API void setBackgroundBorderMaterial( MaterialRPtr value ); + C3D_API void setBackgroundBorderMaterial( MaterialObs value ); /** Creates the control's overlays. *\param[in] ctrlManager The controls manager. @@ -596,9 +596,9 @@ namespace castor3d //! The parent control, if any ControlRPtr m_parent{}; //! The background material - MaterialRPtr m_backgroundMaterial{}; + MaterialObs m_backgroundMaterial{}; //! The foreground material - MaterialRPtr m_foregroundMaterial{}; + MaterialObs m_foregroundMaterial{}; //! The control flgas. ControlFlagType m_flags{}; diff --git a/include/Core/Castor3D/Gui/GuiModule.hpp b/include/Core/Castor3D/Gui/GuiModule.hpp index b06e82ad2b..9def38ff85 100644 --- a/include/Core/Castor3D/Gui/GuiModule.hpp +++ b/include/Core/Castor3D/Gui/GuiModule.hpp @@ -486,7 +486,7 @@ namespace castor3d *\param[in] colour The material colour. *\return The created material. */ - MaterialRPtr createMaterial( Engine & engine, castor::String const & name, castor::HdrRgbColour const & colour ); + MaterialObs createMaterial( Engine & engine, castor::String const & name, castor::HdrRgbColour const & colour ); /** Creates a texture material. *\param[in] engine The engine. @@ -494,7 +494,7 @@ namespace castor3d *\param[in] texture The material texture. *\return The created material. */ - MaterialRPtr createMaterial( Engine & engine, castor::String const & name, TextureLayoutUPtr texture ); + MaterialObs createMaterial( Engine & engine, castor::String const & name, TextureLayoutUPtr texture ); } #endif diff --git a/include/Core/Castor3D/Gui/Theme/StyleButton.hpp b/include/Core/Castor3D/Gui/Theme/StyleButton.hpp index 9709d70651..41e557ba81 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleButton.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleButton.hpp @@ -44,52 +44,52 @@ namespace castor3d { } - void setTextMaterial( MaterialRPtr material ) + void setTextMaterial( MaterialObs material ) { m_textMaterial = material; } - void setHighlightedBackgroundMaterial( MaterialRPtr material ) + void setHighlightedBackgroundMaterial( MaterialObs material ) { m_highlightedBackgroundMaterial = material; } - void setHighlightedForegroundMaterial( MaterialRPtr material ) + void setHighlightedForegroundMaterial( MaterialObs material ) { m_highlightedForegroundMaterial = material; } - void setHighlightedTextMaterial( MaterialRPtr material ) + void setHighlightedTextMaterial( MaterialObs material ) { m_highlightedTextMaterial = material; } - void setPushedBackgroundMaterial( MaterialRPtr material ) + void setPushedBackgroundMaterial( MaterialObs material ) { m_pushedBackgroundMaterial = material; } - void setPushedForegroundMaterial( MaterialRPtr material ) + void setPushedForegroundMaterial( MaterialObs material ) { m_pushedForegroundMaterial = material; } - void setPushedTextMaterial( MaterialRPtr material ) + void setPushedTextMaterial( MaterialObs material ) { m_pushedTextMaterial = material; } - void setDisabledBackgroundMaterial( MaterialRPtr material ) + void setDisabledBackgroundMaterial( MaterialObs material ) { m_disabledBackgroundMaterial = material; } - void setDisabledForegroundMaterial( MaterialRPtr material ) + void setDisabledForegroundMaterial( MaterialObs material ) { m_disabledForegroundMaterial = material; } - void setDisabledTextMaterial( MaterialRPtr material ) + void setDisabledTextMaterial( MaterialObs material ) { m_disabledTextMaterial = material; } @@ -99,52 +99,52 @@ namespace castor3d m_fontName = value; } - MaterialRPtr getHighlightedBackgroundMaterial()const + MaterialObs getHighlightedBackgroundMaterial()const { return m_highlightedBackgroundMaterial; } - MaterialRPtr getHighlightedForegroundMaterial()const + MaterialObs getHighlightedForegroundMaterial()const { return m_highlightedForegroundMaterial; } - MaterialRPtr getHighlightedTextMaterial()const + MaterialObs getHighlightedTextMaterial()const { return m_highlightedTextMaterial; } - MaterialRPtr getPushedBackgroundMaterial()const + MaterialObs getPushedBackgroundMaterial()const { return m_pushedBackgroundMaterial; } - MaterialRPtr getPushedForegroundMaterial()const + MaterialObs getPushedForegroundMaterial()const { return m_pushedForegroundMaterial; } - MaterialRPtr getPushedTextMaterial()const + MaterialObs getPushedTextMaterial()const { return m_pushedTextMaterial; } - MaterialRPtr getDisabledBackgroundMaterial()const + MaterialObs getDisabledBackgroundMaterial()const { return m_disabledBackgroundMaterial; } - MaterialRPtr getDisabledForegroundMaterial()const + MaterialObs getDisabledForegroundMaterial()const { return m_disabledForegroundMaterial; } - MaterialRPtr getDisabledTextMaterial()const + MaterialObs getDisabledTextMaterial()const { return m_disabledTextMaterial; } - MaterialRPtr getTextMaterial()const + MaterialObs getTextMaterial()const { return m_textMaterial; } @@ -166,16 +166,16 @@ namespace castor3d } private: - MaterialRPtr m_textMaterial{}; - MaterialRPtr m_highlightedTextMaterial{}; - MaterialRPtr m_highlightedBackgroundMaterial{}; - MaterialRPtr m_highlightedForegroundMaterial{}; - MaterialRPtr m_pushedTextMaterial{}; - MaterialRPtr m_pushedBackgroundMaterial{}; - MaterialRPtr m_pushedForegroundMaterial{}; - MaterialRPtr m_disabledTextMaterial{}; - MaterialRPtr m_disabledBackgroundMaterial{}; - MaterialRPtr m_disabledForegroundMaterial{}; + MaterialObs m_textMaterial{}; + MaterialObs m_highlightedTextMaterial{}; + MaterialObs m_highlightedBackgroundMaterial{}; + MaterialObs m_highlightedForegroundMaterial{}; + MaterialObs m_pushedTextMaterial{}; + MaterialObs m_pushedBackgroundMaterial{}; + MaterialObs m_pushedForegroundMaterial{}; + MaterialObs m_disabledTextMaterial{}; + MaterialObs m_disabledBackgroundMaterial{}; + MaterialObs m_disabledForegroundMaterial{}; castor::String m_fontName{}; }; } diff --git a/include/Core/Castor3D/Gui/Theme/StyleControl.hpp b/include/Core/Castor3D/Gui/Theme/StyleControl.hpp index 04c4238357..4827022108 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleControl.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleControl.hpp @@ -34,18 +34,18 @@ namespace castor3d , m_engine{ engine } , m_type{ type } , m_cursor{ cursor } - , m_backgroundMaterial{ getEngine().findMaterial( cuT( "Black" ) ).lock().get() } - , m_foregroundMaterial{ getEngine().findMaterial( cuT( "White" ) ).lock().get() } + , m_backgroundMaterial{ getEngine().findMaterial( cuT( "Black" ) ) } + , m_foregroundMaterial{ getEngine().findMaterial( cuT( "White" ) ) } { } - void setBackgroundMaterial( MaterialRPtr value ) + void setBackgroundMaterial( MaterialObs value ) { m_backgroundMaterial = value; doUpdateBackgroundMaterial(); } - void setForegroundMaterial( MaterialRPtr value ) + void setForegroundMaterial( MaterialObs value ) { m_foregroundMaterial = value; doUpdateForegroundMaterial(); @@ -76,12 +76,12 @@ namespace castor3d return m_foregroundInvisible; } - MaterialRPtr getBackgroundMaterial()const noexcept + MaterialObs getBackgroundMaterial()const noexcept { return m_backgroundMaterial; } - MaterialRPtr getForegroundMaterial()const noexcept + MaterialObs getForegroundMaterial()const noexcept { return m_foregroundMaterial; } @@ -113,7 +113,7 @@ namespace castor3d } protected: - MaterialRPtr doCreateMaterial( MaterialRPtr material + MaterialObs doCreateMaterial( MaterialObs material , float offset , castor::String const & suffix ) { @@ -140,8 +140,8 @@ namespace castor3d Engine & m_engine; ControlType m_type{}; MouseCursor m_cursor{}; - MaterialRPtr m_backgroundMaterial{}; - MaterialRPtr m_foregroundMaterial{}; + MaterialObs m_backgroundMaterial{}; + MaterialObs m_foregroundMaterial{}; bool m_backgroundInvisible{}; bool m_foregroundInvisible{}; }; diff --git a/include/Core/Castor3D/Gui/Theme/StyleEdit.hpp b/include/Core/Castor3D/Gui/Theme/StyleEdit.hpp index 4b6a412696..e3b2b9a8fd 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleEdit.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleEdit.hpp @@ -27,7 +27,7 @@ namespace castor3d , MouseCursor::eText } , m_fontName{ fontName } , m_textMaterial{ getForegroundMaterial() } - , m_selectionMaterial{ getEngine().findMaterial( cuT( "AlphaLightBlue" ) ).lock().get() } + , m_selectionMaterial{ getEngine().findMaterial( cuT( "AlphaLightBlue" ) ) } { } @@ -43,12 +43,12 @@ namespace castor3d m_fontName = value; } - void setTextMaterial( MaterialRPtr material ) + void setTextMaterial( MaterialObs material ) { m_textMaterial = material; } - void setSelectionMaterial( MaterialRPtr material ) + void setSelectionMaterial( MaterialObs material ) { m_selectionMaterial = material; } @@ -58,12 +58,12 @@ namespace castor3d return m_fontName; } - MaterialRPtr getTextMaterial()const + MaterialObs getTextMaterial()const { return m_textMaterial; } - MaterialRPtr getSelectionMaterial()const + MaterialObs getSelectionMaterial()const { return m_selectionMaterial; } @@ -79,8 +79,8 @@ namespace castor3d private: castor::String m_fontName{}; - MaterialRPtr m_textMaterial{}; - MaterialRPtr m_selectionMaterial{}; + MaterialObs m_textMaterial{}; + MaterialObs m_selectionMaterial{}; }; } diff --git a/include/Core/Castor3D/Gui/Theme/StyleFrame.hpp b/include/Core/Castor3D/Gui/Theme/StyleFrame.hpp index 1e0b20de92..ddb1a3757a 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleFrame.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleFrame.hpp @@ -45,7 +45,7 @@ namespace castor3d m_headerStyle.setFont( value ); } - void setHeaderTextMaterial( MaterialRPtr value ) + void setHeaderTextMaterial( MaterialObs value ) { m_headerStyle.setTextMaterial( value ); } @@ -55,7 +55,7 @@ namespace castor3d return m_headerStyle.getFontName(); } - MaterialRPtr getHeaderTextMaterial()const + MaterialObs getHeaderTextMaterial()const { return m_headerStyle.getTextMaterial(); } diff --git a/include/Core/Castor3D/Gui/Theme/StyleProgress.hpp b/include/Core/Castor3D/Gui/Theme/StyleProgress.hpp index 67c3dcdfa4..20aa925348 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleProgress.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleProgress.hpp @@ -29,7 +29,7 @@ namespace castor3d , castor::String const & fontName ) : ControlStyle{ Type, name, scene, engine } , m_titleFontName{ fontName } - , m_titleMaterial{ getEngine().findMaterial( cuT( "White" ) ).lock().get() } + , m_titleMaterial{ getEngine().findMaterial( cuT( "White" ) ) } , m_containerStyle{ name + "/Container", scene, engine } , m_progressStyle{ name + "/Progress", scene, engine } , m_textFontName{ fontName } @@ -42,7 +42,7 @@ namespace castor3d return m_titleFontName; } - MaterialRPtr getTitleMaterial()const + MaterialObs getTitleMaterial()const { return m_titleMaterial; } @@ -62,7 +62,7 @@ namespace castor3d return m_textFontName; } - MaterialRPtr getTextMaterial()const + MaterialObs getTextMaterial()const { return m_textMaterial; } @@ -72,7 +72,7 @@ namespace castor3d m_titleFontName = std::move( value ); } - void setTitleMaterial( MaterialRPtr value ) + void setTitleMaterial( MaterialObs value ) { m_titleMaterial = value; } @@ -92,7 +92,7 @@ namespace castor3d m_textFontName = std::move( value ); } - void setTextMaterial( MaterialRPtr value ) + void setTextMaterial( MaterialObs value ) { m_textMaterial = value; } @@ -108,11 +108,11 @@ namespace castor3d private: castor::String m_titleFontName{}; - MaterialRPtr m_titleMaterial{}; + MaterialObs m_titleMaterial{}; PanelStyle m_containerStyle; PanelStyle m_progressStyle; castor::String m_textFontName{}; - MaterialRPtr m_textMaterial{}; + MaterialObs m_textMaterial{}; }; } diff --git a/include/Core/Castor3D/Gui/Theme/StyleStatic.hpp b/include/Core/Castor3D/Gui/Theme/StyleStatic.hpp index 71c147e5a4..842e845d02 100644 --- a/include/Core/Castor3D/Gui/Theme/StyleStatic.hpp +++ b/include/Core/Castor3D/Gui/Theme/StyleStatic.hpp @@ -39,7 +39,7 @@ namespace castor3d m_fontName = value; } - void setTextMaterial( MaterialRPtr value ) + void setTextMaterial( MaterialObs value ) { m_textMaterial = value; } @@ -49,7 +49,7 @@ namespace castor3d return m_fontName; } - MaterialRPtr getTextMaterial()const + MaterialObs getTextMaterial()const { return m_textMaterial; } @@ -65,7 +65,7 @@ namespace castor3d private: castor::String m_fontName{}; - MaterialRPtr m_textMaterial{}; + MaterialObs m_textMaterial{}; }; } diff --git a/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp b/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp index 53ed0ddcb3..1caff5a986 100644 --- a/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp +++ b/include/Core/Castor3D/Gui/Theme/StylesHolder.hpp @@ -22,7 +22,7 @@ namespace castor3d , m_holderName{ std::move( name ) } , m_defaultFont{ engine.getFontCache().isEmpty() ? nullptr - : engine.getFontCache().begin()->second } + : engine.getFontCache().begin()->second.get() } { } @@ -32,9 +32,9 @@ namespace castor3d *\return * The font */ - castor::FontRes getDefaultFont()const + castor::FontResPtr getDefaultFont()const { - return m_defaultFont.lock(); + return m_defaultFont; } /** *\brief diff --git a/include/Core/Castor3D/Material/Material.hpp b/include/Core/Castor3D/Material/Material.hpp index 5af9793b0e..c2c265e773 100644 --- a/include/Core/Castor3D/Material/Material.hpp +++ b/include/Core/Castor3D/Material/Material.hpp @@ -124,6 +124,11 @@ namespace castor3d { return m_serialisable; } + + bool isInitialised()const noexcept + { + return m_initialised; + } /**@}*/ /** *\~english @@ -191,6 +196,7 @@ namespace castor3d std::map< PassRPtr, OnPassChangedConnection > m_passListeners; RenderPassRegisterInfo * m_renderPassInfo{}; bool m_serialisable{ true }; + bool m_initialised{}; }; } diff --git a/include/Core/Castor3D/Material/MaterialImporter.hpp b/include/Core/Castor3D/Material/MaterialImporter.hpp index ba59fa1ec9..bf76e380eb 100644 --- a/include/Core/Castor3D/Material/MaterialImporter.hpp +++ b/include/Core/Castor3D/Material/MaterialImporter.hpp @@ -84,7 +84,7 @@ namespace castor3d *\param[in] params Les paramètres de création de l'image. *\return L'image. */ - C3D_API castor::ImageSPtr loadImage( castor::String const & name + C3D_API castor::ImageRPtr loadImage( castor::String const & name , castor::ImageCreateParams const & params )const; /** *\~english @@ -96,7 +96,7 @@ namespace castor3d *\param[in] path Le chemin vers l'image (peut être relatif ou absolu). *\return L'image. */ - C3D_API castor::ImageSPtr loadImage( castor::Path const & path )const; + C3D_API castor::ImageRPtr loadImage( castor::Path const & path )const; /** *\~english *\brief Loads a texture. @@ -111,7 +111,7 @@ namespace castor3d *\param[in] data Les données de l'image. *\return L'unité de texture. */ - C3D_API castor::ImageSPtr loadImage( castor::String name + C3D_API castor::ImageRPtr loadImage( castor::String name , castor::String type , castor::ByteArray data )const; /** @@ -128,7 +128,7 @@ namespace castor3d *\param[in] config La configuration de la texture. *\return L'unité de texture. */ - C3D_API TextureSourceInfo loadTexture( castor3d::SamplerRes sampler + C3D_API TextureSourceInfo loadTexture( castor3d::SamplerObs sampler , castor::Path const & path , TextureConfiguration const & config )const; /** @@ -149,7 +149,7 @@ namespace castor3d *\param[in] config La configuration de la texture. *\return L'unité de texture. */ - C3D_API TextureSourceInfo loadTexture( castor3d::SamplerRes sampler + C3D_API TextureSourceInfo loadTexture( castor3d::SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data @@ -168,7 +168,7 @@ namespace castor3d *\param[in] config La configuration de la texture. *\param[in,out] pass Reçoit l'image chargée. */ - C3D_API void loadTexture( castor3d::SamplerRes sampler + C3D_API void loadTexture( castor3d::SamplerObs sampler , castor::Path const & path , PassTextureConfig const & config , Pass & pass )const; @@ -190,7 +190,7 @@ namespace castor3d *\param[in] config La configuration de la texture. *\param[in,out] pass Reçoit l'image chargée. */ - C3D_API void loadTexture( castor3d::SamplerRes sampler + C3D_API void loadTexture( castor3d::SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data diff --git a/include/Core/Castor3D/Material/MaterialModule.hpp b/include/Core/Castor3D/Material/MaterialModule.hpp index 11a6cb7ca6..c3cabbbca7 100644 --- a/include/Core/Castor3D/Material/MaterialModule.hpp +++ b/include/Core/Castor3D/Material/MaterialModule.hpp @@ -121,9 +121,9 @@ namespace castor3d */ class MaterialImporterFactory; - CU_DeclareSmartPtr( Material ); CU_DeclareSmartPtr( MaterialImporter ); + CU_DeclareCUSmartPtr( castor3d, Material, C3D_API ); CU_DeclareCUSmartPtr( castor3d, MaterialImporterFactory, C3D_API ); using PassTypeID = uint16_t; @@ -145,35 +145,34 @@ namespace castor3d * Spécialisation pour Material. */ template<> - struct ResourceCacheTraitsT< Material, castor::String > - : castor::ResourceCacheTraitsBaseT< Material, castor::String, ResourceCacheTraitsT< Material, castor::String > > + struct PtrCacheTraitsT< Material, castor::String > + : PtrCacheTraitsBaseT< Material, castor::String > { using ResT = Material; using KeyT = castor::String; - using TraitsT = ResourceCacheTraitsT< ResT, KeyT >; - using Base = castor::ResourceCacheTraitsBaseT< ResT, KeyT, TraitsT >; + using Base = PtrCacheTraitsBaseT< ResT, KeyT >; using ElementT = typename Base::ElementT; using ElementPtrT = typename Base::ElementPtrT; C3D_API static const castor::String Name; }; - using MaterialCacheTraits = ResourceCacheTraitsT< Material, castor::String >; + using MaterialCacheTraits = PtrCacheTraitsT< Material, castor::String >; using MaterialCache = castor::ResourceCacheT< Material , castor::String , MaterialCacheTraits >; - using MaterialRes = MaterialCacheTraits::ElementPtrT; - using MaterialResPtr = MaterialCacheTraits::ElementObsT; + using MaterialPtr = MaterialCacheTraits::ElementPtrT; + using MaterialObs = MaterialCacheTraits::ElementObsT; CU_DeclareCUSmartPtr( castor3d, MaterialCache, C3D_API ); //! Material pointer array - CU_DeclareVector( MaterialRPtr, MaterialPtr ); + CU_DeclareVector( MaterialObs, MaterialPtr ); //! Material pointer map, sorted by name - CU_DeclareMap( castor::String, MaterialRPtr, MaterialPtrStr ); + CU_DeclareMap( castor::String, MaterialObs, MaterialPtrStr ); //! Material pointer map - CU_DeclareMap( uint32_t, MaterialRPtr, MaterialPtrUInt ); + CU_DeclareMap( uint32_t, MaterialObs, MaterialPtrUInt ); struct TextureCombine { diff --git a/include/Core/Castor3D/Material/Texture/Sampler.hpp b/include/Core/Castor3D/Material/Texture/Sampler.hpp index 20c90b633b..82b183f2aa 100644 --- a/include/Core/Castor3D/Material/Texture/Sampler.hpp +++ b/include/Core/Castor3D/Material/Texture/Sampler.hpp @@ -15,7 +15,7 @@ See LICENSE file in root folder namespace castor3d { - SamplerResPtr createSampler( Engine & engine + SamplerObs createSampler( Engine & engine , castor::String const & baseName , VkFilter filter , VkImageSubresourceRange const * range ); diff --git a/include/Core/Castor3D/Material/Texture/TextureModule.hpp b/include/Core/Castor3D/Material/Texture/TextureModule.hpp index 2457395dee..50cf043890 100644 --- a/include/Core/Castor3D/Material/Texture/TextureModule.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureModule.hpp @@ -245,26 +245,25 @@ namespace castor3d * Spécialisation pour Sampler. */ template<> - struct ResourceCacheTraitsT< Sampler, castor::String > - : castor::ResourceCacheTraitsBaseT< Sampler, castor::String, ResourceCacheTraitsT< Sampler, castor::String > > + struct PtrCacheTraitsT< Sampler, castor::String > + : PtrCacheTraitsBaseT< Sampler, castor::String > { using ResT = Sampler; using KeyT = castor::String; - using TraitsT = ResourceCacheTraitsT< ResT, KeyT >; - using Base = castor::ResourceCacheTraitsBaseT< ResT, KeyT, TraitsT >; + using Base = PtrCacheTraitsBaseT< ResT, KeyT >; using ElementT = typename Base::ElementT; using ElementPtrT = typename Base::ElementPtrT; C3D_API static const castor::String Name; }; - using SamplerCacheTraits = ResourceCacheTraitsT< Sampler, castor::String >; + using SamplerCacheTraits = PtrCacheTraitsT< Sampler, castor::String >; using SamplerCache = castor::ResourceCacheT< Sampler , castor::String , SamplerCacheTraits >; - using SamplerRes = SamplerCacheTraits::ElementPtrT; - using SamplerResPtr = SamplerCacheTraits::ElementObsT; + using SamplerPtr = SamplerCacheTraits::ElementPtrT; + using SamplerObs = SamplerCacheTraits::ElementObsT; CU_DeclareCUSmartPtr( castor3d, SamplerCache, C3D_API ); diff --git a/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp b/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp index d08955e27c..26cfe02e54 100644 --- a/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureSourceInfo.hpp @@ -17,21 +17,21 @@ namespace castor3d class TextureSourceInfo { public: - C3D_API TextureSourceInfo( SamplerRes sampler + C3D_API TextureSourceInfo( SamplerObs sampler , castor::Path folder , castor::Path relative , castor::ImageLoaderConfig loadConfig = { true, true, true } ); - C3D_API TextureSourceInfo( SamplerRes sampler + C3D_API TextureSourceInfo( SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data , castor::ImageLoaderConfig loadConfig = { true, true, true } ); - C3D_API TextureSourceInfo( SamplerRes sampler + C3D_API TextureSourceInfo( SamplerObs sampler , RenderTargetRPtr renderTarget ); - C3D_API TextureSourceInfo( SamplerRes sampler + C3D_API TextureSourceInfo( SamplerObs sampler , ashes::ImageCreateInfo const & createInfo ); - SamplerRes sampler()const + SamplerObs sampler()const { return m_sampler; } @@ -133,7 +133,7 @@ namespace castor3d } private: - SamplerRes m_sampler{}; + SamplerObs m_sampler{}; // Render target mode. RenderTargetRPtr m_renderTarget{}; // Image file mode. diff --git a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp index 8187bf14c1..b11b37f0de 100644 --- a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp @@ -148,7 +148,7 @@ namespace castor3d return m_configuration; } - SamplerResPtr getSampler()const + SamplerObs getSampler()const { return m_sampler; } @@ -233,17 +233,11 @@ namespace castor3d m_renderTarget = value; } - void setSampler( SamplerResPtr value ) + void setSampler( SamplerObs value ) { m_sampler = value; } - void setOwnSampler( SamplerRes value ) - { - m_ownSampler = std::move( value ); - setSampler( { m_ownSampler } ); - } - void setId( uint32_t value ) { m_id = value; @@ -272,8 +266,7 @@ namespace castor3d castor::Matrix4x4f m_transformations; TextureLayoutUPtr m_texture; RenderTargetRPtr m_renderTarget{}; - SamplerResPtr m_sampler; - SamplerRes m_ownSampler; + SamplerObs m_sampler{}; ashes::WriteDescriptorSet m_descriptor; uint32_t m_id{ 0u }; mutable bool m_changed; diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp index 8d4709aa3a..f338756a30 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/BaseDataComponent.hpp @@ -45,7 +45,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp index 4ae3594588..6a757dd3ce 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp @@ -68,7 +68,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp index 326850f939..5ac443c084 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.hpp @@ -62,7 +62,7 @@ namespace castor3d *\param[in] material Le matériau pour lequel le compte est incrémenté. *\return \p true Si le buffer d'instances a changé. */ - C3D_API bool ref( MaterialRPtr material ); + C3D_API bool ref( MaterialObs material ); /** *\~english *\brief Decrements instance count. @@ -71,7 +71,7 @@ namespace castor3d *\brief Décrémente le compte d'instances. *\param[in] material Le matériau pour lequel le compte est décrémenté. */ - C3D_API void unref( MaterialRPtr material ); + C3D_API void unref( MaterialObs material ); /** *\~english *\brief Retrieves the instances count @@ -82,7 +82,7 @@ namespace castor3d *\param[in] material Le matériau pour lequel le compte est récupéré *\return La valeur */ - C3D_API uint32_t getRefCount( MaterialRPtr material )const; + C3D_API uint32_t getRefCount( MaterialObs material )const; /** *\~english *\param[in] material The material. @@ -91,7 +91,7 @@ namespace castor3d *\param[in] material Le matériau. *\return \p true si le nombre d'instances pour le matériau donné est plus grand que le seuil. */ - C3D_API bool isInstanced( MaterialRPtr material )const; + C3D_API bool isInstanced( MaterialObs material )const; /** *\~english *\return \p true if the max instance count is greater than the threshold. @@ -110,7 +110,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ C3D_API void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp index 5e408fb71a..3b4eaa3839 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.hpp @@ -37,7 +37,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ C3D_API void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp index f8ea81b03a..cf453e8e6c 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp @@ -35,7 +35,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ C3D_API void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp index c15ebe3c4a..900d3eb5c8 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.hpp @@ -29,7 +29,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ C3D_API void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp index 62781fe93c..0c08ef1a6c 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp @@ -48,7 +48,7 @@ namespace castor3d *\copydoc castor3d::SubmeshComponent::gather */ C3D_API void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp index 152fd2abac..f26a62b662 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp @@ -83,7 +83,7 @@ namespace castor3d *\param[in,out] currentLocation La position actuelle des attributs. */ C3D_API virtual void gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp index 11bb267d8d..6ac8f4f149 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.hpp @@ -242,8 +242,8 @@ namespace castor3d *\param[in] update Dit si le composant d'instantiation doit être mis à jour. */ C3D_API void instantiate( Geometry const * geometry - , MaterialRPtr oldMaterial - , MaterialRPtr newMaterial + , MaterialObs oldMaterial + , MaterialObs newMaterial , bool update ); /** *\~english @@ -281,7 +281,7 @@ namespace castor3d inline void addPoints( std::vector< InterleavedVertex > const & vertices ); template< size_t Count > inline void addPoints( std::array< InterleavedVertex, Count > const & vertices ); - inline void setDefaultMaterial( MaterialRPtr material ); + inline void setDefaultMaterial( MaterialObs material ); inline void setIndexMapping( IndexMappingUPtr mapping ); inline IndexMappingRPtr getIndexMapping()const; template< typename ComponentT, typename ... ParamsT > @@ -336,7 +336,7 @@ namespace castor3d C3D_API VkDeviceSize getIndexOffset()const; C3D_API VkDeviceSize getMeshletOffset()const; inline SkeletonRPtr getSkeleton()const; - inline MaterialRPtr getDefaultMaterial()const; + inline MaterialObs getDefaultMaterial()const; inline castor::BoundingBox const & getBoundingBox()const; inline castor::BoundingBox & getBoundingBox(); inline castor::BoundingSphere const & getBoundingSphere()const; @@ -358,7 +358,7 @@ namespace castor3d private: uint32_t m_id; - MaterialRPtr m_defaultMaterial; + MaterialObs m_defaultMaterial; castor::BoundingBox m_box; castor::BoundingSphere m_sphere; SubmeshComponentIDMap m_components; diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl index b9aece114a..d7987acb1e 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Submesh.inl @@ -52,13 +52,13 @@ namespace castor3d return getParent().getSkeleton(); } - inline void Submesh::setDefaultMaterial( MaterialRPtr mat ) + inline void Submesh::setDefaultMaterial( MaterialObs mat ) { m_defaultMaterial = mat; instantiate( nullptr, {}, mat, false ); } - inline MaterialRPtr Submesh::getDefaultMaterial()const + inline MaterialObs Submesh::getDefaultMaterial()const { return m_defaultMaterial; } diff --git a/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp b/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp index 80f8ae63d2..5b4877ec0d 100644 --- a/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp +++ b/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp @@ -99,11 +99,11 @@ namespace castor3d */ template<> struct PtrCacheTraitsT< Skeleton, castor::String > - : CUPtrCacheTraitsBaseT< Skeleton, castor::String > + : PtrCacheTraitsBaseT< Skeleton, castor::String > { using ResT = Skeleton; using KeyT = castor::String; - using Base = CUPtrCacheTraitsBaseT< ResT, KeyT >; + using Base = PtrCacheTraitsBaseT< ResT, KeyT >; using ElementT = typename Base::ElementT; using ElementPtrT = typename Base::ElementPtrT; diff --git a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp index 89d3712c8d..eee7c5bf8c 100644 --- a/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp +++ b/include/Core/Castor3D/Overlay/BorderPanelOverlay.hpp @@ -63,7 +63,7 @@ namespace castor3d *\brief Définit le matériau des bords *\param[in] material La nouvelle valeur */ - C3D_API void setBorderMaterial( MaterialRPtr material ); + C3D_API void setBorderMaterial( MaterialObs material ); /** *\~english *\brief Retrieves the absolute overlay borders size, in pixels @@ -176,7 +176,7 @@ namespace castor3d return *m_pxBorderSize; } - MaterialRPtr getBorderMaterial()const noexcept + MaterialObs getBorderMaterial()const noexcept { return m_borderMaterial; } @@ -335,7 +335,7 @@ namespace castor3d private: //!\~english The border material. //!\~french Le matériau des bords. - MaterialRPtr m_borderMaterial{}; + MaterialObs m_borderMaterial{}; //!\~english The border size, relative to parent dimensions. //!\~french La taille des bords, relative aux dimensions du parent. castor::Point4d m_relBorderSize{}; diff --git a/include/Core/Castor3D/Overlay/FontTexture.hpp b/include/Core/Castor3D/Overlay/FontTexture.hpp index 5711c4cd95..1be902fb77 100644 --- a/include/Core/Castor3D/Overlay/FontTexture.hpp +++ b/include/Core/Castor3D/Overlay/FontTexture.hpp @@ -231,7 +231,7 @@ namespace castor3d /**@{*/ castor::FontRPtr getFont()const { - return &static_cast< castor::Font & >( *m_font.lock() ); + return m_font; } FontGlyphBuffer const & getFontBuffer()const @@ -244,7 +244,7 @@ namespace castor3d return getResource().get(); } - SamplerResPtr getSampler()const + SamplerObs getSampler()const { return m_sampler; } @@ -272,8 +272,8 @@ namespace castor3d void swapResources()override; private: - castor::FontResPtr m_font; - SamplerResPtr m_sampler; + castor::FontResPtr m_font{}; + SamplerObs m_sampler{}; GlyphPositionMap m_frontGlyphsPositions; GlyphPositionMap m_backGlyphsPositions; uint32_t m_id; diff --git a/include/Core/Castor3D/Overlay/Overlay.hpp b/include/Core/Castor3D/Overlay/Overlay.hpp index fe2a146a23..0ffc4768e7 100644 --- a/include/Core/Castor3D/Overlay/Overlay.hpp +++ b/include/Core/Castor3D/Overlay/Overlay.hpp @@ -199,7 +199,7 @@ namespace castor3d return m_parent; } - MaterialRPtr getMaterial()const noexcept + MaterialObs getMaterial()const noexcept { return m_category->getMaterial(); } @@ -272,7 +272,7 @@ namespace castor3d m_category->setVisible( val ); } - void setMaterial( MaterialRPtr material ) + void setMaterial( MaterialObs material ) { m_category->setMaterial( material ); } diff --git a/include/Core/Castor3D/Overlay/OverlayCategory.hpp b/include/Core/Castor3D/Overlay/OverlayCategory.hpp index 9671700099..5e3917b287 100644 --- a/include/Core/Castor3D/Overlay/OverlayCategory.hpp +++ b/include/Core/Castor3D/Overlay/OverlayCategory.hpp @@ -81,7 +81,7 @@ namespace castor3d *\brief Définit le matériau *\param[in] material La nouvelle valeur */ - C3D_API virtual void setMaterial( MaterialRPtr material ); + C3D_API virtual void setMaterial( MaterialObs material ); /** *\~english *\brief Retrieves the overlay name @@ -231,7 +231,7 @@ namespace castor3d && !isFullyCropped(); } - MaterialRPtr getMaterial()const noexcept + MaterialObs getMaterial()const noexcept { return m_material; } @@ -451,7 +451,7 @@ namespace castor3d bool m_displayable{ false }; //!\~english The material used by the overlay. //!\~french Le matériau utilisé par l'incrustation. - MaterialRPtr m_material{}; + MaterialObs m_material{}; //!\~english The overlay index. //!\~french L'index de l'overlay. uint32_t m_index{ 0 }; diff --git a/include/Core/Castor3D/Render/Node/SubmeshRenderNode.hpp b/include/Core/Castor3D/Render/Node/SubmeshRenderNode.hpp index 3cd4131db8..6206c85121 100644 --- a/include/Core/Castor3D/Render/Node/SubmeshRenderNode.hpp +++ b/include/Core/Castor3D/Render/Node/SubmeshRenderNode.hpp @@ -38,7 +38,7 @@ namespace castor3d C3D_API uint32_t getId()const; C3D_API uint32_t getInstanceCount()const; - C3D_API MaterialRPtr getMaterial()const; + C3D_API MaterialObs getMaterial()const; C3D_API ObjectBufferOffset const & getSourceBufferOffsets()const; C3D_API ObjectBufferOffset const & getFinalBufferOffsets()const; C3D_API SubmeshFlags getSubmeshFlags()const; diff --git a/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp b/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp index 3347a02b46..ca4578d651 100644 --- a/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp +++ b/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp @@ -35,7 +35,7 @@ namespace castor3d , VkExtent2D const & size , ashes::ImageView const & srcView , Texture const & dstTexture - , SamplerResPtr sampler + , SamplerObs sampler , bool isCharlie ); void registerFrames(); void render( QueueData const & queueData ); @@ -50,7 +50,7 @@ namespace castor3d }; ashes::RenderPass const & m_renderPass; std::string m_prefix; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; std::array< FrameBuffer, 6u > m_frameBuffers; CommandsSemaphore m_commands; }; @@ -78,7 +78,7 @@ namespace castor3d , RenderDevice const & device , castor::Size const & size , Texture const & srcTexture - , SamplerResPtr sampler + , SamplerObs sampler , bool isCharlie ); C3D_API ~EnvironmentPrefilter(); /** @@ -120,7 +120,8 @@ namespace castor3d ashes::Sampler const & getSampler()const { - return m_sampler.lock()->getSampler(); + CU_Require( m_sampler != nullptr ); + return m_sampler->getSampler(); } /**@}*/ @@ -131,7 +132,7 @@ namespace castor3d ashes::ImagePtr m_srcImage; ashes::ImageView m_srcImageView; Texture m_result; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; ashes::RenderPassPtr m_renderPass; std::vector< std::unique_ptr< MipRenderCube > > m_renderPasses; }; diff --git a/include/Core/Castor3D/Render/PBR/IblTextures.hpp b/include/Core/Castor3D/Render/PBR/IblTextures.hpp index cfdaa9c153..7e8af20963 100644 --- a/include/Core/Castor3D/Render/PBR/IblTextures.hpp +++ b/include/Core/Castor3D/Render/PBR/IblTextures.hpp @@ -38,7 +38,7 @@ namespace castor3d , RenderDevice const & device , Texture const & source , Texture const & brdf - , SamplerResPtr sampler ); + , SamplerObs sampler ); C3D_API ~IblTextures(); /** *\~english @@ -109,13 +109,14 @@ namespace castor3d ashes::Sampler const & getPrefilteredBrdfSampler()const { - return m_sampler.lock()->getSampler(); + CU_Require( m_sampler != nullptr ); + return m_sampler->getSampler(); } /**@}*/ private: Texture const & m_brdf; - SamplerResPtr m_sampler; + SamplerObs m_sampler; RadianceComputer m_radianceComputer; EnvironmentPrefilter m_environmentPrefilter; EnvironmentPrefilter m_environmentSheenPrefilter; diff --git a/include/Core/Castor3D/Render/PBR/RadianceComputer.hpp b/include/Core/Castor3D/Render/PBR/RadianceComputer.hpp index 6af86e6241..12267c5661 100644 --- a/include/Core/Castor3D/Render/PBR/RadianceComputer.hpp +++ b/include/Core/Castor3D/Render/PBR/RadianceComputer.hpp @@ -89,7 +89,7 @@ namespace castor3d using RenderPasses = std::array< RenderPass, 6 >; Texture m_result; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; Texture const & m_srcView; ashes::ImagePtr m_srcImage; ashes::ImageView m_srcImageView; diff --git a/include/Core/Castor3D/Render/Passes/RenderQuad.hpp b/include/Core/Castor3D/Render/Passes/RenderQuad.hpp index 07a7975345..09050f68d7 100644 --- a/include/Core/Castor3D/Render/Passes/RenderQuad.hpp +++ b/include/Core/Castor3D/Render/Passes/RenderQuad.hpp @@ -308,7 +308,7 @@ namespace castor3d Sampler const & getSampler()const { - return *m_sampler.lock(); + return *m_sampler; } private: @@ -317,7 +317,7 @@ namespace castor3d protected: RenderSystem & m_renderSystem; RenderDevice const & m_device; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; rq::ConfigData m_config; private: diff --git a/include/Core/Castor3D/Render/ToTexture/RenderCube.hpp b/include/Core/Castor3D/Render/ToTexture/RenderCube.hpp index 2c4397bdea..cae991ffb5 100644 --- a/include/Core/Castor3D/Render/ToTexture/RenderCube.hpp +++ b/include/Core/Castor3D/Render/ToTexture/RenderCube.hpp @@ -47,7 +47,7 @@ namespace castor3d */ C3D_API explicit RenderCube( RenderDevice const & device , bool nearest - , SamplerResPtr sampler = {} ); + , SamplerObs sampler = {} ); /** *\~english *\brief @@ -190,7 +190,7 @@ namespace castor3d protected: RenderDevice const & m_device; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; ashes::PipelineLayoutPtr m_pipelineLayout; private: diff --git a/include/Core/Castor3D/Scene/Background/Background.hpp b/include/Core/Castor3D/Scene/Background/Background.hpp index bb77d0322c..59676b38e4 100644 --- a/include/Core/Castor3D/Scene/Background/Background.hpp +++ b/include/Core/Castor3D/Scene/Background/Background.hpp @@ -406,9 +406,8 @@ namespace castor3d Sampler const & getSampler()const { - auto result = m_sampler.lock(); - CU_Require( result ); - return *result; + CU_Require( m_sampler ); + return *m_sampler; } /**@}*/ @@ -437,7 +436,7 @@ namespace castor3d bool m_srgb{ false }; Texture m_textureId; TextureLayoutUPtr m_texture; - SamplerResPtr m_sampler; + SamplerObs m_sampler{}; std::unique_ptr< IblTextures > m_ibl; bool m_hasIBLSupport; }; diff --git a/include/Core/Castor3D/Scene/BillboardList.hpp b/include/Core/Castor3D/Scene/BillboardList.hpp index d1103dcb72..5045e45ed2 100644 --- a/include/Core/Castor3D/Scene/BillboardList.hpp +++ b/include/Core/Castor3D/Scene/BillboardList.hpp @@ -141,7 +141,7 @@ namespace castor3d C3D_API SubmeshFlags getSubmeshFlags()const; C3D_API ProgramFlags getProgramFlags()const; - MaterialRPtr getMaterial()const + MaterialObs getMaterial()const { return m_material; } @@ -250,7 +250,7 @@ namespace castor3d m_billboardSize = value; } - C3D_API void setMaterial( MaterialRPtr value ); + C3D_API void setMaterial( MaterialObs value ); C3D_API void setCount( uint32_t value ); /**@}*/ @@ -265,7 +265,7 @@ namespace castor3d protected: Scene & m_scene; SceneNode * m_node{}; - MaterialRPtr m_material{}; + MaterialObs m_material{}; castor::Point2f m_dimensions; castor::Point3f m_cameraPosition; GpuBufferOffsetT< uint8_t > m_vertexBuffer; diff --git a/include/Core/Castor3D/Scene/Geometry.hpp b/include/Core/Castor3D/Scene/Geometry.hpp index 381ee9d440..114efe251e 100644 --- a/include/Core/Castor3D/Scene/Geometry.hpp +++ b/include/Core/Castor3D/Scene/Geometry.hpp @@ -93,7 +93,7 @@ namespace castor3d *\param[in] submesh Le sous-maillage. *\return Le matériau. */ - C3D_API MaterialRPtr getMaterial( Submesh const & submesh )const; + C3D_API MaterialObs getMaterial( Submesh const & submesh )const; /** *\~english *\brief Defines a submesh material. @@ -105,7 +105,7 @@ namespace castor3d *\param[in] material Le matériau. */ C3D_API void setMaterial( Submesh & submesh - , MaterialRPtr material ); + , MaterialObs material ); /** *\~english *\brief Computes the bounding box from the given submeshes boxes. @@ -220,7 +220,7 @@ namespace castor3d void doUpdateContainers(); private: - MeshResPtr m_mesh; + MeshResPtr m_mesh{}; castor::String m_meshName; bool m_listCreated{ false }; mutable castor::SpinMutex m_mutex; diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp index 3dadfa2996..4a4df43e5e 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.hpp @@ -82,7 +82,7 @@ namespace castor3d *\brief Definit le materiau *\param[in] value La nouvelle valeur */ - C3D_API void setMaterial( MaterialRPtr value ); + C3D_API void setMaterial( MaterialObs value ); /** *\~english *\brief Sets the particles dimensions. @@ -107,7 +107,7 @@ namespace castor3d *\~french *\return Le materiau. */ - C3D_API MaterialRPtr getMaterial()const; + C3D_API MaterialObs getMaterial()const; /** *\~english *\return The billboards dimensions. @@ -237,7 +237,7 @@ namespace castor3d castor::Point2f m_dimensions; //!\~english The Material. //!\~french Le Material. - MaterialRPtr m_material; + MaterialObs m_material; //!\~english The particles count. //!\~french Le nombre de particules. uint32_t m_particlesCount{ 0u }; diff --git a/include/Core/Castor3D/Scene/Scene.hpp b/include/Core/Castor3D/Scene/Scene.hpp index df2f6f8f99..dc46842d5a 100644 --- a/include/Core/Castor3D/Scene/Scene.hpp +++ b/include/Core/Castor3D/Scene/Scene.hpp @@ -247,7 +247,7 @@ namespace castor3d *\param[in] pass La passe de matériau cible. *\return La texture animée. */ - C3D_API AnimatedObjectSPtr addAnimatedTexture( TextureSourceInfo const & sourceInfo + C3D_API AnimatedObjectRPtr addAnimatedTexture( TextureSourceInfo const & sourceInfo , TextureConfiguration const & config , Pass & pass ); /** diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index f620d0930b..2ddeb9d80a 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -19,9 +19,12 @@ See LICENSE file in root folder #include "Castor3D/Scene/ParticleSystem/ParticleModule.hpp" #include "Castor3D/Buffer/UniformBuffer.hpp" +#include "Castor3D/Material/Material.hpp" +#include "Castor3D/Material/Texture/Sampler.hpp" #include "Castor3D/Material/Texture/TextureConfiguration.hpp" #include "Castor3D/Material/Pass/Pass.hpp" #include "Castor3D/Material/Pass/SubsurfaceScattering.hpp" +#include "Castor3D/Model/Mesh/Mesh.hpp" #include "Castor3D/Model/Mesh/MeshImporter.hpp" #include "Castor3D/Model/Mesh/Animation/MeshAnimation.hpp" #include "Castor3D/Render/RenderWindow.hpp" @@ -162,12 +165,12 @@ namespace castor3d LightUPtr ownLight{}; LightRPtr light{}; castor::PixelFormat pixelFormat{}; - MaterialRPtr material{}; - MaterialRes ownMaterial{}; + MaterialObs material{}; + MaterialPtr ownMaterial{}; bool createMaterial{ true }; uint32_t passIndex{}; - SamplerResPtr sampler{}; - SamplerRes ownSampler{}; + SamplerObs sampler{}; + SamplerPtr ownSampler{}; TargetType targetType{}; RenderTargetRPtr renderTarget{}; RenderTargetRPtr textureRenderTarget{}; @@ -188,7 +191,7 @@ namespace castor3d castor::PxBufferBaseUPtr buffer{}; castor::Path folder{}; castor::Path relative{}; - castor::ImageSPtr image{}; + castor::ImageRPtr image{}; VkShaderStageFlagBits shaderStage{}; UniformBufferBaseUPtr uniformBuffer{}; OverlayRPtr overlay{}; diff --git a/include/Core/Castor3D/Scene/SceneModule.hpp b/include/Core/Castor3D/Scene/SceneModule.hpp index 2140206c50..efc7aa77dc 100644 --- a/include/Core/Castor3D/Scene/SceneModule.hpp +++ b/include/Core/Castor3D/Scene/SceneModule.hpp @@ -387,7 +387,7 @@ namespace castor3d using OnSceneNodeReparent = castor::SignalT< OnSceneNodeReparentFunction >; using OnSceneNodeReparentConnection = OnSceneNodeReparent::connection; - using SubmeshMaterialMap = std::map< Submesh const *, MaterialRPtr >; + using SubmeshMaterialMap = std::map< Submesh const *, MaterialObs >; C3D_API castor::LoggerInstance & getLogger( Scene const & scene ); C3D_API Engine & getEngine( Scene const & scene ); @@ -403,11 +403,11 @@ namespace castor3d */ template<> struct PtrCacheTraitsT< Scene, castor::String > - : CUPtrCacheTraitsBaseT< Scene, castor::String > + : PtrCacheTraitsBaseT< Scene, castor::String > { using ResT = Scene; using KeyT = castor::String; - using Base = CUPtrCacheTraitsBaseT< ResT, KeyT >; + using Base = PtrCacheTraitsBaseT< ResT, KeyT >; using ElementT = typename Base::ElementT; using ElementPtrT = typename Base::ElementPtrT; diff --git a/include/Core/CastorUtils/Design/DesignModule.hpp b/include/Core/CastorUtils/Design/DesignModule.hpp index 64c3a155ac..8e500cda3b 100644 --- a/include/Core/CastorUtils/Design/DesignModule.hpp +++ b/include/Core/CastorUtils/Design/DesignModule.hpp @@ -279,7 +279,7 @@ namespace castor \brief Pointeur sur une vue sur une ressource. */ template< typename ResT, typename KeyT > - using ResourceSPtrT = std::shared_ptr< ResourceT< ResT, KeyT > >; + using ResourcePtrT = castor::UniquePtr< ResourceT< ResT, KeyT > >; /** \~english \brief Pointer to a resource view. @@ -287,7 +287,7 @@ namespace castor \brief Pointeur sur une vue sur une ressource. */ template< typename ResT, typename KeyT > - using ResourceWPtrT = std::weak_ptr< ResourceT< ResT, KeyT > >; + using ResourceObsT = ResourceT< ResT, KeyT > *; /** *\~english * Traits structure to specialise a cache behaviour. @@ -395,7 +395,7 @@ namespace castor template< typename ResT , typename KeyT , typename ... ParametersT > - ResourceSPtrT< ResT, KeyT > makeResource( ParametersT && ... params ); + ResourcePtrT< ResT, KeyT > makeResource( ParametersT && ... params ); /** *\~english * Helper structure to build a castor::ResourceCacheTraitsT. @@ -441,8 +441,8 @@ namespace castor { using ElementT = ResT; using ElementKeyT = KeyT; - using ElementPtrT = ResourceSPtrT< ElementT, ElementKeyT >; - using ElementObsT = ResourceWPtrT< ElementT, ElementKeyT >; + using ElementPtrT = ResourcePtrT< ElementT, ElementKeyT >; + using ElementObsT = ResourceObsT< ElementT, ElementKeyT >; using ElementContT = std::unordered_map< KeyT, ElementPtrT >; using ElementCacheT = ResourceCacheBaseT< ElementT, KeyT, TraitsT >; @@ -463,25 +463,25 @@ namespace castor static ElementObsT makeElementObs( ElementPtrT const & element ) { - return ElementObsT{ element }; + return element.get(); } static bool areElementsEqual( ElementObsT const & lhs , ElementObsT const & rhs ) { - return lhs.lock() == rhs.lock(); + return lhs == rhs; } static bool areElementsEqual( ElementObsT const & lhs , ElementPtrT const & rhs ) { - return lhs.lock() == rhs; + return lhs == rhs.get(); } static bool areElementsEqual( ElementPtrT const & lhs , ElementObsT const & rhs ) { - return lhs == rhs.lock(); + return lhs.get() == rhs; } static bool areElementsEqual( ElementPtrT const & lhs @@ -492,7 +492,7 @@ namespace castor static bool isElementObsNull( ElementObsT const & element ) { - return element.lock() == nullptr; + return element == nullptr; } }; /** @@ -581,6 +581,12 @@ namespace castor template< typename ResT, typename KeyT, typename TraitsT > using ResourceCachePtrT = UniquePtr< ResourceCacheT< ResT, KeyT, TraitsT > >; + template< typename ResT, typename KeyT > + struct Deleter< ResourceT< ResT, KeyT > > + { + inline void operator()( ResourceT< ResT, KeyT > * pointer )noexcept; + }; + //@} } diff --git a/include/Core/CastorUtils/Design/Resource.hpp b/include/Core/CastorUtils/Design/Resource.hpp index 26ecaa5b64..ec38e0cc3c 100644 --- a/include/Core/CastorUtils/Design/Resource.hpp +++ b/include/Core/CastorUtils/Design/Resource.hpp @@ -168,9 +168,9 @@ namespace castor template< typename ResT , typename KeyT , typename ... ParametersT > - inline ResourceSPtrT< ResT, KeyT > makeResource( ParametersT && ... params ) + inline ResourcePtrT< ResT, KeyT > makeResource( ParametersT && ... params ) { - return std::make_shared< ResourceT< ResT, KeyT > >( std::forward< ParametersT >( params )... ); + return castor::makeUnique< ResourceT< ResT, KeyT > >( std::forward< ParametersT >( params )... ); } } diff --git a/include/Core/CastorUtils/Design/Resource.inl b/include/Core/CastorUtils/Design/Resource.inl index 7850d36d3a..3150aae3ad 100644 --- a/include/Core/CastorUtils/Design/Resource.inl +++ b/include/Core/CastorUtils/Design/Resource.inl @@ -7,6 +7,14 @@ namespace castor { //********************************************************************************************* + template< typename ResT, typename KeyT > + inline void Deleter< ResourceT< ResT, KeyT > >::operator()( ResourceT< ResT, KeyT > * pointer )noexcept + { + delete pointer; + } + + //********************************************************************************************* + template< typename ResT, typename KeyT > template< typename ... ParametersT > ResourceT< ResT, KeyT >::ResourceT( ParametersT && ... params ) diff --git a/source/Core/Castor3D/Cache/GeometryCache.cpp b/source/Core/Castor3D/Cache/GeometryCache.cpp index 7e8f9f5f3e..4c835cd7e9 100644 --- a/source/Core/Castor3D/Cache/GeometryCache.cpp +++ b/source/Core/Castor3D/Cache/GeometryCache.cpp @@ -54,7 +54,7 @@ namespace castor3d , rootCameraNode , [this, &scene]( ElementT & element ) { - auto mesh = element.getMesh().lock(); + auto mesh = element.getMesh(); if ( mesh ) { diff --git a/source/Core/Castor3D/Cache/MaterialCache.cpp b/source/Core/Castor3D/Cache/MaterialCache.cpp index be2113c0e3..bf943a8e54 100644 --- a/source/Core/Castor3D/Cache/MaterialCache.cpp +++ b/source/Core/Castor3D/Cache/MaterialCache.cpp @@ -23,7 +23,7 @@ CU_ImplementCUSmartPtr( castor3d, MaterialCache ) namespace castor3d { - const castor::String ResourceCacheTraitsT< castor3d::Material, castor::String >::Name = cuT( "Material" ); + const castor::String PtrCacheTraitsT< castor3d::Material, castor::String >::Name = cuT( "Material" ); } namespace castor @@ -144,21 +144,21 @@ namespace castor if ( !m_passBuffer ) { auto lock( makeUniqueLock( *this ) ); - MaterialResPtr created; + MaterialObs created{}; auto defaultMaterial = doTryAddNoLockT( Material::DefaultMaterialName , false , created , m_engine , m_engine.getDefaultLightingModel() ); - auto material = defaultMaterial.lock(); + auto material = defaultMaterial; - if ( created.lock() == material ) + if ( created == material ) { material->createPass(); material->getPass( 0 )->createComponent< castor3d::TwoSidedComponent >()->setTwoSided( true ); } - m_defaultMaterial = material.get(); + m_defaultMaterial = material; m_passBuffer = castor::makeUnique< PassBuffer >( m_engine , device , MaxMaterialsCount ); diff --git a/source/Core/Castor3D/Cache/OverlayCache.cpp b/source/Core/Castor3D/Cache/OverlayCache.cpp index baf872f9cb..d28fbd7dee 100644 --- a/source/Core/Castor3D/Cache/OverlayCache.cpp +++ b/source/Core/Castor3D/Cache/OverlayCache.cpp @@ -152,7 +152,7 @@ namespace castor FontTextureRPtr ResourceCacheT< Overlay, String, OverlayCacheTraits >::createFontTexture( castor::FontResPtr font ) { auto lock( makeUniqueLock( *this ) ); - auto fontName = font.lock()->getName(); + auto fontName = font->getName(); auto ires = m_fontTextures.emplace( fontName, nullptr ); if ( ires.second ) diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index bd81770451..6689bcda15 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -225,23 +225,20 @@ namespace castor3d { auto image = engine.tryFindImage( name ); - if ( !image.lock() ) + if ( !image ) { - auto img = engine.createImage( name + image = engine.addNewImage( name , castor::ImageCreateParams{ type , data , { false, false, false } } ); - image = engine.addImage( name, img ); } - auto img = image.lock(); - - if ( !img ) + if ( !image ) { CU_LoaderError( "Couldn't load image." ); } - return getImageBuffer( *img, allowSRGB, engine.getMaxImageSize() ); + return getImageBuffer( *image, allowSRGB, engine.getMaxImageSize() ); } static castor::PxBufferBaseUPtr getFileImage( Engine & engine @@ -252,22 +249,19 @@ namespace castor3d { auto image = engine.tryFindImage( name ); - if ( !image.lock() ) + if ( !image ) { - auto img = engine.createImage( name + image = engine.addNewImage( name , castor::ImageCreateParams{ folder / relative , { false, false, false } } ); - image = engine.addImage( name, img ); } - auto img = image.lock(); - - if ( !img ) + if ( !image ) { CU_LoaderError( "Couldn't load image." ); } - return getImageBuffer( *img, allowSRGB, engine.getMaxImageSize() ); + return getImageBuffer( *image, allowSRGB, engine.getMaxImageSize() ); } static TextureLayoutUPtr getTextureLayout( Engine & engine diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index c8ca149421..e1440f43fb 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -104,7 +104,7 @@ namespace castor3d auto img = engine.tryAddImage( cuT( "BRDF" ) , true , created - , castor::ImageCreateParams{ imagePath, { false, false, false } } ).lock(); + , castor::ImageCreateParams{ imagePath, { false, false, false } } ); auto buffer = castor::PxBufferBase::create( img->getPixels()->getDimensions() , castor::PixelFormat::eR8G8B8A8_UNORM , img->getPixels()->getConstPtr() @@ -343,14 +343,14 @@ namespace castor3d m_textureCache->initialise( m_renderSystem->getRenderDevice() ); - if ( m_lightsSampler.lock() ) + if ( m_lightsSampler ) { - postEvent( makeGpuInitialiseEvent( **m_lightsSampler.lock() ) ); + postEvent( makeGpuInitialiseEvent( *m_lightsSampler ) ); } - if ( m_defaultSampler.lock() ) + if ( m_defaultSampler ) { - postEvent( makeGpuInitialiseEvent( **m_defaultSampler.lock() ) ); + postEvent( makeGpuInitialiseEvent( *m_defaultSampler ) ); } doLoadCoreData(); @@ -396,14 +396,14 @@ namespace castor3d postEvent( makeGpuCleanupEvent( *m_targetCache ) ); - if ( m_lightsSampler.lock() ) + if ( m_lightsSampler ) { - postEvent( makeCpuCleanupEvent( *m_lightsSampler.lock() ) ); + postEvent( makeCpuCleanupEvent( *m_lightsSampler ) ); } - if ( m_defaultSampler.lock() ) + if ( m_defaultSampler ) { - postEvent( makeCpuCleanupEvent( *m_defaultSampler.lock() ) ); + postEvent( makeCpuCleanupEvent( *m_defaultSampler ) ); } postEvent( makeCpuFunctorEvent( EventType::ePostRender @@ -637,7 +637,7 @@ namespace castor3d return m_renderLoop->getWantedFps(); } - castor3d::MaterialRPtr Engine::getDefaultMaterial()const + castor3d::MaterialObs Engine::getDefaultMaterial()const { return m_materialCache->getDefaultMaterial(); } @@ -1072,7 +1072,7 @@ namespace castor3d { auto lock( castor::makeUniqueLock( getMaterialCache() ) ); - for ( auto materialIt : getMaterialCache() ) + for ( auto & materialIt : getMaterialCache() ) { materialIt.second->setSerialisable( false ); } @@ -1081,7 +1081,7 @@ namespace castor3d { auto lock( castor::makeUniqueLock( getFontCache() ) ); - for ( auto fontIt : getFontCache() ) + for ( auto & fontIt : getFontCache() ) { fontIt.second->setSerialisable( false ); } diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index 61394e9c30..63d36447a9 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -277,7 +277,7 @@ namespace castor3d return doGetBackground().getOverlay(); } - void Control::setBackgroundMaterial( MaterialRPtr value ) + void Control::setBackgroundMaterial( MaterialObs value ) { if ( !m_style->isBackgroundInvisible() ) { @@ -295,7 +295,7 @@ namespace castor3d doGetBackground().setBorderPosition( value ); } - void Control::setBackgroundBorderMaterial( MaterialRPtr value ) + void Control::setBackgroundBorderMaterial( MaterialObs value ) { if ( !m_style->isForegroundInvisible() ) { diff --git a/source/Core/Castor3D/Gui/GuiModule.cpp b/source/Core/Castor3D/Gui/GuiModule.cpp index 7d8e022c30..61e1e5e91c 100644 --- a/source/Core/Castor3D/Gui/GuiModule.cpp +++ b/source/Core/Castor3D/Gui/GuiModule.cpp @@ -54,45 +54,45 @@ namespace castor3d return pass.getColour(); } - MaterialRPtr createMaterial( Engine & engine + MaterialObs createMaterial( Engine & engine , castor::String const & name , castor::HdrRgbColour const & colour ) { auto & cache = engine.getMaterialCache(); - MaterialResPtr created; + MaterialObs created{}; auto result = cache.tryAdd( name , true , created , engine , engine.getDefaultLightingModel() ); - if ( created.lock() == result.lock() ) + if ( created == result ) { - result.lock()->createPass(); + result->createPass(); } - setMaterialColour( *result.lock()->getPass( 0u ), colour ); - return result.lock().get(); + setMaterialColour( *result->getPass( 0u ), colour ); + return result; } - MaterialRPtr createMaterial( Engine & engine + MaterialObs createMaterial( Engine & engine , castor::String const & name , TextureLayoutUPtr texture ) { auto & cache = engine.getMaterialCache(); - MaterialResPtr created; + MaterialObs created{}; auto result = cache.tryAdd( name , true , created , engine , engine.getDefaultLightingModel() ); - if ( created.lock() == result.lock() ) + if ( created == result ) { - result.lock()->createPass(); + result->createPass(); } - auto pass = result.lock()->getPass( 0u ); + auto pass = result->getPass( 0u ); if ( pass->getTextureUnitsCount() == 0 ) { @@ -110,6 +110,6 @@ namespace castor3d auto unit = pass->getTextureUnit( 0 ); unit->setTexture( std::move( texture ) ); - return result.lock().get(); + return result; } } diff --git a/source/Core/Castor3D/Gui/Gui_Parsers.cpp b/source/Core/Castor3D/Gui/Gui_Parsers.cpp index 0a939b4581..e79c96e03d 100644 --- a/source/Core/Castor3D/Gui/Gui_Parsers.cpp +++ b/source/Core/Castor3D/Gui/Gui_Parsers.cpp @@ -1347,7 +1347,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1373,7 +1373,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1399,7 +1399,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1425,7 +1425,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1451,7 +1451,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1477,7 +1477,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1503,7 +1503,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1529,7 +1529,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1555,7 +1555,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1581,7 +1581,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1640,7 +1640,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1666,7 +1666,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1749,7 +1749,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1789,7 +1789,7 @@ namespace castor3d if ( auto style = guiContext.progressStyle ) { auto name = params[0]->get< castor::String >(); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1861,7 +1861,7 @@ namespace castor3d if ( auto style = guiContext.progressStyle ) { auto name = params[0]->get< castor::String >(); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1928,7 +1928,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -1986,7 +1986,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -2012,7 +2012,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = guiContext.engine->findMaterial( name ).lock().get(); + auto material = guiContext.engine->findMaterial( name ); if ( material ) { @@ -2068,7 +2068,7 @@ namespace castor3d params[0]->get( name ); auto font = cache.find( name ); - if ( font.lock() ) + if ( font ) { guiContext.stylesHolder.top()->setDefaultFont( font ); } diff --git a/source/Core/Castor3D/Material/Material.cpp b/source/Core/Castor3D/Material/Material.cpp index 3d83e8c4e7..4c34afcf2a 100644 --- a/source/Core/Castor3D/Material/Material.cpp +++ b/source/Core/Castor3D/Material/Material.cpp @@ -7,6 +7,8 @@ #include "Castor3D/Material/Pass/PassFactory.hpp" #include "Castor3D/Render/RenderSystem.hpp" +CU_ImplementCUSmartPtr( castor3d, Material ) + namespace castor3d { const castor::String Material::DefaultMaterialName = cuT( "C3D_DefaultMaterial" ); @@ -22,16 +24,30 @@ namespace castor3d void Material::initialise() { + if ( m_initialised ) + { + return; + } + log::debug << cuT( "Initialising material [" ) << getName() << cuT( "]" ) << std::endl; for ( auto & pass : m_passes ) { pass->initialise(); } + + m_initialised = true; } void Material::cleanup() { + if ( !m_initialised ) + { + return; + } + + m_initialised = false; + for ( auto & pass : m_passes ) { pass->cleanup(); diff --git a/source/Core/Castor3D/Material/MaterialImporter.cpp b/source/Core/Castor3D/Material/MaterialImporter.cpp index 8084260352..44559e86cb 100644 --- a/source/Core/Castor3D/Material/MaterialImporter.cpp +++ b/source/Core/Castor3D/Material/MaterialImporter.cpp @@ -111,22 +111,22 @@ namespace castor3d return false; } - castor::ImageSPtr MaterialImporter::loadImage( castor::String const & name + castor::ImageRPtr MaterialImporter::loadImage( castor::String const & name , castor::ImageCreateParams const & params )const { - castor::ImageSPtr result; + castor::ImageRPtr result{}; try { auto image = getEngine()->tryFindImage( name ); - if ( !image.lock() ) + if ( !image ) { auto img = getEngine()->createImage( name, params ); image = getEngine()->addImage( name, img ); } - result = image.lock(); + result = image; } catch ( castor::Exception & exc ) { @@ -144,9 +144,9 @@ namespace castor3d return result; } - castor::ImageSPtr MaterialImporter::loadImage( castor::Path const & path )const + castor::ImageRPtr MaterialImporter::loadImage( castor::Path const & path )const { - castor::ImageSPtr result; + castor::ImageRPtr result{}; castor::Path relative; castor::Path folder; @@ -160,7 +160,7 @@ namespace castor3d return result; } - castor::ImageSPtr MaterialImporter::loadImage( castor::String name + castor::ImageRPtr MaterialImporter::loadImage( castor::String name , castor::String type , castor::ByteArray data )const { @@ -170,7 +170,7 @@ namespace castor3d , { false, false, false } } ); } - TextureSourceInfo MaterialImporter::loadTexture( castor3d::SamplerRes sampler + TextureSourceInfo MaterialImporter::loadTexture( castor3d::SamplerObs sampler , castor::Path const & path , TextureConfiguration const & config )const { @@ -188,7 +188,7 @@ namespace castor3d , { allowCompression, true, true } }; } - TextureSourceInfo MaterialImporter::loadTexture( castor3d::SamplerRes sampler + TextureSourceInfo MaterialImporter::loadTexture( castor3d::SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data @@ -209,7 +209,7 @@ namespace castor3d , { allowCompression, true, true } }; } - void MaterialImporter::loadTexture( castor3d::SamplerRes sampler + void MaterialImporter::loadTexture( castor3d::SamplerObs sampler , castor::Path const & path , PassTextureConfig const & config , Pass & pass )const @@ -225,7 +225,7 @@ namespace castor3d } } - void MaterialImporter::loadTexture( castor3d::SamplerRes sampler + void MaterialImporter::loadTexture( castor3d::SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data diff --git a/source/Core/Castor3D/Material/Texture/Sampler.cpp b/source/Core/Castor3D/Material/Texture/Sampler.cpp index 1021cbe548..393b8dacb1 100644 --- a/source/Core/Castor3D/Material/Texture/Sampler.cpp +++ b/source/Core/Castor3D/Material/Texture/Sampler.cpp @@ -13,7 +13,7 @@ CU_ImplementCUSmartPtr( castor3d, Sampler ) namespace castor3d { - SamplerResPtr createSampler( Engine & engine + SamplerObs createSampler( Engine & engine , castor::String const & baseName , VkFilter filter , VkImageSubresourceRange const * range ) @@ -23,7 +23,7 @@ namespace castor3d + ( range ? cuT( "_" ) + castor::string::toString( range->baseMipLevel ) + cuT( "_" ) + castor::string::toString( range->levelCount ) : castor::String{} ); - SamplerResPtr sampler; + SamplerObs sampler{}; if ( engine.hasSampler( name ) ) { @@ -52,15 +52,15 @@ namespace castor3d ? float( range->baseMipLevel + range->levelCount ) : 1000.0f ), // maxLod }; - auto resource = castor::makeResource< Sampler, castor::String >( name + auto resource = engine.createSampler( name , engine , std::move( createInfo ) ); - sampler = engine.addSampler( name + sampler = engine.addNewSampler( name , resource , false ); } - sampler.lock()->initialise( engine.getRenderSystem()->getRenderDevice() ); + sampler->initialise( engine.getRenderSystem()->getRenderDevice() ); return sampler; } diff --git a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp index c3bee13b54..991217025a 100644 --- a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp @@ -586,22 +586,19 @@ namespace castor3d { auto image = engine.tryFindImage( name ); - if ( !image.lock() ) + if ( !image ) { - auto img = engine.createImage( name + image = engine.addNewImage( name , castor::ImageCreateParams{ folder / relative - , std::move( config ) } ); - image = engine.addImage( name, img ); + , std::move( config ) }); } - auto img = image.lock(); - - if ( !img ) + if ( !image ) { CU_LoaderError( "Couldn't load image." ); } - auto buffer = adaptBuffer( img->getPixels(), mipLevels ); + auto buffer = adaptBuffer( image->getPixels(), mipLevels ); if ( !buffer ) { @@ -609,7 +606,7 @@ namespace castor3d } srcMipLevels = buffer->getLevels(); - castor::ImageLayout layout{ img->getLayout().type, *buffer }; + castor::ImageLayout layout{ image->getLayout().type, *buffer }; return castor::Image{ name , folder / relative , layout diff --git a/source/Core/Castor3D/Material/Texture/TextureModule.cpp b/source/Core/Castor3D/Material/Texture/TextureModule.cpp index 98c33db583..24353328a8 100644 --- a/source/Core/Castor3D/Material/Texture/TextureModule.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureModule.cpp @@ -7,7 +7,7 @@ CU_ImplementCUSmartPtr( castor3d, SamplerCache ) namespace castor3d { - const castor::String ResourceCacheTraitsT< castor3d::Sampler, castor::String >::Name = cuT( "Sampler" ); + const castor::String PtrCacheTraitsT< castor3d::Sampler, castor::String >::Name = cuT( "Sampler" ); castor::String getName( TextureSpace value ) { diff --git a/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp b/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp index d70dabee83..20112e383e 100644 --- a/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureSourceInfo.cpp @@ -8,7 +8,7 @@ namespace castor3d { //************************************************************************************************ - TextureSourceInfo::TextureSourceInfo( SamplerRes sampler + TextureSourceInfo::TextureSourceInfo( SamplerObs sampler , castor::Path folder , castor::Path relative , castor::ImageLoaderConfig loadConfig ) @@ -19,7 +19,7 @@ namespace castor3d { } - TextureSourceInfo::TextureSourceInfo( SamplerRes sampler + TextureSourceInfo::TextureSourceInfo( SamplerObs sampler , castor::String name , castor::String type , castor::ByteArray data @@ -32,14 +32,14 @@ namespace castor3d { } - TextureSourceInfo::TextureSourceInfo( SamplerRes sampler + TextureSourceInfo::TextureSourceInfo( SamplerObs sampler , RenderTargetRPtr renderTarget ) : m_sampler{ std::move( sampler ) } , m_renderTarget{ std::move( renderTarget ) } { } - TextureSourceInfo::TextureSourceInfo( SamplerRes sampler + TextureSourceInfo::TextureSourceInfo( SamplerObs sampler , ashes::ImageCreateInfo const & createInfo ) : m_sampler{ std::move( sampler ) } , m_createInfo{ static_cast< VkImageCreateInfo const & >( createInfo ) } @@ -55,7 +55,7 @@ namespace castor3d return std::hash< TextureSourceInfo const * >{}( &value ); } - auto result = std::hash< SamplerRes >{}( value.sampler() ); + auto result = std::hash< SamplerObs >{}( value.sampler() ); if ( value.isRenderTarget() ) { diff --git a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp index 1d48211bd4..9e07046d32 100644 --- a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp @@ -26,7 +26,6 @@ namespace castor3d , m_texture{ std::move( rhs.m_texture ) } , m_renderTarget{ std::move( rhs.m_renderTarget ) } , m_sampler{ std::move( rhs.m_sampler ) } - , m_ownSampler{ std::move( rhs.m_ownSampler ) } , m_descriptor{ std::move( rhs.m_descriptor ) } , m_id{ std::move( rhs.m_id ) } , m_changed{ std::move( rhs.m_changed ) } @@ -132,7 +131,7 @@ namespace castor3d } bool result = false; - auto sampler = getSampler().lock(); + auto sampler = getSampler(); CU_Require( sampler ); sampler->initialise( device ); @@ -209,9 +208,8 @@ namespace castor3d { auto & device = *m_device; m_device = nullptr; - auto sampler = getSampler().lock(); - if ( sampler ) + if ( auto sampler = getSampler() ) { sampler->cleanup(); } diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp index 1bf093b7dd..874306a496 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp @@ -80,7 +80,7 @@ namespace castor3d { } - bool InstantiationComponent::ref( MaterialRPtr material ) + bool InstantiationComponent::ref( MaterialObs material ) { bool result{ false }; auto it = find( *material ); @@ -105,7 +105,7 @@ namespace castor3d return result; } - void InstantiationComponent::unref( MaterialRPtr material ) + void InstantiationComponent::unref( MaterialObs material ) { auto it = find( *material ); @@ -129,7 +129,7 @@ namespace castor3d } } - uint32_t InstantiationComponent::getRefCount( MaterialRPtr material )const + uint32_t InstantiationComponent::getRefCount( MaterialObs material )const { uint32_t result = 0; auto it = find( *material ); @@ -142,7 +142,7 @@ namespace castor3d return result; } - bool InstantiationComponent::isInstanced( MaterialRPtr material )const + bool InstantiationComponent::isInstanced( MaterialObs material )const { return !getOwner()->isDynamic() && doCheckInstanced( getRefCount( material ) ); @@ -167,7 +167,7 @@ namespace castor3d } void InstantiationComponent::gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp index b39780655b..ba89a11fe1 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp @@ -68,7 +68,7 @@ namespace castor3d } void PassMasksComponent::gather( PipelineFlags const & flags - , MaterialRPtr material + , MaterialObs material , ashes::BufferCRefArray & buffers , std::vector< uint64_t > & offsets , ashes::PipelineVertexInputStateCreateInfoCRefArray & layouts diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp index fd0fb35b4f..1b88bbf4d5 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp @@ -34,7 +34,7 @@ namespace castor3d { size_t result = node.data.isDynamic() ? std::hash< Geometry const * >{}( &node.instance ) - : std::hash< MaterialRPtr >{}( node.pass->getOwner() ); + : std::hash< MaterialObs >{}( node.pass->getOwner() ); result = castor::hashCombine( result, flags.m_shaderFlags.value() ); result = castor::hashCombine( result, flags.m_programFlags.value() ); result = castor::hashCombine( result, flags.m_submeshFlags.value() ); @@ -561,8 +561,8 @@ namespace castor3d } void Submesh::instantiate( Geometry const * geometry - , MaterialRPtr oldMaterial - , MaterialRPtr newMaterial + , MaterialObs oldMaterial + , MaterialObs newMaterial , bool update ) { if ( oldMaterial != newMaterial ) diff --git a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp index 5bcc77855d..5dc8fbbf7c 100644 --- a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp +++ b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp @@ -40,7 +40,7 @@ namespace castor3d return 6u; } - void BorderPanelOverlay::setBorderMaterial( MaterialRPtr material ) + void BorderPanelOverlay::setBorderMaterial( MaterialObs material ) { m_borderMaterial = material; } diff --git a/source/Core/Castor3D/Overlay/FontTexture.cpp b/source/Core/Castor3D/Overlay/FontTexture.cpp index e330c0d2d9..d655070e3a 100644 --- a/source/Core/Castor3D/Overlay/FontTexture.cpp +++ b/source/Core/Castor3D/Overlay/FontTexture.cpp @@ -22,16 +22,14 @@ namespace castor3d { static TextureLayoutUPtr createTexture( Engine & engine, castor::FontResPtr font ) { - auto fnt = font.lock(); - - if ( !fnt ) + if ( !font ) { CU_Exception( "No Font given to FontTexture" ); } - uint32_t const maxWidth = fnt->getMaxWidth(); - uint32_t const maxHeight = fnt->getMaxHeight(); - uint32_t const count = uint32_t( std::ceil( double( std::distance( fnt->begin(), fnt->end() ) ) / 16.0 ) ); + uint32_t const maxWidth = font->getMaxWidth(); + uint32_t const maxHeight = font->getMaxHeight(); + uint32_t const count = uint32_t( std::ceil( double( std::distance( font->begin(), font->end() ) ) / 16.0 ) ); ashes::ImageCreateInfo image{ 0u , VK_IMAGE_TYPE_2D @@ -45,7 +43,7 @@ namespace castor3d return castor::makeUnique< TextureLayout >( *engine.getRenderSystem() , image , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT - , cuT( "FontTexture_" ) + fnt->getFaceName() + castor::string::toString( fnt->getHeight() ) ); + , cuT( "FontTexture_" ) + font->getFaceName() + castor::string::toString( font->getHeight() ) ); } } @@ -75,14 +73,12 @@ namespace castor3d , *this , MaxCharsPerBuffer ) } { - auto fnt = m_font.lock(); - - if ( !fnt ) + if ( !m_font ) { CU_Exception( "No Font given to FontTexture" ); } - if ( auto sampler = getEngine()->addNewSampler( fnt->getName(), *getEngine() ).lock() ) + if ( auto sampler = getEngine()->addNewSampler( m_font->getName(), *getEngine() ) ) { sampler->setWrapS( VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE ); sampler->setWrapT( VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE ); diff --git a/source/Core/Castor3D/Overlay/OverlayCategory.cpp b/source/Core/Castor3D/Overlay/OverlayCategory.cpp index e7e8ab72ce..3cf4c1e5e6 100644 --- a/source/Core/Castor3D/Overlay/OverlayCategory.cpp +++ b/source/Core/Castor3D/Overlay/OverlayCategory.cpp @@ -60,7 +60,7 @@ namespace castor3d m_computeSize = renderer.getSize(); } - void OverlayCategory::setMaterial( MaterialRPtr material ) + void OverlayCategory::setMaterial( MaterialObs material ) { m_material = material; } diff --git a/source/Core/Castor3D/Overlay/TextOverlay.cpp b/source/Core/Castor3D/Overlay/TextOverlay.cpp index aa668b9550..c958c3b464 100644 --- a/source/Core/Castor3D/Overlay/TextOverlay.cpp +++ b/source/Core/Castor3D/Overlay/TextOverlay.cpp @@ -373,7 +373,7 @@ namespace castor3d Engine * engine = m_overlay->getEngine(); auto & fontCache = engine->getFontCache(); - if ( auto font = fontCache.find( name ).lock() ) + if ( auto font = fontCache.find( name ) ) { auto fontTexture = engine->getOverlayCache().getFontTexture( font->getName() ); diff --git a/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp b/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp index 10428a2a0e..3d014c441e 100644 --- a/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp +++ b/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp @@ -34,7 +34,7 @@ namespace castor3d return instantiation.getRefCount( pass->getOwner() ); } - MaterialRPtr SubmeshRenderNode::getMaterial()const + MaterialObs SubmeshRenderNode::getMaterial()const { return pass->getOwner(); } diff --git a/source/Core/Castor3D/Render/Opaque/Lighting/LightsPipeline.cpp b/source/Core/Castor3D/Render/Opaque/Lighting/LightsPipeline.cpp index 0b02c1b993..87da9672e1 100644 --- a/source/Core/Castor3D/Render/Opaque/Lighting/LightsPipeline.cpp +++ b/source/Core/Castor3D/Render/Opaque/Lighting/LightsPipeline.cpp @@ -246,7 +246,7 @@ namespace castor3d writes.emplace_back( uint32_t( LightPassLgtIdx::eSmLinear ) , 0u , VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER - , ashes::VkDescriptorImageInfoArray{ { m_device.renderSystem.getEngine()->getDefaultSampler().lock()->getSampler() + , ashes::VkDescriptorImageInfoArray{ { m_device.renderSystem.getEngine()->getDefaultSampler()->getSampler() , m_smResult[SmTexture::eLinearDepth].wholeView , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL } } ); writes.emplace_back( uint32_t( LightPassLgtIdx::eSmLinearCmp ) @@ -258,7 +258,7 @@ namespace castor3d writes.emplace_back( uint32_t( LightPassLgtIdx::eSmVariance ) , 0u , VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER - , ashes::VkDescriptorImageInfoArray{ { m_device.renderSystem.getEngine()->getDefaultSampler().lock()->getSampler() + , ashes::VkDescriptorImageInfoArray{ { m_device.renderSystem.getEngine()->getDefaultSampler()->getSampler() , m_smResult[SmTexture::eVariance].wholeView , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL } } ); auto & randomStorage = m_device.renderSystem.getRandomStorage().getBuffer(); diff --git a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp index 725b7bc603..04eee2886a 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp @@ -707,7 +707,7 @@ namespace castor3d auto result = textDescriptorPool->createDescriptorSet( "TextOverlays_" + std::to_string( intptr_t( &fontTexture ) ) ); result->createBinding( textDescriptorLayout->getBinding( 0u ) , fontTexture.getTexture()->getDefaultView().getSampledView() - , fontTexture.getSampler().lock()->getSampler() ); + , fontTexture.getSampler()->getSampler() ); result->update(); descriptorConnection.descriptorSet = std::move( result ); descriptorConnection.connection = fontTexture.onResourceChanged.connect( [this, &descriptorConnection, &fontTexture]( DoubleBufferedTextureLayout const & ) @@ -1104,7 +1104,7 @@ namespace castor3d if ( auto text = overlay.getTextOverlay() ) { auto texture = text->getFontTexture(); - node = &m_draw.getTextNode( device, renderPass, pass, *texture->getTexture(), *texture->getSampler().lock() ); + node = &m_draw.getTextNode( device, renderPass, pass, *texture->getTexture(), *texture->getSampler() ); pipelineData = &m_common.textVertexBuffer->getDrawPipelineData( node->pipeline , texture , &m_draw.createTextDescriptorSet( *texture ) ); diff --git a/source/Core/Castor3D/Render/PBR/EnvironmentPrefilter.cpp b/source/Core/Castor3D/Render/PBR/EnvironmentPrefilter.cpp index dc612c44b4..98a5c3f248 100644 --- a/source/Core/Castor3D/Render/PBR/EnvironmentPrefilter.cpp +++ b/source/Core/Castor3D/Render/PBR/EnvironmentPrefilter.cpp @@ -45,12 +45,12 @@ namespace castor3d return result; } - static SamplerResPtr doCreateSampler( Engine & engine + static SamplerObs doCreateSampler( Engine & engine , RenderDevice const & device , std::string const & prefix , uint32_t maxLod ) { - SamplerResPtr result; + SamplerObs result{}; auto stream = castor::makeStringStream(); stream << prefix << cuT( "IblTexturesPrefiltered_" ) << maxLod; auto name = stream.str(); @@ -73,7 +73,7 @@ namespace castor3d result = engine.addSampler( name, created, false ); } - result.lock()->initialise( device ); + result->initialise( device ); return result; } @@ -263,7 +263,7 @@ namespace castor3d , VkExtent2D const & size , ashes::ImageView const & srcView , Texture const & dstTexture - , SamplerResPtr sampler + , SamplerObs sampler , bool isCharlie ) : RenderCube{ device, false, std::move( sampler ) } , m_renderPass{ renderPass } @@ -348,7 +348,7 @@ namespace castor3d , RenderDevice const & device , castor::Size const & size , Texture const & srcTexture - , SamplerResPtr sampler + , SamplerObs sampler , bool isCharlie ) : m_device{ device } , m_srcView{ srcTexture } diff --git a/source/Core/Castor3D/Render/PBR/IblTextures.cpp b/source/Core/Castor3D/Render/PBR/IblTextures.cpp index 5265916ad5..9c1395b291 100644 --- a/source/Core/Castor3D/Render/PBR/IblTextures.cpp +++ b/source/Core/Castor3D/Render/PBR/IblTextures.cpp @@ -33,13 +33,13 @@ namespace castor3d { namespace ibltex { - static SamplerResPtr doCreateSampler( Engine & engine + static SamplerObs doCreateSampler( Engine & engine , RenderDevice const & device ) { auto name = cuT( "IblTexturesBRDF" ); auto result = engine.tryFindSampler( name ); - if ( !result.lock() ) + if ( !result ) { auto created = engine.createSampler( name, engine ); created->setMinFilter( VK_FILTER_LINEAR ); @@ -50,7 +50,7 @@ namespace castor3d result = engine.addSampler( name, created, false ); } - result.lock()->initialise( engine.getRenderSystem()->getRenderDevice() ); + result->initialise( engine.getRenderSystem()->getRenderDevice() ); return result; } } @@ -61,7 +61,7 @@ namespace castor3d , RenderDevice const & device , Texture const & source , Texture const & brdf - , SamplerResPtr sampler ) + , SamplerObs sampler ) : OwnedBy< Scene >{ scene } , m_brdf{ brdf } , m_sampler{ ibltex::doCreateSampler( *scene.getEngine(), device ) } diff --git a/source/Core/Castor3D/Render/PBR/RadianceComputer.cpp b/source/Core/Castor3D/Render/PBR/RadianceComputer.cpp index 118b998f4c..350fb9d83d 100644 --- a/source/Core/Castor3D/Render/PBR/RadianceComputer.cpp +++ b/source/Core/Castor3D/Render/PBR/RadianceComputer.cpp @@ -45,13 +45,13 @@ namespace castor3d return result; } - static SamplerResPtr doCreateSampler( Engine & engine + static SamplerObs doCreateSampler( Engine & engine , RenderDevice const & device ) { auto name = cuT( "IblTexturesRadiance" ); auto result = engine.tryFindSampler( name ); - if ( !result.lock() ) + if ( !result ) { auto created = engine.createSampler( name, engine ); created->setMinFilter( VK_FILTER_LINEAR ); @@ -62,7 +62,7 @@ namespace castor3d result = engine.addSampler( name, created, false ); } - result.lock()->initialise( engine.getRenderSystem()->getRenderDevice() ); + result->initialise( engine.getRenderSystem()->getRenderDevice() ); return result; } @@ -311,7 +311,7 @@ namespace castor3d ashes::Sampler const & RadianceComputer::getSampler()const { - return m_sampler.lock()->getSampler(); + return m_sampler->getSampler(); } //********************************************************************************************* diff --git a/source/Core/Castor3D/Render/Ray.cpp b/source/Core/Castor3D/Render/Ray.cpp index 5793caf5e7..2eb7e555b2 100644 --- a/source/Core/Castor3D/Render/Ray.cpp +++ b/source/Core/Castor3D/Render/Ray.cpp @@ -279,7 +279,7 @@ namespace castor3d , SubmeshRPtr & nearestSubmesh , float & distance )const { - auto mesh = geometry->getMesh().lock(); + auto mesh = geometry->getMesh(); castor::Point3f center{ geometry->getParent()->getDerivedPosition() }; castor::BoundingSphere sphere{ center, mesh->getBoundingSphere().getRadius() }; //castor::Matrix4x4f const & transform{ geometry->getParent()->getDerivedTransformationMatrix() }; diff --git a/source/Core/Castor3D/Render/RenderTarget.cpp b/source/Core/Castor3D/Render/RenderTarget.cpp index 8e9ae73b2e..fc4ca0abd2 100644 --- a/source/Core/Castor3D/Render/RenderTarget.cpp +++ b/source/Core/Castor3D/Render/RenderTarget.cpp @@ -411,11 +411,11 @@ namespace castor3d m_graph.addOutput( m_combined.wholeViewId , crg::makeLayoutState( VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ) ); - auto sampler = engine.addNewSampler( RenderTarget::DefaultSamplerName + getName() + cuT( "Linear" ), engine ).lock(); + auto sampler = engine.addNewSampler( RenderTarget::DefaultSamplerName + getName() + cuT( "Linear" ), engine ); sampler->setMinFilter( VK_FILTER_LINEAR ); sampler->setMagFilter( VK_FILTER_LINEAR ); - sampler = engine.addNewSampler( RenderTarget::DefaultSamplerName + getName() + cuT( "Nearest" ), engine ).lock(); + sampler = engine.addNewSampler( RenderTarget::DefaultSamplerName + getName() + cuT( "Nearest" ), engine ); sampler->setMinFilter( VK_FILTER_NEAREST ); sampler->setMagFilter( VK_FILTER_NEAREST ); diff --git a/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp b/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp index 16d99257d0..c8c516ccdd 100644 --- a/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp +++ b/source/Core/Castor3D/Render/ShadowMap/ShadowMapDirectional.cpp @@ -79,8 +79,8 @@ namespace castor3d { auto result = scene.addNewMesh( name, scene ); - result.lock()->setSerialisable( false ); - auto submesh = result.lock()->createSubmesh(); + result->setSerialisable( false ); + auto submesh = result->createSubmesh(); static castor3d::InterleavedVertexArray const vertex{ []() { castor3d::InterleavedVertexArray result; @@ -115,7 +115,7 @@ namespace castor3d castor3d::LineIndices{ { 3u, 7u } }, }; mapping->addLineGroup( lines ); - MaterialResPtr material; + MaterialObs material{}; castor::String matName = cuT( "Frustum_" ) + colourName; if ( !scene.getEngine()->hasMaterial( matName ) ) @@ -123,7 +123,7 @@ namespace castor3d material = scene.getEngine()->addNewMaterial( matName , *scene.getEngine() , scene.getDefaultLightingModel() ); - auto pass = material.lock()->createPass(); + auto pass = material->createPass(); pass->enableLighting( false ); pass->enablePicking( false ); pass->setColour( colour ); @@ -133,8 +133,8 @@ namespace castor3d material = scene.getEngine()->findMaterial( matName ); } - submesh->setDefaultMaterial( material.lock().get() ); - result.lock()->computeContainers(); + submesh->setDefaultMaterial( material ); + result->computeContainers(); scene.getListener().postEvent( makeGpuInitialiseEvent( *submesh ) ); return result; } @@ -188,12 +188,12 @@ namespace castor3d if ( !scene.hasGeometry( name ) ) { - auto sceneNode = scene.addNewSceneNode( name ).lock(); + auto sceneNode = scene.addNewSceneNode( name ); auto geometry = std::make_shared< Geometry >( name, scene, *sceneNode, mesh ); geometry->setShadowCaster( false ); geometry->setCullable( false ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { geometry->setMaterial( *submesh, submesh->getDefaultMaterial() ); } @@ -557,10 +557,10 @@ namespace castor3d #if C3D_DebugCascadeFrustum auto name = "CascadeFrustum" + std::to_string( cascade ); auto & scene = *light.getScene(); - auto sceneNode = scene.tryFindGeometry( name ).lock(); + auto sceneNode = scene.tryFindGeometry( name ); sceneNode->setVisible( true ); auto & frustum = lightCamera.getFrustum(); - auto mesh = m_frustumMeshes[cascade].lock(); + auto mesh = m_frustumMeshes[cascade]; auto submesh = mesh->getSubmesh( 0u ); auto & points = submesh->getPoints(); diff --git a/source/Core/Castor3D/Render/Texture.cpp b/source/Core/Castor3D/Render/Texture.cpp index d6da1b2824..aafc774e50 100644 --- a/source/Core/Castor3D/Render/Texture.cpp +++ b/source/Core/Castor3D/Render/Texture.cpp @@ -311,7 +311,7 @@ namespace castor3d } auto & engine = *device->renderSystem.getEngine(); - SamplerResPtr c3dSampler; + SamplerObs c3dSampler{}; auto splName = getSamplerName( compareOp , minFilter , magFilter @@ -345,7 +345,7 @@ namespace castor3d c3dSampler = engine.addSampler( splName, created, false ); } - sampler = &c3dSampler.lock()->getSampler(); + sampler = &c3dSampler->getSampler(); } Texture::~Texture() diff --git a/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp b/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp index 7b9426c6ac..d88c64ffb2 100644 --- a/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp +++ b/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp @@ -30,7 +30,7 @@ namespace castor3d static uint32_t constexpr MtxUboIdx = 0u; static uint32_t constexpr InputImgIdx = 1u; - static SamplerResPtr doCreateSampler( RenderSystem & renderSystem + static SamplerObs doCreateSampler( RenderSystem & renderSystem , bool nearest ) { castor::String const name = nearest @@ -40,13 +40,13 @@ namespace castor3d ? VK_FILTER_NEAREST : VK_FILTER_LINEAR; auto & engine = *renderSystem.getEngine(); - SamplerResPtr result; + SamplerObs result{}; if ( engine.hasSampler( name ) ) { result = engine.findSampler( name ); } - else if ( auto sampler = engine.addNewSampler( name, engine ).lock() ) + else if ( auto sampler = engine.addNewSampler( name, engine ) ) { sampler->setMinFilter( filter ); sampler->setMagFilter( filter ); @@ -142,9 +142,9 @@ namespace castor3d RenderCube::RenderCube( RenderDevice const & device , bool nearest - , SamplerResPtr sampler ) + , SamplerObs sampler ) : m_device{ device } - , m_sampler{ ( sampler.lock() + , m_sampler{ ( sampler ? std::move( sampler ) : rendcube::doCreateSampler( m_device.renderSystem, nearest ) ) } { @@ -180,7 +180,7 @@ namespace castor3d , ashes::PipelineDepthStencilStateCreateInfo const & dsState ) { auto queueData = m_device.graphicsData(); - m_sampler.lock()->initialise( m_device ); + m_sampler->initialise( m_device ); m_matrixUbo = rendcube::doCreateMatrixUbo( m_device , *queueData->queue , *queueData->commandPool @@ -234,7 +234,7 @@ namespace castor3d , 1u ); facePipeline.descriptorSet->createBinding( m_descriptorLayout->getBinding( 1u ) , view - , m_sampler.lock()->getSampler() ); + , m_sampler->getSampler() ); doFillDescriptorSet( *m_descriptorLayout, *facePipeline.descriptorSet, face ); facePipeline.descriptorSet->update(); ++face; diff --git a/source/Core/Castor3D/Scene/Background/Background.cpp b/source/Core/Castor3D/Scene/Background/Background.cpp index f9a9f7a9d0..01e4a0917f 100644 --- a/source/Core/Castor3D/Scene/Background/Background.cpp +++ b/source/Core/Castor3D/Scene/Background/Background.cpp @@ -289,7 +289,7 @@ namespace castor3d castor::String const name = cuT( "Skybox" ); auto sampler = getEngine()->tryFindSampler( name ); - if ( !sampler.lock() ) + if ( !sampler ) { auto created = getEngine()->createSampler( name, *getEngine() ); created->setMinFilter( VK_FILTER_LINEAR ); @@ -303,11 +303,11 @@ namespace castor3d if ( m_texture->getMipmapCount() > 1u ) { - sampler.lock()->setMipFilter( VK_SAMPLER_MIPMAP_MODE_LINEAR ); + sampler->setMipFilter( VK_SAMPLER_MIPMAP_MODE_LINEAR ); } } - sampler.lock()->initialise( device ); + sampler->initialise( device ); m_sampler = sampler; if ( m_initialised diff --git a/source/Core/Castor3D/Scene/BillboardList.cpp b/source/Core/Castor3D/Scene/BillboardList.cpp index cdeae3a266..769dbcd888 100644 --- a/source/Core/Castor3D/Scene/BillboardList.cpp +++ b/source/Core/Castor3D/Scene/BillboardList.cpp @@ -238,7 +238,7 @@ namespace castor3d m_ids[&pass] = { id, renderNode }; } - void BillboardBase::setMaterial( MaterialRPtr value ) + void BillboardBase::setMaterial( MaterialObs value ) { auto oldMaterial = getMaterial(); diff --git a/source/Core/Castor3D/Scene/Geometry.cpp b/source/Core/Castor3D/Scene/Geometry.cpp index 55968b0811..d0d44d0b77 100644 --- a/source/Core/Castor3D/Scene/Geometry.cpp +++ b/source/Core/Castor3D/Scene/Geometry.cpp @@ -38,9 +38,7 @@ namespace castor3d { if ( !m_listCreated ) { - auto mesh = getMesh().lock(); - - if ( mesh ) + if ( auto mesh = getMesh() ) { uint32_t nbFaces = mesh->getFaceCount(); uint32_t nbVertex = mesh->getVertexCount(); @@ -58,8 +56,8 @@ namespace castor3d auto lock( castor::makeUniqueLock( m_mutex ) ); doUpdateMesh(); doUpdateContainers(); - bool hasEnvironmentMapping = std::any_of( mesh.lock()->begin() - , mesh.lock()->end() + bool hasEnvironmentMapping = std::any_of( mesh->begin() + , mesh->end() , []( SubmeshUPtr const & submesh ) { return submesh->getDefaultMaterial() @@ -74,14 +72,14 @@ namespace castor3d } void Geometry::setMaterial( Submesh & submesh - , MaterialRPtr material ) + , MaterialObs material ) { - if ( auto mesh = getMesh().lock() ) + if ( auto mesh = getMesh() ) { auto lock( castor::makeUniqueLock( m_mutex ) ); CU_Require( submesh.getId() < mesh->getSubmeshCount() ); bool changed = false; - MaterialRPtr oldMaterial{}; + MaterialObs oldMaterial{}; auto itSubMat = m_submeshesMaterials.find( &submesh ); if ( itSubMat != m_submeshesMaterials.end() ) @@ -152,10 +150,10 @@ namespace castor3d } } - MaterialRPtr Geometry::getMaterial( Submesh const & submesh )const + MaterialObs Geometry::getMaterial( Submesh const & submesh )const { auto lock( castor::makeUniqueLock( m_mutex ) ); - MaterialRPtr result{}; + MaterialObs result{}; auto it = m_submeshesMaterials.find( &submesh ); if ( it != m_submeshesMaterials.end() ) @@ -271,7 +269,7 @@ namespace castor3d m_submeshesBoxes.clear(); m_submeshesSpheres.clear(); - if ( auto mesh = m_mesh.lock() ) + if ( auto mesh = m_mesh ) { m_meshName = mesh->getName(); diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp index f77a74563c..48ab1d0e4b 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp @@ -229,7 +229,7 @@ namespace castor3d m_firstUpdate = false; } - void ParticleSystem::setMaterial( MaterialRPtr material ) + void ParticleSystem::setMaterial( MaterialObs material ) { m_material = material; @@ -264,7 +264,7 @@ namespace castor3d } } - MaterialRPtr ParticleSystem::getMaterial()const + MaterialObs ParticleSystem::getMaterial()const { return m_material; } diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index ce1d614f0c..b0002aeb08 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -325,7 +325,7 @@ namespace castor3d { auto & geometry = *geomIt.second; auto node = geometry.getParent(); - auto mesh = geometry.getMesh().lock(); + auto mesh = geometry.getMesh(); if ( node && mesh ) { @@ -495,9 +495,7 @@ namespace castor3d for ( auto & pair : *m_geometryCache ) { - auto mesh = pair.second->getMesh().lock(); - - if ( mesh ) + if ( auto mesh = pair.second->getMesh() ) { result += mesh->getVertexCount(); } @@ -514,9 +512,7 @@ namespace castor3d for ( auto & pair : *m_geometryCache ) { - auto mesh = pair.second->getMesh().lock(); - - if ( mesh ) + if ( auto mesh = pair.second->getMesh() ) { result += mesh->getFaceCount(); } @@ -1085,14 +1081,15 @@ namespace castor3d { if ( cache.hasNoLock( matName ) ) { - auto material = cache.findNoLock( matName ).lock(); - - m_needsSubsurfaceScattering |= material->hasSubsurfaceScattering(); - - for ( auto & pass : *material ) + if ( auto material = cache.findNoLock( matName ) ) { - m_hasTransparentObjects |= pass->hasAlphaBlending(); - m_hasOpaqueObjects |= !pass->hasOnlyAlphaBlending(); + m_needsSubsurfaceScattering |= material->hasSubsurfaceScattering(); + + for ( auto & pass : *material ) + { + m_hasTransparentObjects |= pass->hasAlphaBlending(); + m_hasOpaqueObjects |= !pass->hasOnlyAlphaBlending(); + } } } } diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 402586a70b..f8cc725653 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -264,7 +264,7 @@ namespace castor3d else { params[0]->get( parsingContext.strName ); - parsingContext.material = parsingContext.parser->getEngine()->tryFindMaterial( parsingContext.strName ).lock().get(); + parsingContext.material = parsingContext.parser->getEngine()->tryFindMaterial( parsingContext.strName ); parsingContext.passIndex = 0u; parsingContext.createMaterial = parsingContext.material == nullptr; @@ -292,11 +292,11 @@ namespace castor3d castor::String name; parsingContext.sampler = parsingContext.parser->getEngine()->tryFindSampler( params[0]->get( name ) ); - if ( !parsingContext.sampler.lock() ) + if ( !parsingContext.sampler ) { parsingContext.ownSampler = parsingContext.parser->getEngine()->createSampler( name , *parsingContext.parser->getEngine() ); - parsingContext.sampler = parsingContext.ownSampler; + parsingContext.sampler = parsingContext.ownSampler.get(); } } } @@ -786,7 +786,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -803,7 +803,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -820,7 +820,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -837,7 +837,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { float rValue = -1000; params[0]->get( rValue ); @@ -862,7 +862,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { float rValue = 1000; params[0]->get( rValue ); @@ -887,7 +887,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { float rValue = 1000; params[0]->get( rValue ); @@ -912,7 +912,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -929,7 +929,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -946,7 +946,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -963,7 +963,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t colour; params[0]->get( colour ); @@ -980,7 +980,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { bool value; params[0]->get( value ); @@ -997,7 +997,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { float rValue = 1000; params[0]->get( rValue ); @@ -1014,7 +1014,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t mode; params[0]->get( mode ); @@ -1031,7 +1031,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto sampler = parsingContext.sampler.lock() ) + if ( auto sampler = parsingContext.sampler ) { uint32_t uiMode; params[0]->get( uiMode ); @@ -1047,7 +1047,7 @@ namespace castor3d CU_ImplementAttributeParser( parserSamplerEnd ) { auto & parsingContext = getParserContext( context ); - auto sampler = parsingContext.sampler.lock(); + auto sampler = parsingContext.sampler; if ( !parsingContext.ownSampler && !sampler ) @@ -1063,7 +1063,7 @@ namespace castor3d , true ); } - parsingContext.sampler.reset(); + parsingContext.sampler = {}; } } CU_EndAttributePop() @@ -1649,11 +1649,11 @@ namespace castor3d { parsingContext.mesh = parsingContext.scene->tryFindMesh( name ); - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { parsingContext.ownMesh = parsingContext.scene->createMesh( name , *parsingContext.scene ); - parsingContext.mesh = parsingContext.ownMesh; + parsingContext.mesh = parsingContext.ownMesh.get(); } } else @@ -1786,7 +1786,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - auto material = parsingContext.parser->getEngine()->tryFindMaterial( name ).lock().get(); + auto material = parsingContext.parser->getEngine()->tryFindMaterial( name ); if ( material ) { @@ -2857,14 +2857,14 @@ namespace castor3d } else if ( !params.empty() ) { - if ( parsingContext.geometry->getMesh().lock() ) + if ( parsingContext.geometry->getMesh() ) { castor::String name; - auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[0]->get( name ) ).lock().get(); + auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[0]->get( name ) ); if ( material ) { - for ( auto & submesh : *parsingContext.geometry->getMesh().lock() ) + for ( auto & submesh : *parsingContext.geometry->getMesh() ) { parsingContext.geometry->setMaterial( *submesh, material ); } @@ -2962,17 +2962,17 @@ namespace castor3d } else if ( !params.empty() ) { - if ( parsingContext.geometry->getMesh().lock() ) + if ( parsingContext.geometry->getMesh() ) { castor::String name; uint16_t index; - auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[1]->get( name ) ).lock().get(); + auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[1]->get( name ) ); if ( material ) { - if ( parsingContext.geometry->getMesh().lock()->getSubmeshCount() > params[0]->get( index ) ) + if ( parsingContext.geometry->getMesh()->getSubmeshCount() > params[0]->get( index ) ) { - auto submesh = parsingContext.geometry->getMesh().lock()->getSubmesh( index ); + auto submesh = parsingContext.geometry->getMesh()->getSubmesh( index ); parsingContext.geometry->setMaterial( *submesh, material ); } else @@ -3125,7 +3125,7 @@ namespace castor3d { CU_ParsingError( cuT( "No scene initialised" ) ); } - else if ( !parsingContext.mesh.lock() ) + else if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No Mesh initialised." ) ); } @@ -3143,7 +3143,7 @@ namespace castor3d } auto & factory = parsingContext.scene->getEngine()->getMeshFactory(); - factory.create( type )->generate( *parsingContext.mesh.lock(), parameters ); + factory.create( type )->generate( *parsingContext.mesh, parameters ); } } CU_EndAttribute() @@ -3155,13 +3155,13 @@ namespace castor3d parsingContext.face2 = -1; parsingContext.submesh = {}; - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No Mesh initialised." ) ); } else { - parsingContext.submesh = parsingContext.mesh.lock()->createSubmesh(); + parsingContext.submesh = parsingContext.mesh->createSubmesh(); } } CU_EndAttributePush( CSCNSection::eSubmesh ) @@ -3170,7 +3170,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( auto mesh = parsingContext.mesh.lock() ) + if ( auto mesh = parsingContext.mesh ) { castor::Path path; castor::Path pathFile = context.file.getPath() / params[0]->get( path ); @@ -3189,7 +3189,7 @@ namespace castor3d , true ) ) { CU_ParsingError( cuT( "Mesh Import failed" ) ); - parsingContext.mesh.reset(); + parsingContext.mesh = {}; } } else @@ -3203,7 +3203,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No Mesh initialised." ) ); } @@ -3241,7 +3241,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No mesh initialised." ) ); } @@ -3267,12 +3267,12 @@ namespace castor3d { CU_ParsingError( cuT( "Mesh Import failed" ) ); } - else if ( mesh.getSubmeshCount() == parsingContext.mesh.lock()->getSubmeshCount() ) + else if ( mesh.getSubmeshCount() == parsingContext.mesh->getSubmeshCount() ) { for ( auto & morphSubmesh : mesh ) { auto id = morphSubmesh->getId(); - auto submesh = parsingContext.mesh.lock()->getSubmesh( id ); + auto submesh = parsingContext.mesh->getSubmesh( id ); auto submeshFlags = morphSubmesh->getSubmeshFlags( nullptr ); auto component = submesh->hasComponent( MorphComponent::Name ) ? submesh->getComponent< MorphComponent >() @@ -3384,18 +3384,18 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No Mesh initialised." ) ); } else if ( !params.empty() ) { castor::String name; - auto material = parsingContext.parser->getEngine()->findMaterial( params[0]->get( name ) ).lock().get(); + auto material = parsingContext.parser->getEngine()->findMaterial( params[0]->get( name ) ); if ( material ) { - for ( auto & submesh : *parsingContext.mesh.lock() ) + for ( auto & submesh : *parsingContext.mesh ) { submesh->setDefaultMaterial( material ); } @@ -3421,7 +3421,7 @@ namespace castor3d { CU_ParsingError( cuT( "No Scene initialised." ) ); } - else if ( auto mesh = parsingContext.mesh.lock() ) + else if ( auto mesh = parsingContext.mesh ) { castor::String name; auto skeleton = parsingContext.scene->findSkeleton( params[0]->get( name ) ); @@ -3450,7 +3450,7 @@ namespace castor3d { CU_ParsingError( cuT( "No Scene initialised." ) ); } - else if ( auto mesh = parsingContext.mesh.lock() ) + else if ( auto mesh = parsingContext.mesh ) { castor::String name; params[0]->get( name ); @@ -3471,7 +3471,7 @@ namespace castor3d { CU_ParsingError( cuT( "No Scene initialised." ) ); } - else if ( auto mesh = parsingContext.mesh.lock() ) + else if ( auto mesh = parsingContext.mesh ) { if ( parsingContext.ownMesh ) { @@ -3486,7 +3486,7 @@ namespace castor3d } parsingContext.importer.reset(); - parsingContext.mesh.reset(); + parsingContext.mesh = {}; for ( auto & submesh : *mesh ) { @@ -3516,7 +3516,7 @@ namespace castor3d { CU_ParsingError( cuT( "Invalid parameters." ) ); } - else if ( auto mesh = parsingContext.mesh.lock() ) + else if ( auto mesh = parsingContext.mesh ) { float timeIndex{}; params[0]->get( timeIndex ); @@ -3567,7 +3567,7 @@ namespace castor3d { CU_ParsingError( cuT( "No Morph Animation initialised." ) ); } - else if ( auto mesh = parsingContext.mesh.lock() ) + else if ( auto mesh = parsingContext.mesh ) { mesh->addAnimation( std::move( parsingContext.morphAnimation ) ); } @@ -3582,7 +3582,7 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( !parsingContext.mesh.lock() ) + if ( !parsingContext.mesh ) { CU_ParsingError( cuT( "No Mesh initialised." ) ); } @@ -3590,13 +3590,13 @@ namespace castor3d { castor::String name; uint16_t index; - auto material = parsingContext.parser->getEngine()->findMaterial( params[1]->get( name ) ).lock().get(); + auto material = parsingContext.parser->getEngine()->findMaterial( params[1]->get( name ) ); if ( material ) { - if ( parsingContext.mesh.lock()->getSubmeshCount() > params[0]->get( index ) ) + if ( parsingContext.mesh->getSubmeshCount() > params[0]->get( index ) ) { - auto submesh = parsingContext.mesh.lock()->getSubmesh( index ); + auto submesh = parsingContext.mesh->getSubmesh( index ); submesh->setDefaultMaterial( material ); } else @@ -4213,14 +4213,14 @@ namespace castor3d { folder = context.file.getPath(); auto & engine = *parsingContext.parser->getEngine(); - parsingContext.image = engine.tryFindImage( relative.getFileName() ).lock(); + parsingContext.image = engine.tryFindImage( relative.getFileName() ); if ( !parsingContext.image ) { auto img = engine.createImage( relative.getFileName() , castor::ImageCreateParams{ folder / relative , { false, false, false } } ); - parsingContext.image = engine.addImage( relative.getFileName(), img ).lock(); + parsingContext.image = engine.addImage( relative.getFileName(), img ); } } else if ( !castor::File::fileExists( relative ) ) @@ -4272,7 +4272,7 @@ namespace castor3d castor::String name; auto sampler = parsingContext.parser->getEngine()->findSampler( params[0]->get( name ) ); - if ( sampler.lock() ) + if ( sampler ) { parsingContext.sampler = sampler; } @@ -4367,15 +4367,15 @@ namespace castor3d if ( parsingContext.pass ) { - if ( !parsingContext.sampler.lock() ) + if ( !parsingContext.sampler ) { parsingContext.sampler = parsingContext.parser->getEngine()->getDefaultSampler(); } TextureSourceInfo sourceInfo = ( parsingContext.textureRenderTarget - ? TextureSourceInfo{ parsingContext.sampler.lock() + ? TextureSourceInfo{ parsingContext.sampler , parsingContext.textureRenderTarget } - : TextureSourceInfo{ parsingContext.sampler.lock() + : TextureSourceInfo{ parsingContext.sampler , parsingContext.folder , parsingContext.relative } ); parsingContext.textureConfiguration.transform = parsingContext.textureTransform; @@ -4940,7 +4940,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - parsingContext.overlay->setMaterial( parsingContext.parser->getEngine()->findMaterial( name ).lock().get() ); + parsingContext.overlay->setMaterial( parsingContext.parser->getEngine()->findMaterial( name ) ); } else { @@ -5129,7 +5129,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - overlay->getBorderPanelOverlay()->setBorderMaterial( parsingContext.parser->getEngine()->findMaterial( name ).lock().get() ); + overlay->getBorderPanelOverlay()->setBorderMaterial( parsingContext.parser->getEngine()->findMaterial( name ) ); } else { @@ -5221,7 +5221,7 @@ namespace castor3d castor::String name; params[0]->get( name ); - if ( cache.find( name ).lock() ) + if ( cache.find( name ) ) { overlay->getTextOverlay()->setFont( name ); } @@ -5613,7 +5613,7 @@ namespace castor3d if ( parsingContext.billboards ) { castor::String name; - auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[0]->get( name ) ).lock().get(); + auto material = parsingContext.parser->getEngine()->tryFindMaterial( params[0]->get( name ) ); if ( material ) { @@ -5683,7 +5683,7 @@ namespace castor3d , node->getName() ); } - if ( auto mesh = geometry->getMesh().lock() ) + if ( auto mesh = geometry->getMesh() ) { if ( mesh->hasAnimation() ) { @@ -5737,7 +5737,7 @@ namespace castor3d { if ( auto geometry = parsingContext.scene->findGeometry( name ) ) { - if ( auto mesh = geometry->getMesh().lock() ) + if ( auto mesh = geometry->getMesh() ) { if ( mesh->hasAnimation() ) { @@ -5773,7 +5773,7 @@ namespace castor3d { if ( auto geometry = parsingContext.scene->findGeometry( name ) ) { - if ( auto mesh = geometry->getMesh().lock() ) + if ( auto mesh = geometry->getMesh() ) { if ( auto skeleton = mesh->getSkeleton() ) { diff --git a/source/Core/Castor3D/Scene/SceneImporter.cpp b/source/Core/Castor3D/Scene/SceneImporter.cpp index 1d49a57c66..c939cb2074 100644 --- a/source/Core/Castor3D/Scene/SceneImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneImporter.cpp @@ -197,7 +197,7 @@ namespace castor3d mesh->setSkeleton( skelIt->second ); } - result.emplace( meshName, mesh ); + result.emplace( meshName, mesh.get() ); scene.addMesh( meshName, mesh, true ); } } @@ -353,7 +353,7 @@ namespace castor3d { for ( auto & geometry : scene.getGeometryCache() ) { - auto & mesh = *geometry.second->getMesh().lock(); + auto & mesh = *geometry.second->getMesh(); auto nodeIt = std::find( animIt.second.nodes.begin() , animIt.second.nodes.end() , geometry.second->getParent() ); diff --git a/source/Core/CastorUtils/Graphics/ImageCache.cpp b/source/Core/CastorUtils/Graphics/ImageCache.cpp index 1d7042a64a..af836b0bdb 100644 --- a/source/Core/CastorUtils/Graphics/ImageCache.cpp +++ b/source/Core/CastorUtils/Graphics/ImageCache.cpp @@ -13,8 +13,6 @@ namespace castor , String const & name , ImageCreateParams const & params ) { - ImageSPtr result; - if ( params.mode == ImageCreateParams::eParam ) { return makeResource< Image, String >( name @@ -50,9 +48,7 @@ namespace castor PixelFormat ResourceCacheT< Image, String, ImageCacheTraits >::getImageFormat( String const & name ) { - auto img = tryFind( name ); - - if ( auto image = img.lock() ) + if ( auto image = tryFind( name ) ) { return image->getPixelFormat(); } diff --git a/source/Core/SceneExporter/CscnExporter.cpp b/source/Core/SceneExporter/CscnExporter.cpp index 6c1b30f5c2..87e1580801 100644 --- a/source/Core/SceneExporter/CscnExporter.cpp +++ b/source/Core/SceneExporter/CscnExporter.cpp @@ -80,7 +80,7 @@ namespace castor3d::exporter for ( auto const & name : view ) { - if ( auto elem = view.find( name ).lock() ) + if ( auto elem = view.find( name ) ) { if ( filter( *elem ) ) { @@ -125,7 +125,7 @@ namespace castor3d::exporter { auto name = elemIt.first; - if ( auto elem = elemIt.second ) + if ( auto elem = elemIt.second.get() ) { if ( filter( *elem ) ) { @@ -272,7 +272,7 @@ namespace castor3d::exporter , stream , []( Geometry const & object ) { - auto mesh = object.getMesh().lock(); + auto mesh = object.getMesh(); return mesh && mesh->isSerialisable(); } ); } @@ -479,7 +479,7 @@ namespace castor3d::exporter for ( auto & geomIt : options.geometries ) { - if ( geomIt.second->getMesh().lock().get() == split.mesh ) + if ( geomIt.second->getMesh() == split.mesh ) { hasGeometries = true; auto node = geomIt.second->getParent(); @@ -811,14 +811,14 @@ namespace castor3d::exporter log::info << cuT( "Scene::write - Samplers\n" ); castor::StringStream sceneStream; castor::StringStream globalStream; - std::set< castor3d::SamplerSPtr > sceneSamplers; - std::set< castor3d::SamplerSPtr > globalSamplers; + std::set< castor3d::SamplerObs > sceneSamplers; + std::set< castor3d::SamplerObs > globalSamplers; for ( auto & materialIt : scene.getEngine()->getMaterialCache() ) { auto materialName = materialIt.first; - if ( auto material = materialIt.second ) + if ( auto & material = materialIt.second ) { if ( scene.hasMaterial( materialName ) ) { @@ -826,7 +826,7 @@ namespace castor3d::exporter { for ( auto & unit : pass->getTextureUnits() ) { - sceneSamplers.insert( unit->getSampler().lock() ); + sceneSamplers.insert( unit->getSampler() ); } } } @@ -836,7 +836,7 @@ namespace castor3d::exporter { for ( auto & unit : pass->getTextureUnits() ) { - globalSamplers.insert( unit->getSampler().lock() ); + globalSamplers.insert( unit->getSampler() ); } } } diff --git a/source/Core/SceneExporter/Text/TextCtrlButton.cpp b/source/Core/SceneExporter/Text/TextCtrlButton.cpp index 81e5d51417..dc6367b06d 100644 --- a/source/Core/SceneExporter/Text/TextCtrlButton.cpp +++ b/source/Core/SceneExporter/Text/TextCtrlButton.cpp @@ -14,7 +14,7 @@ namespace castor namespace btnwrtr { - static bool isWritableMaterial( MaterialRPtr material ) + static bool isWritableMaterial( MaterialObs material ) { if ( !material ) { diff --git a/source/Core/SceneExporter/Text/TextGeometry.cpp b/source/Core/SceneExporter/Text/TextGeometry.cpp index e2059afca3..689d6c8b6c 100644 --- a/source/Core/SceneExporter/Text/TextGeometry.cpp +++ b/source/Core/SceneExporter/Text/TextGeometry.cpp @@ -19,7 +19,7 @@ namespace castor , StringStream & file ) { bool result{ true }; - auto mesh = geometry.getMesh().lock(); + auto mesh = geometry.getMesh(); if ( mesh ) { diff --git a/source/Core/SceneExporter/Text/TextScene.cpp b/source/Core/SceneExporter/Text/TextScene.cpp index 692ac30292..1267facc75 100644 --- a/source/Core/SceneExporter/Text/TextScene.cpp +++ b/source/Core/SceneExporter/Text/TextScene.cpp @@ -122,7 +122,7 @@ namespace castor template<> bool writable< Geometry >( Geometry const & object ) { - auto mesh = object.getMesh().lock(); + auto mesh = object.getMesh(); return mesh && mesh->isSerialisable(); } @@ -254,7 +254,7 @@ namespace castor { if ( result ) { - if ( auto pelem = view.find( name ).lock() ) + if ( auto pelem = view.find( name ) ) { auto & elem = static_cast< typename ViewTypeT::ElementT const & >( *pelem ); diff --git a/source/Core/SceneExporter/Text/TextTextureUnit.cpp b/source/Core/SceneExporter/Text/TextTextureUnit.cpp index 2a80d3d925..e69df7b75b 100644 --- a/source/Core/SceneExporter/Text/TextTextureUnit.cpp +++ b/source/Core/SceneExporter/Text/TextTextureUnit.cpp @@ -57,9 +57,9 @@ namespace castor { if ( auto block{ beginBlock( file, cuT( "texture_unit" ) ) } ) { - if ( unit.getSampler().lock() && unit.getSampler().lock()->getName() != cuT( "Default" ) ) + if ( unit.getSampler() && unit.getSampler()->getName() != cuT( "Default" ) ) { - result = writeName( file, cuT( "sampler" ), unit.getSampler().lock()->getName() ); + result = writeName( file, cuT( "sampler" ), unit.getSampler()->getName() ); } auto dimensions = unit.getTexture()->getDimensions(); diff --git a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp index 7b59bc009d..c94a652070 100644 --- a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp +++ b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquare_Parsers.cpp @@ -36,7 +36,7 @@ namespace diamond_square_terrain return lhs.heightRange.getMin() < rhs.heightRange.getMin(); } ); dsgen.setBiomes( pluginContext.biomes ); - generator->generate( *parsingContext.mesh.lock() + generator->generate( *parsingContext.mesh , pluginContext.parameters ); } CU_EndAttributePop() diff --git a/source/Plugins/Generic/FFTOceanRendering/OceanFFT_Parsers.hpp b/source/Plugins/Generic/FFTOceanRendering/OceanFFT_Parsers.hpp index d3a9c988cc..68d135b431 100644 --- a/source/Plugins/Generic/FFTOceanRendering/OceanFFT_Parsers.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/OceanFFT_Parsers.hpp @@ -20,7 +20,7 @@ namespace ocean_fft OceanUboConfiguration config{}; OceanFFT::Config fftConfig{}; castor3d::Parameters parameters; - std::vector< castor3d::MaterialRPtr > materials; + std::vector< castor3d::MaterialObs > materials; }; enum class OceanSection diff --git a/source/Plugins/Generic/OceanRendering/Ocean_Parsers.hpp b/source/Plugins/Generic/OceanRendering/Ocean_Parsers.hpp index d35fd25a34..07db8a49f5 100644 --- a/source/Plugins/Generic/OceanRendering/Ocean_Parsers.hpp +++ b/source/Plugins/Generic/OceanRendering/Ocean_Parsers.hpp @@ -18,7 +18,7 @@ namespace ocean castor3d::Engine * engine{ nullptr }; OceanUboConfiguration config; castor3d::Parameters parameters; - std::vector< castor3d::MaterialRPtr > materials; + std::vector< castor3d::MaterialObs > materials; uint32_t wave{}; }; diff --git a/source/Plugins/Generic/WaterRendering/Water_Parsers.hpp b/source/Plugins/Generic/WaterRendering/Water_Parsers.hpp index 0bfbb08e5b..453dfaf3d0 100644 --- a/source/Plugins/Generic/WaterRendering/Water_Parsers.hpp +++ b/source/Plugins/Generic/WaterRendering/Water_Parsers.hpp @@ -18,7 +18,7 @@ namespace water castor3d::Engine * engine{ nullptr }; WaterUboConfiguration config; castor3d::Parameters parameters; - std::vector< castor3d::MaterialRPtr > materials; + std::vector< castor3d::MaterialObs > materials; uint32_t wave{}; }; diff --git a/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp index 6f8b9c8c51..ab8bd3cb1a 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpMaterialImporter.cpp @@ -141,7 +141,7 @@ namespace c3d_assimp castor::String name; uint32_t texcoordSet{}; aiUVTransform transform{}; - castor3d::SamplerRes sampler; + castor3d::SamplerObs sampler{}; }; class MaterialParser @@ -150,7 +150,7 @@ namespace c3d_assimp MaterialParser( aiMaterial const & material , aiScene const & scene , aiShadingMode shadingMode - , castor3d::SamplerRes sampler + , castor3d::SamplerObs sampler , AssimpMaterialImporter const & importer , float emissiveMult , std::map< castor3d::PassComponentTextureFlag, castor3d::TextureConfiguration > const & textureRemaps @@ -233,7 +233,7 @@ namespace c3d_assimp static void parse( aiMaterial const & material , aiScene const & scene , aiShadingMode shadingMode - , castor3d::SamplerRes sampler + , castor3d::SamplerObs sampler , AssimpMaterialImporter const & importer , float emissiveMult , std::map< castor3d::PassComponentTextureFlag, castor3d::TextureConfiguration > const & textureRemaps @@ -672,7 +672,7 @@ namespace c3d_assimp castor::Image const & loadImage( castor3d::TextureSourceInfo const & source ) { - castor::ImageSPtr result; + castor::ImageRPtr result{}; if ( source.isBufferImage() ) { @@ -875,7 +875,7 @@ namespace c3d_assimp engine.addSampler( samplerName, sampler, false ); } - result.sampler = cache.find( samplerName ).lock(); + result.sampler = cache.find( samplerName ); } else { @@ -1166,7 +1166,7 @@ namespace c3d_assimp private: aiMaterial const & m_material; aiScene const & m_scene; - castor3d::SamplerRes m_sampler; + castor3d::SamplerObs m_sampler; AssimpMaterialImporter const & m_importer; float m_emissiveMult; std::map< castor3d::PassComponentTextureFlag, castor3d::TextureConfiguration > m_textureRemaps; @@ -1298,7 +1298,7 @@ namespace c3d_assimp materials::MaterialParser::parse( *it->second , file.getAiScene() , shadingMode - , getEngine()->getDefaultSampler().lock() + , getEngine()->getDefaultSampler() , *this , emissiveMult , m_textureRemaps diff --git a/source/Plugins/Importers/AssimpImporter/AssimpMeshImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpMeshImporter.cpp index 03a0a24a28..048564ba64 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpMeshImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpMeshImporter.cpp @@ -157,7 +157,7 @@ namespace c3d_assimp auto matName = file.getMaterialName( aiMesh->mMaterialIndex ); auto materialRes = scene.tryFindMaterial( matName ); - if ( !materialRes.lock() ) + if ( !materialRes ) { AssimpMaterialImporter importer{ *scene.getEngine() }; auto mat = getOwner()->createMaterial( matName @@ -221,15 +221,15 @@ namespace c3d_assimp auto & file = static_cast< AssimpImporterFile & >( *m_file ); auto & scene = *mesh.getScene(); auto materialRes = scene.tryFindMaterial( file.getMaterialName( aiMesh.mMaterialIndex ) ); - castor3d::MaterialRPtr material{}; + castor3d::MaterialObs material{}; - if ( !materialRes.lock() ) + if ( !materialRes ) { material = scene.getEngine()->getDefaultMaterial(); } else { - material = &( *materialRes.lock() ); + material = materialRes; } castor3d::log::info << cuT( " Mesh found: [" ) << file.getInternalName( aiMesh.mName ) << cuT( "]" ) << std::endl; diff --git a/test/Castor3D/BinaryExportTest.cpp b/test/Castor3D/BinaryExportTest.cpp index 4651081037..7c38bbe523 100644 --- a/test/Castor3D/BinaryExportTest.cpp +++ b/test/Castor3D/BinaryExportTest.cpp @@ -49,7 +49,7 @@ namespace Testing Path path{ name + cuT( ".cmsh" ) }; Scene scene{ cuT( "TestScene" ), m_engine }; - auto src = scene.addNewMesh( name, scene ).lock(); + auto src = scene.addNewMesh( name, scene ); CT_REQUIRE( src != nullptr ); Parameters parameters; parameters.add( cuT( "width" ), cuT( "1.0" ) ); @@ -58,6 +58,10 @@ namespace Testing m_engine.getMeshFactory().create( cuT( "cube" ) )->generate( *src, parameters ); doTestMesh( *src ); + + scene.removeMesh( name, true ); + scene.cleanup(); + m_engine.getRenderLoop().renderSyncFrame(); } void BinaryExportTest::ImportExport() @@ -75,7 +79,7 @@ namespace Testing Path path{ name + cuT( ".cmsh" ) }; Scene scene{ cuT( "TestScene" ), m_engine }; - auto src = scene.addNewMesh( name, scene ).lock(); + auto src = scene.addNewMesh( name, scene ); CT_REQUIRE( src != nullptr ); { BinaryFile mshfile{ m_testDataFolder / path, File::OpenMode::eRead }; @@ -98,6 +102,10 @@ namespace Testing } doTestMesh( *src ); + + scene.removeMesh( name, true ); + scene.cleanup(); + m_engine.getRenderLoop().renderSyncFrame(); } void BinaryExportTest::doTestMesh( Mesh & src ) @@ -128,7 +136,7 @@ namespace Testing } } - auto dst = scene.addNewMesh( name + cuT( "_imp" ), scene ).lock(); + auto dst = scene.createMesh( name + cuT( "_imp" ), scene ); CT_REQUIRE( dst != nullptr ); { BinaryFile mshfile{ path, File::OpenMode::eRead }; @@ -159,11 +167,7 @@ namespace Testing CT_EQUAL( src, rhs ); File::deleteFile( path ); m_engine.getRenderLoop().renderSyncFrame(); - scene.cleanup(); - m_engine.getRenderLoop().renderSyncFrame(); - src.cleanup(); dst->cleanup(); - dst.reset(); m_engine.getRenderLoop().renderSyncFrame(); } diff --git a/test/Castor3D/Castor3DTestCommon.cpp b/test/Castor3D/Castor3DTestCommon.cpp index e9489d8339..f40e5a79e9 100644 --- a/test/Castor3D/Castor3DTestCommon.cpp +++ b/test/Castor3D/Castor3DTestCommon.cpp @@ -284,8 +284,8 @@ namespace Testing bool C3DTestCase::compare( Geometry const & lhs, Geometry const & rhs ) { bool result{ CT_EQUAL( static_cast< MovableObject const & >( lhs ), static_cast< MovableObject const & >( rhs ) ) }; - result = result && CT_EQUAL( static_cast< Mesh const & >( *lhs.getMesh().lock() ) - , static_cast< Mesh const & >( *rhs.getMesh().lock() ) ); + result = result && CT_EQUAL( static_cast< Mesh const & >( *lhs.getMesh() ) + , static_cast< Mesh const & >( *rhs.getMesh() ) ); return result; } diff --git a/tools/GuiCommon/GuiCommonPrerequisites.cpp b/tools/GuiCommon/GuiCommonPrerequisites.cpp index 41368b1033..bb7ff4c0a9 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.cpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.cpp @@ -422,14 +422,14 @@ namespace GuiCommon #endif } - castor::FontSPtr make_Font( wxFont const & wxfont ) + castor::FontUPtr make_Font( wxFont const & wxfont ) { - castor::FontSPtr font; + castor::FontUPtr font; if ( wxfont.IsOk() ) { castor::String name = make_String( wxfont.GetFaceName() ) + castor::string::toString( wxfont.GetPointSize() ); - font = std::make_shared< castor::Font >( name, wxfont.GetPointSize() ); + font = castor::makeUnique< castor::Font >( name, wxfont.GetPointSize() ); font->setGlyphLoader( std::make_unique< wxWidgetsFontImpl >( wxfont ) ); castor::Font::BinaryLoader{}( *font , castor::Path{ castor::String{ wxfont.GetFaceName() } } diff --git a/tools/GuiCommon/GuiCommonPrerequisites.hpp b/tools/GuiCommon/GuiCommonPrerequisites.hpp index 43562b3b29..c46eb88a6f 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.hpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.hpp @@ -282,7 +282,7 @@ namespace GuiCommon * Conversions de wxWidgets vers Castor. */ //@{ - castor::FontSPtr make_Font( wxFont const & font ); + castor::FontUPtr make_Font( wxFont const & font ); castor::String make_String( wxString const & value ); castor::U32String make_U32String( wxString const & value ); castor::Path make_Path( wxString const & value ); diff --git a/tools/GuiCommon/Properties/AdditionalProperties.inl b/tools/GuiCommon/Properties/AdditionalProperties.inl index 3dea718092..1e4ce2c8e5 100644 --- a/tools/GuiCommon/Properties/AdditionalProperties.inl +++ b/tools/GuiCommon/Properties/AdditionalProperties.inl @@ -359,11 +359,11 @@ namespace GuiCommon //************************************************************************************************ template<> - struct ValueTraitsT< castor::FontSPtr > + struct ValueTraitsT< castor::FontRPtr > { - using ValueT = castor::FontSPtr; - using ParamType = ValueT const &; - using RetType = ValueT; + using ValueT = castor::FontRPtr; + using ParamType = castor::FontRPtr const &; + using RetType = castor::FontUPtr; static inline RetType convert( wxVariant const & var ) { diff --git a/tools/GuiCommon/Properties/TreeItems/BillboardTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/BillboardTreeItemProperty.cpp index d412f690e4..cb0c275e00 100644 --- a/tools/GuiCommon/Properties/TreeItems/BillboardTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/BillboardTreeItemProperty.cpp @@ -33,7 +33,7 @@ namespace GuiCommon , [this]( wxVariant const & var ) { auto & engine = *m_billboard.getParentScene().getEngine(); - auto material = engine.findMaterial( variantCast< castor::String >( var ) ).lock().get(); + auto material = engine.findMaterial( variantCast< castor::String >( var ) ); if ( material ) { diff --git a/tools/GuiCommon/Properties/TreeItems/MaterialTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/MaterialTreeItemProperty.hpp index baf20fceb0..f120887d3a 100644 --- a/tools/GuiCommon/Properties/TreeItems/MaterialTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/MaterialTreeItemProperty.hpp @@ -52,7 +52,7 @@ namespace GuiCommon void doCreateProperties( wxPGEditor * editor, wxPropertyGrid * grid )override; private: - castor3d::MaterialRPtr m_material{}; + castor3d::MaterialObs m_material{}; }; } diff --git a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp index ecadbdb3dd..e7d810a3e9 100644 --- a/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/OverlayTreeItemProperty.cpp @@ -52,7 +52,7 @@ namespace GuiCommon overlay.setPixelSize( SizeRefFromVariant( var ) ); } ); addMaterial( grid, engine, PROPERTY_OVERLAY_MATERIAL, m_materials, overlay.getMaterial() - , [&overlay]( castor3d::MaterialRPtr material ) { overlay.setMaterial( material ); } ); + , [&overlay]( castor3d::MaterialObs material ) { overlay.setMaterial( material ); } ); switch ( overlay.getType() ) { @@ -92,7 +92,7 @@ namespace GuiCommon overlay.setPixelBorderSize( Point4uiRefFromVariant( var ) ); } ); addMaterial( grid, engine, PROPERTY_OVERLAY_BORDER_MATERIAL, m_materials, overlay.getBorderMaterial() - , [&overlay]( castor3d::MaterialRPtr material ) { overlay.setBorderMaterial( material ); } ); + , [&overlay]( castor3d::MaterialObs material ) { overlay.setBorderMaterial( material ); } ); addPropertyT( grid, PROPERTY_OVERLAY_BORDER_INNER_UV, overlay.getBorderInnerUV(), &overlay, &castor3d::BorderPanelOverlay::setBorderInnerUV ); addPropertyT( grid, PROPERTY_OVERLAY_BORDER_OUTER_UV, overlay.getBorderOuterUV(), &overlay, &castor3d::BorderPanelOverlay::setBorderOuterUV ); addPropertyET( grid, PROPERTY_OVERLAY_BORDER_POSITION, choices, overlay.getBorderPosition(), &overlay, &castor3d::BorderPanelOverlay::setBorderPosition ); @@ -130,7 +130,7 @@ namespace GuiCommon addProperty( grid, PROPERTY_OVERLAY_FONT, *overlay.getFontTexture()->getFont() , [&overlay]( wxVariant const & var ) { - overlay.setFont( variantCast< castor::FontSPtr >( var )->getName() ); + overlay.setFont( variantCast< castor::FontRPtr >( var )->getName() ); } ); addPropertyT( grid, PROPERTY_OVERLAY_CAPTION, overlay.getCaption(), &overlay, &castor3d::TextOverlay::setCaption ); addPropertyET( grid, PROPERTY_OVERLAY_HALIGN, haligns, overlay.getHAlign(), &overlay, &castor3d::TextOverlay::setHAlign ); diff --git a/tools/GuiCommon/Properties/TreeItems/RenderTargetTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/RenderTargetTreeItemProperty.cpp index c7fe32c039..95a710b151 100644 --- a/tools/GuiCommon/Properties/TreeItems/RenderTargetTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/RenderTargetTreeItemProperty.cpp @@ -38,7 +38,7 @@ namespace GuiCommon , target.getEngine() , target.getSsaoConfig() } ); - for ( auto postEffect : target.getHDRPostEffects() ) + for ( auto & postEffect : target.getHDRPostEffects() ) { list->AppendItem( targetId , _( "HDR - " ) + make_wxString( postEffect->getFullName() ) @@ -47,7 +47,7 @@ namespace GuiCommon , new PostEffectTreeItemProperty( editable, *postEffect, list ) ); } - for ( auto postEffect : target.getSRGBPostEffects() ) + for ( auto & postEffect : target.getSRGBPostEffects() ) { list->AppendItem( targetId , _( "SRGB - " ) + make_wxString( postEffect->getFullName() ) diff --git a/tools/GuiCommon/Properties/TreeItems/StyleTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/StyleTreeItemProperty.cpp index 70d32d75b0..e8c4cbfb92 100644 --- a/tools/GuiCommon/Properties/TreeItems/StyleTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/StyleTreeItemProperty.cpp @@ -37,9 +37,9 @@ namespace GuiCommon m_fonts = getFontsList(); addProperty( grid, PROPERTY_CATEGORY + wxString( style.getName() ) ); addMaterial( grid, engine, PROPERTY_BACKGROUND_MATERIAL, m_materials, style.getBackgroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setBackgroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setBackgroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_FOREGROUND_MATERIAL, m_materials, style.getForegroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setForegroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setForegroundMaterial( material ); } ); switch ( style.getType() ) { @@ -99,28 +99,28 @@ namespace GuiCommon style.setFont( name ); } ); addMaterial( grid, engine, PROPERTY_TEXT_MATERIAL, m_materials, style.getTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setTextMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_BACKGROUND_MATERIAL, m_materials, style.getHighlightedBackgroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setHighlightedBackgroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setHighlightedBackgroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_FOREGROUND_MATERIAL, m_materials, style.getHighlightedForegroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setHighlightedForegroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setHighlightedForegroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_TEXT_MATERIAL, m_materials, style.getHighlightedTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setHighlightedTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setHighlightedTextMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_BACKGROUND_MATERIAL, m_materials, style.getPushedBackgroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setPushedBackgroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setPushedBackgroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_FOREGROUND_MATERIAL, m_materials, style.getPushedForegroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setPushedForegroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setPushedForegroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_TEXT_MATERIAL, m_materials, style.getPushedTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setPushedTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setPushedTextMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_BACKGROUND_MATERIAL, m_materials, style.getDisabledBackgroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setDisabledBackgroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setDisabledBackgroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_FOREGROUND_MATERIAL, m_materials, style.getDisabledForegroundMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setDisabledForegroundMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setDisabledForegroundMaterial( material ); } ); addMaterial( grid, engine, PROPERTY_HL_TEXT_MATERIAL, m_materials, style.getDisabledTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setDisabledTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setDisabledTextMaterial( material ); } ); } void StyleTreeItemProperty::doCreateStyleProperties( wxPropertyGrid * grid @@ -152,7 +152,7 @@ namespace GuiCommon style.setHeaderFont( name ); } ); addMaterial( grid, engine, PROPERTY_TEXT_MATERIAL, m_materials, style.getHeaderTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setHeaderTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setHeaderTextMaterial( material ); } ); } void StyleTreeItemProperty::doCreateStyleProperties( wxPropertyGrid * grid @@ -184,6 +184,6 @@ namespace GuiCommon style.setFont( name ); } ); addMaterial( grid, engine, PROPERTY_TEXT_MATERIAL, m_materials, style.getTextMaterial() - , [&style]( castor3d::MaterialRPtr material ) { style.setTextMaterial( material ); } ); + , [&style]( castor3d::MaterialObs material ) { style.setTextMaterial( material ); } ); } } diff --git a/tools/GuiCommon/Properties/TreeItems/SubmeshTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/SubmeshTreeItemProperty.cpp index 446d06fca3..88e749eb58 100644 --- a/tools/GuiCommon/Properties/TreeItems/SubmeshTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/SubmeshTreeItemProperty.cpp @@ -65,7 +65,7 @@ namespace GuiCommon addProperty( grid, PROPERTY_CATEGORY_SUBMESH + wxString( m_geometry.getName() ) ); addPropertyET( grid, PROPERTY_TOPOLOGY, choices, m_submesh.getTopology(), &m_submesh, &castor3d::Submesh::setTopology ); addMaterial( grid, engine, PROPERTY_SUBMESH_MATERIAL, m_materials, m_geometry.getMaterial( m_submesh ) - , [this]( castor3d::MaterialRPtr material ) { m_geometry.setMaterial( m_submesh, material ); } ); + , [this]( castor3d::MaterialObs material ) { m_geometry.setMaterial( m_submesh, material ); } ); addProperty( grid, PROPERTY_SUBMESH_SPHERE_BOX, m_submesh.getBoundingSphere(), EmptyHandler ); addProperty( grid, PROPERTY_SUBMESH_CUBE_BOX, m_submesh.getBoundingBox(), EmptyHandler ); } diff --git a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp index 9904f9d209..169cacfe4c 100644 --- a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp @@ -231,8 +231,8 @@ namespace GuiCommon , castor3d::Engine & engine , wxString const & name , wxArrayString const & choices - , castor3d::MaterialRPtr selected - , std::function< void( castor3d::MaterialRPtr ) > setter ) + , castor3d::MaterialObs selected + , std::function< void( castor3d::MaterialObs ) > setter ) { if ( selected ) { @@ -243,9 +243,8 @@ namespace GuiCommon , [&engine, &choices, setter]( wxVariant const & var ) { auto name = make_String( choices[size_t( var.GetLong() )] ); - auto material = engine.findMaterial( name ).lock().get(); - if ( material ) + if ( auto material = engine.findMaterial( name ) ) { setter( material ); } @@ -258,9 +257,8 @@ namespace GuiCommon , [&engine, &choices, setter]( wxVariant const & var ) { auto name = make_String( choices[size_t( var.GetLong() )] ); - auto material = engine.findMaterial( name ).lock().get(); - if ( material ) + if ( auto material = engine.findMaterial( name ) ) { setter( material ); } diff --git a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.hpp index 982a9c8bdc..b52e6c02c0 100644 --- a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.hpp @@ -206,8 +206,8 @@ namespace GuiCommon , castor3d::Engine & engine , wxString const & name , wxArrayString const & choices - , castor3d::MaterialRPtr selected - , std::function< void( castor3d::MaterialRPtr ) > setter ); + , castor3d::MaterialObs selected + , std::function< void( castor3d::MaterialObs ) > setter ); template< typename ParentT, typename ValueT, typename ControlT = bool > wxPGProperty * addPropertyT( ParentT * parent diff --git a/tools/GuiCommon/System/CubeBoxManager.cpp b/tools/GuiCommon/System/CubeBoxManager.cpp index 96bfa31d05..b5b5b28434 100644 --- a/tools/GuiCommon/System/CubeBoxManager.cpp +++ b/tools/GuiCommon/System/CubeBoxManager.cpp @@ -33,8 +33,8 @@ namespace GuiCommon , castor::String const & colourName ) { auto result = scene.addNewMesh( name, scene ); - result.lock()->setSerialisable( false ); - auto submesh = result.lock()->createSubmesh(); + result->setSerialisable( false ); + auto submesh = result->createSubmesh(); static castor::Point3fArray const vertex { castor::Point3f{ -1, -1, -1 }, @@ -66,7 +66,7 @@ namespace GuiCommon castor3d::LineIndices{ { 3u, 7u } }, }; mapping->addLineGroup( lines ); - castor3d::MaterialResPtr material; + castor3d::MaterialObs material{}; castor::String matName = cuT( "BBox_" ) + colourName; if ( !scene.getEngine()->hasMaterial( matName ) ) @@ -75,7 +75,7 @@ namespace GuiCommon , *scene.getEngine() , scene.getDefaultLightingModel() ); - if ( auto mat = material.lock() ) + if ( auto mat = material ) { mat->setSerialisable( false ); @@ -90,8 +90,8 @@ namespace GuiCommon material = scene.getEngine()->findMaterial( matName ); } - submesh->setDefaultMaterial( material.lock().get() ); - result.lock()->computeContainers(); + submesh->setDefaultMaterial( material ); + result->computeContainers(); scene.getListener().postEvent( makeGpuInitialiseEvent( *submesh ) ); return result; } @@ -134,26 +134,26 @@ namespace GuiCommon m_object = &object; m_submesh = &submesh; m_aabbNode = doAddBB( m_aabbMesh - , m_aabbMesh.lock()->getName() + , m_aabbMesh->getName() , *m_scene.getObjectRootNode() , m_object->getBoundingBox() ); m_aabbNode->setScale( { 1.0f, 1.0f, 1.0f } ); m_aabbNode->setPosition( {} ); m_obbNode = doAddBB( m_obbMesh - , m_obbMesh.lock()->getName() + , m_obbMesh->getName() , *object.getParent() , m_object->getBoundingBox() ); m_obbSelectedSubmeshNode = doAddBB( m_obbSelectedSubmesh - , m_obbMesh.lock()->getName() + castor::string::toString( submesh.getId() ) + , m_obbMesh->getName() + castor::string::toString( submesh.getId() ) , *object.getParent() , m_object->getBoundingBox( submesh ) ); - for ( auto & psubmesh : *m_object->getMesh().lock() ) + for ( auto & psubmesh : *m_object->getMesh() ) { if ( psubmesh.get() != m_submesh ) { m_obbSubmeshNodes.push_back( doAddBB( m_obbSubmesh - , m_obbMesh.lock()->getName() + castor::string::toString( psubmesh->getId() ) + , m_obbMesh->getName() + castor::string::toString( psubmesh->getId() ) , *object.getParent() , m_object->getBoundingBox( *psubmesh ) ) ); } @@ -174,16 +174,16 @@ namespace GuiCommon , [this]() { m_sceneConnection.disconnect(); - doRemoveBB( m_aabbMesh.lock()->getName(), m_aabbNode ); - doRemoveBB( m_obbMesh.lock()->getName(), m_obbNode ); - doRemoveBB( m_obbSelectedSubmesh.lock()->getName(), m_obbSelectedSubmeshNode ); + doRemoveBB( m_aabbMesh->getName(), m_aabbNode ); + doRemoveBB( m_obbMesh->getName(), m_obbNode ); + doRemoveBB( m_obbSelectedSubmesh->getName(), m_obbSelectedSubmeshNode ); uint32_t i = 0u; - for ( auto & submesh : *m_object->getMesh().lock() ) + for ( auto & submesh : *m_object->getMesh() ) { if ( submesh.get() != m_submesh ) { - doRemoveBB( m_obbMesh.lock()->getName() + castor::string::toString( submesh->getId() ) + doRemoveBB( m_obbMesh->getName() + castor::string::toString( submesh->getId() ) , m_obbSubmeshNodes[i] ); i++; } @@ -193,7 +193,7 @@ namespace GuiCommon for ( auto & node : m_obbBoneNodes ) { - doRemoveBB( m_obbMesh.lock()->getName() + cuT( "_Bone_" ) + castor::string::toString( i++ ) + doRemoveBB( m_obbMesh->getName() + cuT( "_Bone_" ) + castor::string::toString( i++ ) , node ); } @@ -245,7 +245,7 @@ namespace GuiCommon result->setPosition( bb.getCenter() ); result->setVisible( true ); - for ( auto & submesh : *geometry->getMesh().lock() ) + for ( auto & submesh : *geometry->getMesh() ) { geometry->setMaterial( *submesh, submesh->getDefaultMaterial() ); } @@ -286,7 +286,7 @@ namespace GuiCommon uint32_t i = 0u; - for ( auto & submesh : *m_object->getMesh().lock() ) + for ( auto & submesh : *m_object->getMesh() ) { if ( submesh.get() != m_submesh ) { @@ -300,7 +300,7 @@ namespace GuiCommon auto aabb = obb.getAxisAligned( m_object->getParent()->getDerivedTransformationMatrix() ); auto aabbMin = aabb.getMin(); auto aabbMax = aabb.getMax(); - auto aabbSubmesh = m_aabbMesh.lock()->getSubmesh( 0u ); + auto aabbSubmesh = m_aabbMesh->getSubmesh( 0u ); if ( auto positions = aabbSubmesh->getComponent< castor3d::PositionsComponent >() ) { diff --git a/tools/GuiCommon/System/MaterialsList.cpp b/tools/GuiCommon/System/MaterialsList.cpp index b2f75cc8b2..2704a16ac7 100644 --- a/tools/GuiCommon/System/MaterialsList.cpp +++ b/tools/GuiCommon/System/MaterialsList.cpp @@ -113,7 +113,7 @@ namespace GuiCommon , castor3d::Scene & scene , bool editable , wxTreeItemId id - , castor3d::MaterialRPtr material + , castor3d::MaterialObs material , uint32_t iconOffset ) { wxTreeItemId materialId = treeCtrl->AppendItem( id diff --git a/tools/GuiCommon/System/MaterialsList.hpp b/tools/GuiCommon/System/MaterialsList.hpp index 06b7a79527..2a73c116be 100644 --- a/tools/GuiCommon/System/MaterialsList.hpp +++ b/tools/GuiCommon/System/MaterialsList.hpp @@ -27,7 +27,7 @@ namespace GuiCommon , castor3d::Scene & scene , bool editable , wxTreeItemId id - , castor3d::MaterialRPtr material + , castor3d::MaterialObs material , uint32_t iconOffset = 0u ); private: diff --git a/tools/GuiCommon/System/SceneObjectsList.cpp b/tools/GuiCommon/System/SceneObjectsList.cpp index 471c63eb85..68f2ebea11 100644 --- a/tools/GuiCommon/System/SceneObjectsList.cpp +++ b/tools/GuiCommon/System/SceneObjectsList.cpp @@ -276,7 +276,7 @@ namespace GuiCommon , eBMP_MATERIAL_SEL ); for ( auto materialName : scene->getMaterialView() ) { - auto material = engine->findMaterial( materialName ).lock().get(); + auto material = engine->findMaterial( materialName ); MaterialsList::addMaterial( this , *scene , m_propertiesHolder->isEditable() @@ -402,9 +402,8 @@ namespace GuiCommon , eBMP_GEOMETRY , eBMP_GEOMETRY_SEL , new GeometryTreeItemProperty( m_propertiesHolder->isEditable(), geometry ) ); - auto mesh = geometry.getMesh().lock(); - if ( mesh ) + if ( auto mesh = geometry.getMesh() ) { int count = 0; From 021f8417c05aaef5dce3c4aa0b8ad178d90ea92e Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Sun, 9 Apr 2023 23:25:09 +0200 Subject: [PATCH 32/35] Castor3D: Replaced use of shared_ptr with unique_ptr for animation related. --- include/Core/Castor3D/Animation/Animable.hpp | 8 +- .../Castor3D/Animation/AnimationModule.hpp | 9 +- include/Core/Castor3D/Cache/TextureCache.hpp | 2 +- include/Core/Castor3D/Material/Pass/Pass.hpp | 5 +- .../Animation/TextureAnimationModule.hpp | 4 +- .../Castor3D/Material/Texture/TextureUnit.hpp | 2 +- .../Mesh/Animation/MeshAnimationModule.hpp | 6 +- include/Core/Castor3D/Model/Mesh/Mesh.hpp | 1 - .../Skeleton/Animation/SkeletonAnimation.hpp | 31 +++-- .../Animation/SkeletonAnimationModule.hpp | 15 +-- .../Animation/SkeletonAnimationObject.hpp | 6 +- .../Castor3D/Render/Culling/SceneCuller.hpp | 2 +- .../Scene/Animation/AnimatedObject.hpp | 5 +- .../Scene/Animation/AnimatedObjectGroup.hpp | 15 ++- .../Scene/Animation/AnimatedSkeleton.hpp | 4 +- .../Scene/Animation/AnimationModule.hpp | 29 ++-- .../Skeleton/SkeletonAnimationInstance.hpp | 6 +- .../SkeletonAnimationInstanceObject.hpp | 7 +- .../Skeleton/SkeletonAnimationModule.hpp | 14 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 8 +- .../Castor3D/Animation/AnimationImporter.cpp | 2 + .../Castor3D/Animation/AnimationModule.cpp | 4 + .../Castor3D/Binary/BinaryMeshAnimation.cpp | 8 +- .../Binary/BinarySceneNodeAnimation.cpp | 4 +- .../Core/Castor3D/Binary/BinarySkeleton.cpp | 6 +- .../Binary/BinarySkeletonAnimation.cpp | 23 ++-- .../Binary/BinarySkeletonAnimationObject.cpp | 36 ++--- source/Core/Castor3D/Binary/CmshImporter.cpp | 4 +- source/Core/Castor3D/Cache/GeometryCache.cpp | 12 +- source/Core/Castor3D/Cache/TextureCache.cpp | 2 +- source/Core/Castor3D/Material/Pass/Pass.cpp | 12 +- .../Texture/Animation/TextureAnimation.cpp | 6 +- .../Animation/TextureAnimationKeyFrame.cpp | 2 + .../Castor3D/Material/Texture/TextureUnit.cpp | 2 +- .../Model/Mesh/Animation/MeshAnimation.cpp | 2 + .../Mesh/Animation/MeshAnimationSubmesh.cpp | 2 + .../Model/Mesh/Animation/MeshMorphTarget.cpp | 2 + source/Core/Castor3D/Model/Mesh/Mesh.cpp | 2 +- .../Skeleton/Animation/SkeletonAnimation.cpp | 43 +++--- .../Animation/SkeletonAnimationBone.cpp | 2 + .../Animation/SkeletonAnimationKeyFrame.cpp | 2 + .../Animation/SkeletonAnimationNode.cpp | 2 + .../Animation/SkeletonAnimationObject.cpp | 6 +- .../Core/Castor3D/Model/Skeleton/Skeleton.cpp | 2 +- .../Castor3D/Render/Culling/SceneCuller.cpp | 8 +- .../Castor3D/Render/Node/SceneRenderNodes.cpp | 12 +- .../Castor3D/Scene/Animation/AnimatedMesh.cpp | 4 +- .../Scene/Animation/AnimatedObject.cpp | 2 + .../Scene/Animation/AnimatedObjectGroup.cpp | 126 ++++++++++-------- .../Scene/Animation/AnimatedSceneNode.cpp | 4 +- .../Scene/Animation/AnimatedSkeleton.cpp | 18 +-- .../Scene/Animation/AnimatedTexture.cpp | 4 +- .../Scene/Animation/AnimationInstance.cpp | 5 + .../Scene/Animation/SceneNodeAnimation.cpp | 2 + .../Animation/SceneNodeAnimationKeyFrame.cpp | 2 + .../Skeleton/SkeletonAnimationInstance.cpp | 30 ++--- .../SkeletonAnimationInstanceBone.cpp | 2 + .../SkeletonAnimationInstanceNode.cpp | 2 + .../SkeletonAnimationInstanceObject.cpp | 22 +-- source/Core/Castor3D/Scene/Scene.cpp | 2 +- .../Scene/SceneFileParser_Parsers.cpp | 18 +-- source/Core/Castor3D/Scene/SceneImporter.cpp | 12 +- source/Core/Castor3D/Scene/SceneNode.cpp | 2 +- .../Text/TextAnimatedObjectGroup.cpp | 2 +- .../AssimpAnimationImporter.cpp | 12 +- .../AssimpAnimationImporter.hpp | 2 +- .../AssimpImporter/AssimpHelpers.hpp | 8 +- .../AssimpImporter/AssimpImporterFile.cpp | 2 +- .../AnimatedObjectTreeItemProperty.cpp | 14 +- .../AnimatedObjectTreeItemProperty.hpp | 11 +- 70 files changed, 375 insertions(+), 320 deletions(-) diff --git a/include/Core/Castor3D/Animation/Animable.hpp b/include/Core/Castor3D/Animation/Animable.hpp index a062a3b73f..15009d469d 100644 --- a/include/Core/Castor3D/Animation/Animable.hpp +++ b/include/Core/Castor3D/Animation/Animable.hpp @@ -14,8 +14,8 @@ namespace castor3d { protected: using Animation = AnimationT< AnimableHandlerT >; - using AnimationPtr = std::unique_ptr< Animation >; - using AnimationPtrStrMap = std::map< castor::String, AnimationPtr >; + using AnimationPtr = castor::UniquePtr< Animation >; + using AnimationsMap = std::map< castor::String, AnimationPtr >; /** *\~english *\name Construction / Destruction. @@ -92,7 +92,7 @@ namespace castor3d *\~french *\return Les animations. */ - inline AnimationPtrStrMap const & getAnimations()const + inline AnimationsMap const & getAnimations()const { return m_animations; } @@ -135,7 +135,7 @@ namespace castor3d protected: //!\~english All animations. //!\~french Toutes les animations. - AnimationPtrStrMap m_animations; + AnimationsMap m_animations; }; } diff --git a/include/Core/Castor3D/Animation/AnimationModule.hpp b/include/Core/Castor3D/Animation/AnimationModule.hpp index 436f4c3941..3b7e03317e 100644 --- a/include/Core/Castor3D/Animation/AnimationModule.hpp +++ b/include/Core/Castor3D/Animation/AnimationModule.hpp @@ -170,12 +170,13 @@ namespace castor3d template< typename DataT > using InterpolatorPtr = std::unique_ptr< Interpolator< DataT > >; - CU_DeclareSmartPtr( AnimationKeyFrame ); - CU_DeclareSmartPtr( AnimationImporter ); - + CU_DeclareCUSmartPtr( castor3d, AnimationKeyFrame, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimationImporter, C3D_API ); CU_DeclareCUSmartPtr( castor3d, AnimationImporterFactory, C3D_API ); + CU_DeclareCUTemplateSmartPtr( castor3d, AnimationT ); + CU_DeclareCUTemplateSmartPtr( castor3d, AnimationInstanceT ); - CU_DeclareVector( AnimationKeyFrameUPtr, AnimationKeyFrame ); + using AnimationKeyFrameArray = std::vector< AnimationKeyFrameUPtr >; //@} } diff --git a/include/Core/Castor3D/Cache/TextureCache.hpp b/include/Core/Castor3D/Cache/TextureCache.hpp index db0f1526a0..9a7bcaf5bc 100644 --- a/include/Core/Castor3D/Cache/TextureCache.hpp +++ b/include/Core/Castor3D/Cache/TextureCache.hpp @@ -92,7 +92,7 @@ namespace castor3d C3D_API TextureUnitRPtr getTexture( TextureUnitData & unitData ); C3D_API TextureUnitData & getSourceData( TextureSourceInfo const & sourceInfo , PassTextureConfig const & config - , AnimationUPtr animation ); + , TextureAnimationUPtr animation ); C3D_API TextureUnitData & mergeSources( TextureSourceInfo const & lhsSourceInfo , PassTextureConfig const & lhsPassConfig , uint32_t lhsSrcMask diff --git a/include/Core/Castor3D/Material/Pass/Pass.hpp b/include/Core/Castor3D/Material/Pass/Pass.hpp index f6ded04b9a..0839925dff 100644 --- a/include/Core/Castor3D/Material/Pass/Pass.hpp +++ b/include/Core/Castor3D/Material/Pass/Pass.hpp @@ -8,6 +8,7 @@ See LICENSE file in root folder #include "Castor3D/Render/RenderModule.hpp" #include "Castor3D/Material/Pass/Component/PassComponent.hpp" #include "Castor3D/Material/Pass/Component/PassMapComponent.hpp" +#include "Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp" #include "Castor3D/Material/Pass/SubsurfaceScattering.hpp" #include "Castor3D/Material/Texture/TextureConfiguration.hpp" @@ -199,7 +200,7 @@ namespace castor3d */ C3D_API void registerTexture( TextureSourceInfo sourceInfo , PassTextureConfig configuration - , AnimationUPtr animation ); + , TextureAnimationUPtr animation ); /** *\~english *\brief Removes a texture unit. @@ -514,7 +515,7 @@ namespace castor3d uint32_t m_index; PassComponentMap m_components; TextureSourceMap m_sources; - std::unordered_map< TextureSourceInfo, AnimationUPtr, TextureSourceInfoHasher > m_animations; + std::unordered_map< TextureSourceInfo, TextureAnimationUPtr, TextureSourceInfoHasher > m_animations; uint32_t m_maxTexcoordSet{}; std::atomic_bool m_texturesReduced{ false }; UnitArray m_textureUnits; diff --git a/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp b/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp index d3aafde63c..48762ede63 100644 --- a/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp +++ b/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp @@ -29,8 +29,8 @@ namespace castor3d class TextureAnimation; class TextureAnimationKeyFrame; - CU_DeclareSmartPtr( TextureAnimation ); - CU_DeclareSmartPtr( TextureAnimationKeyFrame ); + CU_DeclareCUSmartPtr( castor3d, TextureAnimation, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, TextureAnimationKeyFrame, C3D_API ); using TextureRotateSpeed = castor::SpeedT< castor::Angle, castor::Seconds >; using TextureTranslateSpeed = castor::SpeedT< castor::Point2f, castor::Seconds >; diff --git a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp index b11b37f0de..2326f5b9b2 100644 --- a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp @@ -23,7 +23,7 @@ namespace castor3d { TextureSourceInfo sourceInfo; PassTextureConfig passConfig{}; - AnimationUPtr animation{}; + TextureAnimationUPtr animation{}; castor::PxBufferBaseUPtr buffer{}; }; diff --git a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp index 8a845d8d6f..5033ffc250 100644 --- a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp @@ -19,9 +19,9 @@ namespace castor3d class MeshAnimationSubmesh; class MeshMorphTarget; - CU_DeclareSmartPtr( MeshAnimation ); - CU_DeclareSmartPtr( MeshAnimationSubmesh ); - CU_DeclareSmartPtr( MeshMorphTarget ); + CU_DeclareCUSmartPtr( castor3d, MeshAnimation, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MeshAnimationSubmesh, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, MeshMorphTarget, C3D_API ); CU_DeclareVector( MeshAnimationSubmesh, MeshAnimationSubmesh ); diff --git a/include/Core/Castor3D/Model/Mesh/Mesh.hpp b/include/Core/Castor3D/Model/Mesh/Mesh.hpp index fb0fb1482c..b53c09125e 100644 --- a/include/Core/Castor3D/Model/Mesh/Mesh.hpp +++ b/include/Core/Castor3D/Model/Mesh/Mesh.hpp @@ -263,7 +263,6 @@ namespace castor3d private: friend class MeshGenerator; - CU_DeclareVector( AnimationPtrStrMap, AnimationMap ); Scene * m_scene; bool m_modified; diff --git a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.hpp b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.hpp index 794ebefce3..6b0c9f6e3b 100644 --- a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.hpp +++ b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.hpp @@ -67,8 +67,8 @@ namespace castor3d *\param[in] node Le noeud. *\param[in] parent Le parent de l'objet déplaçable. */ - C3D_API SkeletonAnimationObjectSPtr addObject( SkeletonNode & node - , SkeletonAnimationObjectSPtr parent ); + C3D_API SkeletonAnimationObjectRPtr addObject( SkeletonNode & node + , SkeletonAnimationObjectRPtr parent ); /** *\~english *\brief Creates and adds a moving bone. @@ -79,8 +79,8 @@ namespace castor3d *\param[in] bone L'os. *\param[in] parent Le parent de l'objet déplaçable. */ - C3D_API SkeletonAnimationObjectSPtr addObject( BoneNode & bone - , SkeletonAnimationObjectSPtr parent ); + C3D_API SkeletonAnimationObjectRPtr addObject( BoneNode & bone + , SkeletonAnimationObjectRPtr parent ); /** *\~english *\brief adds an animated object. @@ -91,8 +91,8 @@ namespace castor3d *\param[in] object L'objet animé. *\param[in] parent Le parent de l'objet déplaçable. */ - C3D_API SkeletonAnimationObjectSPtr addObject( SkeletonAnimationObjectSPtr object - , SkeletonAnimationObjectSPtr parent ); + C3D_API SkeletonAnimationObjectRPtr addObject( SkeletonAnimationObjectUPtr object + , SkeletonAnimationObjectRPtr parent ); /** *\~english *\brief Tells if the animation has the animated object. @@ -113,7 +113,7 @@ namespace castor3d *\brief Récupère un noeud animé. *\param[in] node Le noeud. */ - C3D_API SkeletonAnimationObjectSPtr getObject( SkeletonNode const & node )const; + C3D_API SkeletonAnimationObjectRPtr getObject( SkeletonNode const & node )const; /** *\~english *\brief Retrieves an animated bone. @@ -122,7 +122,7 @@ namespace castor3d *\brief Récupère un os animé. *\param[in] bone L'os. */ - C3D_API SkeletonAnimationObjectSPtr getObject( BoneNode const & bone )const; + C3D_API SkeletonAnimationObjectRPtr getObject( BoneNode const & bone )const; /** *\~english *\brief Retrieves an animated object. @@ -133,7 +133,7 @@ namespace castor3d *\param[in] type Le type d'objet. *\param[in] name Le nom de l'objet. */ - C3D_API SkeletonAnimationObjectSPtr getObject( SkeletonNodeType type + C3D_API SkeletonAnimationObjectRPtr getObject( SkeletonNodeType type , castor::String const & name )const; /** *\~english @@ -141,7 +141,7 @@ namespace castor3d *\~french *\return Les objets mouvants. */ - SkeletonAnimationObjectPtrStrMap const & getObjects()const + auto const & getObjects()const { return m_toMove; } @@ -152,18 +152,21 @@ namespace castor3d *\brief Récupère le nombre d'objets mouvants *\return Les objets mouvants racines. */ - SkeletonAnimationObjectPtrArray const & getRootObjects()const + SkeletonAnimationObjectArray const & getRootObjects()const { - return m_arrayMoving; + return m_rootObjects; } + protected: + using ObjectMap = std::map< castor::String, SkeletonAnimationObjectUPtr >; + protected: //!\~english The root moving objects. //!\~french Les objets mouvants racine. - SkeletonAnimationObjectPtrArray m_arrayMoving; + SkeletonAnimationObjectArray m_rootObjects; //!\~english The moving objects. //!\~french Les objets mouvants. - SkeletonAnimationObjectPtrStrMap m_toMove; + ObjectMap m_toMove; friend class BinaryWriter< SkeletonAnimation >; friend class BinaryParser< SkeletonAnimation >; diff --git a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp index 742c194253..d42dbc9f8b 100644 --- a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp +++ b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp @@ -77,16 +77,13 @@ namespace castor3d }; using TransformArray = std::vector< ObjectTransform >; - CU_DeclareSmartPtr( SkeletonAnimation ); - CU_DeclareSmartPtr( SkeletonAnimationKeyFrame ); - CU_DeclareSmartPtr( SkeletonAnimationObject ); - CU_DeclareSmartPtr( SkeletonAnimationBone ); - CU_DeclareSmartPtr( SkeletonAnimationNode ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimation, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationKeyFrame, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationObject, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationBone, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationNode, C3D_API ); - //! SkeletonAnimationObject pointer map, sorted by name. - CU_DeclareMap( castor::String, SkeletonAnimationObjectSPtr, SkeletonAnimationObjectPtrStr ); - //! SkeletonAnimationObject pointer array. - CU_DeclareVector( SkeletonAnimationObjectSPtr, SkeletonAnimationObjectPtr ); + using SkeletonAnimationObjectArray = std::vector< SkeletonAnimationObjectRPtr >; //@} //@} diff --git a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp index ed7d961f02..122081eeb9 100644 --- a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp +++ b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp @@ -57,7 +57,7 @@ namespace castor3d *\remarks Les transformations de l'enfant sont affectées par celles de cet objet. *\param[in] object L'enfant. */ - C3D_API void addChild( SkeletonAnimationObjectSPtr object ); + C3D_API void addChild( SkeletonAnimationObjectRPtr object ); /** *\~english *\brief Retrieves the object name. @@ -100,7 +100,7 @@ namespace castor3d *\~french *\return Le tableau d'enfants. */ - SkeletonAnimationObjectPtrArray const & getChildren()const + SkeletonAnimationObjectArray const & getChildren()const { return m_children; } @@ -124,7 +124,7 @@ namespace castor3d SkeletonNodeType m_type; //!\~english The objects depending on this one. //!\~french Les objets dépendant de celui-ci. - SkeletonAnimationObjectPtrArray m_children; + SkeletonAnimationObjectArray m_children; //!\~english The parent object. //!\~french L'objet parent. SkeletonAnimationObjectRPtr m_parent{}; diff --git a/include/Core/Castor3D/Render/Culling/SceneCuller.hpp b/include/Core/Castor3D/Render/Culling/SceneCuller.hpp index 12a26e634b..2cfedf949f 100644 --- a/include/Core/Castor3D/Render/Culling/SceneCuller.hpp +++ b/include/Core/Castor3D/Render/Culling/SceneCuller.hpp @@ -13,7 +13,7 @@ See LICENSE file in root folder namespace castor3d { - AnimatedObjectSPtr findAnimatedObject( Scene const & scene + AnimatedObjectRPtr findAnimatedObject( Scene const & scene , castor::String const & name ); size_t hash( SubmeshRenderNode const & culled ); diff --git a/include/Core/Castor3D/Scene/Animation/AnimatedObject.hpp b/include/Core/Castor3D/Scene/Animation/AnimatedObject.hpp index 400365fa7b..309d3ab32e 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimatedObject.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimatedObject.hpp @@ -14,6 +14,7 @@ namespace castor3d : public castor::Named { public: + using AnimationInstancesMap = std::map< castor::String, AnimationInstanceUPtr >; /** *\~english *name Copy / Move. @@ -143,7 +144,7 @@ namespace castor3d return m_animations.find( name ) != m_animations.end(); } - AnimationInstancePtrStrMap const & getAnimations()const + AnimationInstancesMap const & getAnimations()const { return m_animations; } @@ -193,7 +194,7 @@ namespace castor3d protected: //!\~english All animations. //!\~french Toutes les animations. - AnimationInstancePtrStrMap m_animations; + AnimationInstancesMap m_animations; private: AnimationType m_kind; diff --git a/include/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.hpp b/include/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.hpp index 1b8bf96183..e38d4995e7 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.hpp @@ -21,6 +21,7 @@ namespace castor3d , public castor::OwnedBy< Scene > { public: + using AnimatedObjectMap = std::map< castor::String, AnimatedObjectUPtr >; /** *\~english *\brief Specified constructor @@ -50,7 +51,7 @@ namespace castor3d *\param[in] node Le SceneNode à partir duquel l'AnimatedObject est créé. *\param[in] name Le nom de l'instance du SceneNode. */ - C3D_API AnimatedObjectSPtr addObject( SceneNode & node + C3D_API AnimatedObjectRPtr addObject( SceneNode & node , castor::String const & name ); /** *\~english @@ -64,7 +65,7 @@ namespace castor3d *\param[in] geometry La géométrie instanciant le maillage. *\param[in] name Le nom de l'instance du Mesh. */ - C3D_API AnimatedObjectSPtr addObject( Mesh & mesh + C3D_API AnimatedObjectRPtr addObject( Mesh & mesh , Geometry & geometry , castor::String const & name ); /** @@ -81,7 +82,7 @@ namespace castor3d *\param[in] geometry La géométrie instanciant le maillage. *\param[in] name Le nom de l'instance du Skeleton. */ - C3D_API AnimatedObjectSPtr addObject( Skeleton & skeleton + C3D_API AnimatedObjectRPtr addObject( Skeleton & skeleton , Mesh & mesh , Geometry & geometry , castor::String const & name ); @@ -97,7 +98,7 @@ namespace castor3d *\param[in] config La configuration de texture *\param[in] pass La passe instanciant la texture. */ - C3D_API AnimatedObjectSPtr addObject( TextureSourceInfo const & sourceInfo + C3D_API AnimatedObjectRPtr addObject( TextureSourceInfo const & sourceInfo , TextureConfiguration const & config , Pass & pass ); /** @@ -110,7 +111,7 @@ namespace castor3d *\remarks Cette fonction considère que l'objet a préalablement été créé afin d'être intégré à ce groupe (avec donc les bonnes scène et map d'animations) *\param[in] object Le AnimatedObject à ajouter */ - C3D_API bool addObject( AnimatedObjectSPtr object ); + C3D_API bool addObject( AnimatedObjectUPtr object ); /** *\~english *\brief Find an AnimatedObject given its name. @@ -264,7 +265,7 @@ namespace castor3d *\~french *\return Les objets animés. */ - AnimatedObjectPtrStrMap const & getObjects()const + AnimatedObjectMap const & getObjects()const { return m_objects; } @@ -281,7 +282,7 @@ namespace castor3d private: GroupAnimationMap m_animations; - AnimatedObjectPtrStrMap m_objects; + AnimatedObjectMap m_objects; castor::PreciseTimer m_timer; }; } diff --git a/include/Core/Castor3D/Scene/Animation/AnimatedSkeleton.hpp b/include/Core/Castor3D/Scene/Animation/AnimatedSkeleton.hpp index f690fe830c..5559c8c719 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimatedSkeleton.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimatedSkeleton.hpp @@ -97,10 +97,12 @@ namespace castor3d void doClearAnimations()override; protected: + using InstanceArray = std::vector< SkeletonAnimationInstance * >; + Skeleton & m_skeleton; Mesh & m_mesh; Geometry & m_geometry; - SkeletonAnimationInstanceArray m_playingAnimations; + InstanceArray m_playingAnimations; uint32_t m_id{}; mutable bool m_reinit = true; }; diff --git a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp index de15f62f88..0e30ad4e35 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp @@ -92,8 +92,8 @@ namespace castor3d class SceneNodeAnimation; class SceneNodeAnimationKeyFrame; - CU_DeclareSmartPtr( SceneNodeAnimation ); - CU_DeclareSmartPtr( SceneNodeAnimationKeyFrame ); + CU_DeclareCUSmartPtr( castor3d, SceneNodeAnimation, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SceneNodeAnimationKeyFrame, C3D_API ); //@} struct GroupAnimation @@ -111,23 +111,16 @@ namespace castor3d using Animable = AnimableT< Engine >; using Animation = AnimationT< Engine >; + CU_DeclareCUSmartPtr( castor3d, Animable, C3D_API ); CU_DeclareCUSmartPtr( castor3d, AnimatedObjectGroup, C3D_API ); - - CU_DeclareSmartPtr( Animable ); - CU_DeclareSmartPtr( AnimatedMesh ); - CU_DeclareSmartPtr( AnimatedObject ); - CU_DeclareSmartPtr( AnimatedSceneNode ); - CU_DeclareSmartPtr( AnimatedSkeleton ); - CU_DeclareSmartPtr( AnimatedTexture ); - CU_DeclareSmartPtr( Animation ); - CU_DeclareSmartPtr( AnimationInstance ); - - //! AnimatedObject pointer map, sorted by name. - CU_DeclareMap( castor::String, AnimatedObjectSPtr, AnimatedObjectPtrStr ); - //! Animation pointer map, sorted by name. - CU_DeclareMap( castor::String, AnimationInstanceUPtr, AnimationInstancePtrStr ); - //! Animation pointer map, sorted by name. - CU_DeclareMap( castor::String, AnimationSPtr, AnimationPtrStr ); + CU_DeclareCUSmartPtr( castor3d, AnimatedMesh, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimatedObject, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimatedSceneNode, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimatedSkeleton, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimatedTexture, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, Animation, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, AnimationInstance, C3D_API ); + CU_DeclareCUTemplateSmartPtr( castor3d, AnimableT ); using OnAnimatedSkeletonChangeFunction = std::function< void( AnimatedObjectGroup const &, AnimatedSkeleton & ) >; using OnAnimatedSkeletonChange = castor::SignalT< OnAnimatedSkeletonChangeFunction >; diff --git a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp index c10300a9ba..d9cc2d6b27 100644 --- a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp +++ b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp @@ -46,7 +46,7 @@ namespace castor3d *\brief Récupère un os animé. *\param[in] bone L'os. */ - C3D_API SkeletonAnimationInstanceObjectSPtr getObject( BoneNode const & bone )const; + C3D_API SkeletonAnimationInstanceObjectRPtr getObject( BoneNode const & bone )const; /** *\~english *\brief Retrieves an animated node. @@ -55,7 +55,7 @@ namespace castor3d *\brief Récupère un noeud animé. *\param[in] node Le noeud. */ - C3D_API SkeletonAnimationInstanceObjectSPtr getObject( SkeletonNode const & node )const; + C3D_API SkeletonAnimationInstanceObjectRPtr getObject( SkeletonNode const & node )const; /** *\~english *\brief Retrieves an animated object. @@ -66,7 +66,7 @@ namespace castor3d *\param[in] type Le type de l'objet. *\param[in] name Le nom de l'objet. */ - C3D_API SkeletonAnimationInstanceObjectSPtr getObject( SkeletonNodeType type + C3D_API SkeletonAnimationInstanceObjectRPtr getObject( SkeletonNodeType type , castor::String const & name )const; /** *\~english diff --git a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp index 3a5d8c7eb0..7e7f8ad29c 100644 --- a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp +++ b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp @@ -18,6 +18,7 @@ namespace castor3d : public castor::OwnedBy< SkeletonAnimationInstance > { protected: + using ObjectArray = std::vector< SkeletonAnimationInstanceObjectRPtr >; /** *\~english *\brief Constructor. @@ -62,7 +63,7 @@ namespace castor3d *\remarks Les transformations de l'enfant sont affectées par celles de cet objet. *\param[in] object L'enfant. */ - C3D_API void addChild( SkeletonAnimationInstanceObjectSPtr object ); + C3D_API void addChild( SkeletonAnimationInstanceObject & object ); /** *\~english *\brief Updates the object, applies the transformations. @@ -88,7 +89,7 @@ namespace castor3d *\~french *\return Le tableau d'enfants. */ - SkeletonAnimationInstanceObjectPtrArray const & getChildren()const + ObjectArray const & getChildren()const { return m_children; } @@ -124,7 +125,7 @@ namespace castor3d AnimationKeyFrameArray::const_iterator m_curr; //!\~english The objects depending on this one. //!\~french Les objets dépendant de celui-ci. - SkeletonAnimationInstanceObjectPtrArray m_children; + ObjectArray m_children; //!\~english The cumulative animation transformations. //!\~french Les transformations cumulées de l'animation. castor::Matrix4x4f m_cumulativeTransform; diff --git a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp index 82f9f1ea3c..25a23598cb 100644 --- a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp @@ -73,17 +73,13 @@ namespace castor3d */ class SkeletonAnimationInstanceObject; - CU_DeclareSmartPtr( SkeletonAnimationInstance ); - CU_DeclareSmartPtr( SkeletonAnimationInstanceBone ); - CU_DeclareSmartPtr( SkeletonAnimationInstanceNode ); - CU_DeclareSmartPtr( SkeletonAnimationInstanceObject ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstance, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceBone, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceNode, C3D_API ); + CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceObject, C3D_API ); - //! MovingObject pointer map, sorted by name. - CU_DeclareMap( castor::String, SkeletonAnimationInstanceObjectSPtr, SkeletonAnimationInstanceObjectPtrStr ); //! SkeletonAnimationInstanceObject pointer array. - CU_DeclareVector( SkeletonAnimationInstanceObjectSPtr, SkeletonAnimationInstanceObjectPtr ); - //! Skeleton animation instance pointer array. - CU_DeclareVector( std::reference_wrapper< SkeletonAnimationInstance >, SkeletonAnimationInstance ); + CU_DeclareVector( SkeletonAnimationInstanceObjectUPtr, SkeletonAnimationInstanceObjectPtr ); //@} //@} diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index 2ddeb9d80a..c48c501a02 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -219,10 +219,10 @@ namespace castor3d FloatArray vertexTex{}; UInt32Array faces{}; AnimatedObjectGroupRPtr animGroup{}; - AnimatedObjectSPtr animSkeleton{}; - AnimatedObjectSPtr animMesh{}; - AnimatedObjectSPtr animNode{}; - AnimatedObjectSPtr animTexture{}; + AnimatedObjectRPtr animSkeleton{}; + AnimatedObjectRPtr animMesh{}; + AnimatedObjectRPtr animNode{}; + AnimatedObjectRPtr animTexture{}; TextureAnimationUPtr textureAnimation{}; MeshAnimationUPtr morphAnimation{}; SceneBackgroundSPtr background{}; diff --git a/source/Core/Castor3D/Animation/AnimationImporter.cpp b/source/Core/Castor3D/Animation/AnimationImporter.cpp index d5453f3542..9bdd4bedf0 100644 --- a/source/Core/Castor3D/Animation/AnimationImporter.cpp +++ b/source/Core/Castor3D/Animation/AnimationImporter.cpp @@ -15,6 +15,8 @@ #include "Castor3D/Scene/SceneImporter.hpp" #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimationImporter ) + namespace castor3d { namespace animimp diff --git a/source/Core/Castor3D/Animation/AnimationModule.cpp b/source/Core/Castor3D/Animation/AnimationModule.cpp index 04c6950d5f..f7838145b6 100644 --- a/source/Core/Castor3D/Animation/AnimationModule.cpp +++ b/source/Core/Castor3D/Animation/AnimationModule.cpp @@ -1,5 +1,9 @@ #include "Castor3D/Animation/AnimationModule.hpp" +#include "Castor3D/Animation/AnimationKeyFrame.hpp" + +CU_ImplementCUSmartPtr( castor3d, AnimationKeyFrame ) + namespace castor3d { castor::String getName( AnimationType value ) diff --git a/source/Core/Castor3D/Binary/BinaryMeshAnimation.cpp b/source/Core/Castor3D/Binary/BinaryMeshAnimation.cpp index aa4e2dbfa6..5753e727b2 100644 --- a/source/Core/Castor3D/Binary/BinaryMeshAnimation.cpp +++ b/source/Core/Castor3D/Binary/BinaryMeshAnimation.cpp @@ -48,13 +48,13 @@ namespace castor3d break; case ChunkType::eMeshMorphTarget: - keyFrame = std::make_unique< MeshMorphTarget >( obj, 0_ms ); + keyFrame = castor::makeUnique< MeshMorphTarget >( obj, 0_ms ); result = createBinaryParser< MeshMorphTarget >().parse( *keyFrame, chunk ); checkError( result, "Couldn't parse keyframe." ); if ( result ) { - obj.addKeyFrame( std::move( keyFrame ) ); + obj.addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( keyFrame ) ); } break; @@ -99,13 +99,13 @@ namespace castor3d case ChunkType::eMeshAnimationKeyFrame: #pragma GCC diagnostic pop #pragma warning( pop ) - keyFrame = std::make_unique< MeshMorphTarget >( obj, 0_ms ); + keyFrame = castor::makeUnique< MeshMorphTarget >( obj, 0_ms ); result = createBinaryParser< MeshMorphTarget >().parse( *keyFrame, chunk ); checkError( result, "Couldn't parse keyframe." ); if ( result ) { - obj.addKeyFrame( std::move( keyFrame ) ); + obj.addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( keyFrame ) ); } break; diff --git a/source/Core/Castor3D/Binary/BinarySceneNodeAnimation.cpp b/source/Core/Castor3D/Binary/BinarySceneNodeAnimation.cpp index 18bdaae12a..34ed2b8fb2 100644 --- a/source/Core/Castor3D/Binary/BinarySceneNodeAnimation.cpp +++ b/source/Core/Castor3D/Binary/BinarySceneNodeAnimation.cpp @@ -48,13 +48,13 @@ namespace castor3d break; case ChunkType::eSceneNodeAnimationKeyFrame: - keyFrame = std::make_unique< SceneNodeAnimationKeyFrame >( obj, 0_ms ); + keyFrame = castor::makeUnique< SceneNodeAnimationKeyFrame >( obj, 0_ms ); result = createBinaryParser< SceneNodeAnimationKeyFrame >().parse( *keyFrame, chunk ); checkError( result, "Couldn't parse keyframe." ); if ( result ) { - obj.addKeyFrame( std::move( keyFrame ) ); + obj.addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( keyFrame ) ); } break; diff --git a/source/Core/Castor3D/Binary/BinarySkeleton.cpp b/source/Core/Castor3D/Binary/BinarySkeleton.cpp index 215ac77937..a03e53edc3 100644 --- a/source/Core/Castor3D/Binary/BinarySkeleton.cpp +++ b/source/Core/Castor3D/Binary/BinarySkeleton.cpp @@ -103,12 +103,14 @@ namespace castor3d } break; case ChunkType::eAnimation: - animation = std::make_unique< SkeletonAnimation >( obj ); + animation = castor::makeUnique< SkeletonAnimation >( obj ); result = createBinaryParser< Animation >().parse( *animation, chunk ); checkError( result, "Couldn't parse animation." ); if ( result ) { - obj.m_animations.insert( { animation->getName(), std::move( animation ) } ); + auto name = animation->getName(); + obj.m_animations.emplace( name + , castor::ptrRefCast< Animation >( animation ) ); } break; diff --git a/source/Core/Castor3D/Binary/BinarySkeletonAnimation.cpp b/source/Core/Castor3D/Binary/BinarySkeletonAnimation.cpp index d45a423649..5526859b6e 100644 --- a/source/Core/Castor3D/Binary/BinarySkeletonAnimation.cpp +++ b/source/Core/Castor3D/Binary/BinarySkeletonAnimation.cpp @@ -16,16 +16,16 @@ namespace castor3d { bool result = doWriteChunk( obj.getName(), ChunkType::eName, m_chunk ); - for ( auto moving : obj.m_arrayMoving ) + for ( auto moving : obj.getRootObjects() ) { switch ( moving->getType() ) { case SkeletonNodeType::eNode: - result = result && BinaryWriter< SkeletonAnimationNode >{}.write( *std::static_pointer_cast< SkeletonAnimationNode >( moving ), m_chunk ); + result = result && BinaryWriter< SkeletonAnimationNode >{}.write( static_cast< SkeletonAnimationNode const & >( *moving ), m_chunk ); break; case SkeletonNodeType::eBone: - result = result && BinaryWriter< SkeletonAnimationBone >{}.write( *std::static_pointer_cast< SkeletonAnimationBone >( moving ), m_chunk ); + result = result && BinaryWriter< SkeletonAnimationBone >{}.write( static_cast< SkeletonAnimationBone const & >( *moving ), m_chunk ); break; default: @@ -49,9 +49,8 @@ namespace castor3d bool BinaryParser< SkeletonAnimation >::doParse( SkeletonAnimation & obj ) { bool result = true; - SkeletonAnimationNodeSPtr node; - SkeletonAnimationObjectSPtr object; - SkeletonAnimationBoneSPtr bone; + SkeletonAnimationNodeUPtr node{}; + SkeletonAnimationBoneUPtr bone{}; SkeletonAnimationKeyFrameUPtr keyFrame; castor::String name; BinaryChunk chunk; @@ -72,37 +71,37 @@ namespace castor3d break; case ChunkType::eSkeletonAnimationNode: - node = std::make_shared< SkeletonAnimationNode >( obj ); + node = castor::makeUnique< SkeletonAnimationNode >( obj ); result = createBinaryParser< SkeletonAnimationNode >().parse( *node, chunk ); checkError( result, "Couldn't parse node." ); if ( result ) { - obj.addObject( node, nullptr ); + obj.addObject( castor::ptrRefCast< SkeletonAnimationObject >( node ), nullptr ); } break; case ChunkType::eSkeletonAnimationBone: - bone = std::make_shared< SkeletonAnimationBone >( obj ); + bone = castor::makeUnique< SkeletonAnimationBone >( obj ); result = createBinaryParser< SkeletonAnimationBone >().parse( *bone, chunk ); checkError( result, "Couldn't parse bone." ); if ( result ) { - obj.addObject( bone, nullptr ); + obj.addObject( castor::ptrRefCast< SkeletonAnimationObject >( bone ), nullptr ); } break; case ChunkType::eSkeletonAnimationKeyFrame: - keyFrame = std::make_unique< SkeletonAnimationKeyFrame >( obj, 0_ms ); + keyFrame = castor::makeUnique< SkeletonAnimationKeyFrame >( obj, 0_ms ); result = createBinaryParser< SkeletonAnimationKeyFrame >().parse( *keyFrame, chunk ); checkError( result, "Couldn't parse keyframe." ); if ( result ) { - obj.addKeyFrame( std::move( keyFrame ) ); + obj.addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( keyFrame ) ); } break; diff --git a/source/Core/Castor3D/Binary/BinarySkeletonAnimationObject.cpp b/source/Core/Castor3D/Binary/BinarySkeletonAnimationObject.cpp index b9db958b05..5cee5dafff 100644 --- a/source/Core/Castor3D/Binary/BinarySkeletonAnimationObject.cpp +++ b/source/Core/Castor3D/Binary/BinarySkeletonAnimationObject.cpp @@ -55,11 +55,11 @@ namespace castor3d switch ( moving->getType() ) { case SkeletonNodeType::eNode: - result = result && BinaryWriter< SkeletonAnimationNode >{}.write( *std::static_pointer_cast< SkeletonAnimationNode >( moving ), m_chunk ); + result = result && BinaryWriter< SkeletonAnimationNode >{}.write( static_cast< SkeletonAnimationNode const & >( *moving ), m_chunk ); break; case SkeletonNodeType::eBone: - result = result && BinaryWriter< SkeletonAnimationBone >{}.write( *std::static_pointer_cast< SkeletonAnimationBone >( moving ), m_chunk ); + result = result && BinaryWriter< SkeletonAnimationBone >{}.write( static_cast< SkeletonAnimationBone const & >( *moving ), m_chunk ); break; default: @@ -87,28 +87,30 @@ namespace castor3d case ChunkType::eSkeletonAnimationBone: if ( m_fileVersion > Version{ 1, 5, 0 } ) { - auto bone = std::make_shared< SkeletonAnimationBone >( *obj.getOwner() ); + auto bone = castor::makeUnique< SkeletonAnimationBone >( *obj.getOwner() ); result = createBinaryParser< SkeletonAnimationBone >().parse( *bone, chunk ); checkError( result, "Couldn't parse animation bone." ); if ( result ) { - obj.addChild( bone ); - obj.getOwner()->addObject( bone, obj.shared_from_this() ); + obj.addChild( bone.get() ); + obj.getOwner()->addObject( castor::ptrRefCast< SkeletonAnimationObject >( bone ) + , &obj ); } } break; case ChunkType::eSkeletonAnimationNode: if ( m_fileVersion > Version{ 1, 5, 0 } ) { - auto node = std::make_shared< SkeletonAnimationNode >( *obj.getOwner() ); + auto node = castor::makeUnique< SkeletonAnimationNode >( *obj.getOwner() ); result = createBinaryParser< SkeletonAnimationNode >().parse( *node, chunk ); checkError( result, "Couldn't parse animation node." ); if ( result ) { - obj.addChild( node ); - obj.getOwner()->addObject( node, obj.shared_from_this() ); + obj.addChild( node.get() ); + obj.getOwner()->addObject( castor::ptrRefCast< SkeletonAnimationObject >( node ) + , &obj ); } } break; @@ -168,7 +170,7 @@ namespace castor3d if ( it == animation.end() ) { - animation.addKeyFrame( std::make_unique< SkeletonAnimationKeyFrame >( *obj.getOwner() + animation.addKeyFrame( castor::makeUniqueDerived< AnimationKeyFrame, SkeletonAnimationKeyFrame >( *obj.getOwner() , keyframe.m_timeIndex ) ); it = animation.find( keyframe.m_timeIndex ); } @@ -220,38 +222,42 @@ namespace castor3d case ChunkType::eSkeletonAnimationBone: if ( m_fileVersion <= Version{ 1, 5, 0 } ) { - auto bone = std::make_shared< SkeletonAnimationBone >( *obj.getOwner() ); + auto bone = castor::makeUnique< SkeletonAnimationBone >( *obj.getOwner() ); result = createBinaryParser< SkeletonAnimationBone >().parse( *bone, chunk ); checkError( result, "Couldn't parse animation bone." ); if ( result ) { - obj.addChild( bone ); - obj.getOwner()->addObject( bone, obj.shared_from_this() ); + obj.addChild( bone.get() ); if ( !bone->getBone()->getParent() ) { skeleton.setNodeParent( *bone->getBone(), *objNode ); } + + obj.getOwner()->addObject( castor::ptrRefCast< SkeletonAnimationObject >( bone ) + , &obj ); } } break; case ChunkType::eSkeletonAnimationNode: if ( m_fileVersion <= Version{ 1, 5, 0 } ) { - auto node = std::make_shared< SkeletonAnimationNode >( *obj.getOwner() ); + auto node = castor::makeUnique< SkeletonAnimationNode >( *obj.getOwner() ); result = createBinaryParser< SkeletonAnimationNode >().parse( *node, chunk ); checkError( result, "Couldn't parse animation node." ); if ( result ) { - obj.addChild( node ); - obj.getOwner()->addObject( node, obj.shared_from_this() ); + obj.addChild( node.get() ); if ( !node->getNode()->getParent() ) { skeleton.setNodeParent( *node->getNode(), *objNode ); } + + obj.getOwner()->addObject( castor::ptrRefCast< SkeletonAnimationObject >( node ) + , &obj ); } } break; diff --git a/source/Core/Castor3D/Binary/CmshImporter.cpp b/source/Core/Castor3D/Binary/CmshImporter.cpp index acec11df04..1048680bf9 100644 --- a/source/Core/Castor3D/Binary/CmshImporter.cpp +++ b/source/Core/Castor3D/Binary/CmshImporter.cpp @@ -159,7 +159,7 @@ namespace castor3d AnimationImporterUPtr CmshImporterFile::createAnimationImporter() { - return std::make_unique< CmshAnimationImporter >( *getOwner() ); + return castor::makeUniqueDerived< AnimationImporter, CmshAnimationImporter >( *getOwner() ); } SkeletonImporterUPtr CmshImporterFile::createSkeletonImporter() @@ -243,7 +243,7 @@ namespace castor3d AnimationImporterUPtr CmshAnimationImporter::create( Engine & engine ) { - return std::make_unique< CmshAnimationImporter >( engine ); + return castor::makeUniqueDerived< AnimationImporter, CmshAnimationImporter >( engine ); } bool CmshAnimationImporter::doImportSkeleton( SkeletonAnimation & animation ) diff --git a/source/Core/Castor3D/Cache/GeometryCache.cpp b/source/Core/Castor3D/Cache/GeometryCache.cpp index 4c835cd7e9..6dde8a8496 100644 --- a/source/Core/Castor3D/Cache/GeometryCache.cpp +++ b/source/Core/Castor3D/Cache/GeometryCache.cpp @@ -64,10 +64,10 @@ namespace castor3d { auto material = element.getMaterial( *submesh ); auto animMesh = submesh->hasMorphComponent() - ? std::static_pointer_cast< AnimatedMesh >( findAnimatedObject( scene, element.getName() + cuT( "_Mesh" ) ) ) + ? static_cast< AnimatedMesh * >( findAnimatedObject( scene, element.getName() + cuT( "_Mesh" ) ) ) : nullptr; auto animSkeleton = submesh->hasSkinComponent() - ? std::static_pointer_cast< AnimatedSkeleton >( findAnimatedObject( scene, element.getName() + cuT( "_Skeleton" ) ) ) + ? static_cast< AnimatedSkeleton * >( findAnimatedObject( scene, element.getName() + cuT( "_Skeleton" ) ) ) : nullptr; if ( auto comp = submesh->getComponent< PassMasksComponent >() ) @@ -77,8 +77,8 @@ namespace castor3d nodes.createNode( *pass , *submesh , element - , animMesh.get() - , animSkeleton.get() ); + , animMesh + , animSkeleton ); } } else @@ -88,8 +88,8 @@ namespace castor3d nodes.createNode( *pass , *submesh , element - , animMesh.get() - , animSkeleton.get() ); + , animMesh + , animSkeleton ); } } } diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 6689bcda15..8c9d42744b 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -659,7 +659,7 @@ namespace castor3d TextureUnitData & TextureUnitCache::getSourceData( TextureSourceInfo const & sourceInfo , PassTextureConfig const & passConfig - , AnimationUPtr animation ) + , TextureAnimationUPtr animation ) { auto hash = cachetex::makeHash( sourceInfo, passConfig ); auto ires = m_datas.emplace( hash, nullptr ); diff --git a/source/Core/Castor3D/Material/Pass/Pass.cpp b/source/Core/Castor3D/Material/Pass/Pass.cpp index a78a47ddb8..89aedcb9be 100644 --- a/source/Core/Castor3D/Material/Pass/Pass.cpp +++ b/source/Core/Castor3D/Material/Pass/Pass.cpp @@ -91,7 +91,7 @@ namespace castor3d && checkFlag( lhs, TextureSpace::eNormalised ) == checkFlag( rhs, TextureSpace::eNormalised ); } - static bool areMergeable( std::unordered_map< TextureSourceInfo, AnimationUPtr, TextureSourceInfoHasher > const & animations + static bool areMergeable( std::unordered_map< TextureSourceInfo, TextureAnimationUPtr, TextureSourceInfoHasher > const & animations , Pass::PassTextureSource const & lhs , Pass::PassTextureSource const & rhs ) { @@ -207,7 +207,7 @@ namespace castor3d && it->second ) { auto & srcAnim = static_cast< TextureAnimation const & >( *it->second ); - auto clonedAnim = std::make_unique< TextureAnimation >( *srcAnim.getEngine() + auto clonedAnim = castor::makeUnique< TextureAnimation >( *srcAnim.getEngine() , srcAnim.getName() ); clonedAnim->setRotateSpeed( srcAnim.getRotateSpeed() ); clonedAnim->setScaleSpeed( srcAnim.getScaleSpeed() ); @@ -369,7 +369,7 @@ namespace castor3d void Pass::registerTexture( TextureSourceInfo sourceInfo , PassTextureConfig configuration - , AnimationUPtr animation ) + , TextureAnimationUPtr animation ) { m_animations.emplace( sourceInfo , std::move( animation ) ); @@ -631,7 +631,8 @@ namespace castor3d ? std::move( animIt->second ) : nullptr ); auto flags = getFlags( cfg.second.config ); - result.emplace( *flags.begin(), &textureCache.getSourceData( cfg.first, cfg.second, std::move( anim ) ) ); + result.emplace( *flags.begin() + , &textureCache.getSourceData( cfg.first, cfg.second, std::move( anim ) ) ); } void Pass::setColour( castor::HdrRgbColour const & value ) @@ -1007,8 +1008,7 @@ namespace castor3d if ( unitData.animation && !unit->hasAnimation() ) { auto anim = unitData.animation.get(); - - unit->addAnimation( std::move( unitData.animation ) ); + unit->addAnimation( castor::ptrRefCast< Animation >( unitData.animation ) ); static_cast< TextureAnimation & >( *anim ).setAnimable( *unit ); } diff --git a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp index 57f591ea34..c7ffdb2884 100644 --- a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp +++ b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.hpp" #include "Castor3D/Scene/Animation/AnimatedTexture.hpp" +CU_ImplementCUSmartPtr( castor3d, TextureAnimation ) + namespace castor3d { TextureAnimation::TextureAnimation( Engine & engine @@ -44,9 +46,9 @@ namespace castor3d { if ( tile < tiles ) { - auto kf = std::make_unique< TextureAnimationKeyFrame >( *this, timeIndex ); + auto kf = castor::makeUnique< TextureAnimationKeyFrame >( *this, timeIndex ); kf->setTile( { x, y } ); - addKeyFrame( std::move( kf ) ); + addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( kf ) ); timeIndex += timeStep; } diff --git a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp index b76a64d047..6eccdb13b9 100644 --- a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp @@ -1,5 +1,7 @@ #include "Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.hpp" +CU_ImplementCUSmartPtr( castor3d, TextureAnimationKeyFrame ) + namespace castor3d { TextureAnimationKeyFrame::TextureAnimationKeyFrame( TextureAnimation & parent diff --git a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp index 9e07046d32..6ec34cb9a3 100644 --- a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp @@ -94,7 +94,7 @@ namespace castor3d { if ( !hasAnimation() ) { - addAnimation( std::make_unique< TextureAnimation >( *getEngine(), "Default" ) ); + addAnimation( castor::makeUniqueDerived< Animation, TextureAnimation >( *getEngine(), "Default" ) ); m_animated = true; } diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp index 25e8f70ff2..dcf3280baa 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Model/Mesh/Mesh.hpp" +CU_ImplementCUSmartPtr( castor3d, MeshAnimation ) + namespace castor3d { MeshAnimation::MeshAnimation( Mesh & mesh diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp index b8ce550d1d..9bbfe6db95 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp @@ -3,6 +3,8 @@ #include "Castor3D/Model/Mesh/Submesh/Submesh.hpp" #include "Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp" +CU_ImplementCUSmartPtr( castor3d, MeshAnimationSubmesh ) + namespace castor3d { MeshAnimationSubmesh::MeshAnimationSubmesh( MeshAnimation & animation, Submesh & submesh ) diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp index 6c24d1ced5..12f0a42c18 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp @@ -6,6 +6,8 @@ #include +CU_ImplementCUSmartPtr( castor3d, MeshMorphTarget ) + namespace castor3d { MeshMorphTarget::MeshMorphTarget( MeshAnimation & parent diff --git a/source/Core/Castor3D/Model/Mesh/Mesh.cpp b/source/Core/Castor3D/Model/Mesh/Mesh.cpp index ec79230f1d..5ba5fad33c 100644 --- a/source/Core/Castor3D/Model/Mesh/Mesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Mesh.cpp @@ -148,7 +148,7 @@ namespace castor3d { if ( !hasAnimation( name ) ) { - addAnimation( std::make_unique< MeshAnimation >( *this, name ) ); + addAnimation( castor::makeUniqueDerived< Animation, MeshAnimation >( *this, name ) ); } return doGetAnimation< MeshAnimation >( name ); diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp index 0cc7800800..b33952182a 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp @@ -6,6 +6,8 @@ #include "Castor3D/Model/Skeleton/BoneNode.hpp" #include "Castor3D/Animation/Animable.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimation ) + namespace castor3d { //************************************************************************************************* @@ -31,44 +33,43 @@ namespace castor3d { } - SkeletonAnimationObjectSPtr SkeletonAnimation::addObject( SkeletonNode & node - , SkeletonAnimationObjectSPtr parent ) + SkeletonAnimationObjectRPtr SkeletonAnimation::addObject( SkeletonNode & node + , SkeletonAnimationObjectRPtr parent ) { - auto result = std::make_shared< SkeletonAnimationNode >( *this ); + auto result = castor::makeUnique< SkeletonAnimationNode >( *this ); result->setNode( node ); - return addObject( result, parent ); + return addObject( castor::ptrRefCast< SkeletonAnimationObject >( result ), parent ); } - SkeletonAnimationObjectSPtr SkeletonAnimation::addObject( BoneNode & bone - , SkeletonAnimationObjectSPtr parent ) + SkeletonAnimationObjectRPtr SkeletonAnimation::addObject( BoneNode & bone + , SkeletonAnimationObjectRPtr parent ) { - auto result = std::make_shared< SkeletonAnimationBone >( *this ); + auto result = castor::makeUnique< SkeletonAnimationBone >( *this ); result->setBone( bone ); - return addObject( result, parent ); + return addObject( castor::ptrRefCast< SkeletonAnimationObject >( result ), parent ); } - SkeletonAnimationObjectSPtr SkeletonAnimation::addObject( SkeletonAnimationObjectSPtr object - , SkeletonAnimationObjectSPtr parent ) + SkeletonAnimationObjectRPtr SkeletonAnimation::addObject( SkeletonAnimationObjectUPtr object + , SkeletonAnimationObjectRPtr parent ) { castor::String name = sklanm::getMovingTypeName( object->getType() ) + object->getName(); auto it = m_toMove.find( name ); - SkeletonAnimationObjectSPtr result; + SkeletonAnimationObjectRPtr result{}; if ( it == m_toMove.end() ) { - m_toMove.emplace( name, object ); + result = object.get(); + m_toMove.emplace( name, std::move( object ) ); if ( !parent ) { - m_arrayMoving.push_back( object ); + m_rootObjects.push_back( result ); } - - result = object; } else { log::warn << cuT( "This object was already added: [" ) << name << cuT( "]" ) << std::endl; - result = it->second; + result = it->second.get(); } return result; @@ -80,25 +81,25 @@ namespace castor3d return m_toMove.find( sklanm::getMovingTypeName( type ) + name ) != m_toMove.end(); } - SkeletonAnimationObjectSPtr SkeletonAnimation::getObject( SkeletonNode const & node )const + SkeletonAnimationObjectRPtr SkeletonAnimation::getObject( SkeletonNode const & node )const { return getObject( SkeletonNodeType::eNode, node.getName() ); } - SkeletonAnimationObjectSPtr SkeletonAnimation::getObject( BoneNode const & bone )const + SkeletonAnimationObjectRPtr SkeletonAnimation::getObject( BoneNode const & bone )const { return getObject( SkeletonNodeType::eBone, bone.getName() ); } - SkeletonAnimationObjectSPtr SkeletonAnimation::getObject( SkeletonNodeType type + SkeletonAnimationObjectRPtr SkeletonAnimation::getObject( SkeletonNodeType type , castor::String const & name )const { - SkeletonAnimationObjectSPtr result; + SkeletonAnimationObjectRPtr result{}; auto it = m_toMove.find( sklanm::getMovingTypeName( type ) + name ); if ( it != m_toMove.end() ) { - result = it->second; + result = it->second.get(); } return result; diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp index 8d40c2cf2d..c0f7c0c5a5 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Model/Skeleton/BoneNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationBone ) + namespace castor3d { SkeletonAnimationBone::SkeletonAnimationBone( SkeletonAnimation & animation ) diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp index a3595abd53..631d1a0d64 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp @@ -6,6 +6,8 @@ #include #include +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationKeyFrame ) + namespace castor3d { //************************************************************************************************* diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp index b1a46c0893..397768ffd9 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Model/Skeleton/SkeletonNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationNode ) + namespace castor3d { SkeletonAnimationNode::SkeletonAnimationNode( SkeletonAnimation & animation ) diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp index 557d6ced1a..099ba2e063 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp @@ -1,5 +1,7 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationObject ) + namespace castor3d { SkeletonAnimationObject::SkeletonAnimationObject( SkeletonAnimation & animation @@ -9,9 +11,9 @@ namespace castor3d { } - void SkeletonAnimationObject::addChild( SkeletonAnimationObjectSPtr object ) + void SkeletonAnimationObject::addChild( SkeletonAnimationObjectRPtr object ) { - CU_Require( object.get() != this ); + CU_Require( object != this ); object->m_parent = this; m_children.push_back( object ); } diff --git a/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp b/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp index 91238d896e..3be95fd1d7 100644 --- a/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp @@ -120,7 +120,7 @@ namespace castor3d { if ( !hasAnimation( name ) ) { - addAnimation( std::make_unique< SkeletonAnimation >( *this, name ) ); + addAnimation( castor::makeUniqueDerived< Animation, SkeletonAnimation >( *this, name ) ); } return doGetAnimation< SkeletonAnimation >( name ); diff --git a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp index 89d159f385..ee6e7d7c9c 100644 --- a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp +++ b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp @@ -36,10 +36,10 @@ namespace castor3d { //********************************************************************************************* - AnimatedObjectSPtr findAnimatedObject( Scene const & scene + AnimatedObjectRPtr findAnimatedObject( Scene const & scene , castor::String const & name ) { - AnimatedObjectSPtr result; + AnimatedObjectRPtr result{}; auto & cache = scene.getAnimatedObjectGroupCache(); using LockType = std::unique_lock< AnimatedObjectGroupCache const >; LockType lock{ castor::makeUniqueLock( cache ) }; @@ -52,7 +52,7 @@ namespace castor3d if ( it != group.second->getObjects().end() ) { - result = it->second; + result = it->second.get(); } } } @@ -373,7 +373,7 @@ namespace castor3d if ( m_isStatic == std::nullopt || object.getParent()->isStatic() == m_isStatic ) { - if ( auto mesh = object.getMesh().lock() ) + if ( auto mesh = object.getMesh() ) { for ( auto & submesh : *mesh ) { diff --git a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp index fdd87dd75e..651c8c3c7d 100644 --- a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp +++ b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp @@ -365,10 +365,10 @@ namespace castor3d if ( passIt != newMaterial.end() ) { auto animMesh = data.hasMorphComponent() - ? std::static_pointer_cast< AnimatedMesh >( findAnimatedObject( *getOwner(), instance.getName() + cuT( "_Mesh" ) ) ) + ? static_cast< AnimatedMesh * >( findAnimatedObject( *getOwner(), instance.getName() + cuT( "_Mesh" ) ) ) : nullptr; auto animSkeleton = data.hasSkinComponent() - ? std::static_pointer_cast< AnimatedSkeleton >( findAnimatedObject( *getOwner(), instance.getName() + cuT( "_Skeleton" ) ) ) + ? static_cast< AnimatedSkeleton * >( findAnimatedObject( *getOwner(), instance.getName() + cuT( "_Skeleton" ) ) ) : nullptr; while ( passIt != newMaterial.end() ) @@ -378,8 +378,8 @@ namespace castor3d createNode( *pass , data , instance - , animMesh.get() - , animSkeleton.get() ); + , animMesh + , animSkeleton ); ++passIt; } } @@ -470,10 +470,10 @@ namespace castor3d auto & node = nodeIt.second; auto & instantiation = node->data.getInstantiation(); node->mesh = node->data.hasMorphComponent() - ? std::static_pointer_cast< AnimatedMesh >( findAnimatedObject( *getOwner(), node->instance.getName() + cuT( "_Mesh" ) ) ).get() + ? static_cast< AnimatedMesh * >( findAnimatedObject( *getOwner(), node->instance.getName() + cuT( "_Mesh" ) ) ) : nullptr; node->skeleton = node->data.hasSkinComponent() - ? std::static_pointer_cast< AnimatedSkeleton >( findAnimatedObject( *getOwner(), node->instance.getName() + cuT( "_Skeleton" ) ) ).get() + ? static_cast< AnimatedSkeleton * >( findAnimatedObject( *getOwner(), node->instance.getName() + cuT( "_Skeleton" ) ) ) : nullptr; if ( instantiation.isInstanced() diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp index 453b57a64e..e9923d6176 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp @@ -8,6 +8,8 @@ #include "Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.hpp" #include "Castor3D/Scene/Animation/Mesh/MeshAnimationInstanceSubmesh.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedMesh ) + namespace castor3d { AnimatedMesh::AnimatedMesh( castor::String const & name @@ -92,7 +94,7 @@ namespace castor3d if ( m_mesh.hasAnimation( name ) ) { auto & animation = static_cast< MeshAnimation & >( m_mesh.getAnimation( name ) ); - auto instance = std::make_unique< MeshAnimationInstance >( *this, animation ); + auto instance = castor::makeUniqueDerived< AnimationInstance, MeshAnimationInstance >( *this, animation ); m_animations.emplace( name, std::move( instance ) ); } } diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp index 94d5b43b49..8336b2a1ae 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp @@ -3,6 +3,8 @@ #include "Castor3D/Model/Mesh/Mesh.hpp" #include "Castor3D/Scene/Geometry.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedObject ) + namespace castor3d { AnimatedObject::AnimatedObject( AnimationType kind diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp index 2d503e26cc..bf14b8153e 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp @@ -21,7 +21,7 @@ namespace castor3d { template< typename FuncT, typename ParamT > static bool applyAnimationFunc( GroupAnimationMap & animations - , AnimatedObjectPtrStrMap & objects + , AnimatedObjectGroup::AnimatedObjectMap & objects , castor::String const & name , FuncT func , ParamT const & value @@ -32,7 +32,7 @@ namespace castor3d if ( result ) { - for ( auto it : objects ) + for ( auto & it : objects ) { if ( it.second->hasAnimation( name ) ) { @@ -64,97 +64,105 @@ namespace castor3d m_animations.clear(); } - AnimatedObjectSPtr AnimatedObjectGroup::addObject( SceneNode & node + AnimatedObjectRPtr AnimatedObjectGroup::addObject( SceneNode & node , castor::String const & name ) { - auto object = std::make_shared< AnimatedSceneNode >( name + "_Node", node ); + auto object = castor::makeUniqueDerived< AnimatedObject, AnimatedSceneNode >( name + "_Node", node ); + auto result = object.get(); - if ( !addObject( object ) ) + if ( !addObject( std::move( object ) ) ) { - object.reset(); + result = {}; } - return std::static_pointer_cast< AnimatedObject >( object ); + return result; } - AnimatedObjectSPtr AnimatedObjectGroup::addObject( Mesh & mesh + AnimatedObjectRPtr AnimatedObjectGroup::addObject( Mesh & mesh , Geometry & geometry , castor::String const & name ) { - auto object = std::make_shared< AnimatedMesh >( name + "_Mesh", mesh, geometry ); + auto object = castor::makeUniqueDerived< AnimatedObject, AnimatedMesh >( name + "_Mesh", mesh, geometry ); + auto result = object.get(); - if ( !addObject( object ) ) + if ( !addObject( std::move( object ) ) ) { - object.reset(); + result = {}; } - return std::static_pointer_cast< AnimatedObject >( object ); + return result; } - AnimatedObjectSPtr AnimatedObjectGroup::addObject( Skeleton & skeleton + AnimatedObjectRPtr AnimatedObjectGroup::addObject( Skeleton & skeleton , Mesh & mesh , Geometry & geometry , castor::String const & name ) { - auto object = std::make_shared< AnimatedSkeleton >( name + "_Skeleton", skeleton, mesh, geometry ); + auto object = castor::makeUniqueDerived< AnimatedObject, AnimatedSkeleton >( name + "_Skeleton", skeleton, mesh, geometry ); + auto result = object.get(); - if ( !addObject( object ) ) + if ( !addObject( std::move( object ) ) ) { - object.reset(); + result = {}; } - return std::static_pointer_cast< AnimatedObject >( object ); + return result; } - AnimatedObjectSPtr AnimatedObjectGroup::addObject( TextureSourceInfo const & sourceInfo + AnimatedObjectRPtr AnimatedObjectGroup::addObject( TextureSourceInfo const & sourceInfo , TextureConfiguration const & config , Pass & pass ) { - auto object = std::make_shared< AnimatedTexture >( sourceInfo, config , pass ); + auto object = castor::makeUniqueDerived< AnimatedObject, AnimatedTexture >( sourceInfo, config , pass ); + auto result = object.get(); - if ( !addObject( object ) ) + if ( !addObject( std::move( object ) ) ) { - object.reset(); + result = {}; } - return std::static_pointer_cast< AnimatedObject >( object ); + return result; } - bool AnimatedObjectGroup::addObject( AnimatedObjectSPtr object ) + bool AnimatedObjectGroup::addObject( AnimatedObjectUPtr object ) { - bool result = object && m_objects.find( object->getName() ) == m_objects.end(); + auto name = object->getName(); + bool result = object && m_objects.find( name ) == m_objects.end(); - if ( result ) + if ( auto obj = object.get() ) { - m_objects.insert( { object->getName(), object } ); - - switch ( object->getKind() ) + if ( result ) { - case AnimationType::eSceneNode: - onSceneNodeAdded( *this, static_cast< AnimatedSceneNode & >( *object ) ); - break; - case AnimationType::eSkeleton: - onSkeletonAdded( *this, static_cast< AnimatedSkeleton & >( *object ) ); - break; - case AnimationType::eMesh: - onMeshAdded( *this, static_cast< AnimatedMesh & >( *object ) ); - break; - case AnimationType::eTexture: - onTextureAdded( *this, static_cast< AnimatedTexture & >( *object ) ); - break; - default: - break; + m_objects.emplace( name, std::move( object ) ); + + switch ( object->getKind() ) + { + case AnimationType::eSceneNode: + onSceneNodeAdded( *this, static_cast< AnimatedSceneNode & >( *obj ) ); + break; + case AnimationType::eSkeleton: + onSkeletonAdded( *this, static_cast< AnimatedSkeleton & >( *obj ) ); + break; + case AnimationType::eMesh: + onMeshAdded( *this, static_cast< AnimatedMesh & >( *obj ) ); + break; + case AnimationType::eTexture: + onTextureAdded( *this, static_cast< AnimatedTexture & >( *obj ) ); + break; + default: + break; + } } - } - for ( auto it : m_animations ) - { - object->addAnimation( it.first ); - auto & animation = object->getAnimation( it.first ); - animation.setLooped( it.second.looped ); - animation.setScale( it.second.scale ); - animation.setStartingPoint( it.second.startingPoint ); - animation.setStoppingPoint( it.second.stoppingPoint ); + for ( auto it : m_animations ) + { + obj->addAnimation( it.first ); + auto & animation = obj->getAnimation( it.first ); + animation.setLooped( it.second.looped ); + animation.setScale( it.second.scale ); + animation.setStartingPoint( it.second.startingPoint ); + animation.setStoppingPoint( it.second.stoppingPoint ); + } } return result; @@ -182,7 +190,7 @@ namespace castor3d result = true; m_animations.insert( { name, { name, AnimationState::eStopped, false, 1.0f } } ); - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->addAnimation( name ); } @@ -260,7 +268,7 @@ namespace castor3d #endif - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->update( tslf ); } @@ -272,7 +280,7 @@ namespace castor3d if ( itAnim != m_animations.end() ) { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->startAnimation( name ); } @@ -287,7 +295,7 @@ namespace castor3d if ( itAnim != m_animations.end() ) { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->stopAnimation( name ); } @@ -302,7 +310,7 @@ namespace castor3d if ( itAnim != m_animations.end() ) { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->pauseAnimation( name ); } @@ -313,7 +321,7 @@ namespace castor3d void AnimatedObjectGroup::startAllAnimations() { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->startAllAnimations(); } @@ -326,7 +334,7 @@ namespace castor3d void AnimatedObjectGroup::stopAllAnimations() { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->stopAllAnimations(); } @@ -339,7 +347,7 @@ namespace castor3d void AnimatedObjectGroup::pauseAllAnimations() { - for ( auto it : m_objects ) + for ( auto & it : m_objects ) { it.second->pauseAllAnimations(); } diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp index 2d3a267b18..463e995ad1 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp @@ -7,6 +7,8 @@ #include "Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedSceneNode ) + namespace castor3d { AnimatedSceneNode::AnimatedSceneNode( castor::String const & name @@ -33,7 +35,7 @@ namespace castor3d if ( m_node.hasAnimation( name ) ) { auto & animation = static_cast< SceneNodeAnimation & >( m_node.getAnimation( name ) ); - auto instance = std::make_unique< SceneNodeAnimationInstance >( *this, animation ); + auto instance = castor::makeUniqueDerived< AnimationInstance, SceneNodeAnimationInstance >( *this, animation ); m_animations.emplace( name, std::move( instance ) ); } } diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp index 00a7982cdd..9c2abab174 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp @@ -8,6 +8,8 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedSkeleton ) + namespace castor3d { AnimatedSkeleton::AnimatedSkeleton( castor::String const & name @@ -25,9 +27,9 @@ namespace castor3d { if ( !m_playingAnimations.empty() ) { - for ( auto & animation : m_playingAnimations ) + for ( auto animation : m_playingAnimations ) { - animation.get().update( elapsed ); + animation->update( elapsed ); } m_geometry.markDirty(); @@ -56,9 +58,9 @@ namespace castor3d { castor::Matrix4x4f final{ skeleton.getGlobalInverseTransform() }; - for ( auto & animation : m_playingAnimations ) + for ( auto animation : m_playingAnimations ) { - auto object = animation.get().getObject( *bone ); + auto object = animation->getObject( *bone ); if ( object ) { @@ -80,23 +82,23 @@ namespace castor3d if ( it == m_animations.end() ) { auto & animation = static_cast< SkeletonAnimation & >( m_skeleton.getAnimation( name ) ); - auto instance = std::make_unique< SkeletonAnimationInstance >( *this, animation ); + auto instance = castor::makeUniqueDerived< AnimationInstance, SkeletonAnimationInstance >( *this, animation ); m_animations.emplace( name, std::move( instance ) ); } } void AnimatedSkeleton::doStartAnimation( AnimationInstance & animation ) { - m_playingAnimations.emplace_back( static_cast< SkeletonAnimationInstance & >( animation ) ); + m_playingAnimations.emplace_back( &static_cast< SkeletonAnimationInstance & >( animation ) ); } void AnimatedSkeleton::doStopAnimation( AnimationInstance & animation ) { m_playingAnimations.erase( std::find_if( m_playingAnimations.begin() , m_playingAnimations.end() - , [&animation]( std::reference_wrapper< SkeletonAnimationInstance > & instance ) + , [&animation]( SkeletonAnimationInstance * instance ) { - return &instance.get() == &static_cast< SkeletonAnimationInstance & >( animation ); + return instance == &static_cast< SkeletonAnimationInstance & >( animation ); } ) ); m_reinit = m_playingAnimations.empty(); } diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp index 49c8a2c497..2844c783a3 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp @@ -10,6 +10,8 @@ #include "Castor3D/Scene/Animation/Texture/TextureAnimationInstance.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" +CU_ImplementCUSmartPtr( castor3d, AnimatedTexture ) + namespace castor3d { namespace anmtex @@ -112,7 +114,7 @@ namespace castor3d && m_texture->hasAnimation() ) { auto & animation = m_texture->getAnimation(); - auto instance = std::make_unique< TextureAnimationInstance >( *this, animation ); + auto instance = castor::makeUniqueDerived< AnimationInstance, TextureAnimationInstance >( *this, animation ); m_animations.emplace( name, std::move( instance ) ); m_pass.getOwner()->getEngine()->getMaterialCache().registerTexture( *this ); startAnimation( animation.getName() ); diff --git a/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp index 55a6b937cb..d4a883bbc6 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp @@ -1,7 +1,12 @@ #include "Castor3D/Scene/Animation/AnimationInstance.hpp" +#include "Castor3D/Animation/Animable.hpp" #include "Castor3D/Animation/Animation.hpp" +CU_ImplementCUSmartPtr( castor3d, Animable ) +CU_ImplementCUSmartPtr( castor3d, Animation ) +CU_ImplementCUSmartPtr( castor3d, AnimationInstance ) + namespace castor3d { AnimationInstance::AnimationInstance( AnimationInstance && rhs ) diff --git a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp index c7d5c2e132..7cc36a9988 100644 --- a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp +++ b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Scene/SceneNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SceneNodeAnimation ) + namespace castor3d { SceneNodeAnimation::SceneNodeAnimation( SceneNode & node diff --git a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp index 2e73650c17..a23763b7f0 100644 --- a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" +CU_ImplementCUSmartPtr( castor3d, SceneNodeAnimationKeyFrame ) + namespace castor3d { SceneNodeAnimationKeyFrame::SceneNodeAnimationKeyFrame( SceneNodeAnimation & parent diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp index 6c914754bc..c803977c63 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp @@ -10,6 +10,8 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstance ) + namespace castor3d { //************************************************************************************************* @@ -34,25 +36,23 @@ namespace castor3d , SkeletonAnimation & animation ) : AnimationInstance{ object, animation } { - for ( auto moving : animation.m_arrayMoving ) + for ( auto moving : animation.getRootObjects() ) { switch ( moving->getType() ) { case SkeletonNodeType::eNode: { - auto instance = std::make_shared< SkeletonAnimationInstanceNode >( *this - , *std::static_pointer_cast< SkeletonAnimationNode >( moving ) - , m_toMove ); - m_toMove.push_back( instance ); + m_toMove.push_back( castor::makeUniqueDerived< SkeletonAnimationInstanceObject, SkeletonAnimationInstanceNode >( *this + , static_cast< SkeletonAnimationNode & >( *moving ) + , m_toMove ) ); } break; case SkeletonNodeType::eBone: { - auto instance = std::make_shared< SkeletonAnimationInstanceBone >( *this - , *std::static_pointer_cast< SkeletonAnimationBone >( moving ) - , m_toMove ); - m_toMove.push_back( instance ); + m_toMove.push_back( castor::makeUniqueDerived< SkeletonAnimationInstanceObject, SkeletonAnimationInstanceBone >( *this + , static_cast< SkeletonAnimationBone & >( *moving ) + , m_toMove ) ); } break; @@ -73,31 +73,31 @@ namespace castor3d : m_keyFrames.begin(); } - SkeletonAnimationInstanceObjectSPtr SkeletonAnimationInstance::getObject( BoneNode const & bone )const + SkeletonAnimationInstanceObjectRPtr SkeletonAnimationInstance::getObject( BoneNode const & bone )const { return getObject( SkeletonNodeType::eBone, bone.getName() ); } - SkeletonAnimationInstanceObjectSPtr SkeletonAnimationInstance::getObject( SkeletonNode const & node )const + SkeletonAnimationInstanceObjectRPtr SkeletonAnimationInstance::getObject( SkeletonNode const & node )const { return getObject( SkeletonNodeType::eNode, node.getName() ); } - SkeletonAnimationInstanceObjectSPtr SkeletonAnimationInstance::getObject( SkeletonNodeType type + SkeletonAnimationInstanceObjectRPtr SkeletonAnimationInstance::getObject( SkeletonNodeType type , castor::String const & name )const { - SkeletonAnimationInstanceObjectSPtr result; + SkeletonAnimationInstanceObjectRPtr result{}; auto fullName = sklanminst::getObjectTypeName( type ) + name; auto it = std::find_if( m_toMove.begin() , m_toMove.end() - , [&fullName]( SkeletonAnimationInstanceObjectSPtr lookup ) + , [&fullName]( SkeletonAnimationInstanceObjectUPtr const & lookup ) { return sklanminst::getObjectTypeName( lookup->getObject().getType() ) + lookup->getObject().getName() == fullName; } ); if ( it != m_toMove.end() ) { - result = *it; + result = it->get(); } else { diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp index 70781f8055..6d3c4ae198 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp @@ -3,6 +3,8 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.hpp" #include "Castor3D/Model/Skeleton/BoneNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceBone ) + namespace castor3d { SkeletonAnimationInstanceBone::SkeletonAnimationInstanceBone( SkeletonAnimationInstance & animationInstance diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp index 719d1ecca9..1bf6d9a40b 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceNode ) + namespace castor3d { SkeletonAnimationInstanceNode::SkeletonAnimationInstanceNode( SkeletonAnimationInstance & animationInstance diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp index 47cede8d90..8c7c1f6588 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.hpp" +CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceObject ) + namespace castor3d { SkeletonAnimationInstanceObject::SkeletonAnimationInstanceObject( SkeletonAnimationInstance & animationInstance @@ -19,21 +21,21 @@ namespace castor3d { case SkeletonNodeType::eNode: { - auto instance = std::make_shared< SkeletonAnimationInstanceNode >( animationInstance - , *std::static_pointer_cast< SkeletonAnimationNode >( moving ) + auto instance = castor::makeUniqueDerived< SkeletonAnimationInstanceObject, SkeletonAnimationInstanceNode >( animationInstance + , static_cast< SkeletonAnimationNode & >( *moving ) , allObjects ); - m_children.push_back( instance ); - allObjects.push_back( instance ); + addChild( *instance ); + allObjects.push_back( std::move( instance ) ); } break; case SkeletonNodeType::eBone: { - auto instance = std::make_shared< SkeletonAnimationInstanceBone >( animationInstance - , *std::static_pointer_cast< SkeletonAnimationBone >( moving ) + auto instance = castor::makeUniqueDerived< SkeletonAnimationInstanceObject, SkeletonAnimationInstanceBone >( animationInstance + , static_cast< SkeletonAnimationBone & >( *moving ) , allObjects ); - m_children.push_back( instance ); - allObjects.push_back( instance ); + addChild( *instance ); + allObjects.push_back( std::move( instance ) ); } break; @@ -43,9 +45,9 @@ namespace castor3d } } - void SkeletonAnimationInstanceObject::addChild( SkeletonAnimationInstanceObjectSPtr object ) + void SkeletonAnimationInstanceObject::addChild( SkeletonAnimationInstanceObject & object ) { - m_children.push_back( object ); + m_children.push_back( &object ); } void SkeletonAnimationInstanceObject::update( castor::Matrix4x4f const & current ) diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index b0002aeb08..0c27660bd0 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -642,7 +642,7 @@ namespace castor3d return getEngine()->getLightingModelFactory().getLightingModelsID( m_background->getModelID() ); } - AnimatedObjectSPtr Scene::addAnimatedTexture( TextureSourceInfo const & sourceInfo + AnimatedObjectRPtr Scene::addAnimatedTexture( TextureSourceInfo const & sourceInfo , TextureConfiguration const & config , Pass & pass ) { diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index f8cc725653..98d8d9dfe8 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -3077,7 +3077,7 @@ namespace castor3d { for ( auto animName : file->listSkeletonAnimations( *parsingContext.skeleton ) ) { - auto animation = std::make_unique< SkeletonAnimation >( *parsingContext.skeleton + auto animation = castor::makeUnique< SkeletonAnimation >( *parsingContext.skeleton , animName ); if ( !importer->import( *animation @@ -3088,7 +3088,7 @@ namespace castor3d } else { - parsingContext.skeleton->addAnimation( std::move( animation ) ); + parsingContext.skeleton->addAnimation( castor::ptrRefCast< Animation >( animation ) ); } } } @@ -3220,7 +3220,7 @@ namespace castor3d scnprs::fillMeshImportParameters( context, meshParams, parameters ); } - auto animation = std::make_unique< MeshAnimation >( *parsingContext.mesh.lock() + auto animation = castor::makeUnique< MeshAnimation >( *parsingContext.mesh , pathFile.getFileName() ); if ( !AnimationImporter::import( *animation @@ -3231,7 +3231,7 @@ namespace castor3d } else { - parsingContext.mesh.lock()->addAnimation( std::move( animation ) ); + parsingContext.mesh->addAnimation( castor::ptrRefCast< Animation >( animation ) ); } } } @@ -3454,7 +3454,7 @@ namespace castor3d { castor::String name; params[0]->get( name ); - parsingContext.morphAnimation = std::make_unique< MeshAnimation >( *mesh, name ); + parsingContext.morphAnimation = castor::makeUnique< MeshAnimation >( *mesh, name ); } else { @@ -3536,9 +3536,9 @@ namespace castor3d if ( kfit == animation.end() ) { - auto keyFrame = std::make_unique< MeshMorphTarget >( animation, time ); + auto keyFrame = castor::makeUnique< MeshMorphTarget >( animation, time ); kf = keyFrame.get(); - animation.addKeyFrame( std::move( keyFrame ) ); + animation.addKeyFrame( castor::ptrRefCast< AnimationKeyFrame >( keyFrame ) ); } else { @@ -3569,7 +3569,7 @@ namespace castor3d } else if ( auto mesh = parsingContext.mesh ) { - mesh->addAnimation( std::move( parsingContext.morphAnimation ) ); + mesh->addAnimation( castor::ptrRefCast< Animation >( parsingContext.morphAnimation ) ); } else { @@ -4344,7 +4344,7 @@ namespace castor3d if ( parsingContext.pass ) { - parsingContext.textureAnimation = std::make_unique< TextureAnimation >( *parsingContext.parser->getEngine() + parsingContext.textureAnimation = castor::makeUnique< TextureAnimation >( *parsingContext.parser->getEngine() , "Default" ); } } diff --git a/source/Core/Castor3D/Scene/SceneImporter.cpp b/source/Core/Castor3D/Scene/SceneImporter.cpp index c939cb2074..2e12a3ea34 100644 --- a/source/Core/Castor3D/Scene/SceneImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneImporter.cpp @@ -286,13 +286,13 @@ namespace castor3d for ( auto animName : m_file->listSkeletonAnimations( *skeleton ) ) { - auto animation = std::make_unique< SkeletonAnimation >( *skeleton, animName ); + auto animation = castor::makeUnique< SkeletonAnimation >( *skeleton, animName ); if ( importer.import( *animation, m_file, emptyParams ) ) { auto & anim = anims.emplace( animName, AnimObjects{} ).first->second; anim.skeletons.push_back( skeleton.get() ); - skeleton->addAnimation( std::move( animation ) ); + skeleton->addAnimation( castor::ptrRefCast< Animation >( animation ) ); } } } @@ -310,13 +310,13 @@ namespace castor3d for ( auto animName : m_file->listMeshAnimations( *mesh ) ) { - auto animation = std::make_unique< MeshAnimation >( *mesh, animName ); + auto animation = castor::makeUnique< MeshAnimation >( *mesh, animName ); if ( importer.import( *animation, m_file, emptyParams ) ) { auto & anim = anims.emplace( animName, AnimObjects{} ).first->second; anim.meshes.push_back( mesh.get() ); - mesh->addAnimation( std::move( animation ) ); + mesh->addAnimation( castor::ptrRefCast< Animation >( animation ) ); } } } @@ -334,13 +334,13 @@ namespace castor3d for ( auto animName : m_file->listSceneNodeAnimations( *node ) ) { - auto animation = std::make_unique< SceneNodeAnimation >( *node, animName ); + auto animation = castor::makeUnique< SceneNodeAnimation >( *node, animName ); if ( importer.import( *animation, m_file, emptyParams ) ) { auto & anim = anims.emplace( animName, AnimObjects{} ).first->second; anim.nodes.push_back( node.get() ); - node->addAnimation( std::move( animation ) ); + node->addAnimation( castor::ptrRefCast< Animation >( animation ) ); } } } diff --git a/source/Core/Castor3D/Scene/SceneNode.cpp b/source/Core/Castor3D/Scene/SceneNode.cpp index ebf7443297..fb5a202180 100644 --- a/source/Core/Castor3D/Scene/SceneNode.cpp +++ b/source/Core/Castor3D/Scene/SceneNode.cpp @@ -230,7 +230,7 @@ namespace castor3d if ( !hasAnimation( name ) ) { - addAnimation( std::make_unique< SceneNodeAnimation >( *this, name ) ); + addAnimation( castor::makeUniqueDerived< Animation, SceneNodeAnimation >( *this, name ) ); } return doGetAnimation< SceneNodeAnimation >( name ); diff --git a/source/Core/SceneExporter/Text/TextAnimatedObjectGroup.cpp b/source/Core/SceneExporter/Text/TextAnimatedObjectGroup.cpp index 7532daf837..0e6dfaad1f 100644 --- a/source/Core/SceneExporter/Text/TextAnimatedObjectGroup.cpp +++ b/source/Core/SceneExporter/Text/TextAnimatedObjectGroup.cpp @@ -48,7 +48,7 @@ namespace castor { result = true; - for ( auto it : group.getObjects() ) + for ( auto & it : group.getObjects() ) { auto name = it.first; size_t skel = name.find( cuT( "_Skeleton" ) ); diff --git a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp index 196ea7bc11..b3de356b4f 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.cpp @@ -128,7 +128,7 @@ namespace c3d_assimp for ( auto & keyFrame : keyframes ) { - animation.addKeyFrame( std::move( keyFrame.second ) ); + animation.addKeyFrame( castor::ptrRefCast< castor3d::AnimationKeyFrame >( keyFrame.second ) ); } return true; @@ -162,9 +162,9 @@ namespace c3d_assimp if ( kfit == animation.end() ) { - auto keyFrame = std::make_unique< castor3d::MeshMorphTarget >( animation, timeIndex ); + auto keyFrame = castor::makeUnique< castor3d::MeshMorphTarget >( animation, timeIndex ); kf = keyFrame.get(); - animation.addKeyFrame( std::move( keyFrame ) ); + animation.addKeyFrame( castor::ptrRefCast< castor3d::AnimationKeyFrame >( keyFrame ) ); } else { @@ -219,7 +219,7 @@ namespace c3d_assimp for ( auto & keyFrame : keyframes ) { - animation.addKeyFrame( std::move( keyFrame.second ) ); + animation.addKeyFrame( castor::ptrRefCast< castor3d::AnimationKeyFrame >( keyFrame.second ) ); } return true; @@ -243,7 +243,7 @@ namespace c3d_assimp const aiNodeAnim * aiNodeAnim = anims::findSkelNodeAnim( aiAnimation , nodeName ); auto parentSkelNode = skelNode->getParent(); - castor3d::SkeletonAnimationObjectSPtr parent; + castor3d::SkeletonAnimationObjectRPtr parent{}; if ( parentSkelNode ) { @@ -252,7 +252,7 @@ namespace c3d_assimp CU_Require( parent ); } - castor3d::SkeletonAnimationObjectSPtr object; + castor3d::SkeletonAnimationObjectRPtr object{}; CU_Require( !animation.hasObject( skelNode->getType(), name ) ); if ( skelNode->getType() == castor3d::SkeletonNodeType::eBone ) diff --git a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.hpp b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.hpp index 405aa3b589..a903c81207 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.hpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpAnimationImporter.hpp @@ -11,7 +11,7 @@ See LICENSE file in root folder namespace c3d_assimp { using SkeletonAnimationKeyFrameMap = std::map< castor::Milliseconds, castor3d::SkeletonAnimationKeyFrameUPtr >; - using SkeletonAnimationObjectSet = std::set< castor3d::SkeletonAnimationObjectSPtr >; + using SkeletonAnimationObjectSet = std::set< castor3d::SkeletonAnimationObjectRPtr >; class AssimpAnimationImporter : public castor3d::AnimationImporter diff --git a/source/Plugins/Importers/AssimpImporter/AssimpHelpers.hpp b/source/Plugins/Importers/AssimpImporter/AssimpHelpers.hpp index 13a4b0b968..3299579f9c 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpHelpers.hpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpHelpers.hpp @@ -608,14 +608,14 @@ namespace c3d_assimp template< typename KeyFrameT, typename AnimationT > inline KeyFrameT & getKeyFrame( castor::Milliseconds const & time , AnimationT & animation - , std::map< castor::Milliseconds, std::unique_ptr< KeyFrameT > > & keyframes ) + , std::map< castor::Milliseconds, castor::UniquePtr< KeyFrameT > > & keyframes ) { auto it = keyframes.find( time ); if ( it == keyframes.end() ) { it = keyframes.emplace( time - , std::make_unique< KeyFrameT >( animation, time ) ).first; + , castor::makeUnique< KeyFrameT >( animation, time ) ).first; } return *it->second; @@ -695,7 +695,7 @@ namespace c3d_assimp , uint32_t fps , castor::Milliseconds maxTime , AnimationT & animation - , std::map< castor::Milliseconds, std::unique_ptr< KeyFrameT > > & keyframes + , std::map< castor::Milliseconds, castor::UniquePtr< KeyFrameT > > & keyframes , FuncT fillKeyFrame ) { castor3d::InterpolatorT< castor::Point3f, castor3d::InterpolatorType::eLinear > pointInterpolator; @@ -725,7 +725,7 @@ namespace c3d_assimp , castor::Milliseconds maxTime , int64_t ticksPerSecond , AnimationT & animation - , std::map< castor::Milliseconds, std::unique_ptr< KeyFrameT > > & keyframes + , std::map< castor::Milliseconds, castor::UniquePtr< KeyFrameT > > & keyframes , FuncT fillKeyFrame ) { std::set< castor::Milliseconds > times; diff --git a/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp b/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp index 204c450de5..0b9c05dfd3 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp @@ -639,7 +639,7 @@ namespace c3d_assimp castor3d::AnimationImporterUPtr AssimpImporterFile::createAnimationImporter() { - return std::make_unique< AssimpAnimationImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::AnimationImporter, AssimpAnimationImporter >( *getOwner() ); } castor3d::SkeletonImporterUPtr AssimpImporterFile::createSkeletonImporter() diff --git a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp index 1bf40f9231..775b204799 100644 --- a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.cpp @@ -7,23 +7,19 @@ namespace GuiCommon { - namespace - { - static wxString PROPERTY_CATEGORY_ANIMATED_OBJECT = _( "Animated Object: " ); - } - - AnimatedObjectTreeItemProperty::AnimatedObjectTreeItemProperty( castor3d::Engine * engine, bool editable, castor3d::AnimatedObjectSPtr object ) + AnimatedObjectTreeItemProperty::AnimatedObjectTreeItemProperty( castor3d::Engine * engine + , bool editable + , castor3d::AnimatedObjectRPtr object ) : TreeItemProperty( engine, editable ) - , m_object( object.get() ) + , m_object( object ) { - PROPERTY_CATEGORY_ANIMATED_OBJECT = _( "Animated Object: " ); - CreateTreeItemMenu(); } void AnimatedObjectTreeItemProperty::doCreateProperties( wxPGEditor * editor , wxPropertyGrid * grid ) { + static wxString PROPERTY_CATEGORY_ANIMATED_OBJECT = _( "Animated Object: " ); auto object = getObject(); if ( object ) diff --git a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp index a66daa0596..ede80e36a2 100644 --- a/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp +++ b/tools/GuiCommon/Properties/TreeItems/AnimatedObjectTreeItemProperty.hpp @@ -9,9 +9,6 @@ See LICENSE file in root folder namespace GuiCommon { /** - \author Sylvain DOREMUS - \date 24/08/2015 - \version 0.8.0 \~english \brief AnimatedObject helper class to communicate between Scene objects or Materials lists and PropertiesContainer. \~french @@ -26,14 +23,16 @@ namespace GuiCommon *\brief Constructor. *\param[in] engine The engine. *\param[in] editable Tells if the properties are modifiable. - *\param[in] light The target AnimatedObject. + *\param[in] object The target AnimatedObject. *\~french *\brief Constructeur *\param[in] engine Le moteur. *\param[in] editable Dit si les propriétés sont modifiables. - *\param[in] light L"AnimatedObject cible. + *\param[in] object L"AnimatedObject cible. */ - AnimatedObjectTreeItemProperty( castor3d::Engine * engine, bool editable, castor3d::AnimatedObjectSPtr light ); + AnimatedObjectTreeItemProperty( castor3d::Engine * engine + , bool editable + , castor3d::AnimatedObjectRPtr object ); /** *\~english *\brief Retrieves the AnimatedObject. From d7d320e2ac0a936b05eb7890016a00f822ba0596 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Mon, 10 Apr 2023 00:30:57 +0200 Subject: [PATCH 33/35] Castor3D: Replaced remaining XxxSPtrs with their UPtr counterpart. --- data/vcpkg/ports/ashes/vcpkg.json | 2 +- .../Castor3D/Animation/AnimationModule.hpp | 11 +- include/Core/Castor3D/Buffer/BufferModule.hpp | 15 +- .../Core/Castor3D/Buffer/UniformBuffer.hpp | 2 +- include/Core/Castor3D/Cache/CacheModule.hpp | 6 +- .../Core/Castor3D/Cache/ElementProducer.hpp | 35 -- include/Core/Castor3D/Cache/ShaderCache.hpp | 2 +- include/Core/Castor3D/Castor3DModule.hpp | 8 +- include/Core/Castor3D/Castor3DPch.hpp | 1 - .../Core/Castor3D/Castor3DPrerequisites.hpp | 1 - .../Castor3D/Event/Frame/FrameEventModule.hpp | 12 +- .../Event/UserInput/UserInputEventModule.hpp | 16 +- .../Core/Castor3D/Gui/Controls/CtrlButton.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlComboBox.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlControl.hpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.hpp | 2 +- .../Gui/Controls/CtrlExpandablePanel.hpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlFrame.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlListBox.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlProgress.hpp | 2 +- .../Castor3D/Gui/Controls/CtrlScrollBar.hpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlSlider.hpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlStatic.hpp | 2 +- include/Core/Castor3D/Gui/GuiModule.hpp | 64 +-- .../Core/Castor3D/Material/MaterialModule.hpp | 9 +- .../Pass/Component/ComponentModule.hpp | 439 ++++++++++++++++-- include/Core/Castor3D/Material/Pass/Pass.hpp | 4 +- .../Castor3D/Material/Pass/PassModule.hpp | 11 +- .../Animation/TextureAnimationModule.hpp | 4 +- .../Material/Texture/TextureModule.hpp | 14 +- .../Castor3D/Material/Texture/TextureUnit.hpp | 17 +- .../Miscellaneous/MiscellaneousModule.hpp | 6 +- .../Mesh/Animation/MeshAnimationModule.hpp | 6 +- .../Castor3D/Model/Mesh/Generator/Cone.hpp | 1 + .../Castor3D/Model/Mesh/Generator/Cube.hpp | 1 + .../Model/Mesh/Generator/Cylinder.hpp | 1 + .../Model/Mesh/Generator/Icosahedron.hpp | 1 + .../Mesh/Generator/MeshGeneratorModule.hpp | 34 +- .../Castor3D/Model/Mesh/Generator/Plane.hpp | 1 + .../Model/Mesh/Generator/Projection.hpp | 1 + .../Castor3D/Model/Mesh/Generator/Sphere.hpp | 1 + .../Model/Mesh/Generator/SphereSection.hpp | 1 + .../Castor3D/Model/Mesh/Generator/Torus.hpp | 1 + .../Core/Castor3D/Model/Mesh/MeshFactory.hpp | 2 +- .../Core/Castor3D/Model/Mesh/MeshModule.hpp | 12 +- .../Submesh/Component/ComponentModule.hpp | 21 +- .../Model/Mesh/Submesh/SubmeshModule.hpp | 2 +- .../Animation/SkeletonAnimationModule.hpp | 10 +- .../Model/Skeleton/SkeletonModule.hpp | 13 +- .../Core/Castor3D/Overlay/OverlayModule.hpp | 18 +- include/Core/Castor3D/Plugin/PluginModule.hpp | 18 +- .../Castor3D/Render/Culling/CullingModule.hpp | 2 +- .../Render/EnvironmentMap/EnvironmentMap.hpp | 2 +- .../EnvironmentMap/EnvironmentMapModule.hpp | 4 +- .../LightPropagationVolumesModule.hpp | 16 +- .../VoxelConeTracing/VoxelizeModule.hpp | 8 +- .../Castor3D/Render/Node/RenderNodeModule.hpp | 8 +- .../Render/Opaque/Lighting/LightingModule.hpp | 2 +- .../Castor3D/Render/Opaque/OpaqueModule.hpp | 14 +- .../Render/Overlays/OverlaysModule.hpp | 4 +- .../Render/PBR/EnvironmentPrefilter.hpp | 1 - .../Core/Castor3D/Render/PBR/PbrModule.hpp | 2 +- .../Castor3D/Render/Passes/PassesModule.hpp | 18 +- .../Render/PostEffect/PostEffectModule.hpp | 2 +- .../Castor3D/Render/Prepass/PrepassModule.hpp | 8 +- include/Core/Castor3D/Render/RenderModule.hpp | 41 +- .../Core/Castor3D/Render/RenderNodesPass.hpp | 1 + include/Core/Castor3D/Render/RenderSystem.hpp | 2 +- include/Core/Castor3D/Render/RenderWindow.hpp | 2 +- .../Render/ShadowMap/ShadowMapModule.hpp | 4 +- .../Core/Castor3D/Render/Ssao/SsaoModule.hpp | 6 +- .../ToTexture/RenderToTextureModule.hpp | 7 +- .../Render/ToneMapping/ToneMappingModule.hpp | 2 +- .../Render/Transform/TransformModule.hpp | 6 +- .../Render/Transparent/TransparentModule.hpp | 6 +- .../Scene/Animation/AnimationModule.hpp | 27 +- .../Animation/Mesh/MeshAnimationModule.hpp | 2 +- .../SceneNode/SceneNodeAnimationModule.hpp | 2 +- .../Skeleton/SkeletonAnimationModule.hpp | 8 +- .../Texture/TextureAnimationModule.hpp | 2 +- .../Scene/Background/BackgroundModule.hpp | 5 +- include/Core/Castor3D/Scene/Light/Light.hpp | 6 +- .../Core/Castor3D/Scene/Light/LightModule.hpp | 19 +- .../Scene/ParticleSystem/ParticleModule.hpp | 18 +- include/Core/Castor3D/Scene/Scene.hpp | 12 +- .../Core/Castor3D/Scene/SceneFileParser.hpp | 16 +- include/Core/Castor3D/Scene/SceneModule.hpp | 38 +- .../ShaderBuffers/ShaderBuffersModule.hpp | 12 +- include/Core/Castor3D/Shader/ShaderModule.hpp | 6 +- .../Castor3D/Shader/Shaders/GlslLight.hpp | 6 +- .../Castor3D/Shader/Shaders/SdwModule.hpp | 8 +- .../Core/Castor3D/Shader/Ubos/UbosModule.hpp | 8 +- .../Core/CastorUtils/Config/ConfigModule.hpp | 1 - include/Core/CastorUtils/Config/Macros.hpp | 31 +- include/Core/CastorUtils/Config/SmartPtr.hpp | 69 +-- .../Core/CastorUtils/Design/Collection.hpp | 241 ---------- .../Core/CastorUtils/Design/Collection.inl | 184 -------- .../Core/CastorUtils/Design/DesignModule.hpp | 16 +- .../Core/CastorUtils/Exception/Exception.hpp | 2 - .../FileParser/FileParserModule.hpp | 6 +- include/Core/CastorUtils/Graphics/Font.hpp | 1 - .../CastorUtils/Graphics/GraphicsModule.hpp | 12 +- include/Core/CastorUtils/Math/MathModule.hpp | 3 - .../Miscellaneous/MiscellaneousModule.hpp | 2 +- .../Castor3D/Animation/AnimationImporter.cpp | 2 +- .../Castor3D/Animation/AnimationModule.cpp | 2 +- source/Core/Castor3D/Binary/CmshImporter.cpp | 8 +- source/Core/Castor3D/Buffer/GpuBufferPool.cpp | 2 +- .../Core/Castor3D/Buffer/ObjectBufferPool.cpp | 4 +- .../Castor3D/Buffer/PoolUniformBuffer.cpp | 2 +- .../Castor3D/Buffer/UniformBufferBase.cpp | 2 +- .../Castor3D/Buffer/UniformBufferPool.cpp | 2 +- source/Core/Castor3D/CMakeLists.txt | 1 - .../Cache/AnimatedObjectGroupCache.cpp | 2 +- source/Core/Castor3D/Cache/BillboardCache.cpp | 2 +- source/Core/Castor3D/Cache/CacheModule.cpp | 4 +- source/Core/Castor3D/Cache/GeometryCache.cpp | 4 +- source/Core/Castor3D/Cache/LightCache.cpp | 2 +- source/Core/Castor3D/Cache/MaterialCache.cpp | 2 +- source/Core/Castor3D/Cache/OverlayCache.cpp | 2 +- source/Core/Castor3D/Cache/PluginCache.cpp | 2 +- source/Core/Castor3D/Cache/SceneNodeCache.cpp | 2 +- source/Core/Castor3D/Cache/ShaderCache.cpp | 2 +- source/Core/Castor3D/Cache/TextureCache.cpp | 5 +- source/Core/Castor3D/Castor3DModule.cpp | 2 +- source/Core/Castor3D/Engine.cpp | 2 + .../Castor3D/Event/Frame/FrameEventModule.cpp | 12 +- .../Event/UserInput/UserInputEventModule.cpp | 6 +- .../Event/UserInput/UserInputListener.cpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlButton.cpp | 4 +- .../Castor3D/Gui/Controls/CtrlComboBox.cpp | 4 +- .../Castor3D/Gui/Controls/CtrlControl.cpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlEdit.cpp | 2 +- .../Gui/Controls/CtrlExpandablePanel.cpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlFrame.cpp | 2 +- .../Gui/Controls/CtrlLayoutControl.cpp | 2 +- .../Castor3D/Gui/Controls/CtrlListBox.cpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlPanel.cpp | 2 +- .../Castor3D/Gui/Controls/CtrlProgress.cpp | 6 +- .../Castor3D/Gui/Controls/CtrlScrollBar.cpp | 2 +- .../Castor3D/Gui/Controls/CtrlScrollable.cpp | 4 +- .../Core/Castor3D/Gui/Controls/CtrlSlider.cpp | 2 +- .../Core/Castor3D/Gui/Controls/CtrlStatic.cpp | 4 +- source/Core/Castor3D/Gui/ControlsManager.cpp | 2 +- source/Core/Castor3D/Gui/GuiModule.cpp | 30 +- source/Core/Castor3D/Gui/Gui_Parsers.cpp | 2 +- source/Core/Castor3D/Gui/Layout/Layout.cpp | 4 +- source/Core/Castor3D/ImporterFile.cpp | 3 +- source/Core/Castor3D/Material/Material.cpp | 2 +- .../Castor3D/Material/MaterialImporter.cpp | 2 + .../Pass/Component/Base/BlendComponent.cpp | 6 +- .../Base/FractalMappingComponent.cpp | 6 +- .../Pass/Component/Base/NormalComponent.cpp | 5 +- .../Component/Base/PassHeaderComponent.cpp | 6 +- .../Pass/Component/Base/PickableComponent.cpp | 6 +- .../Component/Base/TextureCountComponent.cpp | 4 +- .../Pass/Component/Base/TexturesComponent.cpp | 4 +- .../Pass/Component/Base/TwoSidedComponent.cpp | 6 +- .../Component/Base/UntileMappingComponent.cpp | 6 +- .../Component/Lighting/AmbientComponent.cpp | 6 +- .../Lighting/AttenuationComponent.cpp | 6 +- .../Component/Lighting/ClearcoatComponent.cpp | 6 +- .../Component/Lighting/EmissiveComponent.cpp | 6 +- .../Lighting/IridescenceComponent.cpp | 6 +- .../Lighting/LightingModelComponent.cpp | 6 +- .../Component/Lighting/MetalnessComponent.cpp | 8 +- .../Component/Lighting/RoughnessComponent.cpp | 6 +- .../Component/Lighting/SheenComponent.cpp | 6 +- .../Component/Lighting/SpecularComponent.cpp | 8 +- .../SubsurfaceScatteringComponent.cpp | 11 +- .../Component/Lighting/ThicknessComponent.cpp | 6 +- .../Lighting/TransmissionComponent.cpp | 6 +- .../Component/Map/AttenuationMapComponent.cpp | 6 +- .../Component/Map/ClearcoatMapComponent.cpp | 6 +- .../Map/ClearcoatNormalMapComponent.cpp | 6 +- .../Map/ClearcoatRoughnessMapComponent.cpp | 6 +- .../Pass/Component/Map/ColourMapComponent.cpp | 6 +- .../Component/Map/EmissiveMapComponent.cpp | 6 +- .../Component/Map/GlossinessMapComponent.cpp | 6 +- .../Pass/Component/Map/HeightMapComponent.cpp | 6 +- .../Component/Map/IridescenceMapComponent.cpp | 6 +- .../Map/IridescenceThicknessMapComponent.cpp | 6 +- .../Component/Map/MetalnessMapComponent.cpp | 6 +- .../Pass/Component/Map/NormalMapComponent.cpp | 6 +- .../Component/Map/OcclusionMapComponent.cpp | 6 +- .../Component/Map/OpacityMapComponent.cpp | 6 +- .../Component/Map/RoughnessMapComponent.cpp | 6 +- .../Pass/Component/Map/SheenMapComponent.cpp | 6 +- .../Map/SheenRoughnessMapComponent.cpp | 6 +- .../Component/Map/SpecularMapComponent.cpp | 6 +- .../Map/TransmissionMapComponent.cpp | 6 +- .../Map/TransmittanceMapComponent.cpp | 6 +- .../Component/Other/AlphaTestComponent.cpp | 6 +- .../Pass/Component/Other/ColourComponent.cpp | 6 +- .../Pass/Component/Other/HeightComponent.cpp | 6 +- .../Pass/Component/Other/OpacityComponent.cpp | 6 +- .../Component/Other/ReflectionComponent.cpp | 6 +- .../Component/Other/RefractionComponent.cpp | 6 +- .../Material/Pass/Component/PassComponent.cpp | 3 +- .../Pass/Component/PassComponentRegister.cpp | 2 +- source/Core/Castor3D/Material/Pass/Pass.cpp | 2 +- .../Castor3D/Material/Pass/PassFactory.cpp | 2 +- .../Castor3D/Material/Pass/PassModule.cpp | 2 +- .../Material/Pass/SubsurfaceScattering.cpp | 2 + .../Texture/Animation/TextureAnimation.cpp | 2 +- .../Animation/TextureAnimationKeyFrame.cpp | 2 +- .../Castor3D/Material/Texture/Sampler.cpp | 2 +- .../Material/Texture/TextureLayout.cpp | 4 +- .../Material/Texture/TextureModule.cpp | 2 +- .../Castor3D/Material/Texture/TextureUnit.cpp | 4 +- .../Castor3D/Material/Texture/TextureView.cpp | 2 +- .../Castor3D/Miscellaneous/LoadingScreen.cpp | 2 +- .../Castor3D/Miscellaneous/ProgressBar.cpp | 2 +- .../Castor3D/Miscellaneous/StagingData.cpp | 2 +- .../Model/Mesh/Animation/MeshAnimation.cpp | 2 +- .../Mesh/Animation/MeshAnimationSubmesh.cpp | 2 +- .../Model/Mesh/Animation/MeshMorphTarget.cpp | 2 +- .../Castor3D/Model/Mesh/Generator/Cone.cpp | 4 +- .../Castor3D/Model/Mesh/Generator/Cube.cpp | 4 +- .../Model/Mesh/Generator/Cylinder.cpp | 4 +- .../Model/Mesh/Generator/Icosahedron.cpp | 4 +- .../Castor3D/Model/Mesh/Generator/Plane.cpp | 4 +- .../Model/Mesh/Generator/Projection.cpp | 4 +- .../Castor3D/Model/Mesh/Generator/Sphere.cpp | 4 +- .../Model/Mesh/Generator/SphereSection.cpp | 4 +- .../Castor3D/Model/Mesh/Generator/Torus.cpp | 4 +- source/Core/Castor3D/Model/Mesh/Mesh.cpp | 3 +- .../Core/Castor3D/Model/Mesh/MeshFactory.cpp | 4 +- .../Castor3D/Model/Mesh/MeshGenerator.cpp | 4 +- .../Core/Castor3D/Model/Mesh/MeshImporter.cpp | 2 + .../Mesh/Submesh/Component/IndexMapping.cpp | 2 +- .../Component/InstantiationComponent.cpp | 2 +- .../Mesh/Submesh/Component/LinesMapping.cpp | 2 +- .../Submesh/Component/MeshletComponent.cpp | 2 +- .../Mesh/Submesh/Component/MorphComponent.cpp | 2 +- .../Submesh/Component/PassMasksComponent.cpp | 2 +- .../Mesh/Submesh/Component/SkinComponent.cpp | 2 +- .../Submesh/Component/SubmeshComponent.cpp | 2 +- .../Mesh/Submesh/Component/TriFaceMapping.cpp | 2 +- .../Castor3D/Model/Mesh/Submesh/Submesh.cpp | 2 +- .../Skeleton/Animation/SkeletonAnimation.cpp | 2 +- .../Animation/SkeletonAnimationBone.cpp | 2 +- .../Animation/SkeletonAnimationKeyFrame.cpp | 2 +- .../Animation/SkeletonAnimationNode.cpp | 2 +- .../Animation/SkeletonAnimationObject.cpp | 2 +- .../Core/Castor3D/Model/Skeleton/BoneNode.cpp | 2 +- .../Core/Castor3D/Model/Skeleton/Skeleton.cpp | 4 +- .../Model/Skeleton/SkeletonImporter.cpp | 2 + .../Castor3D/Model/Skeleton/SkeletonNode.cpp | 2 +- .../Castor3D/Overlay/BorderPanelOverlay.cpp | 2 +- .../Core/Castor3D/Overlay/DebugOverlays.cpp | 2 +- source/Core/Castor3D/Overlay/FontTexture.cpp | 2 +- source/Core/Castor3D/Overlay/Overlay.cpp | 2 +- .../Core/Castor3D/Overlay/OverlayCategory.cpp | 2 +- .../Core/Castor3D/Overlay/OverlayFactory.cpp | 2 +- source/Core/Castor3D/Overlay/PanelOverlay.cpp | 2 +- source/Core/Castor3D/Overlay/TextOverlay.cpp | 2 +- source/Core/Castor3D/Plugin/DividerPlugin.cpp | 2 +- .../Core/Castor3D/Plugin/GeneratorPlugin.cpp | 2 +- source/Core/Castor3D/Plugin/GenericPlugin.cpp | 2 +- .../Core/Castor3D/Plugin/ImporterPlugin.cpp | 2 +- .../Core/Castor3D/Plugin/ParticlePlugin.cpp | 2 +- source/Core/Castor3D/Plugin/Plugin.cpp | 2 +- source/Core/Castor3D/Plugin/PostFxPlugin.cpp | 2 +- .../Castor3D/Plugin/ToneMappingPlugin.cpp | 2 +- .../Castor3D/Render/Culling/SceneCuller.cpp | 2 +- .../Render/EnvironmentMap/EnvironmentMap.cpp | 16 +- .../EnvironmentMap/EnvironmentMapPass.cpp | 4 +- source/Core/Castor3D/Render/Frustum.cpp | 2 +- .../GeometryInjectionPass.cpp | 2 +- .../LightInjectionPass.cpp | 2 +- .../LightPropagationPass.cpp | 2 +- .../LightPropagationVolumesModule.cpp | 8 +- .../LightVolumePassResult.cpp | 2 +- .../VoxelConeTracing/VoxelBufferToTexture.cpp | 2 +- .../VoxelConeTracing/VoxelSecondaryBounce.cpp | 2 +- .../VoxelConeTracing/VoxelizePass.cpp | 2 +- .../VoxelConeTracing/Voxelizer.cpp | 2 +- .../Render/Node/BillboardRenderNode.cpp | 2 +- .../Castor3D/Render/Node/QueueRenderNodes.cpp | 2 +- .../Castor3D/Render/Node/SceneRenderNodes.cpp | 2 +- .../Render/Node/SubmeshRenderNode.cpp | 2 +- .../Render/Opaque/DeferredRendering.cpp | 2 +- .../Render/Opaque/IndirectLightingPass.cpp | 2 +- .../Lighting/SubsurfaceScatteringPass.cpp | 2 +- .../Castor3D/Render/Opaque/LightingPass.cpp | 2 +- .../Render/Opaque/OpaquePassResult.cpp | 2 +- .../Render/Opaque/OpaqueRendering.cpp | 2 +- .../Render/Opaque/OpaqueResolvePass.cpp | 2 +- .../Render/Opaque/VisibilityReorderPass.cpp | 2 +- .../Render/Overlays/OverlayRenderer.cpp | 4 +- .../Render/Overlays/OverlayTextBufferPool.cpp | 2 + .../Core/Castor3D/Render/PBR/IblTextures.cpp | 2 + .../Render/Passes/BackgroundRenderer.cpp | 2 +- .../Castor3D/Render/Passes/DownscalePass.cpp | 2 +- .../Castor3D/Render/Passes/GaussianBlur.cpp | 2 +- .../Render/Passes/LineariseDepthPass.cpp | 2 +- .../Castor3D/Render/Passes/PickingPass.cpp | 2 +- .../Castor3D/Render/Passes/RenderQuad.cpp | 2 +- source/Core/Castor3D/Render/Picking.cpp | 2 +- .../Castor3D/Render/PostEffect/PostEffect.cpp | 2 +- .../Castor3D/Render/Prepass/DepthPass.cpp | 2 +- .../Render/Prepass/PrepassRendering.cpp | 2 +- .../Castor3D/Render/Prepass/PrepassResult.cpp | 2 +- .../Render/Prepass/VisibilityPass.cpp | 2 +- source/Core/Castor3D/Render/RenderDevice.cpp | 2 +- source/Core/Castor3D/Render/RenderLoop.cpp | 2 +- .../Core/Castor3D/Render/RenderNodesPass.cpp | 3 + .../Core/Castor3D/Render/RenderPipeline.cpp | 2 +- source/Core/Castor3D/Render/RenderQueue.cpp | 2 +- source/Core/Castor3D/Render/RenderSystem.cpp | 4 +- source/Core/Castor3D/Render/RenderTarget.cpp | 2 +- .../Core/Castor3D/Render/RenderTechnique.cpp | 2 +- .../Castor3D/Render/RenderTechniquePass.cpp | 2 +- source/Core/Castor3D/Render/RenderWindow.cpp | 4 +- .../Castor3D/Render/ShadowMap/ShadowMap.cpp | 2 +- .../Render/ShadowMap/ShadowMapPass.cpp | 2 +- .../Castor3D/Render/Ssao/SsaoBlurPass.cpp | 2 +- source/Core/Castor3D/Render/Ssao/SsaoPass.cpp | 2 +- .../Castor3D/Render/Ssao/SsaoRawAOPass.cpp | 2 +- .../ToTexture/EquirectangularToCube.cpp | 2 + .../Castor3D/Render/ToTexture/RenderCube.cpp | 2 + .../Render/ToTexture/Texture3DTo2D.cpp | 2 +- .../Render/ToneMapping/ToneMapping.cpp | 2 +- .../Transform/MeshletBoundsTransformPass.cpp | 2 +- .../Render/Transform/VertexTransformPass.cpp | 2 +- .../Render/Transform/VertexTransforming.cpp | 2 +- .../Transparent/TransparentPassResult.cpp | 2 +- .../Transparent/TransparentRendering.cpp | 2 +- .../Transparent/WeightedBlendRendering.cpp | 2 +- source/Core/Castor3D/Render/Viewport.cpp | 2 +- .../Castor3D/Scene/Animation/AnimatedMesh.cpp | 2 +- .../Scene/Animation/AnimatedObject.cpp | 2 +- .../Scene/Animation/AnimatedObjectGroup.cpp | 4 +- .../Scene/Animation/AnimatedSceneNode.cpp | 2 +- .../Scene/Animation/AnimatedSkeleton.cpp | 2 +- .../Scene/Animation/AnimatedTexture.cpp | 2 +- .../Scene/Animation/AnimationInstance.cpp | 6 +- .../Animation/Mesh/MeshAnimationInstance.cpp | 2 + .../SceneNode/SceneNodeAnimationInstance.cpp | 2 + .../Scene/Animation/SceneNodeAnimation.cpp | 2 +- .../Animation/SceneNodeAnimationKeyFrame.cpp | 2 +- .../Skeleton/SkeletonAnimationInstance.cpp | 2 +- .../SkeletonAnimationInstanceBone.cpp | 2 +- .../SkeletonAnimationInstanceNode.cpp | 2 +- .../SkeletonAnimationInstanceObject.cpp | 2 +- .../Texture/TextureAnimationInstance.cpp | 2 + .../Castor3D/Scene/Background/Background.cpp | 2 + .../Core/Castor3D/Scene/Background/Colour.cpp | 2 + .../Core/Castor3D/Scene/Background/Image.cpp | 2 + .../Core/Castor3D/Scene/Background/Skybox.cpp | 2 + source/Core/Castor3D/Scene/BillboardList.cpp | 4 +- source/Core/Castor3D/Scene/Camera.cpp | 2 +- source/Core/Castor3D/Scene/Geometry.cpp | 13 +- .../Castor3D/Scene/Light/DirectionalLight.cpp | 2 +- source/Core/Castor3D/Scene/Light/Light.cpp | 2 +- .../Castor3D/Scene/Light/LightCategory.cpp | 2 + .../Castor3D/Scene/Light/LightFactory.cpp | 2 + .../Castor3D/Scene/Light/LightImporter.cpp | 2 + .../Core/Castor3D/Scene/Light/PointLight.cpp | 2 +- .../Core/Castor3D/Scene/Light/SpotLight.cpp | 2 +- source/Core/Castor3D/Scene/MovableObject.cpp | 2 +- .../ParticleSystem/ComputeParticleSystem.cpp | 2 +- .../ParticleSystem/CpuParticleSystem.cpp | 2 +- .../Scene/ParticleSystem/ParticleEmitter.cpp | 2 +- .../Scene/ParticleSystem/ParticleModule.cpp | 4 +- .../Scene/ParticleSystem/ParticleSystem.cpp | 2 +- .../Scene/ParticleSystem/ParticleUpdater.cpp | 2 +- source/Core/Castor3D/Scene/Scene.cpp | 11 +- .../Core/Castor3D/Scene/SceneFileParser.cpp | 4 +- .../Scene/SceneFileParser_Parsers.cpp | 253 +++++----- source/Core/Castor3D/Scene/SceneImporter.cpp | 2 + source/Core/Castor3D/Scene/SceneModule.cpp | 10 +- source/Core/Castor3D/Scene/SceneNode.cpp | 2 +- .../Core/Castor3D/Scene/SceneNodeImporter.cpp | 2 + .../Castor3D/Shader/LightingModelFactory.cpp | 2 +- source/Core/Castor3D/Shader/Program.cpp | 2 +- source/Core/Castor3D/Shader/ShaderBuffer.cpp | 2 +- .../Shader/ShaderBuffers/FontGlyphBuffer.cpp | 2 +- .../Shader/ShaderBuffers/LightBuffer.cpp | 2 +- .../Shader/ShaderBuffers/PassBuffer.cpp | 2 +- .../Shader/ShaderBuffers/SssProfileBuffer.cpp | 2 +- .../ShaderBuffers/TextureAnimationBuffer.cpp | 2 +- .../TextureConfigurationBuffer.cpp | 2 +- source/Core/Castor3D/Shader/ShaderModule.cpp | 2 +- .../Castor3D/Shader/Shaders/GlslLight.cpp | 10 +- .../Castor3D/Shader/Shaders/GlslLighting.cpp | 2 +- .../Castor3D/Shader/Shaders/GlslMaterial.cpp | 2 + .../Castor3D/Shader/Shaders/GlslShadow.cpp | 2 + .../Shader/Shaders/GlslSssTransmittance.cpp | 2 + .../Shader/Ubos/LayeredLpvGridConfigUbo.cpp | 2 +- .../Castor3D/Shader/Ubos/LpvGridConfigUbo.cpp | 2 +- .../Shader/Ubos/LpvLightConfigUbo.cpp | 2 +- source/Core/Castor3D/Shader/Ubos/SceneUbo.cpp | 2 +- source/Core/CastorUtils/CMakeLists.txt | 2 - .../CastorUtils/CastorUtilsPrerequisites.cpp | 2 - .../FileParser/FileParserContext.cpp | 2 +- .../Core/CastorUtils/Graphics/BoundingBox.cpp | 2 +- .../CastorUtils/Graphics/BoundingSphere.cpp | 2 +- source/Core/CastorUtils/Graphics/Font.cpp | 2 +- .../Core/CastorUtils/Graphics/FontCache.cpp | 2 +- source/Core/CastorUtils/Graphics/Image.cpp | 4 +- .../CastorUtils/Graphics/PixelBufferBase.cpp | 2 +- .../Miscellaneous/DynamicLibrary.cpp | 2 +- .../DiamondSquareTerrain.cpp | 2 +- .../AtmosphereBackground.cpp | 2 + .../AtmosphereScatteringPrerequisites.hpp | 2 + .../AtmosphereScattering_Parsers.cpp | 4 +- .../AtmosphereScattering_Parsers.hpp | 2 +- .../BakeHeightGradientPass.cpp | 2 +- .../BakeHeightGradientPass.hpp | 2 +- .../DownsampleDistributionPass.cpp | 2 +- .../DownsampleDistributionPass.hpp | 2 +- .../GenerateDistributionPass.cpp | 2 +- .../GenerateDistributionPass.hpp | 2 +- .../Generic/FFTOceanRendering/OceanFFT.cpp | 8 +- .../Generic/FFTOceanRendering/OceanFFT.hpp | 6 +- .../FFTOceanRendering/OceanFFTRenderPass.cpp | 42 +- .../FFTOceanRendering/OceanFFTRenderPass.hpp | 12 +- .../FFTOceanRendering/ProcessFFTPass.cpp | 2 +- .../FFTOceanRendering/ProcessFFTPass.hpp | 2 +- .../OceanRendering/OceanRenderPass.cpp | 10 +- .../OceanRendering/OceanRenderPass.hpp | 4 +- .../Generic/ToonMaterial/EdgesComponent.cpp | 6 +- .../Generic/ToonMaterial/EdgesComponent.hpp | 2 + .../WaterRendering/WaterRenderPass.cpp | 6 +- .../WaterRendering/WaterRenderPass.hpp | 4 +- .../AssimpImporter/AssimpImporterFile.cpp | 12 +- test/Castor3D/BinaryExportTest.cpp | 7 +- test/CastorTest/BenchManager.cpp | 12 +- test/CastorTest/BenchManager.hpp | 12 +- test/CastorTest/CastorTestPrerequisites.hpp | 8 +- test/CastorTest/UnitTest.hpp | 13 + .../CastorTestLauncher/CastorTestLauncher.cpp | 4 +- .../CastorTestLauncher/CastorTestLauncher.hpp | 2 +- tools/CastorViewer/MainFrame.cpp | 2 +- tools/CastorViewer/RenderPanel.cpp | 4 +- tools/CastorViewer/RenderPanel.hpp | 4 +- tools/GuiCommon/GuiCommonPrerequisites.hpp | 10 +- .../TreeItems/LightTreeItemProperty.cpp | 20 +- .../Properties/TreeItems/TreeItemProperty.cpp | 2 + .../GuiCommon/Shader/LanguageFileContext.hpp | 6 +- tools/GuiCommon/Shader/LanguageFileParser.cpp | 2 +- tools/GuiCommon/Shader/LanguageInfo.cpp | 2 + tools/GuiCommon/Shader/StcContext.cpp | 2 +- tools/GuiCommon/Shader/StcContext.hpp | 14 +- tools/GuiCommon/Shader/StcTextEditor.cpp | 6 +- tools/GuiCommon/Shader/StcTextEditor.hpp | 4 +- tools/GuiCommon/System/CastorApplication.cpp | 2 +- tools/GuiCommon/System/CastorApplication.hpp | 2 +- 450 files changed, 1687 insertions(+), 1599 deletions(-) delete mode 100644 include/Core/Castor3D/Cache/ElementProducer.hpp delete mode 100644 include/Core/CastorUtils/Design/Collection.hpp delete mode 100644 include/Core/CastorUtils/Design/Collection.inl diff --git a/data/vcpkg/ports/ashes/vcpkg.json b/data/vcpkg/ports/ashes/vcpkg.json index b32f882227..767303a1ec 100644 --- a/data/vcpkg/ports/ashes/vcpkg.json +++ b/data/vcpkg/ports/ashes/vcpkg.json @@ -4,7 +4,7 @@ "description": "Drop-in replacement to Vulkan's shared library, allowing the use of OpenGL or Direct3D11 in addition to Vulkan.", "homepage": "https://github.com/DragonJoker/Ashes", "license": "MIT", - "supports": "!ios & !android & !x86 & !uwp & !arm32 & !static", + "supports": "!ios & !android & !x86 & !uwp & !arm32", "dependencies": [ "opengl", "spirv-cross", diff --git a/include/Core/Castor3D/Animation/AnimationModule.hpp b/include/Core/Castor3D/Animation/AnimationModule.hpp index 3b7e03317e..a0b3bf8846 100644 --- a/include/Core/Castor3D/Animation/AnimationModule.hpp +++ b/include/Core/Castor3D/Animation/AnimationModule.hpp @@ -170,11 +170,12 @@ namespace castor3d template< typename DataT > using InterpolatorPtr = std::unique_ptr< Interpolator< DataT > >; - CU_DeclareCUSmartPtr( castor3d, AnimationKeyFrame, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimationImporter, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimationImporterFactory, C3D_API ); - CU_DeclareCUTemplateSmartPtr( castor3d, AnimationT ); - CU_DeclareCUTemplateSmartPtr( castor3d, AnimationInstanceT ); + CU_DeclareSmartPtr( castor3d, AnimationKeyFrame, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimationImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimationImporterFactory, C3D_API ); + + CU_DeclareTemplateSmartPtr( castor3d, Animation ); + CU_DeclareTemplateSmartPtr( castor3d, AnimationInstance ); using AnimationKeyFrameArray = std::vector< AnimationKeyFrameUPtr >; //@} diff --git a/include/Core/Castor3D/Buffer/BufferModule.hpp b/include/Core/Castor3D/Buffer/BufferModule.hpp index 948179b9a1..53ba79715a 100644 --- a/include/Core/Castor3D/Buffer/BufferModule.hpp +++ b/include/Core/Castor3D/Buffer/BufferModule.hpp @@ -179,13 +179,14 @@ namespace castor3d template< typename DataT > class GpuLinearAllocatorT; - CU_DeclareCUSmartPtr( castor3d, GpuBufferPool, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ObjectBufferPool, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PoolUniformBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, UniformBufferBase, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, UniformBufferPool, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VertexBufferPool, C3D_API ); - CU_DeclareTemplateSmartPtr( UniformBuffer ); + CU_DeclareSmartPtr( castor3d, GpuBufferPool, C3D_API ); + CU_DeclareSmartPtr( castor3d, ObjectBufferPool, C3D_API ); + CU_DeclareSmartPtr( castor3d, PoolUniformBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, UniformBufferBase, C3D_API ); + CU_DeclareSmartPtr( castor3d, UniformBufferPool, C3D_API ); + CU_DeclareSmartPtr( castor3d, VertexBufferPool, C3D_API ); + + CU_DeclareTemplateSmartPtr( castor3d, UniformBuffer ); using GpuBufferBuddyAllocator = castor::BuddyAllocatorT< GpuBufferBuddyAllocatorTraits >; using GpuBufferBuddyAllocatorUPtr = std::unique_ptr< GpuBufferBuddyAllocator >; diff --git a/include/Core/Castor3D/Buffer/UniformBuffer.hpp b/include/Core/Castor3D/Buffer/UniformBuffer.hpp index 952a90958d..5392f4c601 100644 --- a/include/Core/Castor3D/Buffer/UniformBuffer.hpp +++ b/include/Core/Castor3D/Buffer/UniformBuffer.hpp @@ -253,7 +253,7 @@ namespace castor3d , std::string name , ashes::QueueShare sharingMode = {} ) { - return std::make_unique< UniformBufferT< DataT > >( renderSystem + return castor::makeUnique< UniformBufferT< DataT > >( renderSystem , uint32_t( count ) , usage , flags diff --git a/include/Core/Castor3D/Cache/CacheModule.hpp b/include/Core/Castor3D/Cache/CacheModule.hpp index 78dbd07d58..2466405f08 100644 --- a/include/Core/Castor3D/Cache/CacheModule.hpp +++ b/include/Core/Castor3D/Cache/CacheModule.hpp @@ -179,9 +179,9 @@ namespace castor3d class ShaderProgramCache; class TextureUnitCache; - CU_DeclareCUSmartPtr( castor3d, RenderTargetCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ShaderProgramCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureUnitCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderTargetCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, ShaderProgramCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureUnitCache, C3D_API ); //@} } diff --git a/include/Core/Castor3D/Cache/ElementProducer.hpp b/include/Core/Castor3D/Cache/ElementProducer.hpp deleted file mode 100644 index f153c3eae8..0000000000 --- a/include/Core/Castor3D/Cache/ElementProducer.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -See LICENSE file in root folder -*/ -#ifndef ___C3D_CacheElementProducer_H___ -#define ___C3D_CacheElementProducer_H___ - -#include "CacheModule.hpp" - -#include "Castor3D/Render/RenderModule.hpp" -#include "Castor3D/Shader/ShaderModule.hpp" - -namespace castor3d -{ - /**@name Cache */ - //@{ - - template< typename ElementType, typename KeyType > - struct ElementProducer; - - template< typename KeyType > - struct ElementProducer< RenderTarget, KeyType > - { - using Type = std::function< std::shared_ptr< RenderTarget >( KeyType const &, TargetType ) >; - }; - - template< typename KeyType > - struct ElementProducer< ShaderProgram, KeyType > - { - using Type = std::function< std::shared_ptr< ShaderProgram >( KeyType const & ) >; - }; - - //@} -} - -#endif diff --git a/include/Core/Castor3D/Cache/ShaderCache.hpp b/include/Core/Castor3D/Cache/ShaderCache.hpp index 299389e59b..aa780b98a3 100644 --- a/include/Core/Castor3D/Cache/ShaderCache.hpp +++ b/include/Core/Castor3D/Cache/ShaderCache.hpp @@ -149,7 +149,7 @@ namespace castor3d struct AutoGeneratedProgram { PipelineFlags flags; - ShaderProgramRPtr program{}; + ShaderProgramRPtr program; }; using ShaderProgramCont = std::vector< AutoGeneratedProgram >; diff --git a/include/Core/Castor3D/Castor3DModule.hpp b/include/Core/Castor3D/Castor3DModule.hpp index 2874dc9e0b..5fcc825f2a 100644 --- a/include/Core/Castor3D/Castor3DModule.hpp +++ b/include/Core/Castor3D/Castor3DModule.hpp @@ -97,10 +97,10 @@ namespace castor3d template< typename ResT, typename KeyT > struct ResourceCacheTraitsT; - CU_DeclareSmartPtr( Engine ); - CU_DeclareSmartPtr( ImporterFile ); - CU_DeclareCUSmartPtr( castor3d, FramePassTimer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ImporterFileFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, Engine, C3D_API ); + CU_DeclareSmartPtr( castor3d, ImporterFile, C3D_API ); + CU_DeclareSmartPtr( castor3d, FramePassTimer, C3D_API ); + CU_DeclareSmartPtr( castor3d, ImporterFileFactory, C3D_API ); C3D_API castor::LoggerInstance & getLogger( Engine & engine ); diff --git a/include/Core/Castor3D/Castor3DPch.hpp b/include/Core/Castor3D/Castor3DPch.hpp index 4b8ef42f14..6275094fb9 100644 --- a/include/Core/Castor3D/Castor3DPch.hpp +++ b/include/Core/Castor3D/Castor3DPch.hpp @@ -19,7 +19,6 @@ See LICENSE file in root folder #include #include #include -#include #include #include #include diff --git a/include/Core/Castor3D/Castor3DPrerequisites.hpp b/include/Core/Castor3D/Castor3DPrerequisites.hpp index b1559e64dc..bbc626a09d 100644 --- a/include/Core/Castor3D/Castor3DPrerequisites.hpp +++ b/include/Core/Castor3D/Castor3DPrerequisites.hpp @@ -61,7 +61,6 @@ See LICENSE file in root folder #include "Castor3D/Miscellaneous/Logger.hpp" -#include #include #include #include diff --git a/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp b/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp index 39cf963018..235905e950 100644 --- a/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp +++ b/include/Core/Castor3D/Event/Frame/FrameEventModule.hpp @@ -106,11 +106,11 @@ namespace castor3d */ class GpuFunctorEvent; - CU_DeclareCUSmartPtr( castor3d, CpuFrameEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, FrameListener, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GpuFrameEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, CpuFunctorEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GpuFunctorEvent, C3D_API ); + CU_DeclareSmartPtr( castor3d, CpuFrameEvent, C3D_API ); + CU_DeclareSmartPtr( castor3d, FrameListener, C3D_API ); + CU_DeclareSmartPtr( castor3d, GpuFrameEvent, C3D_API ); + CU_DeclareSmartPtr( castor3d, CpuFunctorEvent, C3D_API ); + CU_DeclareSmartPtr( castor3d, GpuFunctorEvent, C3D_API ); CU_DeclareVector( CpuFrameEventUPtr, CpuFrameEventPtr ); CU_DeclareVector( GpuFrameEventUPtr, GpuFrameEventPtr ); @@ -145,7 +145,7 @@ namespace castor3d using FrameListenerRes = FrameListenerCacheTraits::ElementPtrT; using FrameListenerResPtr = FrameListenerCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, FrameListenerCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, FrameListenerCache, C3D_API ); /** *\~english * Cached resource initialiser, through a CPU frame event. diff --git a/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp b/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp index 7f2d6d50a2..2d64d44781 100644 --- a/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp +++ b/include/Core/Castor3D/Event/UserInput/UserInputEventModule.hpp @@ -411,14 +411,16 @@ namespace castor3d */ class UserInputListener; - CU_DeclareCUSmartPtr( castor3d, EventHandler, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, UserInputEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, KeyboardEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MouseEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, HandlerEvent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, UserInputListener, C3D_API ); + CU_DeclareSmartPtr( castor3d, EventHandler, C3D_API ); + CU_DeclareSmartPtr( castor3d, UserInputListener, C3D_API ); - template< class Derived > class NonClientEventHandler; + using UserInputEventSPtr = std::shared_ptr< UserInputEvent >; + using KeyboardEventSPtr = std::shared_ptr< KeyboardEvent >; + using MouseEventSPtr = std::shared_ptr< MouseEvent >; + using HandlerEventSPtr = std::shared_ptr< HandlerEvent >; + + template< class Derived > + class NonClientEventHandler; //@} //@} diff --git a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp index 8a29cd685d..b4bc4a27d7 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlButton.hpp @@ -44,7 +44,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~ButtonCtrl()noexcept; + C3D_API ~ButtonCtrl()noexcept override; /** Sets the horizontal alignment for the text. *\param[in] align The new value. diff --git a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp index 2366680697..67d8774d61 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlComboBox.hpp @@ -83,7 +83,7 @@ namespace castor3d { } - C3D_API ~ComboBoxCtrl()noexcept; + C3D_API ~ComboBoxCtrl()noexcept override; /** Appends a new item *\param[in] value The item diff --git a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp index 01f1d49a68..244ca69a36 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlControl.hpp @@ -45,7 +45,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~Control()noexcept; + C3D_API ~Control()noexcept override; /** Sets the style *\param[in] value The new value diff --git a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp index d7dc80a6a8..11fe5b6b41 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlEdit.hpp @@ -46,7 +46,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~EditCtrl()noexcept; + C3D_API ~EditCtrl()noexcept override; /** Updates the caption *\param[in] value The new value diff --git a/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp b/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp index 8f8036378b..02f748b237 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.hpp @@ -48,7 +48,7 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~ExpandablePanelCtrl()noexcept; + C3D_API ~ExpandablePanelCtrl()noexcept override; C3D_API void setExpandCaption( castor::U32String v ); C3D_API void setRetractCaption( castor::U32String v ); diff --git a/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp b/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp index c943a6862e..0d3b45ea7d 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlFrame.hpp @@ -48,7 +48,7 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~FrameCtrl()noexcept; + C3D_API ~FrameCtrl()noexcept override; /** \return The frame style. */ diff --git a/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp b/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp index dbeb287757..098c99bc19 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlListBox.hpp @@ -84,7 +84,7 @@ namespace castor3d { } - C3D_API ~ListBoxCtrl()noexcept; + C3D_API ~ListBoxCtrl()noexcept override; /** Appends a new item *\param[in] value The item diff --git a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp index fd58091f3b..cb37d1a02d 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlProgress.hpp @@ -23,7 +23,7 @@ namespace castor3d , castor::String const & name , ProgressStyle * style , ControlRPtr parent ); - C3D_API ~ProgressCtrl()noexcept; + C3D_API ~ProgressCtrl()noexcept override; C3D_API void setTitle( castor::U32String value ); C3D_API void setRange( castor::Range< int32_t > const & value ); diff --git a/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp b/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp index 85b5c5050b..66fbd64723 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlScrollBar.hpp @@ -50,7 +50,7 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~ScrollBarCtrl()noexcept; + C3D_API ~ScrollBarCtrl()noexcept override; /** Sets the range *\param[in] value The new value diff --git a/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp b/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp index 32d841b19a..9adbfcfade 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlSlider.hpp @@ -47,7 +47,7 @@ namespace castor3d , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~SliderCtrl()noexcept; + C3D_API ~SliderCtrl()noexcept override; /** sets the range *\param[in] value The new value diff --git a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp index 9ff370fa7e..3f2cc3043e 100644 --- a/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp +++ b/include/Core/Castor3D/Gui/Controls/CtrlStatic.hpp @@ -43,7 +43,7 @@ namespace castor3d , castor::Size const & size , ControlFlagType flags = 0 , bool visible = true ); - C3D_API ~StaticCtrl()noexcept; + C3D_API ~StaticCtrl()noexcept override; /** Sets the horizontal alignment for the text. *\param[in] value The new value. diff --git a/include/Core/Castor3D/Gui/GuiModule.hpp b/include/Core/Castor3D/Gui/GuiModule.hpp index 9def38ff85..880e406a4e 100644 --- a/include/Core/Castor3D/Gui/GuiModule.hpp +++ b/include/Core/Castor3D/Gui/GuiModule.hpp @@ -429,39 +429,39 @@ namespace castor3d using OnControlChanged = castor::SignalT< OnControlChangedFunction >; using OnControlChangedConnection = OnControlChanged::connection; - CU_DeclareCUSmartPtr( castor3d, Layout, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Spacer, C3D_API ); + CU_DeclareSmartPtr( castor3d, Layout, C3D_API ); + CU_DeclareSmartPtr( castor3d, Spacer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ControlsManager, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Control, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LayoutControl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ButtonCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ComboBoxCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, EditCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ExpandablePanelCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, FrameCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ListBoxCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PanelCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ProgressCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ScrollableCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ScrollBarCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SliderCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, StaticCtrl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, StylesHolder, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Theme, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ControlStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ButtonStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ComboBoxStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, EditStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ExpandablePanelStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, FrameStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ListBoxStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PanelStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ProgressStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ScrollableStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ScrollBarStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SliderStyle, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, StaticStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ControlsManager, C3D_API ); + CU_DeclareSmartPtr( castor3d, Control, C3D_API ); + CU_DeclareSmartPtr( castor3d, LayoutControl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ButtonCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ComboBoxCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, EditCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ExpandablePanelCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, FrameCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ListBoxCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, PanelCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ProgressCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ScrollableCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ScrollBarCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, SliderCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, StaticCtrl, C3D_API ); + CU_DeclareSmartPtr( castor3d, StylesHolder, C3D_API ); + CU_DeclareSmartPtr( castor3d, Theme, C3D_API ); + CU_DeclareSmartPtr( castor3d, ControlStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ButtonStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ComboBoxStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, EditStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ExpandablePanelStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, FrameStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ListBoxStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, PanelStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ProgressStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ScrollableStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, ScrollBarStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, SliderStyle, C3D_API ); + CU_DeclareSmartPtr( castor3d, StaticStyle, C3D_API ); using ControlArray = std::vector< ControlRPtr >; diff --git a/include/Core/Castor3D/Material/MaterialModule.hpp b/include/Core/Castor3D/Material/MaterialModule.hpp index c3cabbbca7..02ffd44faf 100644 --- a/include/Core/Castor3D/Material/MaterialModule.hpp +++ b/include/Core/Castor3D/Material/MaterialModule.hpp @@ -121,10 +121,9 @@ namespace castor3d */ class MaterialImporterFactory; - CU_DeclareSmartPtr( MaterialImporter ); - - CU_DeclareCUSmartPtr( castor3d, Material, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MaterialImporterFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, Material, C3D_API ); + CU_DeclareSmartPtr( castor3d, MaterialImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, MaterialImporterFactory, C3D_API ); using PassTypeID = uint16_t; @@ -165,7 +164,7 @@ namespace castor3d using MaterialPtr = MaterialCacheTraits::ElementPtrT; using MaterialObs = MaterialCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, MaterialCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, MaterialCache, C3D_API ); //! Material pointer array CU_DeclareVector( MaterialObs, MaterialPtr ); diff --git a/include/Core/Castor3D/Material/Pass/Component/ComponentModule.hpp b/include/Core/Castor3D/Material/Pass/Component/ComponentModule.hpp index fce0253d00..263c115efc 100644 --- a/include/Core/Castor3D/Material/Pass/Component/ComponentModule.hpp +++ b/include/Core/Castor3D/Material/Pass/Component/ComponentModule.hpp @@ -9,7 +9,6 @@ See LICENSE file in root folder #include "Castor3D/Material/MaterialModule.hpp" #include -#include #include #include @@ -39,22 +38,6 @@ See LICENSE file in root folder namespace castor3d { class SceneFileContext; - /**@name Shader */ - //@{ - /**@name Shaders */ - //@{ - namespace shader - { - struct BlendComponents; - struct SurfaceBase; - class Utils; - } - //@} - /**@name Buffers */ - //@{ - class PassBuffer; - //@} - //@} /**@name Material */ //@{ /**@name Texture */ @@ -64,6 +47,7 @@ namespace castor3d /**@name Pass */ //@{ class Pass; + /**@name Component */ //@{ enum class ComponentMode: uint16_t @@ -121,22 +105,423 @@ namespace castor3d class PassComponentPlugin; /** \~english - \brief Pass texture component base class. + \brief Pass components registrar. \~french - \brief Classe de base d'un composant de texture de passe. + \brief Registre des composants de passe. */ - struct PassMaskComponent; + class PassComponentRegister; + + /**@name Base Components */ + //@{ /** \~english - \brief Pass components registrar. + \brief Component holding colour and alpha blend modes. \~french - \brief Registre des composants de passe. + \brief Composant détenant les modes de mélange couleur et alpha. */ - class PassComponentRegister; + struct BlendComponent; + /** + \~english + \brief Component to enable fractal mapping. + \~french + \brief Composant pour activer le fractal mapping. + */ + struct FractalMappingComponent; + /** + \~english + \brief Component holding the normal. + \~french + \brief Composant détenant la normale. + */ + struct NormalComponent; + /** + \~english + \brief Component holding base pass data. + \~french + \brief Composant détenant les données de base d'une passe. + */ + struct PassHeaderComponent; + /** + \~english + \brief Component to enable picking. + \~french + \brief Composant pour activer le picking. + */ + struct PickableComponent; + /** + \~english + \brief Component holding textures count. + \~french + \brief Composant détenant le nombre de textures. + */ + struct TextureCountComponent; + /** + \~english + \brief Component holding textures. + \~french + \brief Composant détenant les textures. + */ + struct TexturesComponent; + /** + \~english + \brief Component to enable two-sided pass. + \~french + \brief Composant pour activer le fait que la passe est two-sided. + */ + struct TwoSidedComponent; + /** + \~english + \brief Component to enable untiled mapping. + \~french + \brief Composant pour activer l'untiled mapping. + */ + struct UntileMappingComponent; + + CU_DeclareSmartPtr( castor3d, BlendComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, FractalMappingComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, NormalComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassHeaderComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, PickableComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureCountComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TexturesComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TwoSidedComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, UntileMappingComponent, C3D_API ); + //@} + /**@name Lighting Components */ + //@{ + /** + \~english + \brief Component holding ambient lighting data. + \~french + \brief Composant détenant les données d'éclairage ambiant. + */ + struct AmbientComponent; + /** + \~english + \brief Component holding attenuation data. + \~french + \brief Composant détenant les données d'atténuation. + */ + struct AttenuationComponent; + /** + \~english + \brief Component holding clearcoat data. + \~french + \brief Composant détenant les données de clearcoat. + */ + struct ClearcoatComponent; + /** + \~english + \brief Component holding emissive data. + \~french + \brief Composant détenant les données d'émission. + */ + struct EmissiveComponent; + /** + \~english + \brief Component holding iridescence data. + \~french + \brief Composant détenant les données d'iridescence. + */ + struct IridescenceComponent; + /** + \~english + \brief Component holding lighting model data. + \~french + \brief Composant détenant les données de modèle d'éclairage. + */ + struct LightingModelComponent; + /** + \~english + \brief Component holding metalness data. + \~french + \brief Composant détenant les données de metalness. + */ + struct MetalnessComponent; + /** + \~english + \brief Component holding roughness data. + \~french + \brief Composant détenant les données de roughness. + */ + struct RoughnessComponent; + /** + \~english + \brief Component holding sheen data. + \~french + \brief Composant détenant les données de sheen. + */ + struct SheenComponent; + /** + \~english + \brief Component holding specular data. + \~french + \brief Composant détenant les données de spéculaire. + */ + struct SpecularComponent; + /** + \~english + \brief Component holding subsurface scattering data. + \~french + \brief Composant détenant les données de subsurface scattering. + */ + struct SubsurfaceScatteringComponent; + /** + \~english + \brief Component holding thickness data. + \~french + \brief Composant détenant les données d'épaisseur. + */ + struct ThicknessComponent; + /** + \~english + \brief Component holding transmission data. + \~french + \brief Composant détenant les données de transmission. + */ + struct TransmissionComponent; + + CU_DeclareSmartPtr( castor3d, AmbientComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, AttenuationComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ClearcoatComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, EmissiveComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, IridescenceComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightingModelComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, MetalnessComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, RoughnessComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SheenComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SpecularComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SubsurfaceScatteringComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ThicknessComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TransmissionComponent, C3D_API ); + //@} + /**@name Texture Components */ + //@{ + /** + \~english + \brief Component holding attenuation map. + \~french + \brief Composant détenant la texture d'atténuation. + */ + struct AttenuationMapComponent; + /** + \~english + \brief Component holding clearcoat map. + \~french + \brief Composant détenant la texture de clearcoat. + */ + struct ClearcoatMapComponent; + /** + \~english + \brief Component holding clearcoat's normal map. + \~french + \brief Composant détenant la texture de normales pour le clearcoat. + */ + struct ClearcoatNormalMapComponent; + /** + \~english + \brief Component holding clearcoat's roughness map. + \~french + \brief Composant détenant la texture de roughness pour le clearcoat. + */ + struct ClearcoatRoughnessMapComponent; + /** + \~english + \brief Component holding the colour map. + \~french + \brief Composant détenant la texture de couleurs. + */ + struct ColourMapComponent; + /** + \~english + \brief Component holding the emissive map. + \~french + \brief Composant détenant la texture d'e couleurs'émissive. + */ + struct EmissiveMapComponent; + /** + \~english + \brief Component holding the glossiness map. + \~french + \brief Composant détenant la texture de glossiness. + */ + struct GlossinessMapComponent; + /** + \~english + \brief Component holding the height map. + \~french + \brief Composant détenant la texture de hauteurs. + */ + struct HeightMapComponent; + /** + \~english + \brief Component holding the iridescence map. + \~french + \brief Composant détenant la texture d'iridescence. + */ + struct IridescenceMapComponent; + /** + \~english + \brief Component holding the iridescent layer thickness map. + \~french + \brief Composant détenant la texture d'épaisseur de la couche iridescente. + */ + struct IridescenceThicknessMapComponent; + /** + \~english + \brief Component holding the metalness map. + \~french + \brief Composant détenant la texture de metalness. + */ + struct MetalnessMapComponent; + /** + \~english + \brief Component holding the normal map. + \~french + \brief Composant détenant la texture de normales. + */ + struct NormalMapComponent; + /** + \~english + \brief Component holding the occlusion map. + \~french + \brief Composant détenant la texture d'occlusion. + */ + struct OcclusionMapComponent; + /** + \~english + \brief Component holding the opacity map. + \~french + \brief Composant détenant la texture d'opacité. + */ + struct OpacityMapComponent; + /** + \~english + \brief Component holding the roughness map. + \~french + \brief Composant détenant la texture de roughness. + */ + struct RoughnessMapComponent; + /** + \~english + \brief Component holding the sheen map. + \~french + \brief Composant détenant la texture de sheen. + */ + struct SheenMapComponent; + /** + \~english + \brief Component holding the sheen's roughness map. + \~french + \brief Composant détenant la texture de roughness pour le sheen. + */ + struct SheenRoughnessMapComponent; + /** + \~english + \brief Component holding the specular map. + \~french + \brief Composant détenant la texture de spéculaire. + */ + struct SpecularMapComponent; + /** + \~english + \brief Component holding the transmission map. + \~french + \brief Composant détenant la texture de transmission. + */ + struct TransmissionMapComponent; + /** + \~english + \brief Component holding the transmittance map (for subsurface scattering). + \~french + \brief Composant détenant la texture de transmittance (pour le subsurface scattering). + */ + struct TransmittanceMapComponent; + + CU_DeclareSmartPtr( castor3d, AttenuationMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ClearcoatMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ClearcoatNormalMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ClearcoatRoughnessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ColourMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, EmissiveMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, GlossinessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, HeightMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, IridescenceMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, IridescenceThicknessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, MetalnessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, NormalMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, OcclusionMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, OpacityMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, RoughnessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SheenMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SheenRoughnessMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SpecularMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TransmissionMapComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TransmittanceMapComponent, C3D_API ); + //@} + /**@name Other components */ + //@{ + /** + \~english + \brief Component holding alpha test data. + \~french + \brief Composant détenant les données d'alpha test. + */ + struct AlphaTestComponent; + /** + \~english + \brief Component holding colour data. + \~french + \brief Composant détenant les données de couleur. + */ + struct ColourComponent; + /** + \~english + \brief Component holding height data. + \~french + \brief Composant détenant les données de hauteur. + */ + struct HeightComponent; + /** + \~english + \brief Component holding opacity data. + \~french + \brief Composant détenant les données d'opacité. + */ + struct OpacityComponent; + /** + \~english + \brief Component to enable reflections. + \~french + \brief Composant pour activer les réflexions. + */ + struct ReflectionComponent; + /** + \~english + \brief Component holding refraction data. + \~french + \brief Composant détenant les données de réfraction. + */ + struct RefractionComponent; + + CU_DeclareSmartPtr( castor3d, AlphaTestComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ColourComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, HeightComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, OpacityComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, ReflectionComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, RefractionComponent, C3D_API ); + //@} /**@name Shader */ //@{ + /**@name Buffers */ + //@{ + class PassBuffer; + //@} namespace shader { + struct BlendComponents; + struct SurfaceBase; + class Utils; /** \~english \brief Base class for all component shaders. @@ -175,8 +560,6 @@ namespace castor3d } //@} - struct SubsurfaceScatteringComponent; - struct PassComponentCombine { PassComponentCombineID baseId{}; @@ -206,9 +589,9 @@ namespace castor3d C3D_API bool contains( PassComponentCombine const & cont , PassComponentCombine const & test ); - CU_DeclareSmartPtr( PassComponent ); - CU_DeclareCUSmartPtr( castor3d, PassComponentRegister, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PassComponentPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassComponentRegister, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassComponentPlugin, C3D_API ); CU_DeclareMap( PassComponentID, PassComponentUPtr, PassComponent ); diff --git a/include/Core/Castor3D/Material/Pass/Pass.hpp b/include/Core/Castor3D/Material/Pass/Pass.hpp index 0839925dff..74725c2714 100644 --- a/include/Core/Castor3D/Material/Pass/Pass.hpp +++ b/include/Core/Castor3D/Material/Pass/Pass.hpp @@ -135,10 +135,10 @@ namespace castor3d if ( !result ) { - auto component = std::make_unique< ComponentT >( *this + auto component = castor::makeUnique< ComponentT >( *this , std::forward< ParamsT >( params )... ); result = component.get(); - this->addComponent( std::move( component ) ); + this->addComponent( castor::ptrRefCast< PassComponent >( component ) ); } return result; diff --git a/include/Core/Castor3D/Material/Pass/PassModule.hpp b/include/Core/Castor3D/Material/Pass/PassModule.hpp index e2216344d3..f899663bb7 100644 --- a/include/Core/Castor3D/Material/Pass/PassModule.hpp +++ b/include/Core/Castor3D/Material/Pass/PassModule.hpp @@ -19,7 +19,7 @@ namespace sdw namespace castor3d::shader { class BufferBase; - CU_DeclareCUSmartPtr( castor3d::shader, BufferBase, C3D_API ); + CU_DeclareSmartPtr( castor3d::shader, BufferBase, C3D_API ); } namespace castor3d @@ -116,10 +116,9 @@ namespace castor3d */ class SubsurfaceScattering; - CU_DeclareCUSmartPtr( castor3d, Pass, C3D_API ); - CU_DeclareSmartPtr( SubsurfaceScattering ); - - CU_DeclareCUSmartPtr( castor3d, PassFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, Pass, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, SubsurfaceScattering, C3D_API ); //! Pass array CU_DeclareVector( Pass, Pass ); @@ -166,7 +165,7 @@ namespace castor3d , PassFactoryEntry >; using SpecificsBuffers = std::map< std::string, std::pair< SpecificsBuffer, ShaderBufferUPtr > >; - CU_DeclareCUSmartPtr( castor3d, RenderPassRegisterInfo, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderPassRegisterInfo, C3D_API ); //@} //@} } diff --git a/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp b/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp index 48762ede63..35e4c144d0 100644 --- a/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp +++ b/include/Core/Castor3D/Material/Texture/Animation/TextureAnimationModule.hpp @@ -29,8 +29,8 @@ namespace castor3d class TextureAnimation; class TextureAnimationKeyFrame; - CU_DeclareCUSmartPtr( castor3d, TextureAnimation, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureAnimationKeyFrame, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureAnimation, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureAnimationKeyFrame, C3D_API ); using TextureRotateSpeed = castor::SpeedT< castor::Angle, castor::Seconds >; using TextureTranslateSpeed = castor::SpeedT< castor::Point2f, castor::Seconds >; diff --git a/include/Core/Castor3D/Material/Texture/TextureModule.hpp b/include/Core/Castor3D/Material/Texture/TextureModule.hpp index 50cf043890..b45612c1db 100644 --- a/include/Core/Castor3D/Material/Texture/TextureModule.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureModule.hpp @@ -213,12 +213,12 @@ namespace castor3d */ class TextureView; - CU_DeclareCUSmartPtr( castor3d, Sampler, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureLayout, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureSource, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureUnit, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureView, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureUnitData, C3D_API ); + CU_DeclareSmartPtr( castor3d, Sampler, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureLayout, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureSource, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureUnit, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureView, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureUnitData, C3D_API ); //! TextureUnit array CU_DeclareVector( TextureUnit, TextureUnit ); @@ -265,7 +265,7 @@ namespace castor3d using SamplerPtr = SamplerCacheTraits::ElementPtrT; using SamplerObs = SamplerCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, SamplerCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, SamplerCache, C3D_API ); struct TextureSourceInfoHasher { diff --git a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp index 2326f5b9b2..7d61d68d4e 100644 --- a/include/Core/Castor3D/Material/Texture/TextureUnit.hpp +++ b/include/Core/Castor3D/Material/Texture/TextureUnit.hpp @@ -21,10 +21,21 @@ namespace castor3d { struct TextureUnitData { + explicit TextureUnitData( TextureSourceInfo psourceInfo + , PassTextureConfig ppassConfig = {} + , TextureAnimationUPtr panimation = {} + , castor::PxBufferBaseUPtr pbuffer = {} ) + : sourceInfo{ std::move( psourceInfo ) } + , passConfig{ std::move( ppassConfig ) } + , animation{ std::move( panimation ) } + , buffer{ std::move( pbuffer ) } + { + } + TextureSourceInfo sourceInfo; - PassTextureConfig passConfig{}; - TextureAnimationUPtr animation{}; - castor::PxBufferBaseUPtr buffer{}; + PassTextureConfig passConfig; + TextureAnimationUPtr animation; + castor::PxBufferBaseUPtr buffer; }; class TextureUnit diff --git a/include/Core/Castor3D/Miscellaneous/MiscellaneousModule.hpp b/include/Core/Castor3D/Miscellaneous/MiscellaneousModule.hpp index 3265ddf8f5..bf2190f1b2 100644 --- a/include/Core/Castor3D/Miscellaneous/MiscellaneousModule.hpp +++ b/include/Core/Castor3D/Miscellaneous/MiscellaneousModule.hpp @@ -281,9 +281,9 @@ namespace castor3d using Parameters = ParametersT< castor::String >; - CU_DeclareCUSmartPtr( castor3d, LoadingScreen, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ProgressBar, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, StagingData, C3D_API ); + CU_DeclareSmartPtr( castor3d, LoadingScreen, C3D_API ); + CU_DeclareSmartPtr( castor3d, ProgressBar, C3D_API ); + CU_DeclareSmartPtr( castor3d, StagingData, C3D_API ); struct RenderDevice; C3D_API ashes::DeviceMemoryPtr setupMemory( ashes::Device const & device diff --git a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp index 5033ffc250..448682f7e4 100644 --- a/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Animation/MeshAnimationModule.hpp @@ -19,9 +19,9 @@ namespace castor3d class MeshAnimationSubmesh; class MeshMorphTarget; - CU_DeclareCUSmartPtr( castor3d, MeshAnimation, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshAnimationSubmesh, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshMorphTarget, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshAnimation, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshAnimationSubmesh, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshMorphTarget, C3D_API ); CU_DeclareVector( MeshAnimationSubmesh, MeshAnimationSubmesh ); diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp index 66029446a6..e2b1e3a2c5 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cone.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Cone_H___ #define ___C3D_Cone_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp index 0da49bf0e2..9f79ef51b0 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cube.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Cube_H___ #define ___C3D_Cube_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp index 6a256ba71a..51d448347c 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Cylinder.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Cylinder_H___ #define ___C3D_Cylinder_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp index 3508e9dcb0..f9c7459788 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Icosahedron.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Icosahedron_H___ #define ___C3D_Icosahedron_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp b/include/Core/Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp index d8ebb9c85d..ff4737dfb8 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp @@ -72,14 +72,27 @@ namespace castor3d /** \~english \brief The sphere primitive - \remark This sphere has squared faces. It is built from a radius and a number of subsections + \remark This sphere has squared faces. +
It is built from a radius and a number of subsections. \~french \brief La primitive de sphère - \remark Cette sphère a des faces rectangulaires. Elle est construite à partir d'un rayon et d'un nombre de subdivisions + \remark Cette sphère a des faces rectangulaires. +
Elle est construite à partir d'un rayon et d'un nombre de subdivisions. */ class Sphere; /** \~english + \brief Conic section of a sphere + \remark The sphere side used square faces. +
It is built from a radius and a number of subsections. + \~french + \brief La primitive de sphère + \remark La portion sphérique a des faces rectangulaires. +
Elle est construite à partir d'un rayon et d'un nombre de subdivisions. + */ + class SphereSection; + /** + \~english \brief The torus representation \remark A torus is an ellipse performing an horizontal ellipse.
The original ellipse will be called internal and has its own radius and number of subsections @@ -90,14 +103,15 @@ namespace castor3d */ class Torus; - CU_DeclareSmartPtr( Cone ); - CU_DeclareSmartPtr( Cylinder ); - CU_DeclareSmartPtr( Icosahedron ); - CU_DeclareSmartPtr( Cube ); - CU_DeclareSmartPtr( Plane ); - CU_DeclareSmartPtr( Projection ); - CU_DeclareSmartPtr( Sphere ); - CU_DeclareSmartPtr( Torus ); + CU_DeclareSmartPtr( castor3d, Cone, C3D_API ); + CU_DeclareSmartPtr( castor3d, Cube, C3D_API ); + CU_DeclareSmartPtr( castor3d, Cylinder, C3D_API ); + CU_DeclareSmartPtr( castor3d, Icosahedron, C3D_API ); + CU_DeclareSmartPtr( castor3d, Plane, C3D_API ); + CU_DeclareSmartPtr( castor3d, Projection, C3D_API ); + CU_DeclareSmartPtr( castor3d, Sphere, C3D_API ); + CU_DeclareSmartPtr( castor3d, SphereSection, C3D_API ); + CU_DeclareSmartPtr( castor3d, Torus, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp index d60b0878e4..05a794095d 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Plane.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Plane_H___ #define ___C3D_Plane_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp index d99a37bac6..1a90280b64 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Projection.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Projection_H___ #define ___C3D_Projection_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" #include "Castor3D/Miscellaneous/Pattern.hpp" diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp index ec017c582e..58472faf2e 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Sphere.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Sphere_H___ #define ___C3D_Sphere_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp b/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp index d4433d60d9..c62a88cc91 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/SphereSection.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_SphereSection_H___ #define ___C3D_SphereSection_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" #include diff --git a/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp b/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp index 7412449a51..d12ad5039c 100644 --- a/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp +++ b/include/Core/Castor3D/Model/Mesh/Generator/Torus.hpp @@ -4,6 +4,7 @@ See LICENSE file in root folder #ifndef ___C3D_Torus_H___ #define ___C3D_Torus_H___ +#include "Castor3D/Model/Mesh/Generator/MeshGeneratorModule.hpp" #include "Castor3D/Model/Mesh/MeshGenerator.hpp" namespace castor3d diff --git a/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp b/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp index f94e6fbf14..ce10b9a9da 100644 --- a/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp +++ b/include/Core/Castor3D/Model/Mesh/MeshFactory.hpp @@ -11,7 +11,7 @@ See LICENSE file in root folder namespace castor3d { class MeshFactory - : public castor::Factory< MeshGenerator, castor::String, std::unique_ptr< MeshGenerator > > + : public castor::Factory< MeshGenerator, castor::String, castor::UniquePtr< MeshGenerator > > { public: /** diff --git a/include/Core/Castor3D/Model/Mesh/MeshModule.hpp b/include/Core/Castor3D/Model/Mesh/MeshModule.hpp index 531295f540..ce807d4ac7 100644 --- a/include/Core/Castor3D/Model/Mesh/MeshModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/MeshModule.hpp @@ -126,12 +126,12 @@ namespace castor3d uint32_t instanceCount; }; - CU_DeclareSmartPtr( Mesh ); - CU_DeclareSmartPtr( MeshGenerator ); - CU_DeclareSmartPtr( MeshImporter ); + CU_DeclareSmartPtr( castor3d, Mesh, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshGenerator, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshImporterFactory, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshFactory, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshImporterFactory, C3D_API ); /** *\~english * Helper structure to specialise a cache behaviour. @@ -164,7 +164,7 @@ namespace castor3d using MeshRes = MeshCacheTraits::ElementPtrT; using MeshResPtr = MeshCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, MeshCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshCache, C3D_API ); //! Mesh pointer array CU_DeclareMap( castor::String, MeshResPtr, MeshPtrStr ); diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp index fefe5c6448..18a630d9d5 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/Component/ComponentModule.hpp @@ -189,16 +189,17 @@ namespace castor3d */ using ColoursComponent = BaseDataComponentT< SubmeshFlag::eColours >; - CU_DeclareCUSmartPtr( castor3d, IndexMapping, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, InstantiationComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LinesMapping, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshletComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MorphComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PassMasksComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkinComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SubmeshComponent, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TriFaceMapping, C3D_API ); - CU_DeclareCUEnumTemplateSmartPtr( castor3d, BaseDataComponentT, castor3d::SubmeshFlag ); + CU_DeclareSmartPtr( castor3d, IndexMapping, C3D_API ); + CU_DeclareSmartPtr( castor3d, InstantiationComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, LinesMapping, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshletComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, MorphComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassMasksComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkinComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, SubmeshComponent, C3D_API ); + CU_DeclareSmartPtr( castor3d, TriFaceMapping, C3D_API ); + + CU_DeclareEnumTemplateSmartPtr( castor3d, BaseDataComponent, castor3d::SubmeshFlag ); //! Face array CU_DeclareVector( Face, Face ); diff --git a/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp b/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp index 36cebc7c80..9077907bd2 100644 --- a/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp +++ b/include/Core/Castor3D/Model/Mesh/Submesh/SubmeshModule.hpp @@ -352,7 +352,7 @@ namespace castor3d castor::BoundingBox boundingBox{}; }; - CU_DeclareCUSmartPtr( castor3d, Submesh, C3D_API ); + CU_DeclareSmartPtr( castor3d, Submesh, C3D_API ); //! Submesh pointer array CU_DeclareVector( SubmeshUPtr, SubmeshPtr ); diff --git a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp index d42dbc9f8b..b83074e228 100644 --- a/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp +++ b/include/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationModule.hpp @@ -77,11 +77,11 @@ namespace castor3d }; using TransformArray = std::vector< ObjectTransform >; - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimation, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationKeyFrame, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationObject, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationBone, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimation, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationKeyFrame, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationObject, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationBone, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationNode, C3D_API ); using SkeletonAnimationObjectArray = std::vector< SkeletonAnimationObjectRPtr >; diff --git a/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp b/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp index 5b4877ec0d..a50e89a27f 100644 --- a/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp +++ b/include/Core/Castor3D/Model/Skeleton/SkeletonModule.hpp @@ -118,13 +118,12 @@ namespace castor3d using SkeletonRes = SkeletonCacheTraits::ElementPtrT; using SkeletonResPtr = SkeletonCacheTraits::ElementObsT; - CU_DeclareSmartPtr( SkeletonImporter ); - - CU_DeclareCUSmartPtr( castor3d, BoneNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Skeleton, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonImporterFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, BoneNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, Skeleton, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonImporterFactory, C3D_API ); //! Skinned vertex data array CU_DeclareVector( VertexBoneData, VertexBoneData ); diff --git a/include/Core/Castor3D/Overlay/OverlayModule.hpp b/include/Core/Castor3D/Overlay/OverlayModule.hpp index 0deef58ba3..05a4482b6b 100644 --- a/include/Core/Castor3D/Overlay/OverlayModule.hpp +++ b/include/Core/Castor3D/Overlay/OverlayModule.hpp @@ -421,14 +421,14 @@ namespace castor3d } }; - CU_DeclareCUSmartPtr( castor3d, BorderPanelOverlay, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, DebugOverlays, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, FontTexture, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Overlay, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, OverlayCategory, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, OverlayFactory, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PanelOverlay, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextOverlay, C3D_API ); + CU_DeclareSmartPtr( castor3d, BorderPanelOverlay, C3D_API ); + CU_DeclareSmartPtr( castor3d, DebugOverlays, C3D_API ); + CU_DeclareSmartPtr( castor3d, FontTexture, C3D_API ); + CU_DeclareSmartPtr( castor3d, Overlay, C3D_API ); + CU_DeclareSmartPtr( castor3d, OverlayCategory, C3D_API ); + CU_DeclareSmartPtr( castor3d, OverlayFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, PanelOverlay, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextOverlay, C3D_API ); /** *\~english * Helper structure to specialise a cache behaviour. @@ -461,7 +461,7 @@ namespace castor3d using OverlayRes = OverlayCacheTraits::ElementPtrT; using OverlayResPtr = OverlayCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, OverlayCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, OverlayCache, C3D_API ); CU_DeclareVector( OverlayRPtr, OverlayPtr ); CU_DeclareMap( castor::String, OverlayResPtr, OverlayPtrStr ); diff --git a/include/Core/Castor3D/Plugin/PluginModule.hpp b/include/Core/Castor3D/Plugin/PluginModule.hpp index 77bb204c1d..e1526eb017 100644 --- a/include/Core/Castor3D/Plugin/PluginModule.hpp +++ b/include/Core/Castor3D/Plugin/PluginModule.hpp @@ -138,14 +138,14 @@ namespace castor3d */ class ToneMappingPlugin; - CU_DeclareCUSmartPtr( castor3d, Plugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ImporterPlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, DividerPlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GeneratorPlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GenericPlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PostFxPlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticlePlugin, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ToneMappingPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, Plugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, ImporterPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, DividerPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, GeneratorPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, GenericPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, PostFxPlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticlePlugin, C3D_API ); + CU_DeclareSmartPtr( castor3d, ToneMappingPlugin, C3D_API ); CU_DeclareMap( castor::String, PluginUPtr, PluginStr ); CU_DeclareArray( PluginStrMap, PluginType::eCount, PluginStrMap ); @@ -181,7 +181,7 @@ namespace castor3d using PluginRes = PluginCacheTraits::ElementPtrT; using PluginResPtr = PluginCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, PluginCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, PluginCache, C3D_API ); //@} } diff --git a/include/Core/Castor3D/Render/Culling/CullingModule.hpp b/include/Core/Castor3D/Render/Culling/CullingModule.hpp index 6439c12b40..d7d144d376 100644 --- a/include/Core/Castor3D/Render/Culling/CullingModule.hpp +++ b/include/Core/Castor3D/Render/Culling/CullingModule.hpp @@ -44,7 +44,7 @@ namespace castor3d */ class SceneCuller; - CU_DeclareCUSmartPtr( castor3d, SceneCuller, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneCuller, C3D_API ); using SceneCullerSignalFunction = std::function< void( SceneCuller const & ) >; using SceneCullerSignal = castor::SignalT< SceneCullerSignalFunction >; diff --git a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.hpp b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.hpp index 3db30b57d5..757a482606 100644 --- a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.hpp +++ b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.hpp @@ -29,7 +29,7 @@ namespace castor3d : public castor::OwnedBy< Engine > { public: - using EnvironmentMapPasses = std::array< std::unique_ptr< EnvironmentMapPass >, size_t( CubeMapFace::eCount ) >; + using EnvironmentMapPasses = std::array< EnvironmentMapPassUPtr, size_t( CubeMapFace::eCount ) >; public: /** diff --git a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapModule.hpp b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapModule.hpp index 6be9a1f1c4..a4fa2f9251 100644 --- a/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapModule.hpp +++ b/include/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapModule.hpp @@ -32,8 +32,8 @@ namespace castor3d */ class EnvironmentMapPass; - CU_DeclareSmartPtr( EnvironmentMap ); - CU_DeclareSmartPtr( EnvironmentMapPass ); + CU_DeclareSmartPtr( castor3d, EnvironmentMap, C3D_API ); + CU_DeclareSmartPtr( castor3d, EnvironmentMapPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.hpp b/include/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.hpp index f0045ac653..903ce56a13 100644 --- a/include/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.hpp +++ b/include/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.hpp @@ -133,14 +133,14 @@ namespace castor3d using LightPropagationVolumes = LightPropagationVolumesT< false >; using LightPropagationVolumesG = LightPropagationVolumesT< true >; - CU_DeclareCUSmartPtr( castor3d, GeometryInjectionPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LayeredLightPropagationVolumes, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LayeredLightPropagationVolumesG, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightInjectionPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightPropagationPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightPropagationVolumes, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightPropagationVolumesG, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightVolumePassResult, C3D_API ); + CU_DeclareSmartPtr( castor3d, GeometryInjectionPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, LayeredLightPropagationVolumes, C3D_API ); + CU_DeclareSmartPtr( castor3d, LayeredLightPropagationVolumesG, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightInjectionPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightPropagationPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightPropagationVolumes, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightPropagationVolumesG, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightVolumePassResult, C3D_API ); using LightPropagationVolumesLightType = std::array< LightPropagationVolumesUPtr, size_t( LightType::eCount ) >; using LayeredLightPropagationVolumesLightType = std::array< LayeredLightPropagationVolumesUPtr, size_t( LightType::eCount ) >; diff --git a/include/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizeModule.hpp b/include/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizeModule.hpp index 194e475da5..337c91c0cf 100644 --- a/include/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizeModule.hpp +++ b/include/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizeModule.hpp @@ -62,10 +62,10 @@ namespace castor3d */ class VoxelSceneData; - CU_DeclareCUSmartPtr( castor3d, VoxelBufferToTexture, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VoxelizePass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VoxelSecondaryBounce, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Voxelizer, C3D_API ); + CU_DeclareSmartPtr( castor3d, VoxelBufferToTexture, C3D_API ); + CU_DeclareSmartPtr( castor3d, VoxelizePass, C3D_API ); + CU_DeclareSmartPtr( castor3d, VoxelSecondaryBounce, C3D_API ); + CU_DeclareSmartPtr( castor3d, Voxelizer, C3D_API ); struct Voxel { diff --git a/include/Core/Castor3D/Render/Node/RenderNodeModule.hpp b/include/Core/Castor3D/Render/Node/RenderNodeModule.hpp index 10957935e8..811a7b6850 100644 --- a/include/Core/Castor3D/Render/Node/RenderNodeModule.hpp +++ b/include/Core/Castor3D/Render/Node/RenderNodeModule.hpp @@ -69,10 +69,10 @@ namespace castor3d */ struct SceneRenderNodes; - CU_DeclareCUSmartPtr( castor3d, BillboardRenderNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SubmeshRenderNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, QueueRenderNodes, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneRenderNodes, C3D_API ); + CU_DeclareSmartPtr( castor3d, BillboardRenderNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, SubmeshRenderNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, QueueRenderNodes, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneRenderNodes, C3D_API ); using PipelineBuffer = std::pair< PipelineBaseHash, ashes::BufferBase const * >; diff --git a/include/Core/Castor3D/Render/Opaque/Lighting/LightingModule.hpp b/include/Core/Castor3D/Render/Opaque/Lighting/LightingModule.hpp index b917250a34..c70aa8de71 100644 --- a/include/Core/Castor3D/Render/Opaque/Lighting/LightingModule.hpp +++ b/include/Core/Castor3D/Render/Opaque/Lighting/LightingModule.hpp @@ -228,7 +228,7 @@ namespace castor3d , castor::Point3f const & attenuation , float max ); - CU_DeclareCUSmartPtr( castor3d, SubsurfaceScatteringPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, SubsurfaceScatteringPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/Opaque/OpaqueModule.hpp b/include/Core/Castor3D/Render/Opaque/OpaqueModule.hpp index 4012363c1b..1a4da4837b 100644 --- a/include/Core/Castor3D/Render/Opaque/OpaqueModule.hpp +++ b/include/Core/Castor3D/Render/Opaque/OpaqueModule.hpp @@ -136,13 +136,13 @@ namespace castor3d */ class VisibilityResolvePass; - CU_DeclareCUSmartPtr( castor3d, DeferredRendering, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, IndirectLightingPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightingPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, OpaquePassResult, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, OpaqueRendering, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, OpaqueResolvePass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VisibilityReorderPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, DeferredRendering, C3D_API ); + CU_DeclareSmartPtr( castor3d, IndirectLightingPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightingPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, OpaquePassResult, C3D_API ); + CU_DeclareSmartPtr( castor3d, OpaqueRendering, C3D_API ); + CU_DeclareSmartPtr( castor3d, OpaqueResolvePass, C3D_API ); + CU_DeclareSmartPtr( castor3d, VisibilityReorderPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/Overlays/OverlaysModule.hpp b/include/Core/Castor3D/Render/Overlays/OverlaysModule.hpp index 6ed0004dba..148b9fb02c 100644 --- a/include/Core/Castor3D/Render/Overlays/OverlaysModule.hpp +++ b/include/Core/Castor3D/Render/Overlays/OverlaysModule.hpp @@ -165,8 +165,8 @@ namespace castor3d bool secondary{}; }; - CU_DeclareCUSmartPtr( castor3d, OverlayRenderer, C3D_API ); - CU_DeclareSmartPtr( OverlayTextBufferPool ); + CU_DeclareSmartPtr( castor3d, OverlayRenderer, C3D_API ); + CU_DeclareSmartPtr( castor3d, OverlayTextBufferPool, C3D_API ); struct OverlaysCounts { diff --git a/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp b/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp index ca4578d651..7e7bfbed03 100644 --- a/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp +++ b/include/Core/Castor3D/Render/PBR/EnvironmentPrefilter.hpp @@ -50,7 +50,6 @@ namespace castor3d }; ashes::RenderPass const & m_renderPass; std::string m_prefix; - SamplerObs m_sampler{}; std::array< FrameBuffer, 6u > m_frameBuffers; CommandsSemaphore m_commands; }; diff --git a/include/Core/Castor3D/Render/PBR/PbrModule.hpp b/include/Core/Castor3D/Render/PBR/PbrModule.hpp index e752ae365c..dd558578bd 100644 --- a/include/Core/Castor3D/Render/PBR/PbrModule.hpp +++ b/include/Core/Castor3D/Render/PBR/PbrModule.hpp @@ -50,7 +50,7 @@ namespace castor3d */ class RadianceComputer; - CU_DeclareSmartPtr( IblTextures ); + CU_DeclareSmartPtr( castor3d, IblTextures, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/Passes/PassesModule.hpp b/include/Core/Castor3D/Render/Passes/PassesModule.hpp index 8c569bda91..42b4f663a4 100644 --- a/include/Core/Castor3D/Render/Passes/PassesModule.hpp +++ b/include/Core/Castor3D/Render/Passes/PassesModule.hpp @@ -188,15 +188,15 @@ namespace castor3d */ class StencilPass; - CU_DeclareCUSmartPtr( castor3d, BackgroundRenderer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, CombinePass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, DownscalePass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GaussianBlur, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LineariseDepthPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PickingPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderQuad, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderGrid, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, StencilPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, BackgroundRenderer, C3D_API ); + CU_DeclareSmartPtr( castor3d, CombinePass, C3D_API ); + CU_DeclareSmartPtr( castor3d, DownscalePass, C3D_API ); + CU_DeclareSmartPtr( castor3d, GaussianBlur, C3D_API ); + CU_DeclareSmartPtr( castor3d, LineariseDepthPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, PickingPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderQuad, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderGrid, C3D_API ); + CU_DeclareSmartPtr( castor3d, StencilPass, C3D_API ); CU_DeclareVector( CommandsSemaphore, CommandsSemaphore ); diff --git a/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp b/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp index d5eb18d783..fed30901ae 100644 --- a/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp +++ b/include/Core/Castor3D/Render/PostEffect/PostEffectModule.hpp @@ -45,7 +45,7 @@ namespace castor3d */ struct PostEffectSurface; - CU_DeclareCUSmartPtr( castor3d, PostEffect, C3D_API ); + CU_DeclareSmartPtr( castor3d, PostEffect, C3D_API ); /** *\~english *\brief diff --git a/include/Core/Castor3D/Render/Prepass/PrepassModule.hpp b/include/Core/Castor3D/Render/Prepass/PrepassModule.hpp index a38be89234..50979e57ea 100644 --- a/include/Core/Castor3D/Render/Prepass/PrepassModule.hpp +++ b/include/Core/Castor3D/Render/Prepass/PrepassModule.hpp @@ -81,10 +81,10 @@ namespace castor3d */ class VisibilityPass; - CU_DeclareCUSmartPtr( castor3d, DepthPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PrepassRendering, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PrepassResult, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VisibilityPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, DepthPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, PrepassRendering, C3D_API ); + CU_DeclareSmartPtr( castor3d, PrepassResult, C3D_API ); + CU_DeclareSmartPtr( castor3d, VisibilityPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/RenderModule.hpp b/include/Core/Castor3D/Render/RenderModule.hpp index 2f6221c146..1b0a0457e0 100644 --- a/include/Core/Castor3D/Render/RenderModule.hpp +++ b/include/Core/Castor3D/Render/RenderModule.hpp @@ -675,20 +675,19 @@ namespace castor3d */ class Viewport; - CU_DeclareCUSmartPtr( castor3d, Frustum, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Picking, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderDevice, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderLoop, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderPipeline, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderQueue, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderSystem, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderTarget, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderTechnique, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderTechniquePass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, RenderWindow, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Viewport, C3D_API ); - - CU_DeclareSmartPtr( RenderNodesPass ); + CU_DeclareSmartPtr( castor3d, Frustum, C3D_API ); + CU_DeclareSmartPtr( castor3d, Picking, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderDevice, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderLoop, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderNodesPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderPipeline, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderQueue, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderSystem, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderTarget, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderTechnique, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderTechniquePass, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderWindow, C3D_API ); + CU_DeclareSmartPtr( castor3d, Viewport, C3D_API ); using RenderWindowPtr = std::unique_ptr< RenderWindow >; @@ -738,10 +737,22 @@ namespace castor3d , RenderTechnique & , TechniquePasses & , crg::FramePassArray ) >; + + RenderPassRegisterInfo( castor::String pname + , Creator pcreate + , TechniquePassEvent pevent + , RenderPassTypeID pid = {} ) + : name{ std::move( pname ) } + , create{ std::move( pcreate ) } + , event{ std::move( pevent ) } + , id{ std::move( pid ) } + { + } + castor::String name; Creator create; TechniquePassEvent event; - RenderPassTypeID id{}; + RenderPassTypeID id; }; struct CpuUpdater diff --git a/include/Core/Castor3D/Render/RenderNodesPass.hpp b/include/Core/Castor3D/Render/RenderNodesPass.hpp index 49f408ce91..97a56567b2 100644 --- a/include/Core/Castor3D/Render/RenderNodesPass.hpp +++ b/include/Core/Castor3D/Render/RenderNodesPass.hpp @@ -920,6 +920,7 @@ namespace castor3d RenderNodesPass const * m_pass; }; + CU_DeclareSmartPtr( castor3d, IsRenderPassEnabled, C3D_API ); } #endif diff --git a/include/Core/Castor3D/Render/RenderSystem.hpp b/include/Core/Castor3D/Render/RenderSystem.hpp index 19653bb7be..6a70b5979b 100644 --- a/include/Core/Castor3D/Render/RenderSystem.hpp +++ b/include/Core/Castor3D/Render/RenderSystem.hpp @@ -412,7 +412,7 @@ namespace castor3d VkPhysicalDeviceMemoryProperties m_memoryProperties; VkPhysicalDeviceProperties m_properties; VkPhysicalDeviceFeatures m_features; - RenderDeviceSPtr m_device; + RenderDeviceUPtr m_device; std::stack< SceneRPtr > m_stackScenes; castor::Nanoseconds m_gpuTime; ashes::BufferPtr< castor::Point4f > m_randomStorage; diff --git a/include/Core/Castor3D/Render/RenderWindow.hpp b/include/Core/Castor3D/Render/RenderWindow.hpp index 096a48ebc8..ad2581fd8d 100644 --- a/include/Core/Castor3D/Render/RenderWindow.hpp +++ b/include/Core/Castor3D/Render/RenderWindow.hpp @@ -567,7 +567,7 @@ namespace castor3d mutable std::atomic_bool m_skip{ false }; std::atomic_bool m_loading; castor::PxBufferBaseUPtr m_saveBuffer; - PickingSPtr m_picking; + PickingUPtr m_picking; castor::Position m_mousePosition; Texture3DTo2DUPtr m_texture3Dto2D; IntermediateView m_tex3DTo2DIntermediate; diff --git a/include/Core/Castor3D/Render/ShadowMap/ShadowMapModule.hpp b/include/Core/Castor3D/Render/ShadowMap/ShadowMapModule.hpp index 89cd3654bd..478a1a336a 100644 --- a/include/Core/Castor3D/Render/ShadowMap/ShadowMapModule.hpp +++ b/include/Core/Castor3D/Render/ShadowMap/ShadowMapModule.hpp @@ -128,8 +128,8 @@ namespace castor3d */ class ShadowMapPassSpot; - CU_DeclareCUSmartPtr( castor3d, ShadowMap, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ShadowMapPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, ShadowMap, C3D_API ); + CU_DeclareSmartPtr( castor3d, ShadowMapPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/Ssao/SsaoModule.hpp b/include/Core/Castor3D/Render/Ssao/SsaoModule.hpp index 80597bc0c4..7cbbd97098 100644 --- a/include/Core/Castor3D/Render/Ssao/SsaoModule.hpp +++ b/include/Core/Castor3D/Render/Ssao/SsaoModule.hpp @@ -62,9 +62,9 @@ namespace castor3d */ class SsaoRawAOPass; - CU_DeclareCUSmartPtr( castor3d, SsaoBlurPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SsaoPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SsaoRawAOPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, SsaoBlurPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, SsaoPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, SsaoRawAOPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/ToTexture/RenderToTextureModule.hpp b/include/Core/Castor3D/Render/ToTexture/RenderToTextureModule.hpp index 9248c91193..54e1eb275e 100644 --- a/include/Core/Castor3D/Render/ToTexture/RenderToTextureModule.hpp +++ b/include/Core/Castor3D/Render/ToTexture/RenderToTextureModule.hpp @@ -41,10 +41,9 @@ namespace castor3d */ class Texture3DTo2D; - CU_DeclareSmartPtr( EquirectangularToCube ); - CU_DeclareSmartPtr( RenderCube ); - - CU_DeclareCUSmartPtr( castor3d, Texture3DTo2D, C3D_API ); + CU_DeclareSmartPtr( castor3d, EquirectangularToCube, C3D_API ); + CU_DeclareSmartPtr( castor3d, RenderCube, C3D_API ); + CU_DeclareSmartPtr( castor3d, Texture3DTo2D, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp b/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp index 026f82ef07..4f6a9665b7 100644 --- a/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp +++ b/include/Core/Castor3D/Render/ToneMapping/ToneMappingModule.hpp @@ -53,7 +53,7 @@ namespace castor3d */ class ToneMappingVisitor; - CU_DeclareCUSmartPtr( castor3d, ToneMapping, C3D_API ); + CU_DeclareSmartPtr( castor3d, ToneMapping, C3D_API ); /** *\~english *\brief diff --git a/include/Core/Castor3D/Render/Transform/TransformModule.hpp b/include/Core/Castor3D/Render/Transform/TransformModule.hpp index cfbdb0c20f..051a3f0f74 100644 --- a/include/Core/Castor3D/Render/Transform/TransformModule.hpp +++ b/include/Core/Castor3D/Render/Transform/TransformModule.hpp @@ -77,9 +77,9 @@ namespace castor3d */ class MeshletBoundsTransformPass; - CU_DeclareCUSmartPtr( castor3d, VertexTransforming, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, VertexTransformPass, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MeshletBoundsTransformPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, VertexTransforming, C3D_API ); + CU_DeclareSmartPtr( castor3d, VertexTransformPass, C3D_API ); + CU_DeclareSmartPtr( castor3d, MeshletBoundsTransformPass, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Render/Transparent/TransparentModule.hpp b/include/Core/Castor3D/Render/Transparent/TransparentModule.hpp index 77832d3e50..7d6147a19f 100644 --- a/include/Core/Castor3D/Render/Transparent/TransparentModule.hpp +++ b/include/Core/Castor3D/Render/Transparent/TransparentModule.hpp @@ -92,9 +92,9 @@ namespace castor3d */ class WeightedBlendRendering; - CU_DeclareCUSmartPtr( castor3d, WeightedBlendRendering, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TransparentPassResult, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TransparentRendering, C3D_API ); + CU_DeclareSmartPtr( castor3d, WeightedBlendRendering, C3D_API ); + CU_DeclareSmartPtr( castor3d, TransparentPassResult, C3D_API ); + CU_DeclareSmartPtr( castor3d, TransparentRendering, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp index 0e30ad4e35..1057e8e5b6 100644 --- a/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/AnimationModule.hpp @@ -92,8 +92,8 @@ namespace castor3d class SceneNodeAnimation; class SceneNodeAnimationKeyFrame; - CU_DeclareCUSmartPtr( castor3d, SceneNodeAnimation, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneNodeAnimationKeyFrame, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneNodeAnimation, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneNodeAnimationKeyFrame, C3D_API ); //@} struct GroupAnimation @@ -111,16 +111,17 @@ namespace castor3d using Animable = AnimableT< Engine >; using Animation = AnimationT< Engine >; - CU_DeclareCUSmartPtr( castor3d, Animable, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedObjectGroup, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedMesh, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedObject, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedSceneNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedSkeleton, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimatedTexture, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Animation, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, AnimationInstance, C3D_API ); - CU_DeclareCUTemplateSmartPtr( castor3d, AnimableT ); + CU_DeclareSmartPtr( castor3d, Animable, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedObjectGroup, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedMesh, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedObject, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedSceneNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedSkeleton, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedTexture, C3D_API ); + CU_DeclareSmartPtr( castor3d, Animation, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimationInstance, C3D_API ); + + CU_DeclareTemplateSmartPtr( castor3d, Animable ); using OnAnimatedSkeletonChangeFunction = std::function< void( AnimatedObjectGroup const &, AnimatedSkeleton & ) >; using OnAnimatedSkeletonChange = castor::SignalT< OnAnimatedSkeletonChangeFunction >; @@ -168,7 +169,7 @@ namespace castor3d using AnimatedObjectGroupRes = AnimatedObjectGroupCacheTraits::ElementPtrT; using AnimatedObjectGroupResPtr = AnimatedObjectGroupCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, AnimatedObjectGroupCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, AnimatedObjectGroupCache, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationModule.hpp index 40e00c618f..2120ff5495 100644 --- a/include/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationModule.hpp @@ -38,7 +38,7 @@ namespace castor3d */ class MeshAnimationInstanceSubmesh; - CU_DeclareSmartPtr( MeshAnimationInstance ); + CU_DeclareSmartPtr( castor3d, MeshAnimationInstance, C3D_API ); //! MeshAnimationInstanceSubmesh map, sorted by submesh ID. CU_DeclareMap( uint32_t, MeshAnimationInstanceSubmesh, MeshAnimationInstanceSubmesh ); diff --git a/include/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationModule.hpp index 8f366148bf..a7ce21c0c9 100644 --- a/include/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationModule.hpp @@ -25,7 +25,7 @@ namespace castor3d */ class SceneNodeAnimationInstance; - CU_DeclareSmartPtr( SceneNodeAnimationInstance ); + CU_DeclareSmartPtr( castor3d, SceneNodeAnimationInstance, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp index 25a23598cb..ba96a9c2f3 100644 --- a/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationModule.hpp @@ -73,10 +73,10 @@ namespace castor3d */ class SkeletonAnimationInstanceObject; - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstance, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceBone, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SkeletonAnimationInstanceObject, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationInstance, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationInstanceBone, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationInstanceNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkeletonAnimationInstanceObject, C3D_API ); //! SkeletonAnimationInstanceObject pointer array. CU_DeclareVector( SkeletonAnimationInstanceObjectUPtr, SkeletonAnimationInstanceObjectPtr ); diff --git a/include/Core/Castor3D/Scene/Animation/Texture/TextureAnimationModule.hpp b/include/Core/Castor3D/Scene/Animation/Texture/TextureAnimationModule.hpp index 905e1d0694..e2d3734228 100644 --- a/include/Core/Castor3D/Scene/Animation/Texture/TextureAnimationModule.hpp +++ b/include/Core/Castor3D/Scene/Animation/Texture/TextureAnimationModule.hpp @@ -25,7 +25,7 @@ namespace castor3d */ class TextureAnimationInstance; - CU_DeclareSmartPtr( TextureAnimationInstance ); + CU_DeclareSmartPtr( castor3d, TextureAnimationInstance, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/Background/BackgroundModule.hpp b/include/Core/Castor3D/Scene/Background/BackgroundModule.hpp index ab4295e4eb..0baf90e51b 100644 --- a/include/Core/Castor3D/Scene/Background/BackgroundModule.hpp +++ b/include/Core/Castor3D/Scene/Background/BackgroundModule.hpp @@ -80,7 +80,10 @@ namespace castor3d */ class SkyboxBackground; - CU_DeclareSmartPtr( SceneBackground ); + CU_DeclareSmartPtr( castor3d, SceneBackground, C3D_API ); + CU_DeclareSmartPtr( castor3d, ColourBackground, C3D_API ); + CU_DeclareSmartPtr( castor3d, ImageBackground, C3D_API ); + CU_DeclareSmartPtr( castor3d, SkyboxBackground, C3D_API ); using BackgroundChangedFunc = std::function< void( SceneBackground const & ) >; using OnBackgroundChanged = castor::SignalT< BackgroundChangedFunc >; diff --git a/include/Core/Castor3D/Scene/Light/Light.hpp b/include/Core/Castor3D/Scene/Light/Light.hpp index 87325a8f0b..6020f871b6 100644 --- a/include/Core/Castor3D/Scene/Light/Light.hpp +++ b/include/Core/Castor3D/Scene/Light/Light.hpp @@ -121,9 +121,9 @@ namespace castor3d return m_category->getBoundingBox(); } - LightCategorySPtr getCategory()const + LightCategoryRPtr getCategory()const { - return m_category; + return m_category.get(); } bool isShadowProducer()const @@ -408,7 +408,7 @@ namespace castor3d std::atomic_bool m_currentShadowCaster{ false }; bool m_dirty{ true }; ShadowConfig m_shadows; - LightCategorySPtr m_category; + LightCategoryUPtr m_category; ShadowMapRPtr m_shadowMap{ nullptr }; uint32_t m_shadowMapIndex{ 0u }; std::atomic< GlobalIlluminationType > m_currentGlobalIllumination{ GlobalIlluminationType::eNone }; diff --git a/include/Core/Castor3D/Scene/Light/LightModule.hpp b/include/Core/Castor3D/Scene/Light/LightModule.hpp index f704f288b9..da41bc8b9a 100644 --- a/include/Core/Castor3D/Scene/Light/LightModule.hpp +++ b/include/Core/Castor3D/Scene/Light/LightModule.hpp @@ -121,16 +121,13 @@ namespace castor3d */ class SpotLight; - CU_DeclareCUSmartPtr( castor3d, Light, C3D_API ); - CU_DeclareSmartPtr( LightFactory ); - CU_DeclareSmartPtr( LightCategory ); - CU_DeclareSmartPtr( LightImporter ); - CU_DeclareSmartPtr( DirectionalLight ); - CU_DeclareSmartPtr( PointLight ); - CU_DeclareSmartPtr( SpotLight ); - - class LightFactory; - CU_DeclareSmartPtr( LightFactory ); + CU_DeclareSmartPtr( castor3d, Light, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightCategory, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, DirectionalLight, C3D_API ); + CU_DeclareSmartPtr( castor3d, PointLight, C3D_API ); + CU_DeclareSmartPtr( castor3d, SpotLight, C3D_API ); //! Array of lights CU_DeclareVector( LightRPtr, Lights ); @@ -184,7 +181,7 @@ namespace castor3d using LightRes = CameraCacheTraits::ElementPtrT; using LightResPtr = CameraCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, LightCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightCache, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/ParticleSystem/ParticleModule.hpp b/include/Core/Castor3D/Scene/ParticleSystem/ParticleModule.hpp index 6175e688ff..da9b508e23 100644 --- a/include/Core/Castor3D/Scene/ParticleSystem/ParticleModule.hpp +++ b/include/Core/Castor3D/Scene/ParticleSystem/ParticleModule.hpp @@ -170,7 +170,7 @@ namespace castor3d */ class ParticleUpdater; - CU_DeclareCUSmartPtr( castor3d, CpuParticleSystem, C3D_API ); + CU_DeclareSmartPtr( castor3d, CpuParticleSystem, C3D_API ); /** *\~english *\brief @@ -187,13 +187,13 @@ namespace castor3d template< ParticleFormat Type > struct ElementTyper; - CU_DeclareCUSmartPtr( castor3d, ComputeParticleSystem, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleElementDeclaration, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleEmitter, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleSystem, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleSystemImpl, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleUpdater, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ParticleFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, ComputeParticleSystem, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleElementDeclaration, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleEmitter, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleSystem, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleSystemImpl, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleUpdater, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleFactory, C3D_API ); CU_DeclareVector( Particle, Particle ); CU_DeclareVector( ParticleEmitterUPtr, ParticleEmitter ); @@ -229,7 +229,7 @@ namespace castor3d using ParticleSystemRes = CameraCacheTraits::ElementPtrT; using ParticleSystemResPtr = CameraCacheTraits::ElementObsT; - CU_DeclareCUSmartPtr( castor3d, ParticleSystemCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, ParticleSystemCache, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Scene/Scene.hpp b/include/Core/Castor3D/Scene/Scene.hpp index dc46842d5a..aca5b1e2b9 100644 --- a/include/Core/Castor3D/Scene/Scene.hpp +++ b/include/Core/Castor3D/Scene/Scene.hpp @@ -121,7 +121,7 @@ namespace castor3d *\brief Définit le fond de la scène. *\param[in] value La nouvelle valeur. */ - C3D_API void setBackground( SceneBackgroundSPtr value ); + C3D_API void setBackground( SceneBackgroundUPtr value ); /** *\~english *\brief Merges the content of the given scene to this scene @@ -308,9 +308,9 @@ namespace castor3d return m_boundingBox; } - SceneBackgroundSPtr getBackground()const + SceneBackgroundRPtr getBackground()const { - return m_background; + return m_background.get(); } castor::RgbColour const & getBackgroundColour()const @@ -497,11 +497,11 @@ namespace castor3d bool m_changed{ false }; castor::RgbColour m_ambientLight{ 0.0f, 0.0f, 0.0f }; castor::RgbColour m_backgroundColour{ 0.0f, 0.0f, 0.0f }; - SceneBackgroundSPtr m_background; - LightFactorySPtr m_lightFactory; + SceneBackgroundUPtr m_background; + LightFactoryUPtr m_lightFactory; Fog m_fog; FrameListenerRPtr m_listener{}; - std::unique_ptr< EnvironmentMap > m_reflectionMap; + EnvironmentMapUPtr m_reflectionMap; bool m_needsSubsurfaceScattering{ false }; bool m_hasOpaqueObjects{ false }; bool m_hasTransparentObjects{ false }; diff --git a/include/Core/Castor3D/Scene/SceneFileParser.hpp b/include/Core/Castor3D/Scene/SceneFileParser.hpp index c48c501a02..f1f24c47f9 100644 --- a/include/Core/Castor3D/Scene/SceneFileParser.hpp +++ b/include/Core/Castor3D/Scene/SceneFileParser.hpp @@ -194,16 +194,20 @@ namespace castor3d castor::ImageRPtr image{}; VkShaderStageFlagBits shaderStage{}; UniformBufferBaseUPtr uniformBuffer{}; - OverlayRPtr overlay{}; - OverlayUPtr ownOverlay{}; - std::vector< OverlayResPtr > parentOverlays{}; + struct OverlayPtr + { + OverlayUPtr uptr{}; + OverlayRPtr rptr{}; + }; + OverlayPtr overlay; + std::vector< OverlayPtr > parentOverlays{}; BillboardListUPtr ownBillboards{}; BillboardListRPtr billboards{}; int face1{ -1 }; int face2{ -1 }; LightType lightType{ LightType::eCount }; VkPrimitiveTopology primitiveType{ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST }; - ViewportSPtr viewport{}; + ViewportUPtr viewport{}; castor::String strName{}; castor::String strName2{}; castor::Path path{}; @@ -225,12 +229,12 @@ namespace castor3d AnimatedObjectRPtr animTexture{}; TextureAnimationUPtr textureAnimation{}; MeshAnimationUPtr morphAnimation{}; - SceneBackgroundSPtr background{}; + SceneBackgroundUPtr background{}; ParticleSystemUPtr ownParticleSystem{}; ParticleSystemRPtr particleSystem{}; SsaoConfig ssaoConfig{}; SubsurfaceScatteringUPtr subsurfaceScattering{}; - std::shared_ptr< SkyboxBackground > skybox{}; + SkyboxBackgroundUPtr skybox{}; TextureConfiguration textureConfiguration{}; TextureTransform textureTransform{}; uint32_t texcoordSet{}; diff --git a/include/Core/Castor3D/Scene/SceneModule.hpp b/include/Core/Castor3D/Scene/SceneModule.hpp index efc7aa77dc..343318c426 100644 --- a/include/Core/Castor3D/Scene/SceneModule.hpp +++ b/include/Core/Castor3D/Scene/SceneModule.hpp @@ -350,17 +350,17 @@ namespace castor3d */ struct ShadowConfig; - CU_DeclareCUSmartPtr( castor3d, BillboardBase, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, BillboardList, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Camera, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Geometry, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MovableObject, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneFileContext, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneFileParser, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneNode, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, Scene, C3D_API ); - CU_DeclareSmartPtr( SceneImporter ); - CU_DeclareSmartPtr( SceneNodeImporter ); + CU_DeclareSmartPtr( castor3d, BillboardBase, C3D_API ); + CU_DeclareSmartPtr( castor3d, BillboardList, C3D_API ); + CU_DeclareSmartPtr( castor3d, Camera, C3D_API ); + CU_DeclareSmartPtr( castor3d, Geometry, C3D_API ); + CU_DeclareSmartPtr( castor3d, MovableObject, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneFileContext, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneFileParser, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneNode, C3D_API ); + CU_DeclareSmartPtr( castor3d, Scene, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneImporter, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneNodeImporter, C3D_API ); //! SceneNode pointer array. CU_DeclareVector( SceneNodeRPtr, SceneNodePtr ); @@ -650,14 +650,14 @@ namespace castor3d using SamplerCacheView = CacheViewT< SamplerCache, EventType::ePreRender >; using FontCacheView = CacheViewT< castor::FontCache, EventType::ePreRender >; - CU_DeclareCUSmartPtr( castor3d, SceneCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, BillboardListCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, CameraCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, GeometryCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneNodeCache, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, MaterialCacheView, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SamplerCacheView, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, FontCacheView, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, BillboardListCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, CameraCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, GeometryCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneNodeCache, C3D_API ); + CU_DeclareSmartPtr( castor3d, MaterialCacheView, C3D_API ); + CU_DeclareSmartPtr( castor3d, SamplerCacheView, C3D_API ); + CU_DeclareSmartPtr( castor3d, FontCacheView, C3D_API ); //@} } diff --git a/include/Core/Castor3D/Shader/ShaderBuffers/ShaderBuffersModule.hpp b/include/Core/Castor3D/Shader/ShaderBuffers/ShaderBuffersModule.hpp index 651d1fe845..a7b2493d00 100644 --- a/include/Core/Castor3D/Shader/ShaderBuffers/ShaderBuffersModule.hpp +++ b/include/Core/Castor3D/Shader/ShaderBuffers/ShaderBuffersModule.hpp @@ -78,12 +78,12 @@ namespace castor3d using GpuDataBufferOffsetModifySignal = castor::SignalT< GpuDataBufferOffsetModifyFunc >; using GpuDataBufferOffsetModifyConnection = castor::ConnectionT< GpuDataBufferOffsetModifySignal >; - CU_DeclareCUSmartPtr( castor3d, FontGlyphBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, PassBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SssProfileBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureConfigurationBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, TextureAnimationBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, FontGlyphBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, PassBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, SssProfileBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureConfigurationBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, TextureAnimationBuffer, C3D_API ); struct ShaderBufferTypes { diff --git a/include/Core/Castor3D/Shader/ShaderModule.hpp b/include/Core/Castor3D/Shader/ShaderModule.hpp index efebc0d836..acefe561bd 100644 --- a/include/Core/Castor3D/Shader/ShaderModule.hpp +++ b/include/Core/Castor3D/Shader/ShaderModule.hpp @@ -148,9 +148,9 @@ namespace castor3d template< typename ElementTypeTraits > class StructuredShaderBuffer; - CU_DeclareCUSmartPtr( castor3d, ShaderBuffer, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, ShaderProgram, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LightingModelFactory, C3D_API ); + CU_DeclareSmartPtr( castor3d, ShaderBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d, ShaderProgram, C3D_API ); + CU_DeclareSmartPtr( castor3d, LightingModelFactory, C3D_API ); //@} } diff --git a/include/Core/Castor3D/Shader/Shaders/GlslLight.hpp b/include/Core/Castor3D/Shader/Shaders/GlslLight.hpp index 50ca1e014b..11ec36b3ae 100644 --- a/include/Core/Castor3D/Shader/Shaders/GlslLight.hpp +++ b/include/Core/Castor3D/Shader/Shaders/GlslLight.hpp @@ -580,9 +580,9 @@ namespace castor3d::shader Utils & m_utils; bool m_enableVolumetric; LightingModelUPtr m_lightingModel; - std::shared_ptr< Shadow > m_shadowModel; - std::shared_ptr< SssTransmittance > m_sssTransmittance; - std::unique_ptr< LightsBuffer > m_lightsBuffer; + ShadowUPtr m_shadowModel; + SssTransmittanceUPtr m_sssTransmittance; + LightsBufferUPtr m_lightsBuffer; sdw::Function< sdw::Float , InBlendComponents , sdw::InVec3 > m_getFinalTransmission; diff --git a/include/Core/Castor3D/Shader/Shaders/SdwModule.hpp b/include/Core/Castor3D/Shader/Shaders/SdwModule.hpp index 80a9730051..bef777551d 100644 --- a/include/Core/Castor3D/Shader/Shaders/SdwModule.hpp +++ b/include/Core/Castor3D/Shader/Shaders/SdwModule.hpp @@ -131,6 +131,7 @@ namespace castor3d::shader class BRDFHelpers; class Fog; class Lights; + class LightsBuffer; class LightingModel; class Materials; class PassShaders; @@ -151,7 +152,10 @@ namespace castor3d::shader template< typename DataT > class BufferT; - CU_DeclareCUSmartPtr( castor3d::shader, LightingModel, C3D_API ); + CU_DeclareSmartPtr( castor3d::shader, LightsBuffer, C3D_API ); + CU_DeclareSmartPtr( castor3d::shader, LightingModel, C3D_API ); + CU_DeclareSmartPtr( castor3d::shader, Shadow, C3D_API ); + CU_DeclareSmartPtr( castor3d::shader, SssTransmittance, C3D_API ); using ReflectionModelPtr = std::unique_ptr< ReflectionModel >; using LightingModelCreator = std::function< LightingModelUPtr( LightingModelID lightingModelId @@ -247,7 +251,7 @@ namespace castor3d::shader Writer_Parameter( DerivTex ); - CU_DeclareSmartPtr( Material ); + CU_DeclareSmartPtr( castor3d::shader, Material, C3D_API ); //@} //@} diff --git a/include/Core/Castor3D/Shader/Ubos/UbosModule.hpp b/include/Core/Castor3D/Shader/Ubos/UbosModule.hpp index da33207ad3..0a7fc448c3 100644 --- a/include/Core/Castor3D/Shader/Ubos/UbosModule.hpp +++ b/include/Core/Castor3D/Shader/Ubos/UbosModule.hpp @@ -459,10 +459,10 @@ namespace castor3d */ struct VoxelizerUboConfiguration; - CU_DeclareCUSmartPtr( castor3d, LpvGridConfigUbo, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LpvLightConfigUbo, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, LayeredLpvGridConfigUbo, C3D_API ); - CU_DeclareCUSmartPtr( castor3d, SceneUbo, C3D_API ); + CU_DeclareSmartPtr( castor3d, LpvGridConfigUbo, C3D_API ); + CU_DeclareSmartPtr( castor3d, LpvLightConfigUbo, C3D_API ); + CU_DeclareSmartPtr( castor3d, LayeredLpvGridConfigUbo, C3D_API ); + CU_DeclareSmartPtr( castor3d, SceneUbo, C3D_API ); CU_DeclareVector( LpvLightConfigUbo, LpvLightConfigUbo ); CU_DeclareVector( LpvGridConfigUbo, LpvGridConfigUbo ); diff --git a/include/Core/CastorUtils/Config/ConfigModule.hpp b/include/Core/CastorUtils/Config/ConfigModule.hpp index e280c0451b..f5891beafd 100644 --- a/include/Core/CastorUtils/Config/ConfigModule.hpp +++ b/include/Core/CastorUtils/Config/ConfigModule.hpp @@ -10,7 +10,6 @@ See LICENSE file in root folder #include "CastorUtils/Config/Macros.hpp" #include "CastorUtils/Config/MultiThreadConfig.hpp" #include "CastorUtils/Config/PlatformConfig.hpp" -#include "CastorUtils/Config/SmartPtr.hpp" #include #include diff --git a/include/Core/CastorUtils/Config/Macros.hpp b/include/Core/CastorUtils/Config/Macros.hpp index a0e5133ce0..1c62a915aa 100644 --- a/include/Core/CastorUtils/Config/Macros.hpp +++ b/include/Core/CastorUtils/Config/Macros.hpp @@ -1,13 +1,14 @@ /* See LICENSE file in root folder */ -#ifndef ___Castor_Macros___ -#define ___Castor_Macros___ +#ifndef ___CU_Macros_HPP___ +#define ___CU_Macros_HPP___ #include "CastorUtils/Config/BeginExternHeaderGuard.hpp" #include "CastorUtils/config.hpp" #include "CastorUtils/Config/PlatformConfig.hpp" #include "CastorUtils/Config/CompilerConfig.hpp" +#include "CastorUtils/Config/SmartPtr.hpp" #include "CastorUtils/Config/EndExternHeaderGuard.hpp" #if !defined( __FUNCTION__ ) @@ -50,22 +51,6 @@ See LICENSE file in root folder # endif #endif -#include "CastorUtils/Config/BeginExternHeaderGuard.hpp" -#include -#include "CastorUtils/Config/EndExternHeaderGuard.hpp" - -#define CU_DeclareSmartPtr( class_name )\ - using class_name##SPtr = std::shared_ptr< class_name >;\ - using class_name##WPtr = std::weak_ptr< class_name >;\ - using class_name##UPtr = std::unique_ptr< class_name >;\ - using class_name##RPtr = class_name * - -#define CU_DeclareTemplateSmartPtr( class_name )\ - template< typename T > using class_name##SPtrT = std::shared_ptr< class_name##T< T > >;\ - template< typename T > using class_name##WPtrT = std::weak_ptr< class_name##T< T > >;\ - template< typename T > using class_name##UPtrT = std::unique_ptr< class_name##T< T > >;\ - template< typename T > using class_name##RPtrT = class_name##T< T > * - #include #define CU_DeclareMap( key, value, name )\ @@ -163,38 +148,28 @@ See LICENSE file in root folder using name##ListConstIt = typename name##List::const_iterator;\ using name##ListConstRIt = typename name##List::const_reverse_iterator -#define CU_DeclareCollection( elem, key, name )\ - using name##Collection = castor::Collection< elem, key >;\ - using name##CollectionIt = name##Collection::TObjPtrMapIt;\ - using name##CollectionConstIt = name##Collection::TObjPtrMapConstIt - #define CU_DeclarePoint( type, count, name )\ using Point##count##name = Point< type, count >;\ - CU_DeclareSmartPtr( Point##count##name );\ CU_DeclareVector( Point##count##name, Point##count##name );\ CU_DeclareList( Point##count##name, Point##count##name ) #define CU_DeclareCoord( type, count, name )\ using Coords##count##name = Coords< type, count >;\ - CU_DeclareSmartPtr( Coords##count##name );\ CU_DeclareVector( Coords##count##name, Coords##count##name );\ CU_DeclareList( Coords##count##name, Coords##count##name ) #define CU_DeclareConstCoord( type, count, name )\ using ConstCoords##count##name = Coords< type const, count >;\ - CU_DeclareSmartPtr( ConstCoords##count##name );\ CU_DeclareVector( ConstCoords##count##name, ConstCoords##count##name );\ CU_DeclareList( ConstCoords##count##name, ConstCoords##count##name ) #define CU_DeclareMtx( type, rows, cols, name )\ using Matrix##rows##x##cols##name = Matrix< type, rows, cols >;\ - CU_DeclareSmartPtr( Matrix##rows##x##cols##name );\ CU_DeclareVector( Matrix##rows##x##cols##name, Matrix##rows##x##cols##name );\ CU_DeclareList( Matrix##rows##x##cols##name, Matrix##rows##x##cols##name ) #define CU_DeclareSqMtx( type, count, name )\ using Matrix##count##x##count##name = SquareMatrix< type, count >;\ - CU_DeclareSmartPtr( Matrix##count##x##count##name );\ CU_DeclareVector( Matrix##count##x##count##name, Matrix##count##x##count##name );\ CU_DeclareList( Matrix##count##x##count##name, Matrix##count##x##count##name ) diff --git a/include/Core/CastorUtils/Config/SmartPtr.hpp b/include/Core/CastorUtils/Config/SmartPtr.hpp index bb555ec2d4..2778a411bf 100644 --- a/include/Core/CastorUtils/Config/SmartPtr.hpp +++ b/include/Core/CastorUtils/Config/SmartPtr.hpp @@ -1,38 +1,17 @@ /* See LICENSE file in root folder */ -#ifndef ___Castor_shared_ptr___ -#define ___Castor_shared_ptr___ - -#include "CastorUtils/Config/Macros.hpp" +#ifndef ___CU_SmartPtr_HPP___ +#define ___CU_SmartPtr_HPP___ #include "CastorUtils/Config/BeginExternHeaderGuard.hpp" +#include "CastorUtils/Config/PlatformConfig.hpp" + #include #include "CastorUtils/Config/EndExternHeaderGuard.hpp" namespace castor { - /** - \author Sylvain DOREMUS - \version 0.6.1.0 - \date 08/12/2011 - \~english - \brief Dummy destructor - \remark Used as a parameter to shared_ptr, to make deallocation dummy (only sets pointer to nullptr) - \~french - \brief Destructeur zombie - \remark Utilisé en tant que paramètre à shared_ptr, afin d'avoir une désallocation zombie (ne fait que mettre le pointeur à nullptr, sans le désallouer) - */ - struct DummyDtor - { - template< typename T > - inline void operator()( T *& pointer )noexcept - { - pointer = nullptr; - } - }; - CU_API extern DummyDtor g_dummyDtor; - template< typename TypeT > struct Deleter { @@ -67,7 +46,7 @@ namespace castor } } -#define CU_DeclareCUSmartPtr( nmspc, class_name, expdecl )\ +#define CU_DeclareSmartPtr( nmspc, class_name, expdecl )\ }\ namespace castor\ {\ @@ -79,12 +58,10 @@ namespace castor\ }\ namespace nmspc\ {\ - using class_name##SPtr = std::shared_ptr< class_name >;\ - using class_name##WPtr = std::weak_ptr< class_name >;\ using class_name##UPtr = castor::UniquePtr< class_name >;\ using class_name##RPtr = class_name * -#define CU_ImplementCUSmartPtr( nmspc, class_name )\ +#define CU_ImplementSmartPtr( nmspc, class_name )\ namespace castor\ {\ void Deleter< nmspc::class_name >::operator()( nmspc::class_name * pointer )noexcept\ @@ -93,14 +70,14 @@ namespace castor\ }\ } -#define CU_DeclareCUTemplateSmartPtr( nmspc, class_name_t )\ +#define CU_DeclareTemplateSmartPtr( nmspc, class_name )\ }\ namespace castor\ {\ template< typename InstT >\ - struct Deleter< nmspc::class_name_t< InstT > >\ + struct Deleter< nmspc::class_name##T< InstT > >\ {\ - void operator()( nmspc::class_name_t< InstT > * pointer )noexcept\ + void operator()( nmspc::class_name##T< InstT > * pointer )noexcept\ {\ delete pointer;\ }\ @@ -109,22 +86,18 @@ namespace castor\ namespace nmspc\ {\ template< typename InstT >\ - using class_name_t##SPtrT = std::shared_ptr< class_name_t< InstT > >;\ - template< typename InstT >\ - using class_name_t##WPtrT = std::weak_ptr< class_name_t< InstT > >;\ - template< typename InstT >\ - using class_name_t##UPtrT = castor::UniquePtr< class_name_t< InstT > >;\ + using class_name##UPtrT = castor::UniquePtr< class_name##T< InstT > >;\ template< typename InstT >\ - using class_name_t##RPtrT = class_name_t< InstT > * + using class_name##RPtrT = class_name##T< InstT > * -#define CU_DeclareCUEnumTemplateSmartPtr( nmspc, class_name_t, enum_name_t )\ +#define CU_DeclareEnumTemplateSmartPtr( nmspc, class_name, enum_name )\ }\ namespace castor\ {\ - template< enum_name_t EnumT >\ - struct Deleter< nmspc::class_name_t< EnumT > >\ + template< enum_name EnumT >\ + struct Deleter< nmspc::class_name##T< EnumT > >\ {\ - void operator()( nmspc::class_name_t< EnumT > * pointer )noexcept\ + void operator()( nmspc::class_name##T< EnumT > * pointer )noexcept\ {\ delete pointer;\ }\ @@ -132,13 +105,9 @@ namespace castor\ }\ namespace nmspc\ {\ - template< enum_name_t EnumT >\ - using class_name_t##SPtrT = std::shared_ptr< class_name_t< EnumT > >;\ - template< enum_name_t EnumT >\ - using class_name_t##WPtrT = std::weak_ptr< class_name_t< EnumT > >;\ - template< enum_name_t EnumT >\ - using class_name_t##UPtrT = castor::UniquePtr< class_name_t< EnumT > >;\ - template< enum_name_t EnumT >\ - using class_name_t##RPtrT = class_name_t< EnumT > * + template< enum_name EnumT >\ + using class_name##UPtrT = castor::UniquePtr< class_name##T< EnumT > >;\ + template< enum_name EnumT >\ + using class_name##RPtrT = class_name##T< EnumT > * #endif diff --git a/include/Core/CastorUtils/Design/Collection.hpp b/include/Core/CastorUtils/Design/Collection.hpp deleted file mode 100644 index 2955eae5c2..0000000000 --- a/include/Core/CastorUtils/Design/Collection.hpp +++ /dev/null @@ -1,241 +0,0 @@ -/* -See LICENSE file in root folder -*/ -#ifndef ___CASTOR_COLLECTION_H___ -#define ___CASTOR_COLLECTION_H___ - -#include "CastorUtils/Design/DesignModule.hpp" - -#include "CastorUtils/Design/Templates.hpp" -#include "CastorUtils/Design/NonCopyable.hpp" -#include "CastorUtils/Exception/Assertion.hpp" -#include "CastorUtils/Log/LoggerInstance.hpp" - -namespace castor -{ - template< typename ObjectT, typename KeyT > - class Collection - : public castor::NonCopyable - { - public: - using ObjectPtr = std::shared_ptr< ObjectT >; - using ObjectPtrMap = std::map< KeyT, ObjectPtr >; - using ObjectPtrMapIt = typename ObjectPtrMap::iterator; - using ObjectPtrMapConstIt = typename ObjectPtrMap::const_iterator; - using ValueType = typename ObjectPtrMap::value_type; - using KeyParamType= typename CallTraits< KeyT >::ConstParamType; - - private: - struct Search - { - KeyT key; - ObjectPtrMapConstIt result; - }; - - public: - /** - *\~english - *\brief Constructor - *\~french - *\brief Constructeur - */ - explicit Collection( LoggerInstance & logger ); - /** - *\~english - *\brief Destructor - *\~french - *\brief Destructeur - */ - ~Collection(); - /** - *\~english - *\return The logger instance. - *\~french - *\return L'instance de logger. - */ - inline LoggerInstance & getLogger()const; - /** - *\~english - *\brief Locks the collection mutex - *\~french - *\brief Locke le mutex de la collection - */ - inline void lock()const; - /** - *\~english - *\brief Unlocks the collection mutex - *\~french - *\brief Délocke le mutex de la collection - */ - inline void unlock()const; - /** - *\~english - *\brief Returns an iterator to the first element of the collection - *\return The iterator - *\~french - *\brief Renvoie un itérateur sur le premier élément de la collection - *\return L'itérateur - */ - inline ObjectPtrMapIt begin(); - /** - *\~english - *\brief Returns an constant iterator to the first element of the collection - *\return The iterator - *\~french - *\brief Renvoie un itérateur constant sur le premier élément de la collection - *\return L'itérateur - */ - inline ObjectPtrMapConstIt begin()const; - /** - *\~english - *\brief Returns an iterator to the after last element of the collection - *\return The iterator - *\~french - *\brief Renvoie un itérateur sur l'après dernier élément de la collection - *\return L'itérateur - */ - inline ObjectPtrMapIt end(); - /** - *\~english - *\brief Returns an constant iterator to the after last element of the collection - *\return The iterator - *\~french - *\brief Renvoie un itérateur constant sur l'après dernier élément de la collection - *\return L'itérateur - */ - inline ObjectPtrMapConstIt end()const; - /** - *\~english - *\return \p true if the collection is empty. - *\~french - *\return \p true si la collection est vide. - */ - inline bool empty()const; - /** - *\~english - *\brief Clears the collection - *\~french - *\brief Vide la collection - */ - inline void clear()noexcept; - /** - *\~english - *\brief Looks for a collected object at the given key - *\param[in] key The key - *\return The found object if any, \p null_ptr if none - *\~french - *\brief Recherche dans la collection un objet situé à la clef donnée - *\param[in] key La clef - *\return L'objet trouvé s'il existe, \p null_ptr sinon - */ - inline ObjectPtr tryFind( KeyParamType key )const; - /** - *\~english - *\brief Looks for a collected object at the given key - *\param[in] key The key - *\return The found object if any, \p null_ptr if none - *\~french - *\brief Recherche dans la collection un objet situé à la clef donnée - *\param[in] key La clef - *\return L'objet trouvé s'il existe, \p null_ptr sinon - */ - inline ObjectPtr find( KeyParamType key )const; - /** - *\~english - *\brief Gives the collected objects count - *\return The count - *\~french - *\brief donne le nombre d'objets de la collection - *\return Le compte - */ - inline std::size_t size()const; - /** - *\~english - *\brief Inserts an element at the given key into the collection - *\param[in] key The key at which element is inserted - *\param[in] element The element to insert - *\return The element at the given key. - *\~french - *\brief Insère un élément à la clef donnée - *\param[in] key La clef à laquelle l'élément sera associé - *\param[in] element L'élément à insérer - *\return L'élément associé à la clef. - */ - inline ObjectPtr tryInsert( KeyParamType key, ObjectPtr element ); - /** - *\~english - *\brief Inserts an element at the given key into the collection - *\param[in] key The key at which element is inserted - *\param[in] element The element to insert - *\return \p false if there is already one object at the given key - *\~french - *\brief Insère un élément à la clef donnée - *\param[in] key La clef à laquelle l'élément sera associé - *\param[in] element L'élément à insérer - *\return \p false si un élément est déjà associé à la clef - */ - inline bool insert( KeyParamType key, ObjectPtr element ); - /** - *\~english - *\brief Tests if there is an element associated to the key - *\param[in] key The key to test - *\return The test result - *\~french - *\brief Teste si un élément est associé à la clef donnée - *\param[in] key La clef à tester - *\return Le résultat du test - */ - inline bool has( KeyParamType key )const; - /** - *\~english - *\brief Removes the element associated to the given key from the collection - *\param[in] key The key - *\return The associated element, nullptr if none - *\~french - *\brief Enlève de la collection l'élément associé à la clef donnée - *\param[in] key La clef - *\return L'élément associé, null_ptr sinon - */ - inline ObjectPtr erase( KeyParamType key ); - /** - *\~english - *\brief Removes the element at given iterator. - *\param[in] it The iterator - *\return The iterator after erased element. - *\~french - *\brief Enlève de la collection l'élément à l'itérateur donné. - *\param[in] it L'itérateur - *\return L'itérateur après l'élément enlevé. - */ - inline ObjectPtrMapIt erase( ObjectPtrMapIt it ); - - protected: - /** - *\~english - *\brief Initialises last search (empty key, invalid result). - *\~french - *\brief Initialise la dernière rechercher (clef vide, résultat invalide). - */ - void doInitLast()const; - /** - *\~english - *\brief Updates the last search, performing the lookup in the map. - *\param[in] key The key to test. - *\~french - *\brief Met à jour la dernière recherche, en effectuant la recherche dans la map. - *\param[in] key La clef à tester. - */ - inline void doUpdateLast( KeyParamType key )const; - - private: - LoggerInstance & m_logger; - ObjectPtrMap m_objects; - mutable std::recursive_mutex m_mutex; - mutable bool m_locked; - mutable Search m_last; - }; -} - -#include "Collection.inl" - -#endif diff --git a/include/Core/CastorUtils/Design/Collection.inl b/include/Core/CastorUtils/Design/Collection.inl deleted file mode 100644 index fd0055b600..0000000000 --- a/include/Core/CastorUtils/Design/Collection.inl +++ /dev/null @@ -1,184 +0,0 @@ -#include "CastorUtils/Log/Logger.hpp" - -namespace castor -{ - namespace details - { - static const xchar * WARNING_COLLECTION_UNKNOWN_OBJECT = cuT( "Collection::find - Object not found: " ); - static const xchar * WARNING_COLLECTION_DUPLICATE_OBJECT = cuT( "Collection::create - Duplicate object: " ); - } - - template< typename ObjectT, typename KeyT > - Collection< ObjectT, KeyT >::Collection( LoggerInstance & logger ) - : m_logger( logger ) - , m_locked( false ) - { - } - - template< typename ObjectT, typename KeyT > - Collection< ObjectT, KeyT >::~Collection() - { - } - - template< typename ObjectT, typename KeyT > - inline LoggerInstance & Collection< ObjectT, KeyT >::getLogger()const - { - return m_logger; - } - - template< typename ObjectT, typename KeyT > - inline void Collection< ObjectT, KeyT >::lock()const - { - m_mutex.lock(); - m_locked = true; - } - - template< typename ObjectT, typename KeyT > - inline void Collection< ObjectT, KeyT >::unlock()const - { - m_locked = false; - m_mutex.unlock(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtrMapIt Collection< ObjectT, KeyT >::begin() - { - CU_Require( m_locked ); - return m_objects.begin(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtrMapConstIt Collection< ObjectT, KeyT >::begin()const - { - CU_Require( m_locked ); - return m_objects.begin(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtrMapIt Collection< ObjectT, KeyT >::end() - { - return m_objects.end(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtrMapConstIt Collection< ObjectT, KeyT >::end()const - { - return m_objects.end(); - } - - template< typename ObjectT, typename KeyT > - inline bool Collection< ObjectT, KeyT >::empty()const - { - return m_objects.empty(); - } - - template< typename ObjectT, typename KeyT > - inline void Collection< ObjectT, KeyT >::clear()noexcept - { - auto lock( makeUniqueLock( m_mutex ) ); - m_objects.clear(); - doInitLast(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtr Collection< ObjectT, KeyT >::tryFind( KeyParamType key )const - { - auto lock( makeUniqueLock( m_mutex ) ); - doUpdateLast( key ); - return m_last.result != m_objects.end() - ? m_last.result->second - : nullptr; - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtr Collection< ObjectT, KeyT >::find( KeyParamType key )const - { - auto result = tryFind( key ); - - if ( !result ) - { - m_logger.logWarning( details::WARNING_COLLECTION_UNKNOWN_OBJECT + string::toString( key ) ); - } - - return result; - } - - template< typename ObjectT, typename KeyT > - inline std::size_t Collection< ObjectT, KeyT >::size()const - { - auto lock( makeUniqueLock( m_mutex ) ); - return m_objects.size(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtr Collection< ObjectT, KeyT >::tryInsert( KeyParamType key, ObjectPtr element ) - { - auto lock( makeUniqueLock( m_mutex ) ); - doUpdateLast( key ); - auto ires = m_objects.emplace( key, element ); - m_last.result = ires.first; - return m_last.result->second; - } - - template< typename ObjectT, typename KeyT > - inline bool Collection< ObjectT, KeyT >::insert( KeyParamType key, ObjectPtr element ) - { - auto result = ( element == tryInsert( key, element ) ); - - if ( !result ) - { - m_logger.logWarning( details::WARNING_COLLECTION_DUPLICATE_OBJECT + string::toString( key ) ); - } - - return result; - } - - template< typename ObjectT, typename KeyT > - inline bool Collection< ObjectT, KeyT >::has( KeyParamType key )const - { - auto lock( makeUniqueLock( m_mutex ) ); - doUpdateLast( key ); - return m_last.result != m_objects.end(); - } - - template< typename ObjectT, typename KeyT > - inline typename Collection< ObjectT, KeyT >::ObjectPtr Collection< ObjectT, KeyT >::erase( KeyParamType key ) - { - auto lock( makeUniqueLock( m_mutex ) ); - doUpdateLast( key ); - ObjectPtr ret; - - if ( m_last.result != m_objects.end() ) - { - ret = m_last.result->second; - m_objects.erase( m_last.result ); - doInitLast(); - } - - return ret; - } - - template< typename ObjectT, typename KeyT > - typename Collection< ObjectT, KeyT >::ObjectPtrMapIt Collection< ObjectT, KeyT >::erase( typename Collection< ObjectT, KeyT >::ObjectPtrMapIt it ) - { - CU_Require( m_locked ); - return m_objects.erase( it ); - } - - template< typename ObjectT, typename KeyT > - void Collection< ObjectT, KeyT >::doInitLast()const - { - m_last.key = std::move( KeyT() ); - m_last.result = m_objects.end(); - } - - template< typename ObjectT, typename KeyT > - void Collection< ObjectT, KeyT >::doUpdateLast( KeyParamType key )const - { - if ( m_last.key != key ) - { - m_last.key = key; - m_last.result = m_objects.find( key ); - } - } -} diff --git a/include/Core/CastorUtils/Design/DesignModule.hpp b/include/Core/CastorUtils/Design/DesignModule.hpp index 8e500cda3b..eb969e5de3 100644 --- a/include/Core/CastorUtils/Design/DesignModule.hpp +++ b/include/Core/CastorUtils/Design/DesignModule.hpp @@ -104,16 +104,6 @@ namespace castor class ChangeTrackedT; /** \~english - \brief Element collection class - \remark A collection class, allowing you to store named objects, removing, finding or adding them as you wish. - \~french - \brief Classe de collection d'éléments - \remark Une classe de collection, permettant de stocker des éléments nommés, les enlever, les rechercher. - */ - template< typename TObj, typename TKey > - class Collection; - /** - \~english *\brief Connection to a signal. \~french *\brief Représente une connexion à un signal. @@ -155,16 +145,12 @@ namespace castor /** \~english \brief Factory concept implementation - \remark The classes that can be registered must implement a function of the following form : -
static std::shared_ptr< Obj > create(); \~french \brief Implémentation du concept de fabrique - \remark Les classes pouvant être enregistrées doivent implémenter une fonction de la forme suivante : -
static std::shared_ptr< Obj > create(); */ template< class ObjT , class KeyT - , class PtrTypeT = std::shared_ptr< ObjT > + , class PtrTypeT = std::unique_ptr< ObjT > , typename CreatorT = std::function< PtrTypeT() > , class IdT = size_t , class EntryT = FactoryEntryT< KeyT, CreatorT, IdT > > diff --git a/include/Core/CastorUtils/Exception/Exception.hpp b/include/Core/CastorUtils/Exception/Exception.hpp index e39ad34061..fa48c021eb 100644 --- a/include/Core/CastorUtils/Exception/Exception.hpp +++ b/include/Core/CastorUtils/Exception/Exception.hpp @@ -192,7 +192,6 @@ namespace castor *\brief Macro définie pour faciliter l'utilisation de castor::Exception */ #define CU_Exception( text )\ - CU_Failure( text );\ throw castor::Exception{ text, __FILE__, __FUNCTION__, uint32_t( __LINE__ ) } /** *\~english @@ -201,7 +200,6 @@ namespace castor *\brief Macro définie pour faciliter l'utilisation de castor::Exception */ #define CU_SrcException( source, text )\ - CU_Failure( text );\ throw castor::Exception{ source ": " text, __FILE__, __FUNCTION__, uint32_t( __LINE__ ) } #endif diff --git a/include/Core/CastorUtils/FileParser/FileParserModule.hpp b/include/Core/CastorUtils/FileParser/FileParserModule.hpp index 2f187644a3..02c80701bd 100644 --- a/include/Core/CastorUtils/FileParser/FileParserModule.hpp +++ b/include/Core/CastorUtils/FileParser/FileParserModule.hpp @@ -171,8 +171,10 @@ namespace castor */ class PreprocessedFile; - CU_DeclareCUSmartPtr( castor, FileParserContext, CU_API ); - CU_DeclareCUSmartPtr( castor, ParserParameterBase, CU_API ); + CU_DeclareSmartPtr( castor, FileParserContext, CU_API ); + + using ParserParameterBaseSPtr = std::shared_ptr< ParserParameterBase >; + CU_DeclareVector( ParserParameterBaseSPtr, ParserParameter ); /** *\~english diff --git a/include/Core/CastorUtils/Graphics/Font.hpp b/include/Core/CastorUtils/Graphics/Font.hpp index 0a78c67b73..39777df0b6 100644 --- a/include/Core/CastorUtils/Graphics/Font.hpp +++ b/include/Core/CastorUtils/Graphics/Font.hpp @@ -6,7 +6,6 @@ See LICENSE file in root folder #include "CastorUtils/Data/BinaryLoader.hpp" #include "CastorUtils/Data/TextWriter.hpp" -#include "CastorUtils/Design/Collection.hpp" #include "CastorUtils/Design/Named.hpp" #include "CastorUtils/Graphics/Glyph.hpp" #include "CastorUtils/Math/Point.hpp" diff --git a/include/Core/CastorUtils/Graphics/GraphicsModule.hpp b/include/Core/CastorUtils/Graphics/GraphicsModule.hpp index 25be201dba..cb5c00362c 100644 --- a/include/Core/CastorUtils/Graphics/GraphicsModule.hpp +++ b/include/Core/CastorUtils/Graphics/GraphicsModule.hpp @@ -848,12 +848,12 @@ namespace castor using PixelBuffer = PxBuffer< PixelFormat::eR8G8B8A8_UNORM >; using FontCache = ResourceCacheT< Font, String, FontCacheTraits >; - CU_DeclareCUSmartPtr( castor, BoundingBox, CU_API ); - CU_DeclareCUSmartPtr( castor, BoundingSphere, CU_API ); - CU_DeclareCUSmartPtr( castor, Image, CU_API ); - CU_DeclareCUSmartPtr( castor, Font, CU_API ); - CU_DeclareCUSmartPtr( castor, PxBufferBase, CU_API ); - CU_DeclareCUSmartPtr( castor, FontCache, CU_API ); + CU_DeclareSmartPtr( castor, BoundingBox, CU_API ); + CU_DeclareSmartPtr( castor, BoundingSphere, CU_API ); + CU_DeclareSmartPtr( castor, Image, CU_API ); + CU_DeclareSmartPtr( castor, Font, CU_API ); + CU_DeclareSmartPtr( castor, PxBufferBase, CU_API ); + CU_DeclareSmartPtr( castor, FontCache, CU_API ); using RgbColour = RgbColourT< ColourComponent >; using RgbaColour = RgbaColourT< ColourComponent >; diff --git a/include/Core/CastorUtils/Math/MathModule.hpp b/include/Core/CastorUtils/Math/MathModule.hpp index 0609e24dc1..f440bbf9ad 100644 --- a/include/Core/CastorUtils/Math/MathModule.hpp +++ b/include/Core/CastorUtils/Math/MathModule.hpp @@ -383,9 +383,6 @@ namespace castor CU_DeclareMtx( double, 4, 2, d ); CU_DeclareMtx( double, 4, 3, d ); - CU_DeclareSmartPtr( Quaternion ); - CU_DeclareSmartPtr( SphericalVertex ); - CU_API Point3f operator*( Matrix4x4f const & lhs, Point3f const & rhs ); CU_API Point3f operator*( Point3f const & lhs, Matrix4x4f const & rhs ); CU_API Point4f operator*( Matrix4x4f const & lhs, Point4f const & rhs ); diff --git a/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp b/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp index f1db621f6d..bc64566629 100644 --- a/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp +++ b/include/Core/CastorUtils/Miscellaneous/MiscellaneousModule.hpp @@ -87,7 +87,7 @@ namespace castor static const String cuEmptyString; - CU_DeclareCUSmartPtr( castor, DynamicLibrary, CU_API ); + CU_DeclareSmartPtr( castor, DynamicLibrary, CU_API ); //@} } diff --git a/source/Core/Castor3D/Animation/AnimationImporter.cpp b/source/Core/Castor3D/Animation/AnimationImporter.cpp index 9bdd4bedf0..9f9e026f1e 100644 --- a/source/Core/Castor3D/Animation/AnimationImporter.cpp +++ b/source/Core/Castor3D/Animation/AnimationImporter.cpp @@ -15,7 +15,7 @@ #include "Castor3D/Scene/SceneImporter.hpp" #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimationImporter ) +CU_ImplementSmartPtr( castor3d, AnimationImporter ) namespace castor3d { diff --git a/source/Core/Castor3D/Animation/AnimationModule.cpp b/source/Core/Castor3D/Animation/AnimationModule.cpp index f7838145b6..e54b804f39 100644 --- a/source/Core/Castor3D/Animation/AnimationModule.cpp +++ b/source/Core/Castor3D/Animation/AnimationModule.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Animation/AnimationKeyFrame.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimationKeyFrame ) +CU_ImplementSmartPtr( castor3d, AnimationKeyFrame ) namespace castor3d { diff --git a/source/Core/Castor3D/Binary/CmshImporter.cpp b/source/Core/Castor3D/Binary/CmshImporter.cpp index 1048680bf9..4f23c467d5 100644 --- a/source/Core/Castor3D/Binary/CmshImporter.cpp +++ b/source/Core/Castor3D/Binary/CmshImporter.cpp @@ -164,12 +164,12 @@ namespace castor3d SkeletonImporterUPtr CmshImporterFile::createSkeletonImporter() { - return std::make_unique< CmshSkeletonImporter >( *getOwner() ); + return castor::makeUniqueDerived< SkeletonImporter, CmshSkeletonImporter >( *getOwner() ); } MeshImporterUPtr CmshImporterFile::createMeshImporter() { - return std::make_unique< CmshMeshImporter >( *getOwner() ); + return castor::makeUniqueDerived< MeshImporter, CmshMeshImporter >( *getOwner() ); } SceneNodeImporterUPtr CmshImporterFile::createSceneNodeImporter() @@ -201,7 +201,7 @@ namespace castor3d MeshImporterUPtr CmshMeshImporter::create( Engine & engine ) { - return std::make_unique< CmshMeshImporter >( engine ); + return castor::makeUniqueDerived< MeshImporter, CmshMeshImporter >( engine ); } bool CmshMeshImporter::doImportMesh( Mesh & mesh ) @@ -221,7 +221,7 @@ namespace castor3d SkeletonImporterUPtr CmshSkeletonImporter::create( Engine & engine ) { - return std::make_unique< CmshSkeletonImporter >( engine ); + return castor::makeUniqueDerived< SkeletonImporter, CmshSkeletonImporter >( engine ); } bool CmshSkeletonImporter::doImportSkeleton( Skeleton & skeleton ) diff --git a/source/Core/Castor3D/Buffer/GpuBufferPool.cpp b/source/Core/Castor3D/Buffer/GpuBufferPool.cpp index 60a8eaaf71..750a29c26e 100644 --- a/source/Core/Castor3D/Buffer/GpuBufferPool.cpp +++ b/source/Core/Castor3D/Buffer/GpuBufferPool.cpp @@ -9,7 +9,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, GpuBufferPool ) +CU_ImplementSmartPtr( castor3d, GpuBufferPool ) namespace castor3d { diff --git a/source/Core/Castor3D/Buffer/ObjectBufferPool.cpp b/source/Core/Castor3D/Buffer/ObjectBufferPool.cpp index c6803ef921..b0d41bb80c 100644 --- a/source/Core/Castor3D/Buffer/ObjectBufferPool.cpp +++ b/source/Core/Castor3D/Buffer/ObjectBufferPool.cpp @@ -10,8 +10,8 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, VertexBufferPool ) -CU_ImplementCUSmartPtr( castor3d, ObjectBufferPool ) +CU_ImplementSmartPtr( castor3d, VertexBufferPool ) +CU_ImplementSmartPtr( castor3d, ObjectBufferPool ) namespace castor3d { diff --git a/source/Core/Castor3D/Buffer/PoolUniformBuffer.cpp b/source/Core/Castor3D/Buffer/PoolUniformBuffer.cpp index c28de6e204..a63146e819 100644 --- a/source/Core/Castor3D/Buffer/PoolUniformBuffer.cpp +++ b/source/Core/Castor3D/Buffer/PoolUniformBuffer.cpp @@ -6,7 +6,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PoolUniformBuffer ) +CU_ImplementSmartPtr( castor3d, PoolUniformBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Buffer/UniformBufferBase.cpp b/source/Core/Castor3D/Buffer/UniformBufferBase.cpp index b203324bc6..2043e4dadc 100644 --- a/source/Core/Castor3D/Buffer/UniformBufferBase.cpp +++ b/source/Core/Castor3D/Buffer/UniformBufferBase.cpp @@ -11,7 +11,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, UniformBufferBase ) +CU_ImplementSmartPtr( castor3d, UniformBufferBase ) namespace castor3d { diff --git a/source/Core/Castor3D/Buffer/UniformBufferPool.cpp b/source/Core/Castor3D/Buffer/UniformBufferPool.cpp index 79522e6e75..ca9ec75276 100644 --- a/source/Core/Castor3D/Buffer/UniformBufferPool.cpp +++ b/source/Core/Castor3D/Buffer/UniformBufferPool.cpp @@ -7,7 +7,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, UniformBufferPool ) +CU_ImplementSmartPtr( castor3d, UniformBufferPool ) namespace castor3d { diff --git a/source/Core/Castor3D/CMakeLists.txt b/source/Core/Castor3D/CMakeLists.txt index 77c5d77fcb..36a36cbf42 100644 --- a/source/Core/Castor3D/CMakeLists.txt +++ b/source/Core/Castor3D/CMakeLists.txt @@ -245,7 +245,6 @@ set( ${PROJECT_NAME}_FOLDER_HDR_FILES ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/CacheModule.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/CacheView.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/CacheView.inl - ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/ElementProducer.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/GeometryCache.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/LightCache.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Cache/MaterialCache.hpp diff --git a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp index cd85c235f3..8f6d4f8748 100644 --- a/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp +++ b/source/Core/Castor3D/Cache/AnimatedObjectGroupCache.cpp @@ -18,7 +18,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, AnimatedObjectGroupCache ) +CU_ImplementSmartPtr( castor3d, AnimatedObjectGroupCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/BillboardCache.cpp b/source/Core/Castor3D/Cache/BillboardCache.cpp index 6a3195941f..a7aba3c944 100644 --- a/source/Core/Castor3D/Cache/BillboardCache.cpp +++ b/source/Core/Castor3D/Cache/BillboardCache.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, BillboardListCache ) +CU_ImplementSmartPtr( castor3d, BillboardListCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/CacheModule.cpp b/source/Core/Castor3D/Cache/CacheModule.cpp index 74416a13d4..0a9ebea675 100644 --- a/source/Core/Castor3D/Cache/CacheModule.cpp +++ b/source/Core/Castor3D/Cache/CacheModule.cpp @@ -3,5 +3,5 @@ #include "Castor3D/Cache/ShaderCache.hpp" #include "Castor3D/Cache/TargetCache.hpp" -CU_ImplementCUSmartPtr( castor3d, RenderTargetCache ) -CU_ImplementCUSmartPtr( castor3d, ShaderProgramCache ) +CU_ImplementSmartPtr( castor3d, RenderTargetCache ) +CU_ImplementSmartPtr( castor3d, ShaderProgramCache ) diff --git a/source/Core/Castor3D/Cache/GeometryCache.cpp b/source/Core/Castor3D/Cache/GeometryCache.cpp index 6dde8a8496..f028def69a 100644 --- a/source/Core/Castor3D/Cache/GeometryCache.cpp +++ b/source/Core/Castor3D/Cache/GeometryCache.cpp @@ -22,7 +22,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, GeometryCache ) +CU_ImplementSmartPtr( castor3d, GeometryCache ) namespace castor3d { @@ -70,7 +70,7 @@ namespace castor3d ? static_cast< AnimatedSkeleton * >( findAnimatedObject( scene, element.getName() + cuT( "_Skeleton" ) ) ) : nullptr; - if ( auto comp = submesh->getComponent< PassMasksComponent >() ) + if ( submesh->hasComponent( PassMasksComponent::Name ) ) { if ( auto pass = material->getPass( 0u ) ) { diff --git a/source/Core/Castor3D/Cache/LightCache.cpp b/source/Core/Castor3D/Cache/LightCache.cpp index 0bb6ac4ec3..1e1c7c0232 100644 --- a/source/Core/Castor3D/Cache/LightCache.cpp +++ b/source/Core/Castor3D/Cache/LightCache.cpp @@ -20,7 +20,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, LightCache ) +CU_ImplementSmartPtr( castor3d, LightCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/MaterialCache.cpp b/source/Core/Castor3D/Cache/MaterialCache.cpp index bf943a8e54..3d71c6f017 100644 --- a/source/Core/Castor3D/Cache/MaterialCache.cpp +++ b/source/Core/Castor3D/Cache/MaterialCache.cpp @@ -19,7 +19,7 @@ #include "Castor3D/Shader/Shaders/GlslMaterial.hpp" #include "Castor3D/Shader/Shaders/GlslTextureConfiguration.hpp" -CU_ImplementCUSmartPtr( castor3d, MaterialCache ) +CU_ImplementSmartPtr( castor3d, MaterialCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/OverlayCache.cpp b/source/Core/Castor3D/Cache/OverlayCache.cpp index d28fbd7dee..0d834d9dfe 100644 --- a/source/Core/Castor3D/Cache/OverlayCache.cpp +++ b/source/Core/Castor3D/Cache/OverlayCache.cpp @@ -9,7 +9,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, OverlayCache ) +CU_ImplementSmartPtr( castor3d, OverlayCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/PluginCache.cpp b/source/Core/Castor3D/Cache/PluginCache.cpp index 9713ba1433..6a72730737 100644 --- a/source/Core/Castor3D/Cache/PluginCache.cpp +++ b/source/Core/Castor3D/Cache/PluginCache.cpp @@ -14,7 +14,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PluginCache ) +CU_ImplementSmartPtr( castor3d, PluginCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/SceneNodeCache.cpp b/source/Core/Castor3D/Cache/SceneNodeCache.cpp index a54ab0706f..fe5c6e848a 100644 --- a/source/Core/Castor3D/Cache/SceneNodeCache.cpp +++ b/source/Core/Castor3D/Cache/SceneNodeCache.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Scene/SceneNode.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, SceneNodeCache ) +CU_ImplementSmartPtr( castor3d, SceneNodeCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Cache/ShaderCache.cpp b/source/Core/Castor3D/Cache/ShaderCache.cpp index 63794a71be..187c099d5f 100644 --- a/source/Core/Castor3D/Cache/ShaderCache.cpp +++ b/source/Core/Castor3D/Cache/ShaderCache.cpp @@ -131,7 +131,7 @@ namespace castor3d void ShaderProgramCache::doAddAutomaticProgram( ShaderProgramUPtr program , PipelineFlags const & flags ) { - m_autoGenerated.emplace_back( flags, program.get() ); + m_autoGenerated.push_back( { flags, program.get() } ); doAddProgram( std::move( program ) ); } diff --git a/source/Core/Castor3D/Cache/TextureCache.cpp b/source/Core/Castor3D/Cache/TextureCache.cpp index 8c9d42744b..87f0874f5f 100644 --- a/source/Core/Castor3D/Cache/TextureCache.cpp +++ b/source/Core/Castor3D/Cache/TextureCache.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, TextureUnitCache ) +CU_ImplementSmartPtr( castor3d, TextureUnitCache ) namespace castor3d { @@ -705,8 +705,7 @@ namespace castor3d if ( ires.second ) { it->second = castor::makeUnique< TextureUnitData >( resultSourceInfo - , resultPassConfig - , nullptr ); + , resultPassConfig ); auto result = it->second.get(); bool lhsAllowSRGB = checkFlag( lhsPassConfig.config.textureSpace, TextureSpace::eAllowSRGB ); bool rhsAllowSRGB = checkFlag( rhsPassConfig.config.textureSpace, TextureSpace::eAllowSRGB ); diff --git a/source/Core/Castor3D/Castor3DModule.cpp b/source/Core/Castor3D/Castor3DModule.cpp index 8ed04223d6..d459144627 100644 --- a/source/Core/Castor3D/Castor3DModule.cpp +++ b/source/Core/Castor3D/Castor3DModule.cpp @@ -8,7 +8,7 @@ #include CU_ImplementExportedOwnedBy( castor3d::Engine, Engine ) -CU_ImplementCUSmartPtr( castor3d, FramePassTimer ) +CU_ImplementSmartPtr( castor3d, FramePassTimer ) namespace castor3d { diff --git a/source/Core/Castor3D/Engine.cpp b/source/Core/Castor3D/Engine.cpp index e1440f43fb..be35724870 100644 --- a/source/Core/Castor3D/Engine.cpp +++ b/source/Core/Castor3D/Engine.cpp @@ -55,6 +55,8 @@ #include +CU_ImplementSmartPtr( castor3d, Engine ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Event/Frame/FrameEventModule.cpp b/source/Core/Castor3D/Event/Frame/FrameEventModule.cpp index 13ca454853..7d31dc934f 100644 --- a/source/Core/Castor3D/Event/Frame/FrameEventModule.cpp +++ b/source/Core/Castor3D/Event/Frame/FrameEventModule.cpp @@ -6,12 +6,12 @@ #include "Castor3D/Event/Frame/GpuFrameEvent.hpp" #include "Castor3D/Event/Frame/GpuFunctorEvent.hpp" -CU_ImplementCUSmartPtr( castor3d, CpuFrameEvent ) -CU_ImplementCUSmartPtr( castor3d, FrameListener ) -CU_ImplementCUSmartPtr( castor3d, FrameListenerCache ) -CU_ImplementCUSmartPtr( castor3d, GpuFrameEvent ) -CU_ImplementCUSmartPtr( castor3d, CpuFunctorEvent ) -CU_ImplementCUSmartPtr( castor3d, GpuFunctorEvent ) +CU_ImplementSmartPtr( castor3d, CpuFrameEvent ) +CU_ImplementSmartPtr( castor3d, FrameListener ) +CU_ImplementSmartPtr( castor3d, FrameListenerCache ) +CU_ImplementSmartPtr( castor3d, GpuFrameEvent ) +CU_ImplementSmartPtr( castor3d, CpuFunctorEvent ) +CU_ImplementSmartPtr( castor3d, GpuFunctorEvent ) namespace castor3d { diff --git a/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp b/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp index 3cce952e3d..d1c2ac92f7 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputEventModule.cpp @@ -6,11 +6,7 @@ #include "Castor3D/Event/UserInput/MouseEvent.hpp" #include "Castor3D/Event/UserInput/UserInputEvent.hpp" -CU_ImplementCUSmartPtr( castor3d, EventHandler ) -CU_ImplementCUSmartPtr( castor3d, HandlerEvent ) -CU_ImplementCUSmartPtr( castor3d, KeyboardEvent ) -CU_ImplementCUSmartPtr( castor3d, MouseEvent ) -CU_ImplementCUSmartPtr( castor3d, UserInputEvent ) +CU_ImplementSmartPtr( castor3d, EventHandler ) namespace castor3d { diff --git a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp index fc8a4af801..8ce320130b 100644 --- a/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp +++ b/source/Core/Castor3D/Event/UserInput/UserInputListener.cpp @@ -11,7 +11,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, UserInputListener ) +CU_ImplementSmartPtr( castor3d, UserInputListener ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp index b799333e1e..3221f42062 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlButton.cpp @@ -14,7 +14,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ButtonCtrl ) +CU_ImplementSmartPtr( castor3d, ButtonCtrl ) namespace castor3d { @@ -100,7 +100,7 @@ namespace castor3d { m_onEnable = {}; - if ( auto text = m_text ) + if ( m_text ) { if ( m_scene ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp index 18f961a5fb..2cfac302ce 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlComboBox.cpp @@ -13,7 +13,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ComboBoxCtrl ) +CU_ImplementSmartPtr( castor3d, ComboBoxCtrl ) namespace castor3d { @@ -108,7 +108,7 @@ namespace castor3d ComboBoxCtrl::~ComboBoxCtrl()noexcept { - if ( auto text = m_text ) + if ( m_text ) { if ( m_scene ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp index 63d36447a9..7f1179e507 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlControl.cpp @@ -13,7 +13,7 @@ #include "Castor3D/Overlay/TextOverlay.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, Control ) +CU_ImplementSmartPtr( castor3d, Control ) namespace castor3d { @@ -109,7 +109,7 @@ namespace castor3d Control::~Control()noexcept { - if ( auto overlay = m_background ) + if ( m_background ) { if ( m_scene ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp index 063260393f..7bb3f805b9 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlEdit.cpp @@ -13,7 +13,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, EditCtrl ) +CU_ImplementSmartPtr( castor3d, EditCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp b/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp index 12fb460a3b..b6595c8f82 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlExpandablePanel.cpp @@ -13,7 +13,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ExpandablePanelCtrl ) +CU_ImplementSmartPtr( castor3d, ExpandablePanelCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp b/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp index fa497af2d8..ee5a437cfb 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlFrame.cpp @@ -13,7 +13,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, FrameCtrl ) +CU_ImplementSmartPtr( castor3d, FrameCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp b/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp index fe09b305a0..5e5c937c44 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlLayoutControl.cpp @@ -13,7 +13,7 @@ #include "Castor3D/Overlay/TextOverlay.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, LayoutControl ) +CU_ImplementSmartPtr( castor3d, LayoutControl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp b/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp index 39707e004f..5f729879f6 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlListBox.cpp @@ -16,7 +16,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ListBoxCtrl ) +CU_ImplementSmartPtr( castor3d, ListBoxCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlPanel.cpp b/source/Core/Castor3D/Gui/Controls/CtrlPanel.cpp index 96f8374027..73a5cc4e2e 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlPanel.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlPanel.cpp @@ -11,7 +11,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PanelCtrl ) +CU_ImplementSmartPtr( castor3d, PanelCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp index 2e0ef2d3d9..fa9cca786e 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlProgress.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ProgressCtrl ) +CU_ImplementSmartPtr( castor3d, ProgressCtrl ) namespace castor3d { @@ -84,7 +84,7 @@ namespace castor3d ProgressCtrl::~ProgressCtrl()noexcept { - if ( auto overlay = m_text ) + if ( m_text ) { if ( m_scene ) { @@ -100,7 +100,7 @@ namespace castor3d manager.unregisterControl( *m_progress ); manager.unregisterControl( *m_container ); - if ( auto overlay = m_title ) + if ( m_title ) { if ( m_scene ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp index b4628099bb..d5fb3428ae 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollBar.cpp @@ -14,7 +14,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ScrollBarCtrl ) +CU_ImplementSmartPtr( castor3d, ScrollBarCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp index d2b551baca..186af63317 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlScrollable.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ScrollableCtrl ) +CU_ImplementSmartPtr( castor3d, ScrollableCtrl ) namespace castor3d { @@ -82,7 +82,7 @@ namespace castor3d ScrollableCtrl::~ScrollableCtrl()noexcept { - if ( auto overlay = m_corner ) + if ( m_corner ) { if ( m_target.hasScene() ) { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp b/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp index bb72966acb..fa707b55a9 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlSlider.cpp @@ -9,7 +9,7 @@ #include "Castor3D/Overlay/BorderPanelOverlay.hpp" #include "Castor3D/Overlay/Overlay.hpp" -CU_ImplementCUSmartPtr( castor3d, SliderCtrl ) +CU_ImplementSmartPtr( castor3d, SliderCtrl ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp index cfe4719d0a..452cdb46de 100644 --- a/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp +++ b/source/Core/Castor3D/Gui/Controls/CtrlStatic.cpp @@ -11,7 +11,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, StaticCtrl ) +CU_ImplementSmartPtr( castor3d, StaticCtrl ) namespace castor3d { @@ -75,7 +75,7 @@ namespace castor3d StaticCtrl::~StaticCtrl()noexcept { - if ( auto overlay = m_text ) + if ( m_text ) { if ( m_scene ) { diff --git a/source/Core/Castor3D/Gui/ControlsManager.cpp b/source/Core/Castor3D/Gui/ControlsManager.cpp index 62e7c22e50..0dbbe70d67 100644 --- a/source/Core/Castor3D/Gui/ControlsManager.cpp +++ b/source/Core/Castor3D/Gui/ControlsManager.cpp @@ -28,7 +28,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, ControlsManager ) +CU_ImplementSmartPtr( castor3d, ControlsManager ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/GuiModule.cpp b/source/Core/Castor3D/Gui/GuiModule.cpp index 61e1e5e91c..159e0592fd 100644 --- a/source/Core/Castor3D/Gui/GuiModule.cpp +++ b/source/Core/Castor3D/Gui/GuiModule.cpp @@ -26,21 +26,21 @@ #include -CU_ImplementCUSmartPtr( castor3d, StylesHolder ) -CU_ImplementCUSmartPtr( castor3d, Theme ) -CU_ImplementCUSmartPtr( castor3d, ControlStyle ) -CU_ImplementCUSmartPtr( castor3d, ButtonStyle ) -CU_ImplementCUSmartPtr( castor3d, ComboBoxStyle ) -CU_ImplementCUSmartPtr( castor3d, EditStyle ) -CU_ImplementCUSmartPtr( castor3d, ExpandablePanelStyle ) -CU_ImplementCUSmartPtr( castor3d, FrameStyle ) -CU_ImplementCUSmartPtr( castor3d, ListBoxStyle ) -CU_ImplementCUSmartPtr( castor3d, PanelStyle ) -CU_ImplementCUSmartPtr( castor3d, ProgressStyle ) -CU_ImplementCUSmartPtr( castor3d, ScrollableStyle ) -CU_ImplementCUSmartPtr( castor3d, ScrollBarStyle ) -CU_ImplementCUSmartPtr( castor3d, SliderStyle ) -CU_ImplementCUSmartPtr( castor3d, StaticStyle ) +CU_ImplementSmartPtr( castor3d, StylesHolder ) +CU_ImplementSmartPtr( castor3d, Theme ) +CU_ImplementSmartPtr( castor3d, ControlStyle ) +CU_ImplementSmartPtr( castor3d, ButtonStyle ) +CU_ImplementSmartPtr( castor3d, ComboBoxStyle ) +CU_ImplementSmartPtr( castor3d, EditStyle ) +CU_ImplementSmartPtr( castor3d, ExpandablePanelStyle ) +CU_ImplementSmartPtr( castor3d, FrameStyle ) +CU_ImplementSmartPtr( castor3d, ListBoxStyle ) +CU_ImplementSmartPtr( castor3d, PanelStyle ) +CU_ImplementSmartPtr( castor3d, ProgressStyle ) +CU_ImplementSmartPtr( castor3d, ScrollableStyle ) +CU_ImplementSmartPtr( castor3d, ScrollBarStyle ) +CU_ImplementSmartPtr( castor3d, SliderStyle ) +CU_ImplementSmartPtr( castor3d, StaticStyle ) namespace castor3d { diff --git a/source/Core/Castor3D/Gui/Gui_Parsers.cpp b/source/Core/Castor3D/Gui/Gui_Parsers.cpp index e79c96e03d..5d2313829d 100644 --- a/source/Core/Castor3D/Gui/Gui_Parsers.cpp +++ b/source/Core/Castor3D/Gui/Gui_Parsers.cpp @@ -474,7 +474,7 @@ namespace castor3d { bool value; params[0]->get( value ); - guiContext.edit->addFlag( EditFlag::eMultiline/* + edit->addFlag( EditFlag::eMultiline/* | EditFlag::eProcessEnter | EditFlag::eProcessTab*/ ); } diff --git a/source/Core/Castor3D/Gui/Layout/Layout.cpp b/source/Core/Castor3D/Gui/Layout/Layout.cpp index 2ec06c056c..6253a3478b 100644 --- a/source/Core/Castor3D/Gui/Layout/Layout.cpp +++ b/source/Core/Castor3D/Gui/Layout/Layout.cpp @@ -3,8 +3,8 @@ #include "Castor3D/Event/Frame/CpuFunctorEvent.hpp" #include "Castor3D/Gui/Controls/CtrlLayoutControl.hpp" -CU_ImplementCUSmartPtr( castor3d, Layout ) -CU_ImplementCUSmartPtr( castor3d, Spacer ) +CU_ImplementSmartPtr( castor3d, Layout ) +CU_ImplementSmartPtr( castor3d, Spacer ) namespace castor3d { diff --git a/source/Core/Castor3D/ImporterFile.cpp b/source/Core/Castor3D/ImporterFile.cpp index 453decd763..dbe2f8e4fe 100644 --- a/source/Core/Castor3D/ImporterFile.cpp +++ b/source/Core/Castor3D/ImporterFile.cpp @@ -3,7 +3,8 @@ #include "Castor3D/Binary/CmshImporter.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, ImporterFileFactory ) +CU_ImplementSmartPtr( castor3d, ImporterFile ) +CU_ImplementSmartPtr( castor3d, ImporterFileFactory ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Material.cpp b/source/Core/Castor3D/Material/Material.cpp index 4c34afcf2a..1201159f45 100644 --- a/source/Core/Castor3D/Material/Material.cpp +++ b/source/Core/Castor3D/Material/Material.cpp @@ -7,7 +7,7 @@ #include "Castor3D/Material/Pass/PassFactory.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, Material ) +CU_ImplementSmartPtr( castor3d, Material ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/MaterialImporter.cpp b/source/Core/Castor3D/Material/MaterialImporter.cpp index 44559e86cb..dd7203b6ce 100644 --- a/source/Core/Castor3D/Material/MaterialImporter.cpp +++ b/source/Core/Castor3D/Material/MaterialImporter.cpp @@ -10,6 +10,8 @@ #include +CU_ImplementSmartPtr( castor3d, MaterialImporter ) + namespace castor3d { namespace matimp diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/BlendComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/BlendComponent.cpp index eb398e4cd1..8c99d8a338 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/BlendComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/BlendComponent.cpp @@ -10,6 +10,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, BlendComponent ) + namespace castor { template<> @@ -117,9 +119,9 @@ namespace castor3d PassComponentUPtr BlendComponent::doClone( Pass & pass )const { - auto result = std::make_unique< BlendComponent >( pass ); + auto result = castor::makeUnique< BlendComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool BlendComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/FractalMappingComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/FractalMappingComponent.cpp index 41064db915..927f96d017 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/FractalMappingComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/FractalMappingComponent.cpp @@ -10,6 +10,8 @@ #include +CU_ImplementSmartPtr( castor3d, FractalMappingComponent ) + namespace castor { template<> @@ -228,9 +230,9 @@ namespace castor3d PassComponentUPtr FractalMappingComponent::doClone( Pass & pass )const { - auto result = std::make_unique< FractalMappingComponent >( pass ); + auto result = castor::makeUnique< FractalMappingComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool FractalMappingComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/NormalComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/NormalComponent.cpp index 3ba0f75e23..85c013455f 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/NormalComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/NormalComponent.cpp @@ -12,6 +12,8 @@ #include +CU_ImplementSmartPtr( castor3d, NormalComponent ) + namespace castor3d { //********************************************************************************************* @@ -83,7 +85,8 @@ namespace castor3d PassComponentUPtr NormalComponent::doClone( Pass & pass )const { - return std::make_unique< NormalComponent >( pass ); + auto result = castor::makeUnique< NormalComponent >( pass ); + return castor::ptrRefCast< PassComponent >( result ); } //********************************************************************************************* diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/PassHeaderComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/PassHeaderComponent.cpp index 8dbaade148..276685200e 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/PassHeaderComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/PassHeaderComponent.cpp @@ -10,6 +10,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, PassHeaderComponent ) + namespace castor { template<> @@ -117,9 +119,9 @@ namespace castor3d PassComponentUPtr PassHeaderComponent::doClone( Pass & pass )const { - auto result = std::make_unique< PassHeaderComponent >( pass ); + auto result = castor::makeUnique< PassHeaderComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool PassHeaderComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/PickableComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/PickableComponent.cpp index b508f3a67c..cbed628fb0 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/PickableComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/PickableComponent.cpp @@ -7,6 +7,8 @@ #include +CU_ImplementSmartPtr( castor3d, PickableComponent ) + namespace castor { template<> @@ -80,9 +82,9 @@ namespace castor3d PassComponentUPtr PickableComponent::doClone( Pass & pass )const { - auto result = std::make_unique< PickableComponent >( pass ); + auto result = castor::makeUnique< PickableComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool PickableComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/TextureCountComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/TextureCountComponent.cpp index 8ece04e869..b9bf9ea4d8 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/TextureCountComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/TextureCountComponent.cpp @@ -10,6 +10,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, TextureCountComponent ) + namespace castor3d { //********************************************************************************************* @@ -57,7 +59,7 @@ namespace castor3d PassComponentUPtr TextureCountComponent::doClone( Pass & pass )const { - return std::make_unique< TextureCountComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, TextureCountComponent >( pass ); } void TextureCountComponent::doFillBuffer( PassBuffer & buffer )const diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/TexturesComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/TexturesComponent.cpp index 37841d6e8b..d1fc8e95bd 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/TexturesComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/TexturesComponent.cpp @@ -12,6 +12,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, TexturesComponent ) + namespace castor3d { //********************************************************************************************* @@ -292,7 +294,7 @@ namespace castor3d PassComponentUPtr TexturesComponent::doClone( Pass & pass )const { - return std::make_unique< TexturesComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, TexturesComponent >( pass ); } void TexturesComponent::doFillBuffer( PassBuffer & buffer )const diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/TwoSidedComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/TwoSidedComponent.cpp index 64ce317b53..39e4ad9791 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/TwoSidedComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/TwoSidedComponent.cpp @@ -7,6 +7,8 @@ #include +CU_ImplementSmartPtr( castor3d, TwoSidedComponent ) + namespace castor { template<> @@ -80,9 +82,9 @@ namespace castor3d PassComponentUPtr TwoSidedComponent::doClone( Pass & pass )const { - auto result = std::make_unique< TwoSidedComponent >( pass ); + auto result = castor::makeUnique< TwoSidedComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool TwoSidedComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Base/UntileMappingComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Base/UntileMappingComponent.cpp index 4704b83804..b74a67cc3f 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Base/UntileMappingComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Base/UntileMappingComponent.cpp @@ -9,6 +9,8 @@ #include +CU_ImplementSmartPtr( castor3d, UntileMappingComponent ) + namespace castor { template<> @@ -181,9 +183,9 @@ namespace castor3d PassComponentUPtr UntileMappingComponent::doClone( Pass & pass )const { - auto result = std::make_unique< UntileMappingComponent >( pass ); + auto result = castor::makeUnique< UntileMappingComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool UntileMappingComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/AmbientComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/AmbientComponent.cpp index 62213152b3..26e60e1bdf 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/AmbientComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/AmbientComponent.cpp @@ -11,6 +11,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, AmbientComponent ) + namespace castor { template<> @@ -196,9 +198,9 @@ namespace castor3d PassComponentUPtr AmbientComponent::doClone( Pass & pass )const { - auto result = std::make_unique< AmbientComponent >( pass ); + auto result = castor::makeUnique< AmbientComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool AmbientComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/AttenuationComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/AttenuationComponent.cpp index 18150a1d8a..c5f5fa43ac 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/AttenuationComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/AttenuationComponent.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, AttenuationComponent ) + namespace castor { template<> @@ -209,9 +211,9 @@ namespace castor3d PassComponentUPtr AttenuationComponent::doClone( Pass & pass )const { - auto result = std::make_unique< AttenuationComponent >( pass ); + auto result = castor::makeUnique< AttenuationComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool AttenuationComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/ClearcoatComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/ClearcoatComponent.cpp index 067cfe5392..994876f106 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/ClearcoatComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/ClearcoatComponent.cpp @@ -15,6 +15,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, ClearcoatComponent ) + namespace castor { template<> @@ -239,9 +241,9 @@ namespace castor3d PassComponentUPtr ClearcoatComponent::doClone( Pass & pass )const { - auto result = std::make_unique< ClearcoatComponent >( pass ); + auto result = castor::makeUnique< ClearcoatComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool ClearcoatComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/EmissiveComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/EmissiveComponent.cpp index 7b057cb108..23d7238f54 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/EmissiveComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/EmissiveComponent.cpp @@ -11,6 +11,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, EmissiveComponent ) + namespace castor { template<> @@ -196,9 +198,9 @@ namespace castor3d PassComponentUPtr EmissiveComponent::doClone( Pass & pass )const { - auto result = std::make_unique< EmissiveComponent >( pass ); + auto result = castor::makeUnique< EmissiveComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool EmissiveComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/IridescenceComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/IridescenceComponent.cpp index 805d872de1..0cc5cee5ab 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/IridescenceComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/IridescenceComponent.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, IridescenceComponent ) + namespace castor { template<> @@ -332,9 +334,9 @@ namespace castor3d PassComponentUPtr IridescenceComponent::doClone( Pass & pass )const { - auto result = std::make_unique< IridescenceComponent >( pass ); + auto result = castor::makeUnique< IridescenceComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool IridescenceComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/LightingModelComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/LightingModelComponent.cpp index 7dd74dc8df..2d884d4f04 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/LightingModelComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/LightingModelComponent.cpp @@ -17,6 +17,8 @@ #include +CU_ImplementSmartPtr( castor3d, LightingModelComponent ) + namespace castor { template<> @@ -153,9 +155,9 @@ namespace castor3d PassComponentUPtr LightingModelComponent::doClone( Pass & pass )const { - auto result = std::make_unique< LightingModelComponent >( pass ); + auto result = castor::makeUnique< LightingModelComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool LightingModelComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/MetalnessComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/MetalnessComponent.cpp index 77ca4a5f7c..db1cb577fe 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/MetalnessComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/MetalnessComponent.cpp @@ -14,6 +14,8 @@ #include +CU_ImplementSmartPtr( castor3d, MetalnessComponent ) + namespace castor { template<> @@ -209,9 +211,9 @@ namespace castor3d PassComponentUPtr MetalnessComponent::doClone( Pass & pass )const { - auto result = std::make_unique< MetalnessComponent >( pass ); - result->m_value = m_value; - return result; + auto result = castor::makeUnique< MetalnessComponent >( pass ); + result->setData( getData() ); + return castor::ptrRefCast< PassComponent >( result ); } bool MetalnessComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/RoughnessComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/RoughnessComponent.cpp index 70c56dd8e1..6750dd5391 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/RoughnessComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/RoughnessComponent.cpp @@ -13,6 +13,8 @@ #include +CU_ImplementSmartPtr( castor3d, RoughnessComponent ) + namespace castor { template<> @@ -258,9 +260,9 @@ namespace castor3d PassComponentUPtr RoughnessComponent::doClone( Pass & pass )const { - auto result = std::make_unique< RoughnessComponent >( pass ); + auto result = castor::makeUnique< RoughnessComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool RoughnessComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/SheenComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/SheenComponent.cpp index f425bb569e..c724769956 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/SheenComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/SheenComponent.cpp @@ -15,6 +15,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, SheenComponent ) + namespace castor { template<> @@ -205,9 +207,9 @@ namespace castor3d PassComponentUPtr SheenComponent::doClone( Pass & pass )const { - auto result = std::make_unique< SheenComponent >( pass ); + auto result = castor::makeUnique< SheenComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool SheenComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/SpecularComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/SpecularComponent.cpp index 76bf50d272..c42018372a 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/SpecularComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/SpecularComponent.cpp @@ -20,6 +20,8 @@ //************************************************************************************************* +CU_ImplementSmartPtr( castor3d, SpecularComponent ) + namespace castor { template<> @@ -198,9 +200,9 @@ namespace castor3d PassComponentUPtr SpecularComponent::doClone( Pass & pass )const { - auto result = std::make_unique< SpecularComponent >( pass ); - result->m_value = m_value; - return result; + auto result = castor::makeUnique< SpecularComponent >( pass ); + result->setData( getData() ); + return castor::ptrRefCast< PassComponent >( result ); } bool SpecularComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/SubsurfaceScatteringComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/SubsurfaceScatteringComponent.cpp index dc5ecda1be..bb5b4a41ba 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/SubsurfaceScatteringComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/SubsurfaceScatteringComponent.cpp @@ -14,6 +14,8 @@ #include +CU_ImplementSmartPtr( castor3d, SubsurfaceScatteringComponent ) + namespace castor { template<> @@ -78,7 +80,7 @@ namespace castor3d } else { - parsingContext.subsurfaceScattering = std::make_unique< SubsurfaceScattering >(); + parsingContext.subsurfaceScattering = castor::makeUnique< SubsurfaceScattering >(); } } CU_EndAttributePush( Section::eSubsurfaceScattering ) @@ -371,13 +373,14 @@ namespace castor3d PassComponentUPtr SubsurfaceScatteringComponent::doClone( Pass & pass )const { auto & subsurfaceScattering = getSubsurfaceScattering(); - auto result = std::make_unique< SubsurfaceScatteringComponent >( pass ); - auto sss = std::make_unique< SubsurfaceScattering >(); + auto sss = castor::makeUnique< SubsurfaceScattering >(); sss->setGaussianWidth( subsurfaceScattering.getGaussianWidth() ); sss->setStrength( subsurfaceScattering.getStrength() ); sss->setSubsurfaceRadius( subsurfaceScattering.getSubsurfaceRadius() ); + + auto result = castor::makeUnique< SubsurfaceScatteringComponent >( pass ); result->setSubsurfaceScattering( std::move( sss ) ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool SubsurfaceScatteringComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/ThicknessComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/ThicknessComponent.cpp index 46da3808e2..25c756b77c 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/ThicknessComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/ThicknessComponent.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, ThicknessComponent ) + namespace castor { template<> @@ -172,9 +174,9 @@ namespace castor3d PassComponentUPtr ThicknessComponent::doClone( Pass & pass )const { - auto result = std::make_unique< ThicknessComponent >( pass ); + auto result = castor::makeUnique< ThicknessComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool ThicknessComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Lighting/TransmissionComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Lighting/TransmissionComponent.cpp index eefb003dec..fc2976ed66 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Lighting/TransmissionComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Lighting/TransmissionComponent.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, TransmissionComponent ) + namespace castor { template<> @@ -190,9 +192,9 @@ namespace castor3d PassComponentUPtr TransmissionComponent::doClone( Pass & pass )const { - auto result = std::make_unique< TransmissionComponent >( pass ); + auto result = castor::makeUnique< TransmissionComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool TransmissionComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/AttenuationMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/AttenuationMapComponent.cpp index 3ea78c3bca..f74634b56b 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/AttenuationMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/AttenuationMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, AttenuationMapComponent ) + namespace castor { template<> @@ -161,7 +163,7 @@ namespace castor3d void AttenuationMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< AttenuationMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, AttenuationMapComponent >( pass ) ); } bool AttenuationMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -187,7 +189,7 @@ namespace castor3d PassComponentUPtr AttenuationMapComponent::doClone( Pass & pass )const { - return std::make_unique< AttenuationMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, AttenuationMapComponent >( pass ); } void AttenuationMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatMapComponent.cpp index f9d88df959..4dac12cd6d 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, ClearcoatMapComponent ) + namespace castor { template<> @@ -160,7 +162,7 @@ namespace castor3d void ClearcoatMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< ClearcoatMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, ClearcoatMapComponent >( pass ) ); } bool ClearcoatMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -186,7 +188,7 @@ namespace castor3d PassComponentUPtr ClearcoatMapComponent::doClone( Pass & pass )const { - return std::make_unique< ClearcoatMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, ClearcoatMapComponent >( pass ); } void ClearcoatMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatNormalMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatNormalMapComponent.cpp index 7d193e255f..2df523333c 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatNormalMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatNormalMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, ClearcoatNormalMapComponent ) + namespace castor { template<> @@ -165,7 +167,7 @@ namespace castor3d void ClearcoatNormalMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< ClearcoatNormalMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, ClearcoatNormalMapComponent >( pass ) ); } bool ClearcoatNormalMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -191,7 +193,7 @@ namespace castor3d PassComponentUPtr ClearcoatNormalMapComponent::doClone( Pass & pass )const { - return std::make_unique< ClearcoatNormalMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, ClearcoatNormalMapComponent >( pass ); } void ClearcoatNormalMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatRoughnessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatRoughnessMapComponent.cpp index c1aebba267..8a6252a987 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatRoughnessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/ClearcoatRoughnessMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, ClearcoatRoughnessMapComponent ) + namespace castor { template<> @@ -159,7 +161,7 @@ namespace castor3d void ClearcoatRoughnessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< ClearcoatRoughnessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, ClearcoatRoughnessMapComponent >( pass ) ); } bool ClearcoatRoughnessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -185,7 +187,7 @@ namespace castor3d PassComponentUPtr ClearcoatRoughnessMapComponent::doClone( Pass & pass )const { - return std::make_unique< ClearcoatRoughnessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, ClearcoatRoughnessMapComponent >( pass ); } void ClearcoatRoughnessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/ColourMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/ColourMapComponent.cpp index 16d7ad6af0..d40d3ef1d3 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/ColourMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/ColourMapComponent.cpp @@ -16,6 +16,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, ColourMapComponent ) + namespace castor { template<> @@ -204,7 +206,7 @@ namespace castor3d void ColourMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< ColourMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, ColourMapComponent >( pass ) ); } //********************************************************************************************* @@ -222,7 +224,7 @@ namespace castor3d PassComponentUPtr ColourMapComponent::doClone( Pass & pass )const { - return std::make_unique< ColourMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, ColourMapComponent >( pass ); } void ColourMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/EmissiveMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/EmissiveMapComponent.cpp index 9ca108dc34..ccb4627314 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/EmissiveMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/EmissiveMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, EmissiveMapComponent ) + namespace castor { template<> @@ -154,7 +156,7 @@ namespace castor3d void EmissiveMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< EmissiveMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, EmissiveMapComponent >( pass ) ); } bool EmissiveMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -180,7 +182,7 @@ namespace castor3d PassComponentUPtr EmissiveMapComponent::doClone( Pass & pass )const { - return std::make_unique< EmissiveMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, EmissiveMapComponent >( pass ); } void EmissiveMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/GlossinessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/GlossinessMapComponent.cpp index 77a035ba56..f90c5e73a9 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/GlossinessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/GlossinessMapComponent.cpp @@ -22,6 +22,8 @@ //************************************************************************************************* +CU_ImplementSmartPtr( castor3d, GlossinessMapComponent ) + namespace castor { template<> @@ -188,7 +190,7 @@ namespace castor3d void GlossinessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< GlossinessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, GlossinessMapComponent >( pass ) ); } bool GlossinessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -219,7 +221,7 @@ namespace castor3d PassComponentUPtr GlossinessMapComponent::doClone( Pass & pass )const { - return std::make_unique< GlossinessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, GlossinessMapComponent >( pass ); } void GlossinessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/HeightMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/HeightMapComponent.cpp index d4e3b31a43..c58dffb448 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/HeightMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/HeightMapComponent.cpp @@ -17,6 +17,8 @@ #include +CU_ImplementSmartPtr( castor3d, HeightMapComponent ) + namespace castor { template<> @@ -543,7 +545,7 @@ namespace castor3d void HeightMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< HeightMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, HeightMapComponent >( pass ) ); } bool HeightMapComponent::Plugin::hasTexcoordModif( PassComponentRegister const & passComponents @@ -577,7 +579,7 @@ namespace castor3d PassComponentUPtr HeightMapComponent::doClone( Pass & pass )const { - return std::make_unique< HeightMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, HeightMapComponent >( pass ); } void HeightMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceMapComponent.cpp index 8c7f652c22..e0283c34b3 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, IridescenceMapComponent ) + namespace castor { template<> @@ -161,7 +163,7 @@ namespace castor3d void IridescenceMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< IridescenceMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, IridescenceMapComponent >( pass ) ); } bool IridescenceMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -187,7 +189,7 @@ namespace castor3d PassComponentUPtr IridescenceMapComponent::doClone( Pass & pass )const { - return std::make_unique< IridescenceMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, IridescenceMapComponent >( pass ); } void IridescenceMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceThicknessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceThicknessMapComponent.cpp index b7ed6135ad..0787ae4eda 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceThicknessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/IridescenceThicknessMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, IridescenceThicknessMapComponent ) + namespace castor { template<> @@ -165,7 +167,7 @@ namespace castor3d void IridescenceThicknessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< IridescenceThicknessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, IridescenceThicknessMapComponent >( pass ) ); } bool IridescenceThicknessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -191,7 +193,7 @@ namespace castor3d PassComponentUPtr IridescenceThicknessMapComponent::doClone( Pass & pass )const { - return std::make_unique< IridescenceThicknessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, IridescenceThicknessMapComponent >( pass ); } void IridescenceThicknessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/MetalnessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/MetalnessMapComponent.cpp index d51d9e00e1..d7dafa41ab 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/MetalnessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/MetalnessMapComponent.cpp @@ -17,6 +17,8 @@ #include +CU_ImplementSmartPtr( castor3d, MetalnessMapComponent ) + namespace castor { template<> @@ -156,7 +158,7 @@ namespace castor3d void MetalnessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< MetalnessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, MetalnessMapComponent >( pass ) ); } bool MetalnessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -196,7 +198,7 @@ namespace castor3d PassComponentUPtr MetalnessMapComponent::doClone( Pass & pass )const { - return std::make_unique< MetalnessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, MetalnessMapComponent >( pass ); } void MetalnessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/NormalMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/NormalMapComponent.cpp index 9e535d5dd8..73ced022c8 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/NormalMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/NormalMapComponent.cpp @@ -16,6 +16,8 @@ #include +CU_ImplementSmartPtr( castor3d, NormalMapComponent ) + namespace castor { template<> @@ -246,7 +248,7 @@ namespace castor3d void NormalMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< NormalMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, NormalMapComponent >( pass ) ); } bool NormalMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -272,7 +274,7 @@ namespace castor3d PassComponentUPtr NormalMapComponent::doClone( Pass & pass )const { - return std::make_unique< NormalMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, NormalMapComponent >( pass ); } void NormalMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/OcclusionMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/OcclusionMapComponent.cpp index 6f426a0538..c4e8cbd62d 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/OcclusionMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/OcclusionMapComponent.cpp @@ -14,6 +14,8 @@ #include +CU_ImplementSmartPtr( castor3d, OcclusionMapComponent ) + namespace castor { template<> @@ -193,7 +195,7 @@ namespace castor3d void OcclusionMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< OcclusionMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, OcclusionMapComponent >( pass ) ); } bool OcclusionMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -215,7 +217,7 @@ namespace castor3d PassComponentUPtr OcclusionMapComponent::doClone( Pass & pass )const { - return std::make_unique< OcclusionMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, OcclusionMapComponent >( pass ); } void OcclusionMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/OpacityMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/OpacityMapComponent.cpp index 8b28f00ac2..b55d73628b 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/OpacityMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/OpacityMapComponent.cpp @@ -17,6 +17,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, OpacityMapComponent ) + namespace castor { template<> @@ -155,7 +157,7 @@ namespace castor3d void OpacityMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< OpacityMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, OpacityMapComponent >( pass ) ); } bool OpacityMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -181,7 +183,7 @@ namespace castor3d PassComponentUPtr OpacityMapComponent::doClone( Pass & pass )const { - return std::make_unique< OpacityMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, OpacityMapComponent >( pass ); } void OpacityMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/RoughnessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/RoughnessMapComponent.cpp index 68f7d1c541..0ccf148fca 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/RoughnessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/RoughnessMapComponent.cpp @@ -16,6 +16,8 @@ #include +CU_ImplementSmartPtr( castor3d, RoughnessMapComponent ) + namespace castor { template<> @@ -155,7 +157,7 @@ namespace castor3d void RoughnessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< RoughnessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, RoughnessMapComponent >( pass ) ); } bool RoughnessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -181,7 +183,7 @@ namespace castor3d PassComponentUPtr RoughnessMapComponent::doClone( Pass & pass )const { - return std::make_unique< RoughnessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, RoughnessMapComponent >( pass ); } void RoughnessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/SheenMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/SheenMapComponent.cpp index 87a26475a2..2498d78d11 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/SheenMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/SheenMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, SheenMapComponent ) + namespace castor { template<> @@ -159,7 +161,7 @@ namespace castor3d void SheenMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< SheenMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, SheenMapComponent >( pass ) ); } bool SheenMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -185,7 +187,7 @@ namespace castor3d PassComponentUPtr SheenMapComponent::doClone( Pass & pass )const { - return std::make_unique< SheenMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, SheenMapComponent >( pass ); } void SheenMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/SheenRoughnessMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/SheenRoughnessMapComponent.cpp index 046f4175b8..6c34646ed2 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/SheenRoughnessMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/SheenRoughnessMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, SheenRoughnessMapComponent ) + namespace castor { template<> @@ -159,7 +161,7 @@ namespace castor3d void SheenRoughnessMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< SheenRoughnessMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, SheenRoughnessMapComponent >( pass ) ); } bool SheenRoughnessMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -185,7 +187,7 @@ namespace castor3d PassComponentUPtr SheenRoughnessMapComponent::doClone( Pass & pass )const { - return std::make_unique< SheenRoughnessMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, SheenRoughnessMapComponent >( pass ); } void SheenRoughnessMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/SpecularMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/SpecularMapComponent.cpp index aa6e32f8be..432eba0e19 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/SpecularMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/SpecularMapComponent.cpp @@ -20,6 +20,8 @@ //************************************************************************************************* +CU_ImplementSmartPtr( castor3d, SpecularMapComponent ) + namespace castor { template<> @@ -158,7 +160,7 @@ namespace castor3d void SpecularMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< SpecularMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, SpecularMapComponent >( pass ) ); } bool SpecularMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -199,7 +201,7 @@ namespace castor3d PassComponentUPtr SpecularMapComponent::doClone( Pass & pass )const { - return std::make_unique< SpecularMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, SpecularMapComponent >( pass ); } void SpecularMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/TransmissionMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/TransmissionMapComponent.cpp index 8c4844441c..943ac983f3 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/TransmissionMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/TransmissionMapComponent.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d, TransmissionMapComponent ) + namespace castor { template<> @@ -160,7 +162,7 @@ namespace castor3d void TransmissionMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< TransmissionMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, TransmissionMapComponent >( pass ) ); } bool TransmissionMapComponent::Plugin::doWriteTextureConfig( TextureConfiguration const & configuration @@ -186,7 +188,7 @@ namespace castor3d PassComponentUPtr TransmissionMapComponent::doClone( Pass & pass )const { - return std::make_unique< TransmissionMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, TransmissionMapComponent >( pass ); } void TransmissionMapComponent::doFillConfig( TextureConfiguration & configuration diff --git a/source/Core/Castor3D/Material/Pass/Component/Map/TransmittanceMapComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Map/TransmittanceMapComponent.cpp index 545bd5b702..5c9f3f9208 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Map/TransmittanceMapComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Map/TransmittanceMapComponent.cpp @@ -14,6 +14,8 @@ #include +CU_ImplementSmartPtr( castor3d, TransmittanceMapComponent ) + namespace castor { template<> @@ -219,7 +221,7 @@ namespace castor3d void TransmittanceMapComponent::Plugin::createMapComponent( Pass & pass , std::vector< PassComponentUPtr > & result )const { - result.push_back( std::make_unique< TransmittanceMapComponent >( pass ) ); + result.push_back( castor::makeUniqueDerived< PassComponent, TransmittanceMapComponent >( pass ) ); } void TransmittanceMapComponent::Plugin::zeroBuffer( Pass const & pass @@ -250,7 +252,7 @@ namespace castor3d PassComponentUPtr TransmittanceMapComponent::doClone( Pass & pass )const { - return std::make_unique< TransmittanceMapComponent >( pass ); + return castor::makeUniqueDerived< PassComponent, TransmittanceMapComponent >( pass ); } bool TransmittanceMapComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/AlphaTestComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/AlphaTestComponent.cpp index 18eca29909..60e3f39310 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/AlphaTestComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/AlphaTestComponent.cpp @@ -12,6 +12,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, AlphaTestComponent ) + namespace castor { template<> @@ -220,9 +222,9 @@ namespace castor3d PassComponentUPtr AlphaTestComponent::doClone( Pass & pass )const { - auto result = std::make_unique< AlphaTestComponent >( pass ); + auto result = castor::makeUnique< AlphaTestComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool AlphaTestComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/ColourComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/ColourComponent.cpp index 4abe8e1355..f988775199 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/ColourComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/ColourComponent.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, ColourComponent ) + namespace castor { template<> @@ -224,9 +226,9 @@ namespace castor3d PassComponentUPtr ColourComponent::doClone( Pass & pass )const { - auto result = std::make_unique< ColourComponent >( pass ); + auto result = castor::makeUnique< ColourComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool ColourComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/HeightComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/HeightComponent.cpp index 0270dda4e0..8439369f7d 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/HeightComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/HeightComponent.cpp @@ -11,6 +11,8 @@ #include +CU_ImplementSmartPtr( castor3d, HeightComponent ) + namespace castor { template<> @@ -149,9 +151,9 @@ namespace castor3d PassComponentUPtr HeightComponent::doClone( Pass & pass )const { - auto result = std::make_unique< HeightComponent >( pass ); + auto result = castor::makeUnique< HeightComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool HeightComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/OpacityComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/OpacityComponent.cpp index 5e00042849..88da1fbfa4 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/OpacityComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/OpacityComponent.cpp @@ -14,6 +14,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, OpacityComponent ) + namespace castor { template<> @@ -254,9 +256,9 @@ namespace castor3d PassComponentUPtr OpacityComponent::doClone( Pass & pass )const { - auto result = std::make_unique< OpacityComponent >( pass ); + auto result = castor::makeUnique< OpacityComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool OpacityComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/ReflectionComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/ReflectionComponent.cpp index 62fa8ab220..10f97de610 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/ReflectionComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/ReflectionComponent.cpp @@ -9,6 +9,8 @@ #include +CU_ImplementSmartPtr( castor3d, ReflectionComponent ) + namespace castor { template<> @@ -165,9 +167,9 @@ namespace castor3d PassComponentUPtr ReflectionComponent::doClone( Pass & pass )const { - auto result = std::make_unique< ReflectionComponent >( pass ); + auto result = castor::makeUnique< ReflectionComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool ReflectionComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/Other/RefractionComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/Other/RefractionComponent.cpp index d7edab0d2c..2bf8fb23a2 100644 --- a/source/Core/Castor3D/Material/Pass/Component/Other/RefractionComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/Other/RefractionComponent.cpp @@ -10,6 +10,8 @@ #include +CU_ImplementSmartPtr( castor3d, RefractionComponent ) + namespace castor { template<> @@ -167,9 +169,9 @@ namespace castor3d PassComponentUPtr RefractionComponent::doClone( Pass & pass )const { - auto result = std::make_unique< RefractionComponent >( pass ); + auto result = castor::makeUnique< RefractionComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool RefractionComponent::doWriteText( castor::String const & tabs diff --git a/source/Core/Castor3D/Material/Pass/Component/PassComponent.cpp b/source/Core/Castor3D/Material/Pass/Component/PassComponent.cpp index a93f803318..ae830d07d8 100644 --- a/source/Core/Castor3D/Material/Pass/Component/PassComponent.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/PassComponent.cpp @@ -12,7 +12,8 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, PassComponentPlugin ) +CU_ImplementSmartPtr( castor3d, PassComponent ) +CU_ImplementSmartPtr( castor3d, PassComponentPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Pass/Component/PassComponentRegister.cpp b/source/Core/Castor3D/Material/Pass/Component/PassComponentRegister.cpp index 5a6e740d94..8d8fe4a331 100644 --- a/source/Core/Castor3D/Material/Pass/Component/PassComponentRegister.cpp +++ b/source/Core/Castor3D/Material/Pass/Component/PassComponentRegister.cpp @@ -53,7 +53,7 @@ #include "Castor3D/Miscellaneous/Logger.hpp" #include "Castor3D/Render/RenderPipeline.hpp" -CU_ImplementCUSmartPtr( castor3d, PassComponentRegister ) +CU_ImplementSmartPtr( castor3d, PassComponentRegister ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Pass/Pass.cpp b/source/Core/Castor3D/Material/Pass/Pass.cpp index 89aedcb9be..51562739ac 100644 --- a/source/Core/Castor3D/Material/Pass/Pass.cpp +++ b/source/Core/Castor3D/Material/Pass/Pass.cpp @@ -41,7 +41,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, Pass ) +CU_ImplementSmartPtr( castor3d, Pass ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Pass/PassFactory.cpp b/source/Core/Castor3D/Material/Pass/PassFactory.cpp index 2c2e17a4f2..14abcee3ab 100644 --- a/source/Core/Castor3D/Material/Pass/PassFactory.cpp +++ b/source/Core/Castor3D/Material/Pass/PassFactory.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Material/Pass/Pass.hpp" #include "Castor3D/Shader/Shaders/GlslLighting.hpp" -CU_ImplementCUSmartPtr( castor3d, PassFactory ) +CU_ImplementSmartPtr( castor3d, PassFactory ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Pass/PassModule.cpp b/source/Core/Castor3D/Material/Pass/PassModule.cpp index b9362688fe..41df6ffd6d 100644 --- a/source/Core/Castor3D/Material/Pass/PassModule.cpp +++ b/source/Core/Castor3D/Material/Pass/PassModule.cpp @@ -1,7 +1,7 @@ #include "Castor3D/Material/Pass/PassModule.hpp" #include "Castor3D/Render/RenderModule.hpp" -CU_ImplementCUSmartPtr( castor3d, RenderPassRegisterInfo ) +CU_ImplementSmartPtr( castor3d, RenderPassRegisterInfo ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Pass/SubsurfaceScattering.cpp b/source/Core/Castor3D/Material/Pass/SubsurfaceScattering.cpp index 880aa5f54e..041e999178 100644 --- a/source/Core/Castor3D/Material/Pass/SubsurfaceScattering.cpp +++ b/source/Core/Castor3D/Material/Pass/SubsurfaceScattering.cpp @@ -2,6 +2,8 @@ #include "Castor3D/Material/Pass/PassVisitor.hpp" +CU_ImplementSmartPtr( castor3d, SubsurfaceScattering ) + namespace castor3d { void SubsurfaceScattering::accept( PassVisitorBase & vis ) diff --git a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp index c7ffdb2884..42fb1f754b 100644 --- a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp +++ b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimation.cpp @@ -5,7 +5,7 @@ #include "Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.hpp" #include "Castor3D/Scene/Animation/AnimatedTexture.hpp" -CU_ImplementCUSmartPtr( castor3d, TextureAnimation ) +CU_ImplementSmartPtr( castor3d, TextureAnimation ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp index 6eccdb13b9..7b069eb8fb 100644 --- a/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.cpp @@ -1,6 +1,6 @@ #include "Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.hpp" -CU_ImplementCUSmartPtr( castor3d, TextureAnimationKeyFrame ) +CU_ImplementSmartPtr( castor3d, TextureAnimationKeyFrame ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/Sampler.cpp b/source/Core/Castor3D/Material/Texture/Sampler.cpp index 393b8dacb1..fc691e4a52 100644 --- a/source/Core/Castor3D/Material/Texture/Sampler.cpp +++ b/source/Core/Castor3D/Material/Texture/Sampler.cpp @@ -9,7 +9,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, Sampler ) +CU_ImplementSmartPtr( castor3d, Sampler ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp index 991217025a..5ed7cd1989 100644 --- a/source/Core/Castor3D/Material/Texture/TextureLayout.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureLayout.cpp @@ -17,8 +17,8 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, TextureLayout ) -CU_ImplementCUSmartPtr( castor3d, TextureSource ) +CU_ImplementSmartPtr( castor3d, TextureLayout ) +CU_ImplementSmartPtr( castor3d, TextureSource ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/TextureModule.cpp b/source/Core/Castor3D/Material/Texture/TextureModule.cpp index 24353328a8..f5a472af22 100644 --- a/source/Core/Castor3D/Material/Texture/TextureModule.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureModule.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Material/Texture/Sampler.hpp" #include "Castor3D/Material/Texture/TextureLayout.hpp" -CU_ImplementCUSmartPtr( castor3d, SamplerCache ) +CU_ImplementSmartPtr( castor3d, SamplerCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp index 6ec34cb9a3..30ffb23aa6 100644 --- a/source/Core/Castor3D/Material/Texture/TextureUnit.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureUnit.cpp @@ -11,8 +11,8 @@ #include -CU_ImplementCUSmartPtr( castor3d, TextureUnit ) -CU_ImplementCUSmartPtr( castor3d, TextureUnitData ) +CU_ImplementSmartPtr( castor3d, TextureUnit ) +CU_ImplementSmartPtr( castor3d, TextureUnitData ) namespace castor3d { diff --git a/source/Core/Castor3D/Material/Texture/TextureView.cpp b/source/Core/Castor3D/Material/Texture/TextureView.cpp index eb52a8af60..8617f437d7 100644 --- a/source/Core/Castor3D/Material/Texture/TextureView.cpp +++ b/source/Core/Castor3D/Material/Texture/TextureView.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, TextureView ) +CU_ImplementSmartPtr( castor3d, TextureView ) namespace castor3d { diff --git a/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp b/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp index c3288b9088..3246286069 100644 --- a/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp +++ b/source/Core/Castor3D/Miscellaneous/LoadingScreen.cpp @@ -26,7 +26,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, LoadingScreen ) +CU_ImplementSmartPtr( castor3d, LoadingScreen ) namespace castor3d { diff --git a/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp b/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp index fece711790..121d713757 100644 --- a/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp +++ b/source/Core/Castor3D/Miscellaneous/ProgressBar.cpp @@ -9,7 +9,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ProgressBar ) +CU_ImplementSmartPtr( castor3d, ProgressBar ) namespace castor3d { diff --git a/source/Core/Castor3D/Miscellaneous/StagingData.cpp b/source/Core/Castor3D/Miscellaneous/StagingData.cpp index eecd48dc18..dcfb848b67 100644 --- a/source/Core/Castor3D/Miscellaneous/StagingData.cpp +++ b/source/Core/Castor3D/Miscellaneous/StagingData.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Render/RenderDevice.hpp" -CU_ImplementCUSmartPtr( castor3d, StagingData ) +CU_ImplementSmartPtr( castor3d, StagingData ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp index dcf3280baa..666339d9da 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimation.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Model/Mesh/Mesh.hpp" -CU_ImplementCUSmartPtr( castor3d, MeshAnimation ) +CU_ImplementSmartPtr( castor3d, MeshAnimation ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp index 9bbfe6db95..b114b6c49b 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshAnimationSubmesh.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Model/Mesh/Submesh/Submesh.hpp" #include "Castor3D/Model/Mesh/Submesh/Component/MorphComponent.hpp" -CU_ImplementCUSmartPtr( castor3d, MeshAnimationSubmesh ) +CU_ImplementSmartPtr( castor3d, MeshAnimationSubmesh ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp b/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp index 12f0a42c18..8636e62646 100644 --- a/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp +++ b/source/Core/Castor3D/Model/Mesh/Animation/MeshMorphTarget.cpp @@ -6,7 +6,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, MeshMorphTarget ) +CU_ImplementSmartPtr( castor3d, MeshMorphTarget ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp index acd6b1ba52..273e235cb1 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cone.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Model/Vertex.hpp" #include "Castor3D/Miscellaneous/Parameter.hpp" +CU_ImplementSmartPtr( castor3d, Cone ) + namespace castor3d { Cone::Cone() @@ -17,7 +19,7 @@ namespace castor3d MeshGeneratorUPtr Cone::create() { - return std::make_unique< Cone >(); + return castor::makeUniqueDerived< MeshGenerator, Cone >(); } void Cone::doGenerate( Mesh & mesh diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp index 78a3f287f5..14eedfb2c3 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cube.cpp @@ -4,6 +4,8 @@ #include "Castor3D/Model/Vertex.hpp" #include "Castor3D/Miscellaneous/Parameter.hpp" +CU_ImplementSmartPtr( castor3d, Cube ) + namespace castor3d { Cube::Cube() @@ -16,7 +18,7 @@ namespace castor3d MeshGeneratorUPtr Cube::create() { - return std::make_unique< Cube >(); + return castor::makeUniqueDerived< MeshGenerator, Cube >(); } void Cube::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp index e93c8fdb24..c070846418 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Cylinder.cpp @@ -6,6 +6,8 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" +CU_ImplementSmartPtr( castor3d, Cylinder ) + namespace castor3d { Cylinder::Cylinder() @@ -18,7 +20,7 @@ namespace castor3d MeshGeneratorUPtr Cylinder::create() { - return std::make_unique< Cylinder >(); + return castor::makeUniqueDerived< MeshGenerator, Cylinder >(); } void Cylinder::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp index e3508c5fd2..6c9b2ca242 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Icosahedron.cpp @@ -9,6 +9,8 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" +CU_ImplementSmartPtr( castor3d, Icosahedron ) + namespace castor3d { Icosahedron::Icosahedron() @@ -20,7 +22,7 @@ namespace castor3d MeshGeneratorUPtr Icosahedron::create() { - return std::make_unique< Icosahedron >(); + return castor::makeUniqueDerived< MeshGenerator, Icosahedron >(); } void Icosahedron::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp index d1762236f3..fb914ecf61 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Plane.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Model/Vertex.hpp" #include "Castor3D/Miscellaneous/Parameter.hpp" +CU_ImplementSmartPtr( castor3d, Plane ) + namespace castor3d { Plane::Plane() @@ -14,7 +16,7 @@ namespace castor3d MeshGeneratorUPtr Plane::create() { - return std::make_unique< Plane >(); + return castor::makeUniqueDerived< MeshGenerator, Plane >(); } void Plane::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp index ee0981affd..906ea1197e 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Projection.cpp @@ -3,6 +3,8 @@ #include "Castor3D/Model/Mesh/Submesh/Submesh.hpp" #include "Castor3D/Model/Vertex.hpp" +CU_ImplementSmartPtr( castor3d, Projection ) + namespace castor3d { Projection::Projection() @@ -15,7 +17,7 @@ namespace castor3d MeshGeneratorUPtr Projection::create() { - return std::make_unique< Projection >(); + return castor::makeUniqueDerived< MeshGenerator, Projection >(); } void Projection::setPoints( Pattern< castor::Point3f > const & pattern diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp index e262d67f51..257c4788ca 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Sphere.cpp @@ -7,6 +7,8 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" +CU_ImplementSmartPtr( castor3d, Sphere ) + namespace castor3d { Sphere::Sphere() @@ -18,7 +20,7 @@ namespace castor3d MeshGeneratorUPtr Sphere::create() { - return std::make_unique< Sphere >(); + return castor::makeUniqueDerived< MeshGenerator, Sphere >(); } void Sphere::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp b/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp index fa9297dbe2..774aa38016 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/SphereSection.cpp @@ -7,6 +7,8 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" +CU_ImplementSmartPtr( castor3d, SphereSection ) + namespace castor3d { SphereSection::SphereSection() @@ -19,7 +21,7 @@ namespace castor3d MeshGeneratorUPtr SphereSection::create() { - return std::make_unique< SphereSection >(); + return castor::makeUniqueDerived< MeshGenerator, SphereSection >(); } void SphereSection::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp b/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp index 1237eea0be..94790abcb4 100644 --- a/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp +++ b/source/Core/Castor3D/Model/Mesh/Generator/Torus.cpp @@ -6,6 +6,8 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" +CU_ImplementSmartPtr( castor3d, Torus ) + namespace castor3d { Torus::Torus() @@ -19,7 +21,7 @@ namespace castor3d MeshGeneratorUPtr Torus::create() { - return std::make_unique< Torus >(); + return castor::makeUniqueDerived< MeshGenerator, Torus >(); } void Torus::doGenerate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/Mesh.cpp b/source/Core/Castor3D/Model/Mesh/Mesh.cpp index 5ba5fad33c..566078a2bc 100644 --- a/source/Core/Castor3D/Model/Mesh/Mesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Mesh.cpp @@ -8,7 +8,8 @@ #include "Castor3D/Render/RenderSystem.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, MeshCache ) +CU_ImplementSmartPtr( castor3d, MeshCache ) +CU_ImplementSmartPtr( castor3d, Mesh ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp b/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp index 86e30cb6da..7457ca080c 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshFactory.cpp @@ -10,12 +10,12 @@ #include "Castor3D/Model/Mesh/Generator/SphereSection.hpp" #include "Castor3D/Model/Mesh/Generator/Torus.hpp" -CU_ImplementCUSmartPtr( castor3d, MeshFactory ) +CU_ImplementSmartPtr( castor3d, MeshFactory ) namespace castor3d { MeshFactory::MeshFactory() - : Factory < MeshGenerator, castor::String, std::unique_ptr< MeshGenerator > > {} + : Factory< MeshGenerator, castor::String, castor::UniquePtr< MeshGenerator > > {} { registerType( cuT( "cone" ), Cone::create ); registerType( cuT( "cube" ), Cube::create ); diff --git a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp index 0c9d2d2982..5d9c076835 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshGenerator.cpp @@ -10,6 +10,8 @@ #include "Castor3D/Event/Frame/GpuFunctorEvent.hpp" #include "Castor3D/Scene/Scene.hpp" +CU_ImplementSmartPtr( castor3d, MeshGenerator ) + namespace castor3d { MeshGenerator::MeshGenerator( castor::String const & meshType ) @@ -23,7 +25,7 @@ namespace castor3d MeshGeneratorUPtr MeshGenerator::create() { - return std::make_unique< MeshGenerator >( cuT( "custom" ) ); + return castor::makeUnique< MeshGenerator >( cuT( "custom" ) ); } void MeshGenerator::generate( Mesh & mesh, Parameters const & parameters ) diff --git a/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp b/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp index 7cb00a6e21..cb636ea440 100644 --- a/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp +++ b/source/Core/Castor3D/Model/Mesh/MeshImporter.cpp @@ -10,6 +10,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneImporter.hpp" +CU_ImplementSmartPtr( castor3d, MeshImporter ) + namespace castor3d { namespace meshimp diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp index d91738aa93..a7fb019295 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/IndexMapping.cpp @@ -1,6 +1,6 @@ #include "Castor3D/Model/Mesh/Submesh/Component/IndexMapping.hpp" -CU_ImplementCUSmartPtr( castor3d, IndexMapping ) +CU_ImplementSmartPtr( castor3d, IndexMapping ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp index 874306a496..19ef15cfc3 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/InstantiationComponent.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, InstantiationComponent ) +CU_ImplementSmartPtr( castor3d, InstantiationComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp index aef9c227f0..cc1fc76ac1 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/LinesMapping.cpp @@ -12,7 +12,7 @@ //************************************************************************************************* -CU_ImplementCUSmartPtr( castor3d, LinesMapping ) +CU_ImplementSmartPtr( castor3d, LinesMapping ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp index e3566f0b7e..fa3c25ad2d 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MeshletComponent.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, MeshletComponent ) +CU_ImplementSmartPtr( castor3d, MeshletComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp index 42a738be04..9d326aa0e0 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/MorphComponent.cpp @@ -16,7 +16,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, MorphComponent ) +CU_ImplementSmartPtr( castor3d, MorphComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp index ba89a11fe1..ba4bfea3c9 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/PassMasksComponent.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PassMasksComponent ) +CU_ImplementSmartPtr( castor3d, PassMasksComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp index 5c061ddc65..01f5bf9339 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SkinComponent.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SkinComponent ) +CU_ImplementSmartPtr( castor3d, SkinComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp index 1d494b07d1..d2f50c8d42 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.cpp @@ -1,6 +1,6 @@ #include "Castor3D/Model/Mesh/Submesh/Component/SubmeshComponent.hpp" -CU_ImplementCUSmartPtr( castor3d, SubmeshComponent ) +CU_ImplementSmartPtr( castor3d, SubmeshComponent ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp index e3918bbc98..b315cd8cd0 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Component/TriFaceMapping.cpp @@ -15,7 +15,7 @@ //************************************************************************************************* -CU_ImplementCUSmartPtr( castor3d, TriFaceMapping ) +CU_ImplementSmartPtr( castor3d, TriFaceMapping ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp index 1b88bbf4d5..2ec5f1cfc4 100644 --- a/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp +++ b/source/Core/Castor3D/Model/Mesh/Submesh/Submesh.cpp @@ -21,7 +21,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, Submesh ) +CU_ImplementSmartPtr( castor3d, Submesh ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp index b33952182a..6213140db9 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimation.cpp @@ -6,7 +6,7 @@ #include "Castor3D/Model/Skeleton/BoneNode.hpp" #include "Castor3D/Animation/Animable.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimation ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimation ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp index c0f7c0c5a5..6d3ce01d4b 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Model/Skeleton/BoneNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationBone ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationBone ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp index 631d1a0d64..8c9535b732 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationKeyFrame.cpp @@ -6,7 +6,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationKeyFrame ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationKeyFrame ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp index 397768ffd9..3be7b83d7f 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Model/Skeleton/SkeletonNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationNode ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp index 099ba2e063..2a84716c6d 100644 --- a/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.cpp @@ -1,6 +1,6 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationObject.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationObject ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationObject ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/BoneNode.cpp b/source/Core/Castor3D/Model/Skeleton/BoneNode.cpp index 9eb608983f..a50a2a6ba9 100644 --- a/source/Core/Castor3D/Model/Skeleton/BoneNode.cpp +++ b/source/Core/Castor3D/Model/Skeleton/BoneNode.cpp @@ -5,7 +5,7 @@ #include "Castor3D/Model/Mesh/Submesh/Submesh.hpp" #include "Castor3D/Model/Mesh/Submesh/Component/SkinComponent.hpp" -CU_ImplementCUSmartPtr( castor3d, BoneNode ) +CU_ImplementSmartPtr( castor3d, BoneNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp b/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp index 3be95fd1d7..67a9335c23 100644 --- a/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp +++ b/source/Core/Castor3D/Model/Skeleton/Skeleton.cpp @@ -6,8 +6,8 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimation.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonCache ) -CU_ImplementCUSmartPtr( castor3d, Skeleton ) +CU_ImplementSmartPtr( castor3d, SkeletonCache ) +CU_ImplementSmartPtr( castor3d, Skeleton ) namespace castor3d { diff --git a/source/Core/Castor3D/Model/Skeleton/SkeletonImporter.cpp b/source/Core/Castor3D/Model/Skeleton/SkeletonImporter.cpp index b30afb6acd..2bf4d3c1aa 100644 --- a/source/Core/Castor3D/Model/Skeleton/SkeletonImporter.cpp +++ b/source/Core/Castor3D/Model/Skeleton/SkeletonImporter.cpp @@ -6,6 +6,8 @@ #include "Castor3D/Model/Skeleton/BoneNode.hpp" #include "Castor3D/Scene/SceneImporter.hpp" +CU_ImplementSmartPtr( castor3d, SkeletonImporter ) + namespace castor3d { namespace skelimp diff --git a/source/Core/Castor3D/Model/Skeleton/SkeletonNode.cpp b/source/Core/Castor3D/Model/Skeleton/SkeletonNode.cpp index c0304789d0..6207a77fd5 100644 --- a/source/Core/Castor3D/Model/Skeleton/SkeletonNode.cpp +++ b/source/Core/Castor3D/Model/Skeleton/SkeletonNode.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Model/Skeleton/Skeleton.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonNode ) +CU_ImplementSmartPtr( castor3d, SkeletonNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp index 5dc8fbbf7c..5f4c3276ca 100644 --- a/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp +++ b/source/Core/Castor3D/Overlay/BorderPanelOverlay.cpp @@ -11,7 +11,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, BorderPanelOverlay ) +CU_ImplementSmartPtr( castor3d, BorderPanelOverlay ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/DebugOverlays.cpp b/source/Core/Castor3D/Overlay/DebugOverlays.cpp index 9816a8ca99..e098079929 100644 --- a/source/Core/Castor3D/Overlay/DebugOverlays.cpp +++ b/source/Core/Castor3D/Overlay/DebugOverlays.cpp @@ -22,7 +22,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, DebugOverlays ) +CU_ImplementSmartPtr( castor3d, DebugOverlays ) //********************************************************************************************* diff --git a/source/Core/Castor3D/Overlay/FontTexture.cpp b/source/Core/Castor3D/Overlay/FontTexture.cpp index d655070e3a..afcc3de9c3 100644 --- a/source/Core/Castor3D/Overlay/FontTexture.cpp +++ b/source/Core/Castor3D/Overlay/FontTexture.cpp @@ -12,7 +12,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, FontTexture ) +CU_ImplementSmartPtr( castor3d, FontTexture ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/Overlay.cpp b/source/Core/Castor3D/Overlay/Overlay.cpp index 90fc525fb2..00bb5e0f24 100644 --- a/source/Core/Castor3D/Overlay/Overlay.cpp +++ b/source/Core/Castor3D/Overlay/Overlay.cpp @@ -7,7 +7,7 @@ #include "Castor3D/Overlay/TextOverlay.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, Overlay ) +CU_ImplementSmartPtr( castor3d, Overlay ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/OverlayCategory.cpp b/source/Core/Castor3D/Overlay/OverlayCategory.cpp index 3cf4c1e5e6..e283be8186 100644 --- a/source/Core/Castor3D/Overlay/OverlayCategory.cpp +++ b/source/Core/Castor3D/Overlay/OverlayCategory.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Overlay/TextOverlay.hpp" #include "Castor3D/Render/Overlays/OverlayRenderer.hpp" -CU_ImplementCUSmartPtr( castor3d, OverlayCategory ) +CU_ImplementSmartPtr( castor3d, OverlayCategory ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/OverlayFactory.cpp b/source/Core/Castor3D/Overlay/OverlayFactory.cpp index dc74533079..6b782c8c55 100644 --- a/source/Core/Castor3D/Overlay/OverlayFactory.cpp +++ b/source/Core/Castor3D/Overlay/OverlayFactory.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Overlay/BorderPanelOverlay.hpp" #include "Castor3D/Overlay/TextOverlay.hpp" -CU_ImplementCUSmartPtr( castor3d, OverlayFactory ) +CU_ImplementSmartPtr( castor3d, OverlayFactory ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/PanelOverlay.cpp b/source/Core/Castor3D/Overlay/PanelOverlay.cpp index c65e95a601..9756a50fac 100644 --- a/source/Core/Castor3D/Overlay/PanelOverlay.cpp +++ b/source/Core/Castor3D/Overlay/PanelOverlay.cpp @@ -10,7 +10,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PanelOverlay ) +CU_ImplementSmartPtr( castor3d, PanelOverlay ) namespace castor3d { diff --git a/source/Core/Castor3D/Overlay/TextOverlay.cpp b/source/Core/Castor3D/Overlay/TextOverlay.cpp index c958c3b464..46921cd2b1 100644 --- a/source/Core/Castor3D/Overlay/TextOverlay.cpp +++ b/source/Core/Castor3D/Overlay/TextOverlay.cpp @@ -19,7 +19,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, TextOverlay ) +CU_ImplementSmartPtr( castor3d, TextOverlay ) #if defined( drawText ) # undef drawText diff --git a/source/Core/Castor3D/Plugin/DividerPlugin.cpp b/source/Core/Castor3D/Plugin/DividerPlugin.cpp index 8a29bf6648..6969f3256b 100644 --- a/source/Core/Castor3D/Plugin/DividerPlugin.cpp +++ b/source/Core/Castor3D/Plugin/DividerPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, DividerPlugin ) +CU_ImplementSmartPtr( castor3d, DividerPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp index 30333c7ddd..857794e1a2 100644 --- a/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GeneratorPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, GeneratorPlugin ) +CU_ImplementSmartPtr( castor3d, GeneratorPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/GenericPlugin.cpp b/source/Core/Castor3D/Plugin/GenericPlugin.cpp index a0e839b338..53abfb5c05 100644 --- a/source/Core/Castor3D/Plugin/GenericPlugin.cpp +++ b/source/Core/Castor3D/Plugin/GenericPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, GenericPlugin ) +CU_ImplementSmartPtr( castor3d, GenericPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp index 521ca1964c..00ad7bfd47 100644 --- a/source/Core/Castor3D/Plugin/ImporterPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ImporterPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ImporterPlugin ) +CU_ImplementSmartPtr( castor3d, ImporterPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp index a46d886264..e17e31d28d 100644 --- a/source/Core/Castor3D/Plugin/ParticlePlugin.cpp +++ b/source/Core/Castor3D/Plugin/ParticlePlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ParticlePlugin ) +CU_ImplementSmartPtr( castor3d, ParticlePlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/Plugin.cpp b/source/Core/Castor3D/Plugin/Plugin.cpp index 46f4ce121b..3cb9426945 100644 --- a/source/Core/Castor3D/Plugin/Plugin.cpp +++ b/source/Core/Castor3D/Plugin/Plugin.cpp @@ -7,7 +7,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, Plugin ) +CU_ImplementSmartPtr( castor3d, Plugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp index 9fd3a41f3b..d4ed5d5558 100644 --- a/source/Core/Castor3D/Plugin/PostFxPlugin.cpp +++ b/source/Core/Castor3D/Plugin/PostFxPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PostFxPlugin ) +CU_ImplementSmartPtr( castor3d, PostFxPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp index a61ee0b249..0a3fc5b8b5 100644 --- a/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp +++ b/source/Core/Castor3D/Plugin/ToneMappingPlugin.cpp @@ -2,7 +2,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ToneMappingPlugin ) +CU_ImplementSmartPtr( castor3d, ToneMappingPlugin ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp index ee6e7d7c9c..9fced945b4 100644 --- a/source/Core/Castor3D/Render/Culling/SceneCuller.cpp +++ b/source/Core/Castor3D/Render/Culling/SceneCuller.cpp @@ -30,7 +30,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, SceneCuller ) +CU_ImplementSmartPtr( castor3d, SceneCuller ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp index f1ed137ed2..53f4e5f595 100644 --- a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp +++ b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMap.cpp @@ -28,6 +28,8 @@ #include +CU_ImplementSmartPtr( castor3d, EnvironmentMap ) + namespace castor3d { namespace envmap @@ -113,12 +115,12 @@ namespace castor3d ++i; } - return { std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[0] ), index, CubeMapFace::ePositiveX, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[1] ), index, CubeMapFace::eNegativeX, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[2] ), index, CubeMapFace::ePositiveY, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[3] ), index, CubeMapFace::eNegativeY, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[4] ), index, CubeMapFace::ePositiveZ, background ) - , std::make_unique< EnvironmentMapPass >( graph, device, map, std::move( nodes[5] ), index, CubeMapFace::eNegativeZ, background ) }; + return { castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[0] ), index, CubeMapFace::ePositiveX, background ) + , castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[1] ), index, CubeMapFace::eNegativeX, background ) + , castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[2] ), index, CubeMapFace::ePositiveY, background ) + , castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[3] ), index, CubeMapFace::eNegativeY, background ) + , castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[4] ), index, CubeMapFace::ePositiveZ, background ) + , castor::makeUnique< EnvironmentMapPass >( graph, device, map, std::move( nodes[5] ), index, CubeMapFace::eNegativeZ, background ) }; } static std::vector< ashes::ImageView > createViews( Texture const & envMap @@ -197,6 +199,7 @@ namespace castor3d } ) } { m_environmentMap.create(); + m_depthBuffer.create(); m_environmentMapViews = envmap::createViews( m_environmentMap, m_image ); auto commandBuffer = queueData.commandPool->createCommandBuffer( "Env" + scene.getName() + "InitialiseViews" ); commandBuffer->begin(); @@ -226,6 +229,7 @@ namespace castor3d m_passes.clear(); m_environmentMapViews.clear(); m_image.reset(); + m_depthBuffer.destroy(); m_environmentMap.destroy(); m_graphs.clear(); m_sortedNodes.clear(); diff --git a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp index 5a0e71c3e0..eff604467d 100644 --- a/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp +++ b/source/Core/Castor3D/Render/EnvironmentMap/EnvironmentMapPass.cpp @@ -22,6 +22,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, EnvironmentMapPass ) + namespace castor3d { namespace envpass @@ -63,7 +65,7 @@ namespace castor3d , m_node{ std::move( faceNode ) } , m_index{ index } , m_face{ face } - , m_camera{ envpass::doCreateCamera( *faceNode, getOwner()->getSize() ) } + , m_camera{ envpass::doCreateCamera( *m_node, getOwner()->getSize() ) } , m_culler{ castor::makeUniqueDerived< SceneCuller, FrustumCuller >( *m_camera ) } , m_cameraUbo{ m_device } , m_hdrConfigUbo{ m_device } diff --git a/source/Core/Castor3D/Render/Frustum.cpp b/source/Core/Castor3D/Render/Frustum.cpp index 5547b69be3..5c20383817 100644 --- a/source/Core/Castor3D/Render/Frustum.cpp +++ b/source/Core/Castor3D/Render/Frustum.cpp @@ -6,7 +6,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, Frustum ) +CU_ImplementSmartPtr( castor3d, Frustum ) #define C3D_DisableFrustumCulling 0 diff --git a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/GeometryInjectionPass.cpp b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/GeometryInjectionPass.cpp index 5c5d345e77..1728f12471 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/GeometryInjectionPass.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/GeometryInjectionPass.cpp @@ -42,7 +42,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, GeometryInjectionPass ) +CU_ImplementSmartPtr( castor3d, GeometryInjectionPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightInjectionPass.cpp b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightInjectionPass.cpp index 09b4792763..a8ede24629 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightInjectionPass.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightInjectionPass.cpp @@ -43,7 +43,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, LightInjectionPass ) +CU_ImplementSmartPtr( castor3d, LightInjectionPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationPass.cpp b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationPass.cpp index e5efef1ecf..86b6b08207 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationPass.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationPass.cpp @@ -33,7 +33,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, LightPropagationPass ) +CU_ImplementSmartPtr( castor3d, LightPropagationPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.cpp b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.cpp index 46f13eaff3..ae011c286e 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumesModule.cpp @@ -3,10 +3,10 @@ #include "Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LayeredLightPropagationVolumes.hpp" #include "Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightPropagationVolumes.hpp" -CU_ImplementCUSmartPtr( castor3d, LightPropagationVolumes ) -CU_ImplementCUSmartPtr( castor3d, LightPropagationVolumesG ) -CU_ImplementCUSmartPtr( castor3d, LayeredLightPropagationVolumes ) -CU_ImplementCUSmartPtr( castor3d, LayeredLightPropagationVolumesG ) +CU_ImplementSmartPtr( castor3d, LightPropagationVolumes ) +CU_ImplementSmartPtr( castor3d, LightPropagationVolumesG ) +CU_ImplementSmartPtr( castor3d, LayeredLightPropagationVolumes ) +CU_ImplementSmartPtr( castor3d, LayeredLightPropagationVolumesG ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightVolumePassResult.cpp b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightVolumePassResult.cpp index 9138709024..9c7fb0e605 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightVolumePassResult.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/LightPropagationVolumes/LightVolumePassResult.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Render/RenderDevice.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, LightVolumePassResult ) +CU_ImplementSmartPtr( castor3d, LightVolumePassResult ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelBufferToTexture.cpp b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelBufferToTexture.cpp index 67a88a95ee..092ad4ee79 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelBufferToTexture.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelBufferToTexture.cpp @@ -22,7 +22,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, VoxelBufferToTexture ) +CU_ImplementSmartPtr( castor3d, VoxelBufferToTexture ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelSecondaryBounce.cpp b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelSecondaryBounce.cpp index 3c0937ca84..0b161ff67b 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelSecondaryBounce.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelSecondaryBounce.cpp @@ -27,7 +27,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, VoxelSecondaryBounce ) +CU_ImplementSmartPtr( castor3d, VoxelSecondaryBounce ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizePass.cpp b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizePass.cpp index cbf77c9171..e23a12a770 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizePass.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/VoxelizePass.cpp @@ -43,7 +43,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, VoxelizePass ) +CU_ImplementSmartPtr( castor3d, VoxelizePass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/Voxelizer.cpp b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/Voxelizer.cpp index 47e4df0cf8..fb00241a1b 100644 --- a/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/Voxelizer.cpp +++ b/source/Core/Castor3D/Render/GlobalIllumination/VoxelConeTracing/Voxelizer.cpp @@ -31,7 +31,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, Voxelizer ) +CU_ImplementSmartPtr( castor3d, Voxelizer ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Node/BillboardRenderNode.cpp b/source/Core/Castor3D/Render/Node/BillboardRenderNode.cpp index e51cb39753..7be0aeabe1 100644 --- a/source/Core/Castor3D/Render/Node/BillboardRenderNode.cpp +++ b/source/Core/Castor3D/Render/Node/BillboardRenderNode.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Scene/BillboardList.hpp" -CU_ImplementCUSmartPtr( castor3d, BillboardRenderNode ) +CU_ImplementSmartPtr( castor3d, BillboardRenderNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Node/QueueRenderNodes.cpp b/source/Core/Castor3D/Render/Node/QueueRenderNodes.cpp index 3918c4d21f..6ba8a8d7af 100644 --- a/source/Core/Castor3D/Render/Node/QueueRenderNodes.cpp +++ b/source/Core/Castor3D/Render/Node/QueueRenderNodes.cpp @@ -34,7 +34,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, QueueRenderNodes ) +CU_ImplementSmartPtr( castor3d, QueueRenderNodes ) using ashes::operator==; using ashes::operator!=; diff --git a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp index 651c8c3c7d..09082d4851 100644 --- a/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp +++ b/source/Core/Castor3D/Render/Node/SceneRenderNodes.cpp @@ -33,7 +33,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, SceneRenderNodes ) +CU_ImplementSmartPtr( castor3d, SceneRenderNodes ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp b/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp index 3d014c441e..46aedf162a 100644 --- a/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp +++ b/source/Core/Castor3D/Render/Node/SubmeshRenderNode.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Render/RenderDevice.hpp" #include "Castor3D/Scene/Geometry.hpp" -CU_ImplementCUSmartPtr( castor3d, SubmeshRenderNode ) +CU_ImplementSmartPtr( castor3d, SubmeshRenderNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp b/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp index 5c1da10433..55cc802d11 100644 --- a/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp +++ b/source/Core/Castor3D/Render/Opaque/DeferredRendering.cpp @@ -23,7 +23,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, DeferredRendering ) +CU_ImplementSmartPtr( castor3d, DeferredRendering ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/IndirectLightingPass.cpp b/source/Core/Castor3D/Render/Opaque/IndirectLightingPass.cpp index cb7d3cad56..655f7d2676 100644 --- a/source/Core/Castor3D/Render/Opaque/IndirectLightingPass.cpp +++ b/source/Core/Castor3D/Render/Opaque/IndirectLightingPass.cpp @@ -32,7 +32,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, IndirectLightingPass ) +CU_ImplementSmartPtr( castor3d, IndirectLightingPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/Lighting/SubsurfaceScatteringPass.cpp b/source/Core/Castor3D/Render/Opaque/Lighting/SubsurfaceScatteringPass.cpp index bddd2e4c31..1843e107d2 100644 --- a/source/Core/Castor3D/Render/Opaque/Lighting/SubsurfaceScatteringPass.cpp +++ b/source/Core/Castor3D/Render/Opaque/Lighting/SubsurfaceScatteringPass.cpp @@ -43,7 +43,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SubsurfaceScatteringPass ) +CU_ImplementSmartPtr( castor3d, SubsurfaceScatteringPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/LightingPass.cpp b/source/Core/Castor3D/Render/Opaque/LightingPass.cpp index c8f65246e6..41f1881771 100644 --- a/source/Core/Castor3D/Render/Opaque/LightingPass.cpp +++ b/source/Core/Castor3D/Render/Opaque/LightingPass.cpp @@ -22,7 +22,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, LightingPass ) +CU_ImplementSmartPtr( castor3d, LightingPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/OpaquePassResult.cpp b/source/Core/Castor3D/Render/Opaque/OpaquePassResult.cpp index 2d80fa7f86..4c777ac71b 100644 --- a/source/Core/Castor3D/Render/Opaque/OpaquePassResult.cpp +++ b/source/Core/Castor3D/Render/Opaque/OpaquePassResult.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Render/RenderDevice.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, OpaquePassResult ) +CU_ImplementSmartPtr( castor3d, OpaquePassResult ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/OpaqueRendering.cpp b/source/Core/Castor3D/Render/Opaque/OpaqueRendering.cpp index 8c947c4b43..c98158a7a6 100644 --- a/source/Core/Castor3D/Render/Opaque/OpaqueRendering.cpp +++ b/source/Core/Castor3D/Render/Opaque/OpaqueRendering.cpp @@ -33,7 +33,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, OpaqueRendering ) +CU_ImplementSmartPtr( castor3d, OpaqueRendering ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/OpaqueResolvePass.cpp b/source/Core/Castor3D/Render/Opaque/OpaqueResolvePass.cpp index 936c82a4f2..516b1f9260 100644 --- a/source/Core/Castor3D/Render/Opaque/OpaqueResolvePass.cpp +++ b/source/Core/Castor3D/Render/Opaque/OpaqueResolvePass.cpp @@ -51,7 +51,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, OpaqueResolvePass ) +CU_ImplementSmartPtr( castor3d, OpaqueResolvePass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Opaque/VisibilityReorderPass.cpp b/source/Core/Castor3D/Render/Opaque/VisibilityReorderPass.cpp index a8e25a2795..3c4330ceae 100644 --- a/source/Core/Castor3D/Render/Opaque/VisibilityReorderPass.cpp +++ b/source/Core/Castor3D/Render/Opaque/VisibilityReorderPass.cpp @@ -17,7 +17,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, VisibilityReorderPass ) +CU_ImplementSmartPtr( castor3d, VisibilityReorderPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp index 04eee2886a..0b928cf45d 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayRenderer.cpp @@ -39,7 +39,7 @@ See LICENSE file in root folder #include -CU_ImplementCUSmartPtr( castor3d, OverlayRenderer ) +CU_ImplementSmartPtr( castor3d, OverlayRenderer ) #pragma GCC diagnostic ignored "-Wclass-memaccess" @@ -237,7 +237,7 @@ namespace castor3d , cameraUbo , *baseDescriptorLayout , MaxOverlaysPerBuffer - , std::make_unique< OverlayTextBufferPool >( *device.renderSystem.getEngine() + , castor::makeUnique< OverlayTextBufferPool >( *device.renderSystem.getEngine() , "TextsGlyphs" , device ) ) } { diff --git a/source/Core/Castor3D/Render/Overlays/OverlayTextBufferPool.cpp b/source/Core/Castor3D/Render/Overlays/OverlayTextBufferPool.cpp index 1a5c1f4d8a..ea0982799d 100644 --- a/source/Core/Castor3D/Render/Overlays/OverlayTextBufferPool.cpp +++ b/source/Core/Castor3D/Render/Overlays/OverlayTextBufferPool.cpp @@ -10,6 +10,8 @@ See LICENSE file in root folder #include #include +CU_ImplementSmartPtr( castor3d, OverlayTextBufferPool ) + namespace castor3d { //************************************************************************* diff --git a/source/Core/Castor3D/Render/PBR/IblTextures.cpp b/source/Core/Castor3D/Render/PBR/IblTextures.cpp index 9c1395b291..0fa037af2f 100644 --- a/source/Core/Castor3D/Render/PBR/IblTextures.cpp +++ b/source/Core/Castor3D/Render/PBR/IblTextures.cpp @@ -29,6 +29,8 @@ #include +CU_ImplementSmartPtr( castor3d, IblTextures ) + namespace castor3d { namespace ibltex diff --git a/source/Core/Castor3D/Render/Passes/BackgroundRenderer.cpp b/source/Core/Castor3D/Render/Passes/BackgroundRenderer.cpp index ab4039e422..85cda300f6 100644 --- a/source/Core/Castor3D/Render/Passes/BackgroundRenderer.cpp +++ b/source/Core/Castor3D/Render/Passes/BackgroundRenderer.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, BackgroundRenderer ) +CU_ImplementSmartPtr( castor3d, BackgroundRenderer ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Passes/DownscalePass.cpp b/source/Core/Castor3D/Render/Passes/DownscalePass.cpp index 6e59ba57c5..1a7676eec3 100644 --- a/source/Core/Castor3D/Render/Passes/DownscalePass.cpp +++ b/source/Core/Castor3D/Render/Passes/DownscalePass.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, DownscalePass ) +CU_ImplementSmartPtr( castor3d, DownscalePass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Passes/GaussianBlur.cpp b/source/Core/Castor3D/Render/Passes/GaussianBlur.cpp index 05c5847298..ccab289e86 100644 --- a/source/Core/Castor3D/Render/Passes/GaussianBlur.cpp +++ b/source/Core/Castor3D/Render/Passes/GaussianBlur.cpp @@ -21,7 +21,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, GaussianBlur ) +CU_ImplementSmartPtr( castor3d, GaussianBlur ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Passes/LineariseDepthPass.cpp b/source/Core/Castor3D/Render/Passes/LineariseDepthPass.cpp index 9b609e70cf..be7d977881 100644 --- a/source/Core/Castor3D/Render/Passes/LineariseDepthPass.cpp +++ b/source/Core/Castor3D/Render/Passes/LineariseDepthPass.cpp @@ -48,7 +48,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, LineariseDepthPass ) +CU_ImplementSmartPtr( castor3d, LineariseDepthPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Passes/PickingPass.cpp b/source/Core/Castor3D/Render/Passes/PickingPass.cpp index a0bfe75d96..2c56436ce0 100644 --- a/source/Core/Castor3D/Render/Passes/PickingPass.cpp +++ b/source/Core/Castor3D/Render/Passes/PickingPass.cpp @@ -46,7 +46,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PickingPass ) +CU_ImplementSmartPtr( castor3d, PickingPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Passes/RenderQuad.cpp b/source/Core/Castor3D/Render/Passes/RenderQuad.cpp index 83a9278086..d04534ea0b 100644 --- a/source/Core/Castor3D/Render/Passes/RenderQuad.cpp +++ b/source/Core/Castor3D/Render/Passes/RenderQuad.cpp @@ -34,7 +34,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, RenderQuad ) +CU_ImplementSmartPtr( castor3d, RenderQuad ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Picking.cpp b/source/Core/Castor3D/Render/Picking.cpp index 0bfaaa3304..89cd23d766 100644 --- a/source/Core/Castor3D/Render/Picking.cpp +++ b/source/Core/Castor3D/Render/Picking.cpp @@ -22,7 +22,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, Picking ) +CU_ImplementSmartPtr( castor3d, Picking ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp b/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp index 6f5e6ddc3c..cf424e5450 100644 --- a/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp +++ b/source/Core/Castor3D/Render/PostEffect/PostEffect.cpp @@ -12,7 +12,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, PostEffect ) +CU_ImplementSmartPtr( castor3d, PostEffect ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Prepass/DepthPass.cpp b/source/Core/Castor3D/Render/Prepass/DepthPass.cpp index 6efaa27a5f..bd5d54f399 100644 --- a/source/Core/Castor3D/Render/Prepass/DepthPass.cpp +++ b/source/Core/Castor3D/Render/Prepass/DepthPass.cpp @@ -32,7 +32,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, DepthPass ) +CU_ImplementSmartPtr( castor3d, DepthPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Prepass/PrepassRendering.cpp b/source/Core/Castor3D/Render/Prepass/PrepassRendering.cpp index 45ecf9ca00..f9931e1d88 100644 --- a/source/Core/Castor3D/Render/Prepass/PrepassRendering.cpp +++ b/source/Core/Castor3D/Render/Prepass/PrepassRendering.cpp @@ -16,7 +16,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, PrepassRendering ) +CU_ImplementSmartPtr( castor3d, PrepassRendering ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Prepass/PrepassResult.cpp b/source/Core/Castor3D/Render/Prepass/PrepassResult.cpp index f3ec93d2ec..71d5c4fece 100644 --- a/source/Core/Castor3D/Render/Prepass/PrepassResult.cpp +++ b/source/Core/Castor3D/Render/Prepass/PrepassResult.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Render/RenderDevice.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, PrepassResult ) +CU_ImplementSmartPtr( castor3d, PrepassResult ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Prepass/VisibilityPass.cpp b/source/Core/Castor3D/Render/Prepass/VisibilityPass.cpp index 86c7ffb661..d1f7d822ad 100644 --- a/source/Core/Castor3D/Render/Prepass/VisibilityPass.cpp +++ b/source/Core/Castor3D/Render/Prepass/VisibilityPass.cpp @@ -31,7 +31,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, VisibilityPass ) +CU_ImplementSmartPtr( castor3d, VisibilityPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderDevice.cpp b/source/Core/Castor3D/Render/RenderDevice.cpp index 480544360b..b46d6fe0e8 100644 --- a/source/Core/Castor3D/Render/RenderDevice.cpp +++ b/source/Core/Castor3D/Render/RenderDevice.cpp @@ -15,7 +15,7 @@ #pragma GCC diagnostic ignored "-Wmissing-field-initializers" -CU_ImplementCUSmartPtr( castor3d, RenderDevice ) +CU_ImplementSmartPtr( castor3d, RenderDevice ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderLoop.cpp b/source/Core/Castor3D/Render/RenderLoop.cpp index eeba1eac5d..c63623cd17 100644 --- a/source/Core/Castor3D/Render/RenderLoop.cpp +++ b/source/Core/Castor3D/Render/RenderLoop.cpp @@ -24,7 +24,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, RenderLoop ) +CU_ImplementSmartPtr( castor3d, RenderLoop ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderNodesPass.cpp b/source/Core/Castor3D/Render/RenderNodesPass.cpp index 488a9fa418..482efafa72 100644 --- a/source/Core/Castor3D/Render/RenderNodesPass.cpp +++ b/source/Core/Castor3D/Render/RenderNodesPass.cpp @@ -67,6 +67,9 @@ #include #include +CU_ImplementSmartPtr( castor3d, RenderNodesPass ) +CU_ImplementSmartPtr( castor3d, IsRenderPassEnabled ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Render/RenderPipeline.cpp b/source/Core/Castor3D/Render/RenderPipeline.cpp index d19c51e725..c229ba512d 100644 --- a/source/Core/Castor3D/Render/RenderPipeline.cpp +++ b/source/Core/Castor3D/Render/RenderPipeline.cpp @@ -21,7 +21,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, RenderPipeline ) +CU_ImplementSmartPtr( castor3d, RenderPipeline ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderQueue.cpp b/source/Core/Castor3D/Render/RenderQueue.cpp index c3dbb0b868..88a14cfcd9 100644 --- a/source/Core/Castor3D/Render/RenderQueue.cpp +++ b/source/Core/Castor3D/Render/RenderQueue.cpp @@ -16,7 +16,7 @@ using ashes::operator==; using ashes::operator!=; -CU_ImplementCUSmartPtr( castor3d, RenderQueue ) +CU_ImplementSmartPtr( castor3d, RenderQueue ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderSystem.cpp b/source/Core/Castor3D/Render/RenderSystem.cpp index 19422d64f8..190fb850e0 100644 --- a/source/Core/Castor3D/Render/RenderSystem.cpp +++ b/source/Core/Castor3D/Render/RenderSystem.cpp @@ -38,7 +38,7 @@ # define C3D_DebugSpirV 0 #endif -CU_ImplementCUSmartPtr( castor3d, RenderSystem ) +CU_ImplementSmartPtr( castor3d, RenderSystem ) #pragma warning( disable: 4191 ) // Unsafe conversion from 'PFN_vkVoidFunction' to 'PFN_vkAnyOtherFunction' @@ -677,7 +677,7 @@ namespace castor3d , m_features.textureCompressionBC == VK_TRUE , false } ); - m_device = std::make_shared< RenderDevice >( *this + m_device = castor::makeUnique< RenderDevice >( *this , gpu , m_renderer.desc , std::move( pdeviceExtensions ) ); diff --git a/source/Core/Castor3D/Render/RenderTarget.cpp b/source/Core/Castor3D/Render/RenderTarget.cpp index fc4ca0abd2..208b899976 100644 --- a/source/Core/Castor3D/Render/RenderTarget.cpp +++ b/source/Core/Castor3D/Render/RenderTarget.cpp @@ -42,7 +42,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, RenderTarget ) +CU_ImplementSmartPtr( castor3d, RenderTarget ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderTechnique.cpp b/source/Core/Castor3D/Render/RenderTechnique.cpp index cbb27ee006..caa33bd8b1 100644 --- a/source/Core/Castor3D/Render/RenderTechnique.cpp +++ b/source/Core/Castor3D/Render/RenderTechnique.cpp @@ -50,7 +50,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, RenderTechnique ) +CU_ImplementSmartPtr( castor3d, RenderTechnique ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderTechniquePass.cpp b/source/Core/Castor3D/Render/RenderTechniquePass.cpp index d1753a6570..66649718d8 100644 --- a/source/Core/Castor3D/Render/RenderTechniquePass.cpp +++ b/source/Core/Castor3D/Render/RenderTechniquePass.cpp @@ -43,7 +43,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, RenderTechniquePass ) +CU_ImplementSmartPtr( castor3d, RenderTechniquePass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/RenderWindow.cpp b/source/Core/Castor3D/Render/RenderWindow.cpp index 641ea5b6bc..3418e9e804 100644 --- a/source/Core/Castor3D/Render/RenderWindow.cpp +++ b/source/Core/Castor3D/Render/RenderWindow.cpp @@ -49,7 +49,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, RenderWindow ) +CU_ImplementSmartPtr( castor3d, RenderWindow ) #define C3D_PersistLoadingScreen 1 @@ -1202,7 +1202,7 @@ namespace castor3d return; } - m_picking = std::make_shared< Picking >( m_resources + m_picking = castor::makeUnique< Picking >( m_resources , m_device , queueData , target->getSize() diff --git a/source/Core/Castor3D/Render/ShadowMap/ShadowMap.cpp b/source/Core/Castor3D/Render/ShadowMap/ShadowMap.cpp index 959c124080..4b7bbda0e4 100644 --- a/source/Core/Castor3D/Render/ShadowMap/ShadowMap.cpp +++ b/source/Core/Castor3D/Render/ShadowMap/ShadowMap.cpp @@ -18,7 +18,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, ShadowMap ) +CU_ImplementSmartPtr( castor3d, ShadowMap ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/ShadowMap/ShadowMapPass.cpp b/source/Core/Castor3D/Render/ShadowMap/ShadowMapPass.cpp index 51e682f648..55d155d685 100644 --- a/source/Core/Castor3D/Render/ShadowMap/ShadowMapPass.cpp +++ b/source/Core/Castor3D/Render/ShadowMap/ShadowMapPass.cpp @@ -20,7 +20,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ShadowMapPass ) +CU_ImplementSmartPtr( castor3d, ShadowMapPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Ssao/SsaoBlurPass.cpp b/source/Core/Castor3D/Render/Ssao/SsaoBlurPass.cpp index a47265e4ae..25c6532fb5 100644 --- a/source/Core/Castor3D/Render/Ssao/SsaoBlurPass.cpp +++ b/source/Core/Castor3D/Render/Ssao/SsaoBlurPass.cpp @@ -26,7 +26,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SsaoBlurPass ) +CU_ImplementSmartPtr( castor3d, SsaoBlurPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Ssao/SsaoPass.cpp b/source/Core/Castor3D/Render/Ssao/SsaoPass.cpp index 989c5f88cb..08234850ac 100644 --- a/source/Core/Castor3D/Render/Ssao/SsaoPass.cpp +++ b/source/Core/Castor3D/Render/Ssao/SsaoPass.cpp @@ -13,7 +13,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SsaoPass ) +CU_ImplementSmartPtr( castor3d, SsaoPass ) #define C3D_DebugRawPass 0 diff --git a/source/Core/Castor3D/Render/Ssao/SsaoRawAOPass.cpp b/source/Core/Castor3D/Render/Ssao/SsaoRawAOPass.cpp index 2e4e74c229..c6a7ad25b7 100644 --- a/source/Core/Castor3D/Render/Ssao/SsaoRawAOPass.cpp +++ b/source/Core/Castor3D/Render/Ssao/SsaoRawAOPass.cpp @@ -42,7 +42,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SsaoRawAOPass ) +CU_ImplementSmartPtr( castor3d, SsaoRawAOPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/ToTexture/EquirectangularToCube.cpp b/source/Core/Castor3D/Render/ToTexture/EquirectangularToCube.cpp index 7f48ab9c03..943636683e 100644 --- a/source/Core/Castor3D/Render/ToTexture/EquirectangularToCube.cpp +++ b/source/Core/Castor3D/Render/ToTexture/EquirectangularToCube.cpp @@ -24,6 +24,8 @@ #include +CU_ImplementSmartPtr( castor3d, EquirectangularToCube ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp b/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp index d88c64ffb2..5e3e2c0945 100644 --- a/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp +++ b/source/Core/Castor3D/Render/ToTexture/RenderCube.cpp @@ -23,6 +23,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, RenderCube ) + namespace castor3d { namespace rendcube diff --git a/source/Core/Castor3D/Render/ToTexture/Texture3DTo2D.cpp b/source/Core/Castor3D/Render/ToTexture/Texture3DTo2D.cpp index 730c3461b5..dfe3a7f3df 100644 --- a/source/Core/Castor3D/Render/ToTexture/Texture3DTo2D.cpp +++ b/source/Core/Castor3D/Render/ToTexture/Texture3DTo2D.cpp @@ -38,7 +38,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, Texture3DTo2D ) +CU_ImplementSmartPtr( castor3d, Texture3DTo2D ) #define UBO_GRID( Writer, Binding )\ auto ubo = Writer.declUniformBuffer<>( "ubo", Binding, 0u );\ diff --git a/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp b/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp index cb54f3df95..735ff12608 100644 --- a/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp +++ b/source/Core/Castor3D/Render/ToneMapping/ToneMapping.cpp @@ -18,7 +18,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ToneMapping ) +CU_ImplementSmartPtr( castor3d, ToneMapping ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transform/MeshletBoundsTransformPass.cpp b/source/Core/Castor3D/Render/Transform/MeshletBoundsTransformPass.cpp index d18acf0c18..649ddd1d95 100644 --- a/source/Core/Castor3D/Render/Transform/MeshletBoundsTransformPass.cpp +++ b/source/Core/Castor3D/Render/Transform/MeshletBoundsTransformPass.cpp @@ -17,7 +17,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, MeshletBoundsTransformPass ) +CU_ImplementSmartPtr( castor3d, MeshletBoundsTransformPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transform/VertexTransformPass.cpp b/source/Core/Castor3D/Render/Transform/VertexTransformPass.cpp index 8c096009ea..d59c156885 100644 --- a/source/Core/Castor3D/Render/Transform/VertexTransformPass.cpp +++ b/source/Core/Castor3D/Render/Transform/VertexTransformPass.cpp @@ -16,7 +16,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, VertexTransformPass ) +CU_ImplementSmartPtr( castor3d, VertexTransformPass ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transform/VertexTransforming.cpp b/source/Core/Castor3D/Render/Transform/VertexTransforming.cpp index 71cfb23a65..502ef3b654 100644 --- a/source/Core/Castor3D/Render/Transform/VertexTransforming.cpp +++ b/source/Core/Castor3D/Render/Transform/VertexTransforming.cpp @@ -28,7 +28,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, VertexTransforming ) +CU_ImplementSmartPtr( castor3d, VertexTransforming ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transparent/TransparentPassResult.cpp b/source/Core/Castor3D/Render/Transparent/TransparentPassResult.cpp index 4bd986d18b..cfa67bd8ac 100644 --- a/source/Core/Castor3D/Render/Transparent/TransparentPassResult.cpp +++ b/source/Core/Castor3D/Render/Transparent/TransparentPassResult.cpp @@ -4,7 +4,7 @@ #include "Castor3D/Material/Texture/TextureUnit.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, TransparentPassResult ) +CU_ImplementSmartPtr( castor3d, TransparentPassResult ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transparent/TransparentRendering.cpp b/source/Core/Castor3D/Render/Transparent/TransparentRendering.cpp index 6035822c6a..8735dffe30 100644 --- a/source/Core/Castor3D/Render/Transparent/TransparentRendering.cpp +++ b/source/Core/Castor3D/Render/Transparent/TransparentRendering.cpp @@ -20,7 +20,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, TransparentRendering ) +CU_ImplementSmartPtr( castor3d, TransparentRendering ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Transparent/WeightedBlendRendering.cpp b/source/Core/Castor3D/Render/Transparent/WeightedBlendRendering.cpp index 79bdbda7ce..c418da585b 100644 --- a/source/Core/Castor3D/Render/Transparent/WeightedBlendRendering.cpp +++ b/source/Core/Castor3D/Render/Transparent/WeightedBlendRendering.cpp @@ -18,7 +18,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, WeightedBlendRendering ) +CU_ImplementSmartPtr( castor3d, WeightedBlendRendering ) namespace castor3d { diff --git a/source/Core/Castor3D/Render/Viewport.cpp b/source/Core/Castor3D/Render/Viewport.cpp index 76c499f9b8..a8a5a4a331 100644 --- a/source/Core/Castor3D/Render/Viewport.cpp +++ b/source/Core/Castor3D/Render/Viewport.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Engine.hpp" #include "Castor3D/Render/RenderSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, Viewport ) +CU_ImplementSmartPtr( castor3d, Viewport ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp index e9923d6176..7eee5932cf 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedMesh.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.hpp" #include "Castor3D/Scene/Animation/Mesh/MeshAnimationInstanceSubmesh.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedMesh ) +CU_ImplementSmartPtr( castor3d, AnimatedMesh ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp index 8336b2a1ae..693aab0aad 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedObject.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Model/Mesh/Mesh.hpp" #include "Castor3D/Scene/Geometry.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedObject ) +CU_ImplementSmartPtr( castor3d, AnimatedObject ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp index bf14b8153e..535bf85d50 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedObjectGroup.cpp @@ -13,7 +13,7 @@ #include "Castor3D/Scene/Animation/AnimatedTexture.hpp" #include "Castor3D/Scene/Geometry.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedObjectGroup ) +CU_ImplementSmartPtr( castor3d, AnimatedObjectGroup ) namespace castor3d { @@ -135,7 +135,7 @@ namespace castor3d { m_objects.emplace( name, std::move( object ) ); - switch ( object->getKind() ) + switch ( obj->getKind() ) { case AnimationType::eSceneNode: onSceneNodeAdded( *this, static_cast< AnimatedSceneNode & >( *obj ) ); diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp index 463e995ad1..971d17fdbf 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedSceneNode.cpp @@ -7,7 +7,7 @@ #include "Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedSceneNode ) +CU_ImplementSmartPtr( castor3d, AnimatedSceneNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp index 9c2abab174..cc3e0e8ec7 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedSkeleton.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedSkeleton ) +CU_ImplementSmartPtr( castor3d, AnimatedSkeleton ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp b/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp index 2844c783a3..7784fc53ad 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimatedTexture.cpp @@ -10,7 +10,7 @@ #include "Castor3D/Scene/Animation/Texture/TextureAnimationInstance.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" -CU_ImplementCUSmartPtr( castor3d, AnimatedTexture ) +CU_ImplementSmartPtr( castor3d, AnimatedTexture ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp index d4a883bbc6..da735ea706 100644 --- a/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/AnimationInstance.cpp @@ -3,9 +3,9 @@ #include "Castor3D/Animation/Animable.hpp" #include "Castor3D/Animation/Animation.hpp" -CU_ImplementCUSmartPtr( castor3d, Animable ) -CU_ImplementCUSmartPtr( castor3d, Animation ) -CU_ImplementCUSmartPtr( castor3d, AnimationInstance ) +CU_ImplementSmartPtr( castor3d, Animable ) +CU_ImplementSmartPtr( castor3d, Animation ) +CU_ImplementSmartPtr( castor3d, AnimationInstance ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.cpp index a7ff6ba48c..708a0ee158 100644 --- a/source/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/Mesh/MeshAnimationInstance.cpp @@ -8,6 +8,8 @@ #include "Castor3D/Scene/Animation/AnimatedMesh.hpp" #include "Castor3D/Scene/Animation/Mesh/MeshAnimationInstanceSubmesh.hpp" +CU_ImplementSmartPtr( castor3d, MeshAnimationInstance ) + namespace castor3d { //************************************************************************************************* diff --git a/source/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.cpp index e7fe5417c0..29c679b1e1 100644 --- a/source/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/SceneNode/SceneNodeAnimationInstance.cpp @@ -6,6 +6,8 @@ #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" #include "Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.hpp" +CU_ImplementSmartPtr( castor3d, SceneNodeAnimationInstance ) + namespace castor3d { SceneNodeAnimationInstance::SceneNodeAnimationInstance( AnimatedSceneNode & object diff --git a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp index 7cc36a9988..bc4603bfee 100644 --- a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp +++ b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimation.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Scene/SceneNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SceneNodeAnimation ) +CU_ImplementSmartPtr( castor3d, SceneNodeAnimation ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp index a23763b7f0..222ef15108 100644 --- a/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp +++ b/source/Core/Castor3D/Scene/Animation/SceneNodeAnimationKeyFrame.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" -CU_ImplementCUSmartPtr( castor3d, SceneNodeAnimationKeyFrame ) +CU_ImplementSmartPtr( castor3d, SceneNodeAnimationKeyFrame ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp index c803977c63..a4be00dc6c 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstance.cpp @@ -10,7 +10,7 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstance ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationInstance ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp index 6d3c4ae198..c57cac45b3 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationBone.hpp" #include "Castor3D/Model/Skeleton/BoneNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceBone ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationInstanceBone ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp index 1bf6d9a40b..de1dc70699 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Model/Skeleton/Animation/SkeletonAnimationNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceNode ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationInstanceNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp index 8c7c1f6588..05abe310e4 100644 --- a/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp +++ b/source/Core/Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceObject.cpp @@ -5,7 +5,7 @@ #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceBone.hpp" #include "Castor3D/Scene/Animation/Skeleton/SkeletonAnimationInstanceNode.hpp" -CU_ImplementCUSmartPtr( castor3d, SkeletonAnimationInstanceObject ) +CU_ImplementSmartPtr( castor3d, SkeletonAnimationInstanceObject ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Animation/Texture/TextureAnimationInstance.cpp b/source/Core/Castor3D/Scene/Animation/Texture/TextureAnimationInstance.cpp index c1e780ca63..cd53a4ee65 100644 --- a/source/Core/Castor3D/Scene/Animation/Texture/TextureAnimationInstance.cpp +++ b/source/Core/Castor3D/Scene/Animation/Texture/TextureAnimationInstance.cpp @@ -6,6 +6,8 @@ #include "Castor3D/Material/Texture/Animation/TextureAnimationKeyFrame.hpp" #include "Castor3D/Scene/Animation/AnimatedTexture.hpp" +CU_ImplementSmartPtr( castor3d, TextureAnimationInstance ) + namespace castor3d { //************************************************************************************************* diff --git a/source/Core/Castor3D/Scene/Background/Background.cpp b/source/Core/Castor3D/Scene/Background/Background.cpp index 01e4a0917f..4e5b16f157 100644 --- a/source/Core/Castor3D/Scene/Background/Background.cpp +++ b/source/Core/Castor3D/Scene/Background/Background.cpp @@ -30,6 +30,8 @@ #include +CU_ImplementSmartPtr( castor3d, SceneBackground ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Scene/Background/Colour.cpp b/source/Core/Castor3D/Scene/Background/Colour.cpp index 06a8cd19fe..3a755e8043 100644 --- a/source/Core/Castor3D/Scene/Background/Colour.cpp +++ b/source/Core/Castor3D/Scene/Background/Colour.cpp @@ -19,6 +19,8 @@ #include #include +CU_ImplementSmartPtr( castor3d, ColourBackground ) + namespace castor3d { //************************************************************************************************ diff --git a/source/Core/Castor3D/Scene/Background/Image.cpp b/source/Core/Castor3D/Scene/Background/Image.cpp index ce04463917..2cdd8392ac 100644 --- a/source/Core/Castor3D/Scene/Background/Image.cpp +++ b/source/Core/Castor3D/Scene/Background/Image.cpp @@ -10,6 +10,8 @@ #include +CU_ImplementSmartPtr( castor3d, ImageBackground ) + namespace castor { using namespace castor3d; diff --git a/source/Core/Castor3D/Scene/Background/Skybox.cpp b/source/Core/Castor3D/Scene/Background/Skybox.cpp index a79a114856..fc619ae19c 100644 --- a/source/Core/Castor3D/Scene/Background/Skybox.cpp +++ b/source/Core/Castor3D/Scene/Background/Skybox.cpp @@ -24,6 +24,8 @@ #include +CU_ImplementSmartPtr( castor3d, SkyboxBackground ) + namespace castor { using namespace castor3d; diff --git a/source/Core/Castor3D/Scene/BillboardList.cpp b/source/Core/Castor3D/Scene/BillboardList.cpp index 769dbcd888..1fb5d32c44 100644 --- a/source/Core/Castor3D/Scene/BillboardList.cpp +++ b/source/Core/Castor3D/Scene/BillboardList.cpp @@ -9,8 +9,8 @@ #include "Castor3D/Render/Node/SceneRenderNodes.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, BillboardBase ) -CU_ImplementCUSmartPtr( castor3d, BillboardList ) +CU_ImplementSmartPtr( castor3d, BillboardBase ) +CU_ImplementSmartPtr( castor3d, BillboardList ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Camera.cpp b/source/Core/Castor3D/Scene/Camera.cpp index b17b6c1eb2..bec89bfc26 100644 --- a/source/Core/Castor3D/Scene/Camera.cpp +++ b/source/Core/Castor3D/Scene/Camera.cpp @@ -5,7 +5,7 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneNode.hpp" -CU_ImplementCUSmartPtr( castor3d, Camera ) +CU_ImplementSmartPtr( castor3d, Camera ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Geometry.cpp b/source/Core/Castor3D/Scene/Geometry.cpp index d0d44d0b77..dde9f746c1 100644 --- a/source/Core/Castor3D/Scene/Geometry.cpp +++ b/source/Core/Castor3D/Scene/Geometry.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Render/Node/SceneRenderNodes.hpp" #include "Castor3D/Scene/Scene.hpp" -CU_ImplementCUSmartPtr( castor3d, Geometry ) +CU_ImplementSmartPtr( castor3d, Geometry ) namespace castor3d { @@ -77,7 +77,12 @@ namespace castor3d if ( auto mesh = getMesh() ) { auto lock( castor::makeUniqueLock( m_mutex ) ); - CU_Require( submesh.getId() < mesh->getSubmeshCount() ); + + if ( submesh.getId() < mesh->getSubmeshCount() ) + { + CU_Failure( "Geometry::setMaterial" ); + } + bool changed = false; MaterialObs oldMaterial{}; auto itSubMat = m_submeshesMaterials.find( &submesh ); @@ -95,7 +100,7 @@ namespace castor3d else if ( material ) { oldMaterial = submesh.getDefaultMaterial(); - CU_Require( &submesh.getParent() == mesh.get() ); + CU_Require( &submesh.getParent() == mesh ); m_submeshesMaterials.emplace( &submesh, material ); changed = true; } @@ -275,7 +280,7 @@ namespace castor3d for ( auto & submesh : *mesh ) { - CU_Require( &submesh->getParent() == mesh.get() ); + CU_Require( &submesh->getParent() == mesh ); auto material = submesh->getDefaultMaterial(); m_submeshesMaterials.emplace( submesh.get(), material ); m_submeshesBoxes.emplace( submesh.get(), submesh->getBoundingBox() ); diff --git a/source/Core/Castor3D/Scene/Light/DirectionalLight.cpp b/source/Core/Castor3D/Scene/Light/DirectionalLight.cpp index 3b29e69720..dded6b9f43 100644 --- a/source/Core/Castor3D/Scene/Light/DirectionalLight.cpp +++ b/source/Core/Castor3D/Scene/Light/DirectionalLight.cpp @@ -172,7 +172,7 @@ namespace castor3d LightCategoryUPtr DirectionalLight::create( Light & light ) { - return std::unique_ptr< DirectionalLight >( new DirectionalLight{ light } ); + return LightCategoryUPtr( new DirectionalLight{ light } ); } void DirectionalLight::update() diff --git a/source/Core/Castor3D/Scene/Light/Light.cpp b/source/Core/Castor3D/Scene/Light/Light.cpp index bca86e46e5..a215738404 100644 --- a/source/Core/Castor3D/Scene/Light/Light.cpp +++ b/source/Core/Castor3D/Scene/Light/Light.cpp @@ -7,7 +7,7 @@ #include "Castor3D/Scene/Light/PointLight.hpp" #include "Castor3D/Scene/Light/SpotLight.hpp" -CU_ImplementCUSmartPtr( castor3d, Light ) +CU_ImplementSmartPtr( castor3d, Light ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Light/LightCategory.cpp b/source/Core/Castor3D/Scene/Light/LightCategory.cpp index 48137a6782..c60977cc66 100644 --- a/source/Core/Castor3D/Scene/Light/LightCategory.cpp +++ b/source/Core/Castor3D/Scene/Light/LightCategory.cpp @@ -7,6 +7,8 @@ #include +CU_ImplementSmartPtr( castor3d, LightCategory ) + namespace castor3d { LightCategory::LightCategory( LightType lightType, Light & light ) diff --git a/source/Core/Castor3D/Scene/Light/LightFactory.cpp b/source/Core/Castor3D/Scene/Light/LightFactory.cpp index 55fd88e896..52b4a2f98e 100644 --- a/source/Core/Castor3D/Scene/Light/LightFactory.cpp +++ b/source/Core/Castor3D/Scene/Light/LightFactory.cpp @@ -4,6 +4,8 @@ #include "Castor3D/Scene/Light/PointLight.hpp" #include "Castor3D/Scene/Light/SpotLight.hpp" +CU_ImplementSmartPtr( castor3d, LightFactory ) + namespace castor3d { LightFactory::LightFactory() diff --git a/source/Core/Castor3D/Scene/Light/LightImporter.cpp b/source/Core/Castor3D/Scene/Light/LightImporter.cpp index 459f227bc4..a18d38ed51 100644 --- a/source/Core/Castor3D/Scene/Light/LightImporter.cpp +++ b/source/Core/Castor3D/Scene/Light/LightImporter.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/Light/Light.hpp" +CU_ImplementSmartPtr( castor3d, LightImporter ) + namespace castor3d { LightImporter::LightImporter( Engine & engine ) diff --git a/source/Core/Castor3D/Scene/Light/PointLight.cpp b/source/Core/Castor3D/Scene/Light/PointLight.cpp index b32ca9ce8d..31565a3b65 100644 --- a/source/Core/Castor3D/Scene/Light/PointLight.cpp +++ b/source/Core/Castor3D/Scene/Light/PointLight.cpp @@ -38,7 +38,7 @@ namespace castor3d LightCategoryUPtr PointLight::create( Light & light ) { - return std::unique_ptr< PointLight >( new PointLight{ light } ); + return LightCategoryUPtr( new PointLight{ light } ); } castor::Point3fArray const & PointLight::generateVertices() diff --git a/source/Core/Castor3D/Scene/Light/SpotLight.cpp b/source/Core/Castor3D/Scene/Light/SpotLight.cpp index 2b69c50328..58bb03b68a 100644 --- a/source/Core/Castor3D/Scene/Light/SpotLight.cpp +++ b/source/Core/Castor3D/Scene/Light/SpotLight.cpp @@ -37,7 +37,7 @@ namespace castor3d LightCategoryUPtr SpotLight::create( Light & light ) { - return std::unique_ptr< SpotLight >( new SpotLight{ light } ); + return LightCategoryUPtr( new SpotLight{ light } ); } castor::Point3fArray const & SpotLight::generateVertices( uint32_t angle ) diff --git a/source/Core/Castor3D/Scene/MovableObject.cpp b/source/Core/Castor3D/Scene/MovableObject.cpp index b77c03cae1..990177098f 100644 --- a/source/Core/Castor3D/Scene/MovableObject.cpp +++ b/source/Core/Castor3D/Scene/MovableObject.cpp @@ -3,7 +3,7 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneNode.hpp" -CU_ImplementCUSmartPtr( castor3d, MovableObject ) +CU_ImplementSmartPtr( castor3d, MovableObject ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp index 8582bc2f5f..0b4bec735b 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ComputeParticleSystem.cpp @@ -22,7 +22,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ComputeParticleSystem ) +CU_ImplementSmartPtr( castor3d, ComputeParticleSystem ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/CpuParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/CpuParticleSystem.cpp index 6ebc6086bd..203012bd0e 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/CpuParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/CpuParticleSystem.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Scene/ParticleSystem/ParticleUpdater.hpp" #include "Castor3D/Scene/ParticleSystem/ParticleSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, CpuParticleSystem ) +CU_ImplementSmartPtr( castor3d, CpuParticleSystem ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleEmitter.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleEmitter.cpp index 313eda415c..7eca94d3cc 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleEmitter.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleEmitter.cpp @@ -2,7 +2,7 @@ #include "Castor3D/Scene/ParticleSystem/Particle.hpp" -CU_ImplementCUSmartPtr( castor3d, ParticleEmitter ) +CU_ImplementSmartPtr( castor3d, ParticleEmitter ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleModule.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleModule.cpp index 115c7da56d..0170abcd32 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleModule.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleModule.cpp @@ -3,8 +3,8 @@ #include "Castor3D/Cache/ObjectCache.hpp" #include "Castor3D/Scene/ParticleSystem/ParticleSystem.hpp" -CU_ImplementCUSmartPtr( castor3d, ParticleFactory ) -CU_ImplementCUSmartPtr( castor3d, ParticleSystemCache ) +CU_ImplementSmartPtr( castor3d, ParticleFactory ) +CU_ImplementSmartPtr( castor3d, ParticleSystemCache ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp index 48ab1d0e4b..6c500a34f4 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleSystem.cpp @@ -16,7 +16,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ParticleSystem ) +CU_ImplementSmartPtr( castor3d, ParticleSystem ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/ParticleSystem/ParticleUpdater.cpp b/source/Core/Castor3D/Scene/ParticleSystem/ParticleUpdater.cpp index 668c80f0fb..ceb00837d3 100644 --- a/source/Core/Castor3D/Scene/ParticleSystem/ParticleUpdater.cpp +++ b/source/Core/Castor3D/Scene/ParticleSystem/ParticleUpdater.cpp @@ -1,6 +1,6 @@ #include "Castor3D/Scene/ParticleSystem/ParticleUpdater.hpp" -CU_ImplementCUSmartPtr( castor3d, ParticleUpdater ) +CU_ImplementSmartPtr( castor3d, ParticleUpdater ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/Scene.cpp b/source/Core/Castor3D/Scene/Scene.cpp index 0c27660bd0..4d3bde412b 100644 --- a/source/Core/Castor3D/Scene/Scene.cpp +++ b/source/Core/Castor3D/Scene/Scene.cpp @@ -45,7 +45,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d, Scene ) +CU_ImplementSmartPtr( castor3d, Scene ) namespace castor3d { @@ -108,8 +108,8 @@ namespace castor3d , m_rootNode{ m_sceneNodeCache->find( RootNode ) } , m_rootCameraNode{ m_sceneNodeCache->find( CameraRootNode ) } , m_rootObjectNode{ m_sceneNodeCache->find( ObjectRootNode ) } - , m_background{ std::make_shared< ColourBackground >( engine, *this ) } - , m_lightFactory{ std::make_shared< LightFactory >() } + , m_background{ castor::makeUniqueDerived< SceneBackground, ColourBackground >( engine, *this ) } + , m_lightFactory{ castor::makeUnique< LightFactory >() } , m_listener{ engine.addNewFrameListener( cuT( "Scene_" ) + name + castor::string::toString( intptr_t( this ) ) ) } , m_renderNodes{ castor::makeUnique< SceneRenderNodes >( *this ) } { @@ -213,7 +213,7 @@ namespace castor3d m_animatedObjectGroupCache->add( cuT( "C3D_Textures" ), *this ); auto & device = engine.getRenderSystem()->getRenderDevice(); auto data = device.graphicsData(); - m_reflectionMap = std::make_unique< EnvironmentMap >( m_resources + m_reflectionMap = castor::makeUnique< EnvironmentMap >( m_resources , device , *data , *this ); @@ -370,7 +370,6 @@ namespace castor3d m_renderNodes->clear(); - // These ones, being ResourceCache, need to be cleared in destructor only m_meshCache->cleanup(); if ( m_cleanBackground ) @@ -467,7 +466,7 @@ namespace castor3d } ); } - void Scene::setBackground( SceneBackgroundSPtr value ) + void Scene::setBackground( SceneBackgroundUPtr value ) { m_background = std::move( value ); m_background->initialise( getEngine()->getRenderSystem()->getRenderDevice() ); diff --git a/source/Core/Castor3D/Scene/SceneFileParser.cpp b/source/Core/Castor3D/Scene/SceneFileParser.cpp index a66ccf7d64..07aab62f55 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser.cpp @@ -13,8 +13,8 @@ #define C3D_PrintParsers 0 -CU_ImplementCUSmartPtr( castor3d, SceneFileContext ) -CU_ImplementCUSmartPtr( castor3d, SceneFileParser ) +CU_ImplementSmartPtr( castor3d, SceneFileContext ) +CU_ImplementSmartPtr( castor3d, SceneFileParser ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp index 98d8d9dfe8..12ef5ce2e6 100644 --- a/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp +++ b/source/Core/Castor3D/Scene/SceneFileParser_Parsers.cpp @@ -365,21 +365,21 @@ namespace castor3d else { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel , nullptr - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::ePanelOverlay ) @@ -395,21 +395,21 @@ namespace castor3d else { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel , nullptr - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::eBorderPanelOverlay ) @@ -425,21 +425,21 @@ namespace castor3d else { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText , nullptr - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::eTextOverlay ) @@ -1095,11 +1095,11 @@ namespace castor3d } else if ( !params.empty() ) { - auto imgBackground = std::make_shared< ImageBackground >( *parsingContext.parser->getEngine() + auto imgBackground = castor::makeUnique< ImageBackground >( *parsingContext.parser->getEngine() , *parsingContext.scene ); castor::Path path; imgBackground->loadImage( context.file.getPath(), params[0]->get( path ) ); - parsingContext.scene->setBackground( imgBackground ); + parsingContext.scene->setBackground( castor::ptrRefCast< SceneBackground >( imgBackground ) ); parsingContext.skybox.reset(); } } @@ -1281,21 +1281,21 @@ namespace castor3d else if ( !params.empty() ) { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel , parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::ePanelOverlay ) @@ -1311,21 +1311,21 @@ namespace castor3d else if ( !params.empty() ) { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel , parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::eBorderPanelOverlay ) @@ -1341,21 +1341,21 @@ namespace castor3d else if ( !params.empty() ) { castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText , parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } } CU_EndAttributePush( CSCNSection::eTextOverlay ) @@ -1370,7 +1370,7 @@ namespace castor3d } else { - parsingContext.skybox = std::make_shared< SkyboxBackground >( *parsingContext.parser->getEngine() + parsingContext.skybox = castor::makeUnique< SkyboxBackground >( *parsingContext.parser->getEngine() , *parsingContext.scene ); } } @@ -4868,11 +4868,11 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay ) + if ( parsingContext.overlay.rptr ) { castor::Point2d ptPosition; params[0]->get( ptPosition ); - parsingContext.overlay->setRelativePosition( ptPosition ); + parsingContext.overlay.rptr->setRelativePosition( ptPosition ); } else { @@ -4885,11 +4885,11 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay ) + if ( parsingContext.overlay.rptr ) { castor::Point2d ptSize; params[0]->get( ptSize ); - parsingContext.overlay->setRelativeSize( ptSize ); + parsingContext.overlay.rptr->setRelativeSize( ptSize ); } else { @@ -4902,11 +4902,11 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay ) + if ( parsingContext.overlay.rptr ) { castor::Size size; params[0]->get( size ); - parsingContext.overlay->setPixelSize( size ); + parsingContext.overlay.rptr->setPixelSize( size ); } else { @@ -4919,11 +4919,11 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay ) + if ( parsingContext.overlay.rptr ) { castor::Position position; params[0]->get( position ); - parsingContext.overlay->setPixelPosition( position ); + parsingContext.overlay.rptr->setPixelPosition( position ); } else { @@ -4936,11 +4936,11 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay ) + if ( parsingContext.overlay.rptr ) { castor::String name; params[0]->get( name ); - parsingContext.overlay->setMaterial( parsingContext.parser->getEngine()->findMaterial( name ) ); + parsingContext.overlay.rptr->setMaterial( parsingContext.parser->getEngine()->findMaterial( name ) ); } else { @@ -4953,23 +4953,23 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::ePanel - , parent ? parent->getScene() : parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ? parent.rptr->getScene() : parsingContext.scene + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } CU_EndAttributePush( CSCNSection::ePanelOverlay ) @@ -4977,23 +4977,23 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eBorderPanel - , parent ? parent->getScene() : parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ? parent.rptr->getScene() : parsingContext.scene + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } CU_EndAttributePush( CSCNSection::eBorderPanelOverlay ) @@ -5001,23 +5001,23 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); castor::String name; - parsingContext.parentOverlays.push_back( parsingContext.overlay ); - auto parent = parsingContext.parentOverlays.back(); - parsingContext.overlay = parsingContext.scene + parsingContext.parentOverlays.push_back( std::move( parsingContext.overlay ) ); + auto & parent = parsingContext.parentOverlays.back(); + parsingContext.overlay.rptr = parsingContext.scene ? parsingContext.scene->tryFindOverlay( params[0]->get( name ) ) : parsingContext.parser->getEngine()->tryFindOverlay( params[0]->get( name ) ); - if ( !parsingContext.overlay ) + if ( !parsingContext.overlay.rptr ) { - parsingContext.ownOverlay = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() + parsingContext.overlay.uptr = castor::makeUnique< Overlay >( *parsingContext.parser->getEngine() , OverlayType::eText - , parent ? parent->getScene() : parsingContext.scene - , parent ); - parsingContext.overlay = parsingContext.ownOverlay.get(); - parsingContext.overlay->rename( name ); + , parent.rptr ? parent.rptr->getScene() : parsingContext.scene + , parent.rptr ); + parsingContext.overlay.rptr = parsingContext.overlay.uptr.get(); + parsingContext.overlay.rptr->rename( name ); } - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); } CU_EndAttributePush( CSCNSection::eTextOverlay ) @@ -5025,43 +5025,43 @@ namespace castor3d { auto & parsingContext = getParserContext( context ); - if ( parsingContext.overlay->getType() == OverlayType::eText ) + if ( parsingContext.overlay.rptr->getType() == OverlayType::eText ) { - auto textOverlay = parsingContext.overlay->getTextOverlay(); + auto textOverlay = parsingContext.overlay.rptr->getTextOverlay(); if ( textOverlay->getFontTexture() ) { - parsingContext.overlay->setVisible( true ); + parsingContext.overlay.rptr->setVisible( true ); } else { - parsingContext.overlay->setVisible( false ); + parsingContext.overlay.rptr->setVisible( false ); CU_ParsingError( cuT( "TextOverlay's font has not been set, it will not be rendered" ) ); } } else { - parsingContext.overlay->setVisible( true ); + parsingContext.overlay.rptr->setVisible( true ); } - if ( parsingContext.ownOverlay ) + if ( parsingContext.overlay.uptr ) { if ( parsingContext.scene ) { - parsingContext.scene->addOverlay( parsingContext.overlay->getName() - , parsingContext.ownOverlay + parsingContext.scene->addOverlay( parsingContext.overlay.rptr->getName() + , parsingContext.overlay.uptr , true ); } else { - parsingContext.parser->getEngine()->addOverlay( parsingContext.overlay->getName() - , parsingContext.ownOverlay + parsingContext.parser->getEngine()->addOverlay( parsingContext.overlay.rptr->getName() + , parsingContext.overlay.uptr , true ); } } CU_Require( !parsingContext.parentOverlays.empty() ); - parsingContext.overlay = parsingContext.parentOverlays.back(); + parsingContext.overlay = std::move( parsingContext.parentOverlays.back() ); parsingContext.parentOverlays.pop_back(); } CU_EndAttributePop() @@ -5069,7 +5069,7 @@ namespace castor3d CU_ImplementAttributeParser( parserPanelOverlayUvs ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::ePanel ) { @@ -5087,7 +5087,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlaySizes ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5105,7 +5105,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayPixelSizes ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5123,7 +5123,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayMaterial ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5141,7 +5141,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayPosition ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5159,7 +5159,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayCenterUvs ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5177,7 +5177,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayOuterUvs ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5195,7 +5195,7 @@ namespace castor3d CU_ImplementAttributeParser( parserBorderPanelOverlayInnerUvs ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eBorderPanel ) { @@ -5213,7 +5213,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayFont ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5240,7 +5240,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayTextWrapping ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5259,7 +5259,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayVerticalAlign ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5278,7 +5278,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayHorizontalAlign ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5297,7 +5297,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayTexturingMode ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5316,7 +5316,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayLineSpacingMode ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; if ( overlay && overlay->getType() == OverlayType::eText ) { @@ -5335,7 +5335,7 @@ namespace castor3d CU_ImplementAttributeParser( parserTextOverlayText ) { auto & parsingContext = getParserContext( context ); - auto overlay = parsingContext.overlay; + auto overlay = parsingContext.overlay.rptr; castor::String strParams; params[0]->get( strParams ); @@ -5384,7 +5384,7 @@ namespace castor3d CU_ImplementAttributeParser( parserCameraViewport ) { auto & parsingContext = getParserContext( context ); - parsingContext.viewport = std::make_shared< Viewport >( *parsingContext.parser->getEngine() ); + parsingContext.viewport = castor::makeUnique< Viewport >( *parsingContext.parser->getEngine() ); parsingContext.viewport->setPerspective( 0.0_degrees, 1, 0, 1 ); } CU_EndAttributePush( CSCNSection::eViewport ) @@ -5427,10 +5427,9 @@ namespace castor3d auto camera = parsingContext.scene->addNewCamera( parsingContext.strName , *parsingContext.scene , *node - , std::move( *parsingContext.viewport ) ); + , std::move( *parsingContext.viewport.release() ) ); camera->setGamma( parsingContext.point2f[0] ); camera->setExposure( parsingContext.point2f[1] ); - parsingContext.viewport.reset(); } } CU_EndAttributePop() @@ -6163,7 +6162,7 @@ namespace castor3d if ( parsingContext.skybox ) { - parsingContext.scene->setBackground( std::move( parsingContext.skybox ) ); + parsingContext.scene->setBackground( castor::ptrRefCast< SceneBackground >( parsingContext.skybox ) ); } else { diff --git a/source/Core/Castor3D/Scene/SceneImporter.cpp b/source/Core/Castor3D/Scene/SceneImporter.cpp index 2e12a3ea34..1e927fabd3 100644 --- a/source/Core/Castor3D/Scene/SceneImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneImporter.cpp @@ -20,6 +20,8 @@ #include "Castor3D/Scene/Light/Light.hpp" #include "Castor3D/Scene/Light/LightImporter.hpp" +CU_ImplementSmartPtr( castor3d, SceneImporter ) + namespace castor3d { //********************************************************************************************* diff --git a/source/Core/Castor3D/Scene/SceneModule.cpp b/source/Core/Castor3D/Scene/SceneModule.cpp index 3b72df6939..857d37314b 100644 --- a/source/Core/Castor3D/Scene/SceneModule.cpp +++ b/source/Core/Castor3D/Scene/SceneModule.cpp @@ -7,11 +7,11 @@ #include "Castor3D/Scene/SceneNode.hpp" CU_ImplementExportedOwnedBy( castor3d::Scene, Scene ) -CU_ImplementCUSmartPtr( castor3d, CameraCache ) -CU_ImplementCUSmartPtr( castor3d, SceneCache ) -CU_ImplementCUSmartPtr( castor3d, MaterialCacheView ) -CU_ImplementCUSmartPtr( castor3d, SamplerCacheView ) -CU_ImplementCUSmartPtr( castor3d, FontCacheView ) +CU_ImplementSmartPtr( castor3d, CameraCache ) +CU_ImplementSmartPtr( castor3d, SceneCache ) +CU_ImplementSmartPtr( castor3d, MaterialCacheView ) +CU_ImplementSmartPtr( castor3d, SamplerCacheView ) +CU_ImplementSmartPtr( castor3d, FontCacheView ) namespace castor3d diff --git a/source/Core/Castor3D/Scene/SceneNode.cpp b/source/Core/Castor3D/Scene/SceneNode.cpp index fb5a202180..a0847ee685 100644 --- a/source/Core/Castor3D/Scene/SceneNode.cpp +++ b/source/Core/Castor3D/Scene/SceneNode.cpp @@ -8,7 +8,7 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/Animation/SceneNodeAnimation.hpp" -CU_ImplementCUSmartPtr( castor3d, SceneNode ) +CU_ImplementSmartPtr( castor3d, SceneNode ) namespace castor3d { diff --git a/source/Core/Castor3D/Scene/SceneNodeImporter.cpp b/source/Core/Castor3D/Scene/SceneNodeImporter.cpp index 39b18311fd..3b5707e2aa 100644 --- a/source/Core/Castor3D/Scene/SceneNodeImporter.cpp +++ b/source/Core/Castor3D/Scene/SceneNodeImporter.cpp @@ -5,6 +5,8 @@ #include "Castor3D/Scene/Scene.hpp" #include "Castor3D/Scene/SceneNode.hpp" +CU_ImplementSmartPtr( castor3d, SceneNodeImporter ) + namespace castor3d { SceneNodeImporter::SceneNodeImporter( Engine & engine ) diff --git a/source/Core/Castor3D/Shader/LightingModelFactory.cpp b/source/Core/Castor3D/Shader/LightingModelFactory.cpp index e98e757a14..07e4941076 100644 --- a/source/Core/Castor3D/Shader/LightingModelFactory.cpp +++ b/source/Core/Castor3D/Shader/LightingModelFactory.cpp @@ -5,7 +5,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, LightingModelFactory ) +CU_ImplementSmartPtr( castor3d, LightingModelFactory ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/Program.cpp b/source/Core/Castor3D/Shader/Program.cpp index bd682c3050..56a07f36cb 100644 --- a/source/Core/Castor3D/Shader/Program.cpp +++ b/source/Core/Castor3D/Shader/Program.cpp @@ -4,7 +4,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ShaderProgram ) +CU_ImplementSmartPtr( castor3d, ShaderProgram ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffer.cpp index af733c0ea8..43c2d98b7e 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffer.cpp @@ -8,7 +8,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, ShaderBuffer ) +CU_ImplementSmartPtr( castor3d, ShaderBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/FontGlyphBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/FontGlyphBuffer.cpp index 8a18a5dc5c..5ebc548e81 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/FontGlyphBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/FontGlyphBuffer.cpp @@ -8,7 +8,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, FontGlyphBuffer ) +CU_ImplementSmartPtr( castor3d, FontGlyphBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/LightBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/LightBuffer.cpp index 4f0b983a12..c6d3f7d295 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/LightBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/LightBuffer.cpp @@ -7,7 +7,7 @@ #include "Castor3D/Scene/Light/SpotLight.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" -CU_ImplementCUSmartPtr( castor3d, LightBuffer ) +CU_ImplementSmartPtr( castor3d, LightBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp index a8cb8d4d4e..2f3f28ed94 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/PassBuffer.cpp @@ -9,7 +9,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, PassBuffer ) +CU_ImplementSmartPtr( castor3d, PassBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/SssProfileBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/SssProfileBuffer.cpp index b11be6a0d2..a1b003aae9 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/SssProfileBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/SssProfileBuffer.cpp @@ -5,7 +5,7 @@ #include "Castor3D/Material/Pass/Component/Lighting/SubsurfaceScatteringComponent.hpp" #include "Castor3D/Shader/Shaders/SdwModule.hpp" -CU_ImplementCUSmartPtr( castor3d, SssProfileBuffer ) +CU_ImplementSmartPtr( castor3d, SssProfileBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/TextureAnimationBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/TextureAnimationBuffer.cpp index bb65311ad9..e3e3ef850f 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/TextureAnimationBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/TextureAnimationBuffer.cpp @@ -10,7 +10,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, TextureAnimationBuffer ) +CU_ImplementSmartPtr( castor3d, TextureAnimationBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp b/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp index e2dba3e3c1..0def34f678 100644 --- a/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp +++ b/source/Core/Castor3D/Shader/ShaderBuffers/TextureConfigurationBuffer.cpp @@ -10,7 +10,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, TextureConfigurationBuffer ) +CU_ImplementSmartPtr( castor3d, TextureConfigurationBuffer ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/ShaderModule.cpp b/source/Core/Castor3D/Shader/ShaderModule.cpp index 8a0027378a..6ebb604dec 100644 --- a/source/Core/Castor3D/Shader/ShaderModule.cpp +++ b/source/Core/Castor3D/Shader/ShaderModule.cpp @@ -8,7 +8,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d::shader, BufferBase ) +CU_ImplementSmartPtr( castor3d::shader, BufferBase ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/Shaders/GlslLight.cpp b/source/Core/Castor3D/Shader/Shaders/GlslLight.cpp index cee88c5f01..67ec406c4e 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslLight.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslLight.cpp @@ -15,6 +15,8 @@ #include +CU_ImplementSmartPtr( castor3d::shader, LightsBuffer ) + namespace castor3d::shader { //********************************************************************************************* @@ -250,9 +252,9 @@ namespace castor3d::shader , m_brdf{ brdf } , m_utils{ utils } , m_enableVolumetric{ enableVolumetric } - , m_shadowModel{ std::make_shared< Shadow >( shadowOptions, m_writer ) } + , m_shadowModel{ castor::makeUnique< Shadow >( shadowOptions, m_writer ) } , m_sssTransmittance{ ( sssProfiles - ? std::make_shared< SssTransmittance >( m_writer + ? castor::makeUnique< SssTransmittance >( m_writer , std::move( shadowOptions ) , *sssProfiles ) : nullptr ) } @@ -283,7 +285,7 @@ namespace castor3d::shader , enableVolumetric } { m_shadowModel->declare( shadowMapBinding, shadowMapSet ); - m_lightsBuffer = std::make_unique< LightsBuffer >( m_writer + m_lightsBuffer = castor::makeUnique< LightsBuffer >( m_writer , lightsBufBinding , lightsBufSet ); } @@ -328,7 +330,7 @@ namespace castor3d::shader break; } - m_lightsBuffer = std::make_unique< LightsBuffer >( m_writer + m_lightsBuffer = castor::makeUnique< LightsBuffer >( m_writer , lightsBufBinding , lightsBufSet ); } diff --git a/source/Core/Castor3D/Shader/Shaders/GlslLighting.cpp b/source/Core/Castor3D/Shader/Shaders/GlslLighting.cpp index 0bb6cdf8e7..558c23718c 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslLighting.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslLighting.cpp @@ -20,7 +20,7 @@ #include #include -CU_ImplementCUSmartPtr( castor3d::shader, LightingModel ) +CU_ImplementSmartPtr( castor3d::shader, LightingModel ) namespace castor3d::shader { diff --git a/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp b/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp index 6682567bf1..b6681f9c65 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslMaterial.cpp @@ -13,6 +13,8 @@ #include #include +CU_ImplementSmartPtr( castor3d::shader, Material ) + namespace castor3d::shader { //********************************************************************************************* diff --git a/source/Core/Castor3D/Shader/Shaders/GlslShadow.cpp b/source/Core/Castor3D/Shader/Shaders/GlslShadow.cpp index a7caab0486..635f30ebb6 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslShadow.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslShadow.cpp @@ -14,6 +14,8 @@ #include #include +CU_ImplementSmartPtr( castor3d::shader, Shadow ) + namespace castor3d { namespace shader diff --git a/source/Core/Castor3D/Shader/Shaders/GlslSssTransmittance.cpp b/source/Core/Castor3D/Shader/Shaders/GlslSssTransmittance.cpp index 9fddaa8abb..d402978315 100644 --- a/source/Core/Castor3D/Shader/Shaders/GlslSssTransmittance.cpp +++ b/source/Core/Castor3D/Shader/Shaders/GlslSssTransmittance.cpp @@ -11,6 +11,8 @@ #include +CU_ImplementSmartPtr( castor3d::shader, SssTransmittance ) + namespace castor3d { namespace shader diff --git a/source/Core/Castor3D/Shader/Ubos/LayeredLpvGridConfigUbo.cpp b/source/Core/Castor3D/Shader/Ubos/LayeredLpvGridConfigUbo.cpp index 0e7d3d4810..f013dff652 100644 --- a/source/Core/Castor3D/Shader/Ubos/LayeredLpvGridConfigUbo.cpp +++ b/source/Core/Castor3D/Shader/Ubos/LayeredLpvGridConfigUbo.cpp @@ -7,7 +7,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, LayeredLpvGridConfigUbo ) +CU_ImplementSmartPtr( castor3d, LayeredLpvGridConfigUbo ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/Ubos/LpvGridConfigUbo.cpp b/source/Core/Castor3D/Shader/Ubos/LpvGridConfigUbo.cpp index 3d0f735a45..2df58de17d 100644 --- a/source/Core/Castor3D/Shader/Ubos/LpvGridConfigUbo.cpp +++ b/source/Core/Castor3D/Shader/Ubos/LpvGridConfigUbo.cpp @@ -12,7 +12,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, LpvGridConfigUbo ) +CU_ImplementSmartPtr( castor3d, LpvGridConfigUbo ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/Ubos/LpvLightConfigUbo.cpp b/source/Core/Castor3D/Shader/Ubos/LpvLightConfigUbo.cpp index 073151cb53..85ad360e2b 100644 --- a/source/Core/Castor3D/Shader/Ubos/LpvLightConfigUbo.cpp +++ b/source/Core/Castor3D/Shader/Ubos/LpvLightConfigUbo.cpp @@ -15,7 +15,7 @@ #pragma GCC diagnostic ignored "-Wuseless-cast" -CU_ImplementCUSmartPtr( castor3d, LpvLightConfigUbo ) +CU_ImplementSmartPtr( castor3d, LpvLightConfigUbo ) namespace castor3d { diff --git a/source/Core/Castor3D/Shader/Ubos/SceneUbo.cpp b/source/Core/Castor3D/Shader/Ubos/SceneUbo.cpp index d4d04ed0de..b40d8867a9 100644 --- a/source/Core/Castor3D/Shader/Ubos/SceneUbo.cpp +++ b/source/Core/Castor3D/Shader/Ubos/SceneUbo.cpp @@ -15,7 +15,7 @@ #include -CU_ImplementCUSmartPtr( castor3d, SceneUbo ) +CU_ImplementSmartPtr( castor3d, SceneUbo ) namespace castor3d { diff --git a/source/Core/CastorUtils/CMakeLists.txt b/source/Core/CastorUtils/CMakeLists.txt index 493b7bcbec..a80c87b04c 100644 --- a/source/Core/CastorUtils/CMakeLists.txt +++ b/source/Core/CastorUtils/CMakeLists.txt @@ -215,8 +215,6 @@ if ( ZLIB_FOUND AND FreeType_FOUND ) ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/ArrayView.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/BlockGuard.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/ChangeTracked.hpp - ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/Collection.hpp - ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/Collection.inl ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/DataHolder.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/DelayedInitialiser.hpp ${CASTOR_SOURCE_DIR}/include/Core/${PROJECT_NAME}/Design/DesignModule.hpp diff --git a/source/Core/CastorUtils/CastorUtilsPrerequisites.cpp b/source/Core/CastorUtils/CastorUtilsPrerequisites.cpp index 370056cf03..af68d3fb8c 100644 --- a/source/Core/CastorUtils/CastorUtilsPrerequisites.cpp +++ b/source/Core/CastorUtils/CastorUtilsPrerequisites.cpp @@ -9,8 +9,6 @@ namespace castor { - DummyDtor g_dummyDtor; - Point3f operator*( Matrix4x4f const & lhs, Point3f const & rhs ) { float const * mtx = lhs.constPtr(); diff --git a/source/Core/CastorUtils/FileParser/FileParserContext.cpp b/source/Core/CastorUtils/FileParser/FileParserContext.cpp index ed8aa28f8b..060c837d9e 100644 --- a/source/Core/CastorUtils/FileParser/FileParserContext.cpp +++ b/source/Core/CastorUtils/FileParser/FileParserContext.cpp @@ -2,7 +2,7 @@ #include "CastorUtils/FileParser/FileParser.hpp" -CU_ImplementCUSmartPtr( castor, FileParserContext ) +CU_ImplementSmartPtr( castor, FileParserContext ) namespace castor { diff --git a/source/Core/CastorUtils/Graphics/BoundingBox.cpp b/source/Core/CastorUtils/Graphics/BoundingBox.cpp index ad9094d6b2..0cb976e5e5 100644 --- a/source/Core/CastorUtils/Graphics/BoundingBox.cpp +++ b/source/Core/CastorUtils/Graphics/BoundingBox.cpp @@ -2,7 +2,7 @@ #include "CastorUtils/Design/ArrayView.hpp" -CU_ImplementCUSmartPtr( castor, BoundingBox ) +CU_ImplementSmartPtr( castor, BoundingBox ) namespace castor { diff --git a/source/Core/CastorUtils/Graphics/BoundingSphere.cpp b/source/Core/CastorUtils/Graphics/BoundingSphere.cpp index 3f7ff32b76..4905268a12 100644 --- a/source/Core/CastorUtils/Graphics/BoundingSphere.cpp +++ b/source/Core/CastorUtils/Graphics/BoundingSphere.cpp @@ -1,7 +1,7 @@ #include "CastorUtils/Graphics/BoundingSphere.hpp" #include "CastorUtils/Graphics/BoundingBox.hpp" -CU_ImplementCUSmartPtr( castor, BoundingSphere ) +CU_ImplementSmartPtr( castor, BoundingSphere ) namespace castor { diff --git a/source/Core/CastorUtils/Graphics/Font.cpp b/source/Core/CastorUtils/Graphics/Font.cpp index 63963d361f..7e8c059ec3 100644 --- a/source/Core/CastorUtils/Graphics/Font.cpp +++ b/source/Core/CastorUtils/Graphics/Font.cpp @@ -7,7 +7,7 @@ FT_BEGIN_HEADER # include FT_GLYPH_H FT_END_HEADER -CU_ImplementCUSmartPtr( castor, Font ) +CU_ImplementSmartPtr( castor, Font ) namespace castor { diff --git a/source/Core/CastorUtils/Graphics/FontCache.cpp b/source/Core/CastorUtils/Graphics/FontCache.cpp index 14c482264e..cf9d548917 100644 --- a/source/Core/CastorUtils/Graphics/FontCache.cpp +++ b/source/Core/CastorUtils/Graphics/FontCache.cpp @@ -5,7 +5,7 @@ #include "CastorUtils/Log/Logger.hpp" #include "CastorUtils/Miscellaneous/StringUtils.hpp" -CU_ImplementCUSmartPtr( castor, FontCache ) +CU_ImplementSmartPtr( castor, FontCache ) namespace castor { diff --git a/source/Core/CastorUtils/Graphics/Image.cpp b/source/Core/CastorUtils/Graphics/Image.cpp index 1493e04a69..026c363e8f 100644 --- a/source/Core/CastorUtils/Graphics/Image.cpp +++ b/source/Core/CastorUtils/Graphics/Image.cpp @@ -11,7 +11,7 @@ #include "stb_image_resize.h" #include "CastorUtils/Config/EndExternHeaderGuard.hpp" -CU_ImplementCUSmartPtr( castor, Image ) +CU_ImplementSmartPtr( castor, Image ) namespace castor { @@ -76,7 +76,7 @@ namespace castor { m_pathFile = image.m_pathFile; m_layout = image.m_layout; - m_buffer = std::move( image.m_buffer ? image.m_buffer->clone() : nullptr ); + m_buffer = image.m_buffer ? image.m_buffer->clone() : nullptr; return * this; } diff --git a/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp b/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp index 4485f1c49b..5002a86b04 100644 --- a/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp +++ b/source/Core/CastorUtils/Graphics/PixelBufferBase.cpp @@ -11,7 +11,7 @@ #include "stb_image_resize.h" #include "CastorUtils/Config/EndExternHeaderGuard.hpp" -CU_ImplementCUSmartPtr( castor, PxBufferBase ) +CU_ImplementSmartPtr( castor, PxBufferBase ) namespace castor { diff --git a/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp b/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp index 4f2eb47bb4..e9c6c44c15 100644 --- a/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp +++ b/source/Core/CastorUtils/Miscellaneous/DynamicLibrary.cpp @@ -1,6 +1,6 @@ #include "CastorUtils/Miscellaneous/DynamicLibrary.hpp" -CU_ImplementCUSmartPtr( castor, DynamicLibrary ) +CU_ImplementSmartPtr( castor, DynamicLibrary ) namespace castor { diff --git a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp index 51547e2554..9f86c2a706 100644 --- a/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp +++ b/source/Plugins/Generators/DiamondSquareTerrain/DiamondSquareTerrain.cpp @@ -58,7 +58,7 @@ namespace diamond_square_terrain castor3d::MeshGeneratorUPtr Generator::create() { - return std::make_unique< Generator >(); + return castor::makeUniqueDerived< castor3d::MeshGenerator, Generator >(); } void Generator::doGenerate( castor3d::Mesh & mesh diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp index 086ac41f63..c0f8f9b90d 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereBackground.cpp @@ -26,6 +26,8 @@ //************************************************************************************************* +CU_ImplementSmartPtr( atmosphere_scattering, AtmosphereBackground ) + namespace castor { using namespace castor3d; diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScatteringPrerequisites.hpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScatteringPrerequisites.hpp index 5d6e5efdf9..dcd1d78a09 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScatteringPrerequisites.hpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScatteringPrerequisites.hpp @@ -26,6 +26,8 @@ namespace atmosphere_scattering struct CloudsData; struct WeatherData; + CU_DeclareSmartPtr( atmosphere_scattering, AtmosphereBackground, ); + template< template< typename DataT > typename WrapperT > struct AtmosphereScatteringConfigT; using AtmosphereScatteringConfig = AtmosphereScatteringConfigT< crg::RawTypeT >; diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp index 928788b0f3..f2bf429ac5 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.cpp @@ -29,7 +29,7 @@ namespace atmosphere_scattering { auto & parsingContext = castor3d::getSceneParserContext( context ); auto & atmosphereContext = parser::getParserContext( context ); - atmosphereContext.background = std::make_unique< AtmosphereBackground >( *parsingContext.parser->getEngine() + atmosphereContext.background = castor::makeUnique< AtmosphereBackground >( *parsingContext.parser->getEngine() , *parsingContext.scene ); } CU_EndAttributePush( AtmosphereSection::eRoot ) @@ -61,7 +61,7 @@ namespace atmosphere_scattering atmosphereContext.background->loadPerlinWorley( atmosphereContext.perlinWorleyDim ); atmosphereContext.background->loadCurl( atmosphereContext.curlDim ); atmosphereContext.background->loadWeather( atmosphereContext.weatherDim ); - parsingContext.scene->setBackground( std::move( atmosphereContext.background ) ); + parsingContext.scene->setBackground( castor::ptrRefCast< castor3d::SceneBackground >( atmosphereContext.background ) ); } } CU_EndAttributePop() diff --git a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.hpp b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.hpp index 2758f72b90..df06036d18 100644 --- a/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.hpp +++ b/source/Plugins/Generic/AtmosphereScattering/AtmosphereScattering_Parsers.hpp @@ -33,7 +33,7 @@ namespace atmosphere_scattering WeatherConfig weather{}; CloudsConfig clouds{}; DensityProfileLayer * densityLayer{}; - std::unique_ptr< AtmosphereBackground > background; + AtmosphereBackgroundUPtr background; }; enum class AtmosphereSection diff --git a/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.cpp b/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.cpp index 56faf6b8a7..f1766558e5 100644 --- a/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.cpp @@ -328,7 +328,7 @@ namespace ocean_fft , ashes::BufferBase const & displacement , std::array< castor3d::Texture, 2u > const & heightDisp , std::array< castor3d::Texture, 2u > const & gradJacob - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "BakeHeightGradient" , [&device, extent, heightMapSize, displacementDownsample, isEnabled]( crg::FramePass const & framePass diff --git a/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.hpp b/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.hpp index 49a4148dc3..437c314f18 100644 --- a/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/BakeHeightGradientPass.hpp @@ -90,7 +90,7 @@ namespace ocean_fft , ashes::BufferBase const & displacement , std::array< castor3d::Texture, 2u > const & heightDisp , std::array< castor3d::Texture, 2u > const & gradJacob - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledRPtr isEnabled ); } #endif diff --git a/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.cpp b/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.cpp index 7be9b5ee69..338cf1e6d9 100644 --- a/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.cpp @@ -227,7 +227,7 @@ namespace ocean_fft , OceanUbo const & ubo , ashes::BufferBase const & input , ashes::BufferBase const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "GenerateDistribution" + name , [&device, downsample, extent, isEnabled]( crg::FramePass const & framePass diff --git a/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.hpp b/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.hpp index d4d189b3b6..a9b720782c 100644 --- a/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/DownsampleDistributionPass.hpp @@ -76,7 +76,7 @@ namespace ocean_fft , OceanUbo const & ubo , ashes::BufferBase const & input , ashes::BufferBase const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledRPtr isEnabled ); } #endif diff --git a/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.cpp b/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.cpp index c2f686390e..2af7c84344 100644 --- a/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.cpp @@ -258,7 +258,7 @@ namespace ocean_fft , OceanUbo const & ubo , ashes::BufferBase const & input , ashes::BufferBase const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "GenerateDistribution" + name , [&device, normals, extent, isEnabled]( crg::FramePass const & framePass diff --git a/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.hpp b/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.hpp index 099127f819..0752dd419d 100644 --- a/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/GenerateDistributionPass.hpp @@ -76,7 +76,7 @@ namespace ocean_fft , OceanUbo const & ubo , ashes::BufferBase const & input , ashes::BufferBase const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledRPtr isEnabled ); } #endif diff --git a/source/Plugins/Generic/FFTOceanRendering/OceanFFT.cpp b/source/Plugins/Generic/FFTOceanRendering/OceanFFT.cpp index f81615512a..ba7e96927b 100644 --- a/source/Plugins/Generic/FFTOceanRendering/OceanFFT.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/OceanFFT.cpp @@ -29,7 +29,7 @@ namespace ocean_fft , crg::FramePassGroup & graph , crg::FramePass const * previousPass , crg::ImageViewId imageView - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "GenMips" + name , [&device, isEnabled]( crg::FramePass const & framePass @@ -57,7 +57,7 @@ namespace ocean_fft , crg::FramePassGroup & graph , crg::FramePass const * previousPass , crg::ImageViewId imageView - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "GenMips" + name , [&device, isEnabled]( crg::FramePass const & framePass @@ -87,7 +87,7 @@ namespace ocean_fft , crg::FramePass const & previousPass , ashes::BufferBase const & srcBuffer , crg::ImageViewId dstImageView - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto data = *dstImageView.data; data.name = data.image.data->name + "_L0"; @@ -194,7 +194,7 @@ namespace ocean_fft , crg::FramePassGroup & graph , crg::FramePassArray previousPasses , OceanUbo const & ubo - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) : m_device{ device } , m_group{ graph } , m_config{ ocean_fft::getConfig( *device.renderSystem.getEngine() ) } diff --git a/source/Plugins/Generic/FFTOceanRendering/OceanFFT.hpp b/source/Plugins/Generic/FFTOceanRendering/OceanFFT.hpp index 47e8daa95d..0c996a09d3 100644 --- a/source/Plugins/Generic/FFTOceanRendering/OceanFFT.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/OceanFFT.hpp @@ -42,7 +42,7 @@ namespace ocean_fft , OceanUbo const & ubo , ashes::BufferBase const & input , ashes::BufferBase const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "GenerateFrequency" + name , [&device, extent, isEnabled]( crg::FramePass const & framePass @@ -85,7 +85,7 @@ namespace ocean_fft , FFTConfig const & pfftConfig , ashes::Buffer< cfloat > const & distribution , FFTMode mode - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) : fftConfig{ pfftConfig } , frequency{ castor3d::makeBuffer< cfloat >( fftConfig.device , dimensions.width * dimensions.height @@ -153,7 +153,7 @@ namespace ocean_fft , crg::FramePassGroup & graph , crg::FramePassArray previousPasses , OceanUbo const & ubo - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledRPtr isEnabled ); ~OceanFFT(); /** *\copydoc castor3d::RenderTechniquePass::accept diff --git a/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.cpp b/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.cpp index 9f9b359d7e..83b5005992 100644 --- a/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.cpp @@ -213,15 +213,17 @@ namespace ocean_fft , castor3d::RenderTechnique & technique , castor3d::TechniquePasses & renderPasses , crg::FramePassArray previousPasses - , std::shared_ptr< OceanUbo > oceanUbo - , std::shared_ptr< OceanFFT > oceanFFT - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , std::unique_ptr< OceanUbo > oceanUbo + , std::unique_ptr< OceanFFT > oceanFFT + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto targetResult = technique.getTargetResult(); auto targetDepth = technique.getTargetDepth(); auto extent = technique.getTargetExtent(); + auto ocUbo = oceanUbo.release(); + auto ocFFT = oceanFFT.release(); auto & result = graph.createPass( "NodesPass" - , [extent, targetResult, targetDepth, oceanUbo, oceanFFT, isEnabled, &device, &technique, &renderPasses]( crg::FramePass const & framePass + , [extent, targetResult, targetDepth, ocUbo, ocFFT, isEnabled, &device, &technique, &renderPasses]( crg::FramePass const & framePass , crg::GraphContext & context , crg::RunnableGraph & runnableGraph ) { @@ -230,8 +232,8 @@ namespace ocean_fft , context , runnableGraph , device - , std::move( oceanUbo ) - , std::move( oceanFFT ) + , std::unique_ptr< OceanUbo >( ocUbo ) + , std::unique_ptr< OceanFFT >( ocFFT ) , targetResult , targetDepth , castor3d::RenderNodesPassDesc{ extent @@ -247,7 +249,7 @@ namespace ocean_fft .llpvResult( technique.getLlpvResult() ) .vctFirstBounce( technique.getFirstVctBounce() ) .vctSecondaryBounce( technique.getSecondaryVctBounce() ) - , isEnabled ); + , castor3d::IsRenderPassEnabledUPtr( isEnabled ) ); renderPasses[size_t( OceanRenderPass::Event )].push_back( res.get() ); device.renderSystem.getEngine()->registerTimer( framePass.getFullName() , res->getTimer() ); @@ -259,7 +261,7 @@ namespace ocean_fft result.addInOutDepthStencilView( technique.getTargetDepth() ); result.addInOutColourView( technique.getTargetResult() ); #else - result.addDependencies( oceanFFT->getLastPasses() ); + result.addDependencies( ocFFT->getLastPasses() ); result.addDependency( technique.getGetLastOpaquePass() ); result.addImplicitColourView( technique.getSampledIntermediate() , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); @@ -269,11 +271,11 @@ namespace ocean_fft , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); result.addImplicitDepthView( technique.getDiffuseLightingResult().sampledViewId , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); - result.addImplicitColourView( oceanFFT->getNormals().sampledViewId + result.addImplicitColourView( ocFFT->getNormals().sampledViewId , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); - result.addImplicitColourView( oceanFFT->getHeightDisplacement().sampledViewId + result.addImplicitColourView( ocFFT->getHeightDisplacement().sampledViewId , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); - result.addImplicitColourView( oceanFFT->getGradientJacobian().sampledViewId + result.addImplicitColourView( ocFFT->getGradientJacobian().sampledViewId , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ); result.addInOutDepthStencilView( technique.getTargetDepth() ); result.addInOutColourView( technique.getTargetResult() ); @@ -294,13 +296,13 @@ namespace ocean_fft , crg::GraphContext & context , crg::RunnableGraph & graph , castor3d::RenderDevice const & device - , std::shared_ptr< OceanUbo > oceanUbo - , std::shared_ptr< OceanFFT > oceanFFT + , std::unique_ptr< OceanUbo > oceanUbo + , std::unique_ptr< OceanFFT > oceanFFT , crg::ImageViewIdArray targetImage , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledUPtr isEnabled ) : castor3d::RenderTechniqueNodesPass{ parent , pass , context @@ -311,8 +313,8 @@ namespace ocean_fft , std::move( targetDepth ) , renderPassDesc , techniquePassDesc } - , m_isEnabled{ isEnabled } - , m_ubo{ oceanUbo } + , m_isEnabled{ std::move( isEnabled ) } + , m_ubo{ std::move( oceanUbo ) } , m_oceanFFT{ std::move( oceanFFT ) } , m_linearWrapSampler{ device->createSampler( getName() , VK_SAMPLER_ADDRESS_MODE_REPEAT @@ -348,16 +350,16 @@ namespace ocean_fft , castor3d::TechniquePasses & renderPasses , crg::FramePassArray previousPasses ) { - auto isEnabled = std::make_shared< castor3d::IsRenderPassEnabled >(); + auto isEnabled = new castor3d::IsRenderPassEnabled{}; auto & graph = technique.getGraph().createPassGroup( OceanFFT::Name ); auto extent = technique.getTargetExtent(); crg::FramePassArray passes{ previousPasses }; - auto oceanUbo = std::make_shared< OceanUbo >( device ); + auto oceanUbo = std::make_unique< OceanUbo >( device ); #if Ocean_DebugFFTGraph crg::FrameGraph fftGraph{ graph.getHandler(), OceanFFT::Name }; auto & group = fftGraph.createPassGroup( OceanFFT::Name ); - auto oceanFFT = std::make_shared< OceanFFT >( device + auto oceanFFT = std::make_unique< OceanFFT >( device , group , previousPasses , *oceanUbo ); @@ -370,7 +372,7 @@ namespace ocean_fft auto runnable = fftGraph.compile( device.makeContext() ); runnable->record(); #else - auto oceanFFT = std::make_shared< OceanFFT >( device + auto oceanFFT = std::make_unique< OceanFFT >( device , technique.getResources() , graph , previousPasses diff --git a/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.hpp b/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.hpp index 22be54493e..c2f215be65 100644 --- a/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/OceanFFTRenderPass.hpp @@ -27,13 +27,13 @@ namespace ocean_fft , crg::GraphContext & context , crg::RunnableGraph & graph , castor3d::RenderDevice const & device - , std::shared_ptr< OceanUbo > oceanUbo - , std::shared_ptr< OceanFFT > oceanFFT + , std::unique_ptr< OceanUbo > oceanUbo + , std::unique_ptr< OceanFFT > oceanFFT , crg::ImageViewIdArray targetImage , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledUPtr isEnabled ); ~OceanRenderPass()override; static crg::FramePassArray create( castor3d::RenderDevice const & device , castor3d::RenderTechnique & technique @@ -84,9 +84,9 @@ namespace ocean_fft castor3d::ShaderPtr doGetPixelShaderSource( castor3d::PipelineFlags const & flags )const override; private: - std::shared_ptr< castor3d::IsRenderPassEnabled > m_isEnabled; - std::shared_ptr< OceanUbo > m_ubo; - std::shared_ptr< OceanFFT > m_oceanFFT; + castor3d::IsRenderPassEnabledUPtr m_isEnabled; + std::unique_ptr< OceanUbo > m_ubo; + std::unique_ptr< OceanFFT > m_oceanFFT; OceanUboConfiguration m_configuration; ashes::SamplerPtr m_linearWrapSampler; ashes::SamplerPtr m_pointClampSampler; diff --git a/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.cpp b/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.cpp index 007f9c3be9..fd0ba5bb2f 100644 --- a/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.cpp +++ b/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.cpp @@ -371,7 +371,7 @@ namespace ocean_fft , FFTConfig const & config , ashes::BufferBase const & input , std::array< ashes::BufferBasePtr, 2u > const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledRPtr isEnabled ) { auto & result = graph.createPass( "Process" + name , [&device, extent, isEnabled, &input, &output, &config]( crg::FramePass const & framePass diff --git a/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.hpp b/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.hpp index 55c2c97bda..22b2b8497c 100644 --- a/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.hpp +++ b/source/Plugins/Generic/FFTOceanRendering/ProcessFFTPass.hpp @@ -76,7 +76,7 @@ namespace ocean_fft , FFTConfig const & config , ashes::BufferBase const & input , std::array< ashes::BufferBasePtr, 2u > const & output - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledRPtr isEnabled ); } #endif diff --git a/source/Plugins/Generic/OceanRendering/OceanRenderPass.cpp b/source/Plugins/Generic/OceanRendering/OceanRenderPass.cpp index cbb775d914..4495be5813 100644 --- a/source/Plugins/Generic/OceanRendering/OceanRenderPass.cpp +++ b/source/Plugins/Generic/OceanRendering/OceanRenderPass.cpp @@ -165,12 +165,12 @@ namespace ocean , VK_IMAGE_VIEW_TYPE_2D , img.data->info.format , { VK_IMAGE_ASPECT_COLOR_BIT, 0u, image.getLevels(), 0u, 1u } } ); - auto buffer = image.getPixels(); engine.postEvent( castor3d::makeGpuFunctorEvent( castor3d::EventType::ePreRender - , [format, dim, buffer, &img, &view, &result, &runnable]( castor3d::RenderDevice const & device + , [format, dim, image, &img, &view, &result, &runnable]( castor3d::RenderDevice const & device , castor3d::QueueData const & queue ) { + auto buffer = image.getPixels(); auto staging = device->createStagingTexture( VkFormat( format ) , VkExtent2D{ dim.getWidth(), dim.getHeight() } , buffer->getLevels() ); @@ -209,7 +209,7 @@ namespace ocean , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledUPtr isEnabled ) : castor3d::RenderTechniqueNodesPass{ parent , pass , context @@ -263,7 +263,7 @@ namespace ocean , crg::FramePassArray previousPasses ) { std::string name{ Name }; - auto isEnabled = std::make_shared< castor3d::IsRenderPassEnabled >(); + auto isEnabled = new castor3d::IsRenderPassEnabled{}; auto extent = technique.getTargetExtent(); auto & graph = technique.getGraph().createPassGroup( name ); @@ -314,7 +314,7 @@ namespace ocean .llpvResult( technique.getLlpvResult() ) .vctFirstBounce( technique.getFirstVctBounce() ) .vctSecondaryBounce( technique.getSecondaryVctBounce() ) - , isEnabled ); + , castor3d::IsRenderPassEnabledUPtr( isEnabled ) ); renderPasses[size_t( Event )].push_back( res.get() ); device.renderSystem.getEngine()->registerTimer( framePass.getFullName() , res->getTimer() ); diff --git a/source/Plugins/Generic/OceanRendering/OceanRenderPass.hpp b/source/Plugins/Generic/OceanRendering/OceanRenderPass.hpp index 0d74d17fef..3d09ddce93 100644 --- a/source/Plugins/Generic/OceanRendering/OceanRenderPass.hpp +++ b/source/Plugins/Generic/OceanRendering/OceanRenderPass.hpp @@ -30,7 +30,7 @@ namespace ocean , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledUPtr isEnabled ); ~OceanRenderPass()override; static crg::FramePassArray create( castor3d::RenderDevice const & device , castor3d::RenderTechnique & technique @@ -85,7 +85,7 @@ namespace ocean castor3d::ShaderPtr doGetPixelShaderSource( castor3d::PipelineFlags const & flags )const override; private: - std::shared_ptr< castor3d::IsRenderPassEnabled > m_isEnabled; + castor3d::IsRenderPassEnabledUPtr m_isEnabled; OceanUboConfiguration m_configuration; ashes::SamplerPtr m_linearWrapSampler; ashes::SamplerPtr m_pointClampSampler; diff --git a/source/Plugins/Generic/ToonMaterial/EdgesComponent.cpp b/source/Plugins/Generic/ToonMaterial/EdgesComponent.cpp index db9f7b6f88..fd186b6b2d 100644 --- a/source/Plugins/Generic/ToonMaterial/EdgesComponent.cpp +++ b/source/Plugins/Generic/ToonMaterial/EdgesComponent.cpp @@ -22,6 +22,8 @@ #include +CU_ImplementSmartPtr( toon, EdgesComponent ) + namespace toon { //********************************************************************************************* @@ -328,9 +330,9 @@ namespace toon castor3d::PassComponentUPtr EdgesComponent::doClone( castor3d::Pass & pass )const { - auto result = std::make_unique< EdgesComponent >( pass ); + auto result = castor::makeUnique< EdgesComponent >( pass ); result->setData( getData() ); - return result; + return castor::ptrRefCast< PassComponent >( result ); } bool EdgesComponent::doWriteText( castor::String const & tabs diff --git a/source/Plugins/Generic/ToonMaterial/EdgesComponent.hpp b/source/Plugins/Generic/ToonMaterial/EdgesComponent.hpp index 6d0dd7dc70..1223e183ae 100644 --- a/source/Plugins/Generic/ToonMaterial/EdgesComponent.hpp +++ b/source/Plugins/Generic/ToonMaterial/EdgesComponent.hpp @@ -173,6 +173,8 @@ namespace toon , castor::String const & subfolder , castor::StringStream & file )const override; }; + + CU_DeclareSmartPtr( toon, EdgesComponent, C3D_ToonMaterial_API ); } #endif diff --git a/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp b/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp index c887e281e6..8d288d9f97 100644 --- a/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp +++ b/source/Plugins/Generic/WaterRendering/WaterRenderPass.cpp @@ -164,7 +164,7 @@ namespace water , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ) + , castor3d::IsRenderPassEnabledUPtr isEnabled ) : castor3d::RenderTechniqueNodesPass{ parent , pass , context @@ -217,7 +217,7 @@ namespace water , crg::FramePassArray previousPasses ) { std::string name{ Name }; - auto isEnabled = std::make_shared< castor3d::IsRenderPassEnabled >(); + auto isEnabled = new castor3d::IsRenderPassEnabled{}; auto extent = technique.getTargetExtent(); auto & graph = technique.getGraph().createPassGroup( name ); @@ -267,7 +267,7 @@ namespace water .llpvResult( technique.getLlpvResult() ) .vctFirstBounce( technique.getFirstVctBounce() ) .vctSecondaryBounce( technique.getSecondaryVctBounce() ) - , isEnabled ); + , castor3d::IsRenderPassEnabledUPtr( isEnabled ) ); renderPasses[size_t( Event )].push_back( res.get() ); device.renderSystem.getEngine()->registerTimer( framePass.getFullName() , res->getTimer() ); diff --git a/source/Plugins/Generic/WaterRendering/WaterRenderPass.hpp b/source/Plugins/Generic/WaterRendering/WaterRenderPass.hpp index 881bb2089c..509c114302 100644 --- a/source/Plugins/Generic/WaterRendering/WaterRenderPass.hpp +++ b/source/Plugins/Generic/WaterRendering/WaterRenderPass.hpp @@ -30,7 +30,7 @@ namespace water , crg::ImageViewIdArray targetDepth , castor3d::RenderNodesPassDesc const & renderPassDesc , castor3d::RenderTechniquePassDesc const & techniquePassDesc - , std::shared_ptr< castor3d::IsRenderPassEnabled > isEnabled ); + , castor3d::IsRenderPassEnabledUPtr isEnabled ); ~WaterRenderPass()override; static crg::FramePassArray create( castor3d::RenderDevice const & device , castor3d::RenderTechnique & technique @@ -79,7 +79,7 @@ namespace water castor3d::ShaderPtr doGetPixelShaderSource( castor3d::PipelineFlags const & flags )const override; private: - std::shared_ptr< castor3d::IsRenderPassEnabled > m_isEnabled; + castor3d::IsRenderPassEnabledUPtr m_isEnabled; WaterUboConfiguration m_configuration; ashes::SamplerPtr m_linearWrapSampler; ashes::SamplerPtr m_pointClampSampler; diff --git a/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp b/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp index 0b9c05dfd3..1024d886a0 100644 --- a/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp +++ b/source/Plugins/Importers/AssimpImporter/AssimpImporterFile.cpp @@ -634,7 +634,7 @@ namespace c3d_assimp castor3d::MaterialImporterUPtr AssimpImporterFile::createMaterialImporter() { - return std::make_unique< AssimpMaterialImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::MaterialImporter, AssimpMaterialImporter >( *getOwner() ); } castor3d::AnimationImporterUPtr AssimpImporterFile::createAnimationImporter() @@ -644,22 +644,22 @@ namespace c3d_assimp castor3d::SkeletonImporterUPtr AssimpImporterFile::createSkeletonImporter() { - return std::make_unique< AssimpSkeletonImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::SkeletonImporter, AssimpSkeletonImporter >( *getOwner() ); } castor3d::MeshImporterUPtr AssimpImporterFile::createMeshImporter() { - return std::make_unique< AssimpMeshImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::MeshImporter, AssimpMeshImporter >( *getOwner() ); } castor3d::SceneNodeImporterUPtr AssimpImporterFile::createSceneNodeImporter() { - return std::make_unique< AssimpSceneNodeImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::SceneNodeImporter, AssimpSceneNodeImporter >( *getOwner() ); } castor3d::LightImporterUPtr AssimpImporterFile::createLightImporter() { - return std::make_unique< AssimpLightImporter >( *getOwner() ); + return castor::makeUniqueDerived< castor3d::LightImporter, AssimpLightImporter >( *getOwner() ); } castor3d::ImporterFileUPtr AssimpImporterFile::create( castor3d::Engine & engine @@ -667,7 +667,7 @@ namespace c3d_assimp , castor::Path const & path , castor3d::Parameters const & parameters ) { - return std::make_unique< AssimpImporterFile >( engine, scene, path, parameters ); + return castor::makeUniqueDerived< castor3d::ImporterFile, AssimpImporterFile >( engine, scene, path, parameters ); } void AssimpImporterFile::doPrelistMaterials() diff --git a/test/Castor3D/BinaryExportTest.cpp b/test/Castor3D/BinaryExportTest.cpp index 7c38bbe523..61fc73fdc1 100644 --- a/test/Castor3D/BinaryExportTest.cpp +++ b/test/Castor3D/BinaryExportTest.cpp @@ -59,7 +59,6 @@ namespace Testing doTestMesh( *src ); - scene.removeMesh( name, true ); scene.cleanup(); m_engine.getRenderLoop().renderSyncFrame(); } @@ -103,7 +102,6 @@ namespace Testing doTestMesh( *src ); - scene.removeMesh( name, true ); scene.cleanup(); m_engine.getRenderLoop().renderSyncFrame(); } @@ -156,11 +154,8 @@ namespace Testing dst->setSkeleton( skeleton ); } } - } - for ( auto & submesh : *dst ) - { - submesh->initialise( device ); + dst->initialise(); } auto & rhs = static_cast< Mesh const & >( *dst ); diff --git a/test/CastorTest/BenchManager.cpp b/test/CastorTest/BenchManager.cpp index 9608fbdda1..4721c7b939 100644 --- a/test/CastorTest/BenchManager.cpp +++ b/test/CastorTest/BenchManager.cpp @@ -6,8 +6,8 @@ namespace Testing { - std::vector< BenchCaseUPtr > BenchManager::m_benchs; - std::vector< TestCaseUPtr > BenchManager::m_cases; + std::vector< BenchCasePtr > BenchManager::m_benchs; + std::vector< TestCasePtr > BenchManager::m_cases; BenchManager::BenchManager() { @@ -19,12 +19,12 @@ namespace Testing m_cases.clear(); } - void BenchManager::registerType( BenchCaseUPtr bench ) + void BenchManager::registerType( BenchCasePtr bench ) { m_benchs.push_back( std::move( bench ) ); } - void BenchManager::registerType( TestCaseUPtr test ) + void BenchManager::registerType( TestCasePtr test ) { test->registerTests(); m_cases.push_back( std::move( test ) ); @@ -120,13 +120,13 @@ namespace Testing //************************************************************************************************* - bool registerType( BenchCaseUPtr bench ) + bool registerType( BenchCasePtr bench ) { BenchManager::registerType( std::move( bench ) ); return true; } - bool registerType( TestCaseUPtr test ) + bool registerType( TestCasePtr test ) { BenchManager::registerType( std::move( test ) ); return true; diff --git a/test/CastorTest/BenchManager.hpp b/test/CastorTest/BenchManager.hpp index 17660dd344..80024ee73d 100644 --- a/test/CastorTest/BenchManager.hpp +++ b/test/CastorTest/BenchManager.hpp @@ -11,19 +11,19 @@ namespace Testing public: BenchManager(); ~BenchManager(); - static void registerType( BenchCaseUPtr bench ); - static void registerType( TestCaseUPtr test ); + static void registerType( BenchCasePtr bench ); + static void registerType( TestCasePtr test ); static void ExecuteBenchs(); static void BenchsSummary(); static uint32_t ExecuteTests(); private: - static std::vector< BenchCaseUPtr > m_benchs; - static std::vector< TestCaseUPtr > m_cases; + static std::vector< BenchCasePtr > m_benchs; + static std::vector< TestCasePtr > m_cases; }; - bool registerType( BenchCaseUPtr bench ); - bool registerType( TestCaseUPtr test ); + bool registerType( BenchCasePtr bench ); + bool registerType( TestCasePtr test ); #define BENCHLOOP( iMax, ret )\ ret = ::Testing::BenchManager::ExecuteTests();\ diff --git a/test/CastorTest/CastorTestPrerequisites.hpp b/test/CastorTest/CastorTestPrerequisites.hpp index 392e1fbaf1..d1df794d99 100644 --- a/test/CastorTest/CastorTestPrerequisites.hpp +++ b/test/CastorTest/CastorTestPrerequisites.hpp @@ -38,13 +38,9 @@ namespace Testing class TestCase; class BenchManager; - using BenchCaseSPtr = std::shared_ptr< BenchCase >; - using BenchCaseWPtr = std::weak_ptr< BenchCase >; - using BenchCaseUPtr = std::unique_ptr< BenchCase >; + using BenchCasePtr = std::unique_ptr< BenchCase >; - using TestCaseSPtr = std::shared_ptr< TestCase >; - using TestCaseWPtr = std::weak_ptr< TestCase >; - using TestCaseUPtr = std::unique_ptr< TestCase >; + using TestCasePtr = std::unique_ptr< TestCase >; } #endif diff --git a/test/CastorTest/UnitTest.hpp b/test/CastorTest/UnitTest.hpp index 30f0b3e2fb..90a6dd1e80 100644 --- a/test/CastorTest/UnitTest.hpp +++ b/test/CastorTest/UnitTest.hpp @@ -4,6 +4,8 @@ #include "CastorTestPrerequisites.hpp" +#include + #include #include #include @@ -268,6 +270,17 @@ namespace Testing } }; + template< typename ValueT > + struct Stringifier< castor::UniquePtr< ValueT > > + { + static std::string get( castor::UniquePtr< ValueT > const & value ) + { + std::stringstream stream; + stream << ( value ? toString( *value ) : std::string{ "null_uptr" } ); + return stream.str(); + } + }; + template< typename ValueT > struct Stringifier< std::weak_ptr< ValueT > > { diff --git a/tools/CastorTestLauncher/CastorTestLauncher.cpp b/tools/CastorTestLauncher/CastorTestLauncher.cpp index a20a085849..45dfff3fbc 100644 --- a/tools/CastorTestLauncher/CastorTestLauncher.cpp +++ b/tools/CastorTestLauncher/CastorTestLauncher.cpp @@ -182,14 +182,14 @@ namespace test_launcher return result; } - castor3d::EngineSPtr CastorTestLauncher::doInitialiseCastor() + castor3d::EngineUPtr CastorTestLauncher::doInitialiseCastor() { if ( !castor::File::directoryExists( castor3d::Engine::getEngineDirectory() ) ) { castor::File::directoryCreate( castor3d::Engine::getEngineDirectory() ); } - castor3d::EngineSPtr castor = std::make_shared< castor3d::Engine >( cuT( "CastorTestLauncher" ) + auto castor = castor::makeUnique< castor3d::Engine >( cuT( "CastorTestLauncher" ) , castor3d::Version{ CastorTestLauncher_VERSION_MAJOR, CastorTestLauncher_VERSION_MINOR, CastorTestLauncher_VERSION_BUILD } , m_config.validate , !m_config.disableRandom diff --git a/tools/CastorTestLauncher/CastorTestLauncher.hpp b/tools/CastorTestLauncher/CastorTestLauncher.hpp index 6698474be2..e3cf921b6c 100644 --- a/tools/CastorTestLauncher/CastorTestLauncher.hpp +++ b/tools/CastorTestLauncher/CastorTestLauncher.hpp @@ -27,7 +27,7 @@ namespace test_launcher private: bool doParseCommandLine(); - castor3d::EngineSPtr doInitialiseCastor(); + castor3d::EngineUPtr doInitialiseCastor(); bool OnInit() override; int OnRun() override; diff --git a/tools/CastorViewer/MainFrame.cpp b/tools/CastorViewer/MainFrame.cpp index 7b50a97b80..e8be8369df 100644 --- a/tools/CastorViewer/MainFrame.cpp +++ b/tools/CastorViewer/MainFrame.cpp @@ -989,7 +989,7 @@ namespace CastorViewer castor3d::exporter::ExportOptions options; GuiCommon::PropertiesDialog dialog{ this , _( "Export" ) - , std::make_unique< GuiCommon::ExportOptionsTreeItemProperty >( true, options ) }; + , castor::makeUniqueDerived< GuiCommon::TreeItemProperty, GuiCommon::ExportOptionsTreeItemProperty >( true, options ) }; if ( dialog.ShowModal() == wxID_CANCEL ) { diff --git a/tools/CastorViewer/RenderPanel.cpp b/tools/CastorViewer/RenderPanel.cpp index 8c263dc61a..32309fb60b 100644 --- a/tools/CastorViewer/RenderPanel.cpp +++ b/tools/CastorViewer/RenderPanel.cpp @@ -23,8 +23,8 @@ #include -CU_ImplementCUSmartPtr( CastorViewer, MouseNodeEvent ) -CU_ImplementCUSmartPtr( CastorViewer, TranslateNodeEvent ) +CU_ImplementSmartPtr( CastorViewer, MouseNodeEvent ) +CU_ImplementSmartPtr( CastorViewer, TranslateNodeEvent ) namespace CastorViewer { diff --git a/tools/CastorViewer/RenderPanel.hpp b/tools/CastorViewer/RenderPanel.hpp index 2a53f5265e..bd7852aa67 100644 --- a/tools/CastorViewer/RenderPanel.hpp +++ b/tools/CastorViewer/RenderPanel.hpp @@ -43,8 +43,8 @@ namespace CastorViewer class MouseNodeEvent; class TranslateNodeEvent; - CU_DeclareCUSmartPtr( CastorViewer, MouseNodeEvent, ); - CU_DeclareCUSmartPtr( CastorViewer, TranslateNodeEvent, ); + CU_DeclareSmartPtr( CastorViewer, MouseNodeEvent, ); + CU_DeclareSmartPtr( CastorViewer, TranslateNodeEvent, ); class RenderPanel : public wxPanel diff --git a/tools/GuiCommon/GuiCommonPrerequisites.hpp b/tools/GuiCommon/GuiCommonPrerequisites.hpp index c46eb88a6f..bc81df222e 100644 --- a/tools/GuiCommon/GuiCommonPrerequisites.hpp +++ b/tools/GuiCommon/GuiCommonPrerequisites.hpp @@ -139,15 +139,11 @@ namespace GuiCommon template< typename ListT > class TreeListContainerT; - typedef std::shared_ptr< std::thread > thread_sptr; - typedef std::shared_ptr< LanguageInfo > LanguageInfoPtr; - typedef std::shared_ptr< LanguageFileContext > LanguageFileContextPtr; - typedef std::shared_ptr< StyleInfo > StyleInfoPtr; + CU_DeclareSmartPtr( GuiCommon, LanguageInfo, ); + CU_DeclareSmartPtr( GuiCommon, TreeItemProperty, ); - CU_DeclareSmartPtr( TreeItemProperty ); CU_DeclareMap( uint32_t, wxImage *, ImageId ); - CU_DeclareVector( thread_sptr, ThreadPtr ); - CU_DeclareVector( LanguageInfoPtr, LanguageInfoPtr ); + CU_DeclareVector( LanguageInfoUPtr, LanguageInfo ); static const wxColour PANEL_BACKGROUND_COLOUR = wxColour( 30, 30, 30 ); static const wxColour PANEL_FOREGROUND_COLOUR = wxColour( 220, 220, 220 ); diff --git a/tools/GuiCommon/Properties/TreeItems/LightTreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/LightTreeItemProperty.cpp index 3e6d81e993..f41b1669a0 100644 --- a/tools/GuiCommon/Properties/TreeItems/LightTreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/LightTreeItemProperty.cpp @@ -176,21 +176,21 @@ namespace GuiCommon if ( m_light.getLightType() == castor3d::LightType::eDirectional ) { - addPropertyT( shadows, PROPERTY_SHADOW_VOLUMETRIC_STEPS, m_light.getCategory()->getVolumetricSteps(), m_light.getCategory().get(), &castor3d::LightCategory::setVolumetricSteps ); - addPropertyT( shadows, PROPERTY_SHADOW_VOLUMETRIC_SCATTERING_FACTOR, m_light.getCategory()->getVolumetricScatteringFactor(), m_light.getCategory().get(), &castor3d::LightCategory::setVolumetricScatteringFactor ); + addPropertyT( shadows, PROPERTY_SHADOW_VOLUMETRIC_STEPS, m_light.getCategory()->getVolumetricSteps(), m_light.getCategory(), &castor3d::LightCategory::setVolumetricSteps ); + addPropertyT( shadows, PROPERTY_SHADOW_VOLUMETRIC_SCATTERING_FACTOR, m_light.getCategory()->getVolumetricScatteringFactor(), m_light.getCategory(), &castor3d::LightCategory::setVolumetricScatteringFactor ); } auto raw = addProperty( shadows, PROPERTY_CATEGORY_SHADOW_RAW ); - addPropertyT( raw, PROPERTY_SHADOW_RAW_MIN_OFFSET, m_light.getCategory()->getShadowRawOffsets()[0], m_light.getCategory().get(), &castor3d::LightCategory::setRawMinOffset ); - addPropertyT( raw, PROPERTY_SHADOW_RAW_MAX_SLOPE_OFFSET, m_light.getCategory()->getShadowRawOffsets()[1], m_light.getCategory().get(), &castor3d::LightCategory::setRawMaxSlopeOffset ); + addPropertyT( raw, PROPERTY_SHADOW_RAW_MIN_OFFSET, m_light.getCategory()->getShadowRawOffsets()[0], m_light.getCategory(), &castor3d::LightCategory::setRawMinOffset ); + addPropertyT( raw, PROPERTY_SHADOW_RAW_MAX_SLOPE_OFFSET, m_light.getCategory()->getShadowRawOffsets()[1], m_light.getCategory(), &castor3d::LightCategory::setRawMaxSlopeOffset ); auto pcf = addProperty( shadows, PROPERTY_CATEGORY_SHADOW_PCF ); - addPropertyT( pcf, PROPERTY_SHADOW_PCF_MIN_OFFSET, m_light.getCategory()->getShadowPcfOffsets()[0], m_light.getCategory().get(), &castor3d::LightCategory::setPcfMinOffset ); - addPropertyT( pcf, PROPERTY_SHADOW_PCF_MAX_SLOPE_OFFSET, m_light.getCategory()->getShadowPcfOffsets()[1], m_light.getCategory().get(), &castor3d::LightCategory::setPcfMaxSlopeOffset ); - addPropertyT( pcf, PROPERTY_SHADOW_PCF_FILTER_SIZE, m_light.getCategory()->getShadowPcfFilterSize(), m_light.getCategory().get(), &castor3d::LightCategory::setPcfFilterSize ); - addPropertyT( pcf, PROPERTY_SHADOW_PCF_SAMPLE_COUNT, m_light.getCategory()->getShadowPcfSampleCount(), m_light.getCategory().get(), &castor3d::LightCategory::setPcfSampleCount ); + addPropertyT( pcf, PROPERTY_SHADOW_PCF_MIN_OFFSET, m_light.getCategory()->getShadowPcfOffsets()[0], m_light.getCategory(), &castor3d::LightCategory::setPcfMinOffset ); + addPropertyT( pcf, PROPERTY_SHADOW_PCF_MAX_SLOPE_OFFSET, m_light.getCategory()->getShadowPcfOffsets()[1], m_light.getCategory(), &castor3d::LightCategory::setPcfMaxSlopeOffset ); + addPropertyT( pcf, PROPERTY_SHADOW_PCF_FILTER_SIZE, m_light.getCategory()->getShadowPcfFilterSize(), m_light.getCategory(), &castor3d::LightCategory::setPcfFilterSize ); + addPropertyT( pcf, PROPERTY_SHADOW_PCF_SAMPLE_COUNT, m_light.getCategory()->getShadowPcfSampleCount(), m_light.getCategory(), &castor3d::LightCategory::setPcfSampleCount ); auto vsm = addProperty( shadows, PROPERTY_CATEGORY_SHADOW_VSM ); - addPropertyT( vsm, PROPERTY_SHADOW_VSM_MIN_VARIANCE, m_light.getCategory()->getVsmMinVariance(), m_light.getCategory().get(), &castor3d::LightCategory::setVsmMinVariance ); - addPropertyT( vsm, PROPERTY_SHADOW_VSM_LIGHT_BLEEDING_REDUCTION, m_light.getCategory()->getVsmLightBleedingReduction(), m_light.getCategory().get(), &castor3d::LightCategory::setVsmLightBleedingReduction ); + addPropertyT( vsm, PROPERTY_SHADOW_VSM_MIN_VARIANCE, m_light.getCategory()->getVsmMinVariance(), m_light.getCategory(), &castor3d::LightCategory::setVsmMinVariance ); + addPropertyT( vsm, PROPERTY_SHADOW_VSM_LIGHT_BLEEDING_REDUCTION, m_light.getCategory()->getVsmLightBleedingReduction(), m_light.getCategory(), &castor3d::LightCategory::setVsmLightBleedingReduction ); auto globalIllum = addProperty( shadows, PROPERTY_CATEGORY_GLOBAL_ILLUM ); addPropertyE( globalIllum, PROPERTY_SHADOW_GLOBAL_ILLUM_TYPE, giChoices, convert( m_light.getGlobalIlluminationType() ) diff --git a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp index 169cacfe4c..3b013bc440 100644 --- a/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp +++ b/tools/GuiCommon/Properties/TreeItems/TreeItemProperty.cpp @@ -4,6 +4,8 @@ #include #include +CU_ImplementSmartPtr( GuiCommon, TreeItemProperty ) + namespace GuiCommon { namespace tiprop diff --git a/tools/GuiCommon/Shader/LanguageFileContext.hpp b/tools/GuiCommon/Shader/LanguageFileContext.hpp index e95b692fe2..e1f945a845 100644 --- a/tools/GuiCommon/Shader/LanguageFileContext.hpp +++ b/tools/GuiCommon/Shader/LanguageFileContext.hpp @@ -23,13 +23,13 @@ namespace GuiCommon explicit LanguageFileContext(); public: - LanguageInfoPtr currentLanguage; - StyleInfo * currentStyle{ nullptr }; + LanguageInfoUPtr currentLanguage{}; + StyleInfo * currentStyle{}; castor::UInt32StrMap mapFoldFlags; castor::UInt32StrMap mapTypes; castor::String strName; castor::StringArray keywords; - uint32_t index; + uint32_t index{}; }; } diff --git a/tools/GuiCommon/Shader/LanguageFileParser.cpp b/tools/GuiCommon/Shader/LanguageFileParser.cpp index 49434da77f..a96c1d8ea9 100644 --- a/tools/GuiCommon/Shader/LanguageFileParser.cpp +++ b/tools/GuiCommon/Shader/LanguageFileParser.cpp @@ -370,7 +370,7 @@ namespace GuiCommon void LanguageFileParser::doValidate( castor::PreprocessedFile & preprocessed ) { auto & context = getParserContext( preprocessed.getContext() ); - m_stcContext->push_back( context.currentLanguage ); + m_stcContext->push_back( std::move( context.currentLanguage ) ); } castor::String LanguageFileParser::doGetSectionName( castor::SectionId section )const diff --git a/tools/GuiCommon/Shader/LanguageInfo.cpp b/tools/GuiCommon/Shader/LanguageInfo.cpp index 852e4341a5..85417183a8 100644 --- a/tools/GuiCommon/Shader/LanguageInfo.cpp +++ b/tools/GuiCommon/Shader/LanguageInfo.cpp @@ -2,6 +2,8 @@ #include "GuiCommon/Shader/StyleInfo.hpp" +CU_ImplementSmartPtr( GuiCommon, LanguageInfo ) + namespace GuiCommon { static wxColour const CommentColour{ wxT( "FOREST GREEN" ) }; diff --git a/tools/GuiCommon/Shader/StcContext.cpp b/tools/GuiCommon/Shader/StcContext.cpp index 836eb02213..b4b58a0022 100644 --- a/tools/GuiCommon/Shader/StcContext.cpp +++ b/tools/GuiCommon/Shader/StcContext.cpp @@ -7,7 +7,7 @@ namespace GuiCommon { StcContext::StcContext() { - m_languages.push_back( std::make_shared< LanguageInfo >() ); + m_languages.push_back( castor::makeUnique< LanguageInfo >() ); } void StcContext::parseFile( wxString const & fileName ) diff --git a/tools/GuiCommon/Shader/StcContext.hpp b/tools/GuiCommon/Shader/StcContext.hpp index 24aa8707fd..cd3cacb0bc 100644 --- a/tools/GuiCommon/Shader/StcContext.hpp +++ b/tools/GuiCommon/Shader/StcContext.hpp @@ -31,29 +31,29 @@ namespace GuiCommon return m_languages.size(); } - inline LanguageInfoPtrArrayIt begin() + inline LanguageInfoArrayIt begin() { return m_languages.begin(); } - inline LanguageInfoPtrArrayConstIt begin()const + inline LanguageInfoArrayConstIt begin()const { return m_languages.begin(); } - inline LanguageInfoPtrArrayIt end() + inline LanguageInfoArrayIt end() { return m_languages.end(); } - inline LanguageInfoPtrArrayConstIt end()const + inline LanguageInfoArrayConstIt end()const { return m_languages.end(); } - inline void push_back( LanguageInfoPtr language ) + inline void push_back( LanguageInfoUPtr language ) { - m_languages.push_back( language ); + m_languages.push_back( std::move( language ) ); } public: @@ -72,7 +72,7 @@ namespace GuiCommon wxString fontName; private: - LanguageInfoPtrArray m_languages; + LanguageInfoArray m_languages; }; } diff --git a/tools/GuiCommon/Shader/StcTextEditor.cpp b/tools/GuiCommon/Shader/StcTextEditor.cpp index 764382712d..687f28eb11 100644 --- a/tools/GuiCommon/Shader/StcTextEditor.cpp +++ b/tools/GuiCommon/Shader/StcTextEditor.cpp @@ -220,7 +220,7 @@ namespace GuiCommon { wxString result; - for ( auto currInfo : m_context ) + for ( auto & currInfo : m_context ) { if ( result.empty() ) { @@ -256,7 +256,7 @@ namespace GuiCommon auto it = std::find_if( m_context.begin() , m_context.end() - , [&name]( LanguageInfoPtr lookup ) + , [&name]( LanguageInfoUPtr const & lookup ) { return lookup->name.c_str() == name; } ); @@ -273,7 +273,7 @@ namespace GuiCommon } else { - m_language = *it; + m_language = it->get(); if ( m_language->isCLike ) { diff --git a/tools/GuiCommon/Shader/StcTextEditor.hpp b/tools/GuiCommon/Shader/StcTextEditor.hpp index 00efabb3dc..5625d2e548 100644 --- a/tools/GuiCommon/Shader/StcTextEditor.hpp +++ b/tools/GuiCommon/Shader/StcTextEditor.hpp @@ -115,7 +115,7 @@ namespace GuiCommon m_filename = filename; } - inline LanguageInfoPtr getLanguageInfo() + inline LanguageInfoRPtr getLanguageInfo() { return m_language; } @@ -166,7 +166,7 @@ namespace GuiCommon private: wxString m_filename; wxString m_currentWord; - LanguageInfoPtr m_language; + LanguageInfoRPtr m_language{}; StcContext & m_context; int m_lineNrID; int m_lineNrMargin; diff --git a/tools/GuiCommon/System/CastorApplication.cpp b/tools/GuiCommon/System/CastorApplication.cpp index d9118c97d9..b3146bf355 100644 --- a/tools/GuiCommon/System/CastorApplication.cpp +++ b/tools/GuiCommon/System/CastorApplication.cpp @@ -480,7 +480,7 @@ namespace GuiCommon castor::Logger::setFileName( castor3d::Engine::getEngineDirectory() / ( m_internalName + cuT( ".log" ) ) ); castor::Logger::logInfo( m_internalName + cuT( " - Start" ) ); - m_castor = std::make_shared< castor3d::Engine >( m_internalName + m_castor = castor::makeUnique< castor3d::Engine >( m_internalName , m_version , m_config.validate , !m_config.disableRandom ); diff --git a/tools/GuiCommon/System/CastorApplication.hpp b/tools/GuiCommon/System/CastorApplication.hpp index 84045bc492..dda6b5bd4d 100644 --- a/tools/GuiCommon/System/CastorApplication.hpp +++ b/tools/GuiCommon/System/CastorApplication.hpp @@ -216,7 +216,7 @@ namespace GuiCommon ImagesLoader m_imagesLoader; castor::String m_internalName; castor::String m_displayName; - std::shared_ptr< castor3d::Engine > m_castor; + castor3d::EngineUPtr m_castor; private: std::unique_ptr< wxLocale > m_locale; From 470de5f446b27573082013f8cd864ec026f47bd3 Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Mon, 10 Apr 2023 18:39:28 +0200 Subject: [PATCH 34/35] COM: Updated binding. --- include/Interop/ComCastor3D/Castor3D.idl | 3 - .../ComCastor3D/Castor3D/ComGeometry.hpp | 4 +- .../ComCastor3D/Castor3D/ComIndexMapping.hpp | 2 +- .../Interop/ComCastor3D/Castor3D/ComMesh.hpp | 4 +- .../ComCastor3D/Castor3D/ComRenderWindow.hpp | 2 +- .../ComCastor3D/Castor3D/ComSampler.hpp | 4 +- .../Interop/ComCastor3D/Castor3D/ComScene.hpp | 2 +- .../Castor3D/ComSceneBackground.hpp | 4 +- .../ComCastor3D/Castor3D/ComSubmesh.hpp | 2 +- .../ComCastor3D/Castor3D/ComTextureLayout.hpp | 4 +- .../ComCastor3D/Castor3D/ComTextureUnit.hpp | 2 +- .../ComCastor3D/CastorUtils/ComFont.hpp | 12 ++-- .../ComCastor3D/CastorUtils/ComImage.hpp | 4 +- .../CastorUtils/ComPixelBuffer.hpp | 10 +-- include/Interop/ComCastor3D/ComAtlObject.hpp | 61 +++++++++++-------- .../ComCastor3D/ComCastor3DPrerequisites.hpp | 12 ++-- .../ComCastor3D/Castor3D/ComEngine.cpp | 9 +-- .../ComCastor3D/Castor3D/ComMaterial.cpp | 4 +- .../Interop/ComCastor3D/Castor3D/ComMesh.cpp | 4 +- .../Interop/ComCastor3D/Castor3D/ComScene.cpp | 24 ++++---- .../ComCastor3D/Castor3D/ComTextureLayout.cpp | 2 +- .../ComCastor3D/CastorUtils/ComFont.cpp | 2 +- .../ComCastor3D/CastorUtils/ComImage.cpp | 6 +- .../CastorUtils/ComPixelBuffer.cpp | 2 +- 24 files changed, 95 insertions(+), 90 deletions(-) diff --git a/include/Interop/ComCastor3D/Castor3D.idl b/include/Interop/ComCastor3D/Castor3D.idl index ef277264f1..6136ba521f 100644 --- a/include/Interop/ComCastor3D/Castor3D.idl +++ b/include/Interop/ComCastor3D/Castor3D.idl @@ -1222,7 +1222,6 @@ interface ITextureUnit : IDispatch { [propget, id( 1 ), helpstring( "The unit texture" )] HRESULT Texture( [out, retval] ITextureLayout ** pVal ); - [propput, id( 1 ), helpstring( "The unit texture" )] HRESULT Texture( [in] ITextureLayout * val ); [propget, id( 2 ), helpstring( "The unit sampler" )] HRESULT Sampler( [out, retval] ISampler ** pVal ); [propput, id( 2 ), helpstring( "The unit sampler" )] HRESULT Sampler( [in] ISampler * val ); [id( 5 ), helpstring( "Initialises the texture" )] HRESULT Initialise(); @@ -1346,7 +1345,6 @@ interface ISubmesh { [propget, id( 1 ), helpstring( "The points count" )] HRESULT PointsCount( [out, retval] unsigned int * pVal ); [propget, id( 2 ), helpstring( "The index mapping" )] HRESULT IndexMapping( [out, retval] IIndexMapping ** pVal ); - [propput, id( 2 ), helpstring( "The index mapping" )] HRESULT IndexMapping( [in] IIndexMapping * pVal ); [id( 3 ), helpstring( "Adds a point to the submesh" )] HRESULT AddPoint( [in] IVector3D * val ); }; @@ -1461,7 +1459,6 @@ interface IScene : IDispatch { [propget, id( 1 ), helpstring( "The background" )] HRESULT Background( [out, retval] ISceneBackground ** pVal ); - [propput, id( 1 ), helpstring( "The background" )] HRESULT Background( [in] ISceneBackground * val ); [propget, id( 2 ), helpstring( "The background colour" )] HRESULT BackgroundColour( [out, retval] IRgbColour ** pVal ); [propput, id( 2 ), helpstring( "The background colour" )] HRESULT BackgroundColour( [in] IRgbColour * val ); [propget, id( 3 ), helpstring( "The scene name" )] HRESULT Name( [out, retval] BSTR * pVal ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComGeometry.hpp b/include/Interop/ComCastor3D/Castor3D/ComGeometry.hpp index ec555ffc3b..4791ec73d9 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComGeometry.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComGeometry.hpp @@ -21,7 +21,9 @@ namespace CastorCom : public CComAtlObject< Geometry, castor3d::Geometry > { public: - COMEX_PROPERTY( Mesh, IMesh *, m_internal, &castor3d::Geometry::getMesh, &castor3d::Geometry::setMesh ); + COM_PROPERTY_GET( Mesh, IMesh *, makeGetter( m_internal, &castor3d::Geometry::getMesh ) ); + COM_PROPERTY_PUT( Mesh, IMesh *, makePutter( m_internal, &castor3d::Geometry::setMesh ) ); + //COMEX_PROPERTY( Mesh, IMesh *, m_internal, &castor3d::Geometry::getMesh, &castor3d::Geometry::setMesh ); COMEX_PROPERTY_GET( Name, BSTR, m_internal, &castor3d::MovableObject::getName ); COMEX_PROPERTY_GET( Type, eMOVABLE_TYPE, m_internal, &castor3d::MovableObject::getType ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComIndexMapping.hpp b/include/Interop/ComCastor3D/Castor3D/ComIndexMapping.hpp index 0118dee6f8..e0d8586e4d 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComIndexMapping.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComIndexMapping.hpp @@ -10,7 +10,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR( castor3d, IndexMapping ); + COM_TYPE_TRAITS_PTR( castor3d, IndexMapping ); /*! \~english \brief This class defines a CSubmesh object accessible from COM. diff --git a/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp b/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp index 6ffb60e809..972cfe4fe2 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComMesh.hpp @@ -26,9 +26,9 @@ namespace CastorCom STDMETHOD( DeleteSubmesh )( /* [in] */ ISubmesh * val ); private: - castor3d::MeshRPtr getMesh()const + castor3d::MeshResPtr getMesh()const { - return getInternal().lock().get(); + return getInternal(); } }; //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object diff --git a/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp b/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp index c1397e900c..f1dee5c005 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComRenderWindow.hpp @@ -9,7 +9,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR( castor3d, RenderWindow ); + COM_TYPE_TRAITS_UUPTR( castor3d, RenderWindow ); /*! \~english \brief This class defines a CRenderWindow object accessible from COM. diff --git a/include/Interop/ComCastor3D/Castor3D/ComSampler.hpp b/include/Interop/ComCastor3D/Castor3D/ComSampler.hpp index f019395565..f9b3cd65b7 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComSampler.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComSampler.hpp @@ -8,7 +8,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_RES( castor3d, Sampler, castor::String ); + COM_TYPE_TRAITS_PTR( castor3d, Sampler ); /*! \~english \brief This class defines a CSampler object accessible from COM. @@ -37,7 +37,7 @@ namespace CastorCom private: castor3d::SamplerRPtr getSampler()const { - return getInternal().lock().get(); + return getInternal(); } }; //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object diff --git a/include/Interop/ComCastor3D/Castor3D/ComScene.hpp b/include/Interop/ComCastor3D/Castor3D/ComScene.hpp index f163b17cc1..e8be402dba 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComScene.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComScene.hpp @@ -22,9 +22,9 @@ namespace CastorCom { public: COMEX_PROPERTY( BackgroundColour, IRgbColour *, m_internal, &castor3d::Scene::getBackgroundColour, &castor3d::Scene::setBackgroundColour ); - COMEX_PROPERTY( Background, ISceneBackground *, m_internal, &castor3d::Scene::getBackground, &castor3d::Scene::setBackground ); COMEX_PROPERTY( AmbientLight, IRgbColour *, m_internal, &castor3d::Scene::getAmbientLight, &castor3d::Scene::setAmbientLight ); + COMEX_PROPERTY_GET( Background, ISceneBackground *, m_internal, &castor3d::Scene::getBackground ); COMEX_PROPERTY_GET( Name, BSTR, m_internal, &castor3d::Scene::getName ); COMEX_PROPERTY_GET( RootNode, ISceneNode *, m_internal, &castor3d::Scene::getRootNode ); COMEX_PROPERTY_GET( ObjectRootNode, ISceneNode *, m_internal, &castor3d::Scene::getObjectRootNode ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComSceneBackground.hpp b/include/Interop/ComCastor3D/Castor3D/ComSceneBackground.hpp index aaf989a1f1..86ee9ad66f 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComSceneBackground.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComSceneBackground.hpp @@ -8,7 +8,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR( castor3d, SceneBackground ); + COM_TYPE_TRAITS_PTR( castor3d, SceneBackground ); /*! \~english \brief This class defines a CSceneBackground object accessible from COM. @@ -19,7 +19,7 @@ namespace CastorCom : public CComAtlObject< SceneBackground, castor3d::SceneBackground > { public: - COMEX_PROPERTY_GET( Type, BSTR, m_internal.get(), &castor3d::SceneBackground::getType ); + COMEX_PROPERTY_GET( Type, BSTR, m_internal, &castor3d::SceneBackground::getType ); }; //!\~english Enters the ATL object into the object map, updates the registry and creates an instance of the object. //\~french Ecrit l'objet ATL dans la table d'objets, met à jour le registre et crée une instance de l'objet. diff --git a/include/Interop/ComCastor3D/Castor3D/ComSubmesh.hpp b/include/Interop/ComCastor3D/Castor3D/ComSubmesh.hpp index d1c0949157..82b4044c6d 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComSubmesh.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComSubmesh.hpp @@ -19,7 +19,7 @@ namespace CastorCom : public CComAtlObject< Submesh, castor3d::Submesh > { public: - COMEX_PROPERTY( IndexMapping, IIndexMapping *, m_internal, &castor3d::Submesh::getIndexMapping, &castor3d::Submesh::setIndexMapping ); + COMEX_PROPERTY_GET( IndexMapping, IIndexMapping *, m_internal, &castor3d::Submesh::getIndexMapping ); COMEX_PROPERTY_GET( PointsCount, unsigned int, m_internal, &castor3d::Submesh::getPointsCount ); STDMETHOD( AddPoint )( /* [in] */ IVector3D * val ); diff --git a/include/Interop/ComCastor3D/Castor3D/ComTextureLayout.hpp b/include/Interop/ComCastor3D/Castor3D/ComTextureLayout.hpp index 6283b1775e..2ffeeb5884 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComTextureLayout.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComTextureLayout.hpp @@ -8,7 +8,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR( castor3d, TextureLayout ); + COM_TYPE_TRAITS_PTR( castor3d, TextureLayout ); /*! \~english \brief This class defines a CTextureLayout object accessible from COM. @@ -19,7 +19,7 @@ namespace CastorCom : public CComAtlObject< TextureLayout, castor3d::TextureLayout > { public: - COMEX_PROPERTY_GET( Type, eIMAGE_TYPE, m_internal.get(), &castor3d::TextureLayout::getType ); + COMEX_PROPERTY_GET( Type, eIMAGE_TYPE, m_internal, &castor3d::TextureLayout::getType ); STDMETHOD( Initialise )(); STDMETHOD( Cleanup )(); diff --git a/include/Interop/ComCastor3D/Castor3D/ComTextureUnit.hpp b/include/Interop/ComCastor3D/Castor3D/ComTextureUnit.hpp index 7229c5dc32..73d6a67287 100644 --- a/include/Interop/ComCastor3D/Castor3D/ComTextureUnit.hpp +++ b/include/Interop/ComCastor3D/Castor3D/ComTextureUnit.hpp @@ -21,7 +21,7 @@ namespace CastorCom : public CComAtlObject< TextureUnit, castor3d::TextureUnit > { public: - COMEX_PROPERTY( Texture, ITextureLayout *, m_internal, &castor3d::TextureUnit::getTexture, &castor3d::TextureUnit::setTexture ); + COMEX_PROPERTY_GET( Texture, ITextureLayout *, m_internal, &castor3d::TextureUnit::getTexture ); COMEX_PROPERTY( Sampler, ISampler *, m_internal, &castor3d::TextureUnit::getSampler, &castor3d::TextureUnit::setSampler ); STDMETHOD( Initialise )(); diff --git a/include/Interop/ComCastor3D/CastorUtils/ComFont.hpp b/include/Interop/ComCastor3D/CastorUtils/ComFont.hpp index 2eb39bb897..249e66b969 100644 --- a/include/Interop/ComCastor3D/CastorUtils/ComFont.hpp +++ b/include/Interop/ComCastor3D/CastorUtils/ComFont.hpp @@ -32,9 +32,9 @@ namespace CastorCom static inline const UINT rid = IDR_Font; using Internal = castor::Font; - using InternalMbr = castor::FontSPtr; - using GetInternal = castor::FontSPtr; - using SetInternal = castor::FontSPtr; + using InternalMbr = castor::FontResPtr; + using GetInternal = castor::FontResPtr; + using SetInternal = castor::FontResPtr; }; /*! \~english @@ -46,9 +46,9 @@ namespace CastorCom : public CComAtlObject< Font, castor::Font > { public: - COMEX_PROPERTY_GET( Height, UINT, m_internal.get(), &castor::Font::getHeight ); - COMEX_PROPERTY_GET( MaxHeight, UINT, m_internal.get(), &castor::Font::getMaxHeight ); - COMEX_PROPERTY_GET( MaxWidth, UINT, m_internal.get(), &castor::Font::getMaxWidth ); + COMEX_PROPERTY_GET( Height, UINT, m_internal, &castor::Font::getHeight ); + COMEX_PROPERTY_GET( MaxHeight, UINT, m_internal, &castor::Font::getMaxHeight ); + COMEX_PROPERTY_GET( MaxWidth, UINT, m_internal, &castor::Font::getMaxWidth ); STDMETHOD( LoadFromFile )( /* [in] */ IEngine * engine, /* [in] */ BSTR path, /* [in] */ BSTR name, /* [in] */ UINT height ); STDMETHOD( GetGlyph )( /* [in] */ WORD glyph, /* [out, retval] */ IGlyph ** pGlyph ); diff --git a/include/Interop/ComCastor3D/CastorUtils/ComImage.hpp b/include/Interop/ComCastor3D/CastorUtils/ComImage.hpp index 28924883d7..d277a6feb6 100644 --- a/include/Interop/ComCastor3D/CastorUtils/ComImage.hpp +++ b/include/Interop/ComCastor3D/CastorUtils/ComImage.hpp @@ -11,7 +11,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR( castor, Image ); + COM_TYPE_TRAITS_PTR( castor, Image ); /*! \~english \brief This class defines a CImage object accessible from COM. @@ -22,7 +22,7 @@ namespace CastorCom : public CComAtlObject< Image, castor::Image > { public: - COMEX_PROPERTY_GET( Buffer, IPixelBuffer *, m_internal.get(), &castor::Image::getPixels ); + COMEX_PROPERTY_GET( Buffer, IPixelBuffer *, m_internal, &castor::Image::getPixels ); STDMETHOD( LoadFromFile )( /* [in] */ IEngine * engine, /* [in] */ BSTR name, /* [in] */ BSTR val, /* [in] */ boolean dropAlpha ); STDMETHOD( LoadFromFormat )( /* [in] */ IEngine * engine, /* [in] */ BSTR name, /* [in] */ ePIXEL_FORMAT fmt, /* [in] */ ISize * size ); diff --git a/include/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.hpp b/include/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.hpp index 7a529915f4..67b176dc09 100644 --- a/include/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.hpp +++ b/include/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.hpp @@ -11,7 +11,7 @@ namespace CastorCom { - COM_TYPE_TRAITS_SPTR_EX( PixelBuffer, castor, PxBufferBase ); + COM_TYPE_TRAITS_PTR_EX( PixelBuffer, castor, PxBufferBase ); /*! \~english \brief This class defines a CImage object accessible from COM. @@ -22,10 +22,10 @@ namespace CastorCom : public CComAtlObject< PixelBuffer, castor::PxBufferBase > { public: - COMEX_PROPERTY_GET( PixelFormat, ePIXEL_FORMAT, m_internal.get(), &castor::PxBufferBase::getFormat ); - COMEX_PROPERTY_GET( Width, UINT, m_internal.get(), &castor::PxBufferBase::getWidth ); - COMEX_PROPERTY_GET( Height, UINT, m_internal.get(), &castor::PxBufferBase::getHeight ); - COMEX_PROPERTY_GET( Dimensions, ISize *, m_internal.get(), &castor::PxBufferBase::getDimensions ); + COMEX_PROPERTY_GET( PixelFormat, ePIXEL_FORMAT, m_internal, &castor::PxBufferBase::getFormat ); + COMEX_PROPERTY_GET( Width, UINT, m_internal, &castor::PxBufferBase::getWidth ); + COMEX_PROPERTY_GET( Height, UINT, m_internal, &castor::PxBufferBase::getHeight ); + COMEX_PROPERTY_GET( Dimensions, ISize *, m_internal, &castor::PxBufferBase::getDimensions ); STDMETHOD( Flip )(); STDMETHOD( Initialise )( /* [in] */ ISize * size, /* [in] */ ePIXEL_FORMAT format ); diff --git a/include/Interop/ComCastor3D/ComAtlObject.hpp b/include/Interop/ComCastor3D/ComAtlObject.hpp index 7d921ea221..502d9e083c 100644 --- a/include/Interop/ComCastor3D/ComAtlObject.hpp +++ b/include/Interop/ComCastor3D/ComAtlObject.hpp @@ -12,23 +12,6 @@ namespace CastorCom { namespace details { - template< typename SrcT > - SrcT makeMbr( SrcT src ) - { - return src; - } - - template< typename SrcT, typename KeyT > - castor::ResourceSPtrT< SrcT, KeyT > makeMbr( castor::ResourceWPtrT< SrcT, KeyT > src ) - { - return src.lock(); - } - - template< typename SrcT > - std::shared_ptr< SrcT > makeMbr( std::weak_ptr< SrcT > src ) - { - return src.lock(); - } } template< typename Class, typename Object > @@ -86,7 +69,7 @@ namespace CastorCom inline void setInternal( SetInternal internal ) { - m_internal = details::makeMbr( internal ); + m_internal = std::move( internal ); } }; @@ -143,7 +126,32 @@ namespace CastorCom using SetInternal = Internal *;\ } -#define COM_TYPE_TRAITS_SPTR_EX( Name, Nmspc, Class )\ +#define COM_TYPE_TRAITS_UPTR_EX( Name, Nmspc, Class )\ + class C##Name;\ + template<>\ + struct ComITypeTraitsT< I##Name >\ + {\ + static constexpr bool hasIType = true;\ + using Type = Nmspc::Class;\ + };\ + template<>\ + struct ComTypeTraitsT< Nmspc::Class >\ + {\ + static constexpr bool hasIType = true;\ + static constexpr bool hasType = true;\ + static constexpr bool hasInternalType = true;\ + using IType = I##Name;\ + using CType = C##Name;\ + static inline const CLSID clsid = CLSID_##Name;\ + static inline const CLSID iid = IID_I##Name;\ + static inline const UINT rid = IDR_##Name;\ + using Internal = Nmspc::Class;\ + using InternalMbr = castor::UniquePtr< Internal >;\ + using GetInternal = Internal *;\ + using SetInternal = Internal *;\ + } + +#define COM_TYPE_TRAITS_UUPTR_EX( Name, Nmspc, Class )\ class C##Name;\ template<>\ struct ComITypeTraitsT< I##Name >\ @@ -163,9 +171,9 @@ namespace CastorCom static inline const CLSID iid = IID_I##Name;\ static inline const UINT rid = IDR_##Name;\ using Internal = Nmspc::Class;\ - using InternalMbr = std::shared_ptr< Internal >;\ - using GetInternal = std::shared_ptr< Internal >;\ - using SetInternal = std::shared_ptr< Internal >;\ + using InternalMbr = castor::UniquePtr< Internal >;\ + using GetInternal = Internal *;\ + using SetInternal = castor::UniquePtr< Internal >;\ } #define COM_TYPE_TRAITS_RES_EX( Name, Nmspc, Class, Key )\ @@ -190,14 +198,15 @@ namespace CastorCom static inline const CLSID iid = IID_I##Name;\ static inline const UINT rid = IDR_##Name;\ using Internal = Nmspc::Class;\ - using InternalMbr = castor::ResourceSPtrT< Internal, Key >;\ - using GetInternal = castor::ResourceWPtrT< Internal, Key >;\ - using SetInternal = castor::ResourceWPtrT< Internal, Key >;\ + using InternalMbr = castor::ResourceObsT< Internal, Key >;\ + using GetInternal = castor::ResourceObsT< Internal, Key >;\ + using SetInternal = castor::ResourceObsT< Internal, Key >;\ } #define COM_TYPE_TRAITS( Nmspc, Class ) COM_TYPE_TRAITS_EX( Class, Nmspc, Class ) #define COM_TYPE_TRAITS_PTR( Nmspc, Class ) COM_TYPE_TRAITS_PTR_EX( Class, Nmspc, Class ) -#define COM_TYPE_TRAITS_SPTR( Nmspc, Class ) COM_TYPE_TRAITS_SPTR_EX( Class, Nmspc, Class ) +#define COM_TYPE_TRAITS_UPTR( Nmspc, Class ) COM_TYPE_TRAITS_UPTR_EX( Class, Nmspc, Class ) +#define COM_TYPE_TRAITS_UUPTR( Nmspc, Class ) COM_TYPE_TRAITS_UUPTR_EX( Class, Nmspc, Class ) #define COM_TYPE_TRAITS_RES( Nmspc, Class, Key ) COM_TYPE_TRAITS_RES_EX( Class, Nmspc, Class, Key ) #define COM_PROPERTY_GET( Name, Type, Functor )\ diff --git a/include/Interop/ComCastor3D/ComCastor3DPrerequisites.hpp b/include/Interop/ComCastor3D/ComCastor3DPrerequisites.hpp index 2cff702b4d..08474cf25a 100644 --- a/include/Interop/ComCastor3D/ComCastor3DPrerequisites.hpp +++ b/include/Interop/ComCastor3D/ComCastor3DPrerequisites.hpp @@ -162,12 +162,6 @@ namespace CastorCom { }; - template< typename TypeT, typename KeyT > - struct ComTypeTraitsT< castor::ResourceWPtrT< TypeT, KeyT > > - : ComTypeTraitsT< TypeT > - { - }; - template< typename TypeT > struct ComTypeTraitsT< castor::UniquePtr< TypeT > > : ComTypeTraitsT< TypeT > @@ -186,6 +180,12 @@ namespace CastorCom { }; + template< typename TypeT, typename KeyT > + struct ComTypeTraitsT< castor::ResourceObsT< TypeT, KeyT > > + : ComTypeTraitsT< TypeT > + { + }; + template< typename TypeT > static inline const bool hasComTypeV = ComTypeTraitsT< TypeT >::hasType; template< typename TypeT > diff --git a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp index 2e5879f195..757092e838 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComEngine.cpp @@ -339,7 +339,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CRenderWindow * >( *pVal )->setInternal( std::make_shared< castor3d::RenderWindow >( fromBstr( name ) + static_cast< CRenderWindow * >( *pVal )->setInternal( castor::makeUnique< castor3d::RenderWindow >( fromBstr( name ) , *m_internal , static_cast< CSize * >( size )->getInternal() , ashes::WindowHandle{ std::make_unique< ashes::IMswWindowHandle >( ::GetModuleHandle( nullptr ), HWND( hWnd ) ) } ) ); @@ -360,9 +360,7 @@ namespace CastorCom if ( m_internal ) { - auto window = static_cast< CRenderWindow * >( val )->getInternal(); static_cast< CRenderWindow * >( val )->setInternal( nullptr ); - window.reset(); hr = S_OK; } else @@ -385,7 +383,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CSampler * >( *pVal )->setInternal( m_internal->createSampler( fromBstr( name ), *m_internal ) ); + static_cast< CSampler * >( *pVal )->setInternal( m_internal->addNewSampler( fromBstr( name ), *m_internal ) ); } } } @@ -430,7 +428,6 @@ namespace CastorCom if ( pTarget ) { castor::Path fileName{ fromBstr( name ) }; - castor3d::RenderWindowSPtr l_return; if ( castor::File::fileExists( fileName ) ) { @@ -443,7 +440,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CRenderTarget * >( *pTarget )->setInternal( desc.renderTarget.get() ); + static_cast< CRenderTarget * >( *pTarget )->setInternal( desc.renderTarget ); } } } diff --git a/source/Interop/ComCastor3D/Castor3D/ComMaterial.cpp b/source/Interop/ComCastor3D/Castor3D/ComMaterial.cpp index e5ea42085d..c1e3a20a2a 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComMaterial.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComMaterial.cpp @@ -67,7 +67,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CPass * >( *pVal )->setInternal( m_internal->createPass().get() ); + static_cast< CPass * >( *pVal )->setInternal( m_internal->createPass() ); } } } @@ -99,7 +99,7 @@ namespace CastorCom { try { - static_cast< CPass * >( *pVal )->setInternal( m_internal->getPass( val ).get() ); + static_cast< CPass * >( *pVal )->setInternal( m_internal->getPass( val ) ); } catch ( std::exception & ) { diff --git a/source/Interop/ComCastor3D/Castor3D/ComMesh.cpp b/source/Interop/ComCastor3D/Castor3D/ComMesh.cpp index 1ba1134e28..4688f5982b 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComMesh.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComMesh.cpp @@ -20,7 +20,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CSubmesh * >( *pVal )->setInternal( getMesh()->getSubmesh( val ).get() ); + static_cast< CSubmesh * >( *pVal )->setInternal( getMesh()->getSubmesh( val ) ); } } } @@ -50,7 +50,7 @@ namespace CastorCom if ( hr == S_OK ) { - static_cast< CSubmesh * >( *pVal )->setInternal( getMesh()->createSubmesh().get() ); + static_cast< CSubmesh * >( *pVal )->setInternal( getMesh()->createSubmesh() ); } } } diff --git a/source/Interop/ComCastor3D/Castor3D/ComScene.cpp b/source/Interop/ComCastor3D/Castor3D/ComScene.cpp index 83ea315de8..222b61c427 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComScene.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComScene.cpp @@ -84,7 +84,7 @@ namespace CastorCom , *static_cast< CSceneNode * >( node )->getInternal() , castor3d::MeshResPtr{} ); static_cast< CGeometry * >( *pVal )->setInternal( geom.get() ); - m_internal->addGeometry( geom ); + m_internal->addGeometry( std::move( geom ) ); } } } @@ -212,7 +212,7 @@ namespace CastorCom if ( hr == S_OK ) { - auto l_mesh = m_internal->createMesh( fromBstr( name ), *m_internal ); + auto l_mesh = m_internal->addNewMesh( fromBstr( name ), *m_internal ); m_internal->getEngine()->getMeshFactory().create( fromBstr( name ) )->generate( *l_mesh, castor3d::Parameters{} ); static_cast< CMesh * >( *pVal )->setInternal( l_mesh ); } @@ -238,9 +238,9 @@ namespace CastorCom if ( hr == S_OK ) { - if ( auto found = m_internal->findSceneNode( fromBstr( name ) ).lock() ) + if ( auto found = m_internal->findSceneNode( fromBstr( name ) ) ) { - static_cast< CSceneNode * >( *pVal )->setInternal( found.get() ); + static_cast< CSceneNode * >( *pVal )->setInternal( found ); } } } @@ -271,9 +271,9 @@ namespace CastorCom if ( hr == S_OK ) { - if ( auto found = m_internal->findGeometry( fromBstr( name ) ).lock() ) + if ( auto found = m_internal->findGeometry( fromBstr( name ) ) ) { - static_cast< CGeometry * >( *pVal )->setInternal( found.get() ); + static_cast< CGeometry * >( *pVal )->setInternal( found ); } } } @@ -304,9 +304,9 @@ namespace CastorCom if ( hr == S_OK ) { - if ( auto found = m_internal->findLight( fromBstr( name ) ).lock() ) + if ( auto found = m_internal->findLight( fromBstr( name ) ) ) { - static_cast< CLight * >( *pVal )->setInternal( found.get() ); + static_cast< CLight * >( *pVal )->setInternal( found ); } } } @@ -337,9 +337,9 @@ namespace CastorCom if ( hr == S_OK ) { - if ( auto found = m_internal->findCamera( fromBstr( name ) ).lock() ) + if ( auto found = m_internal->findCamera( fromBstr( name ) ) ) { - static_cast< CCamera * >( *pVal )->setInternal( found.get() ); + static_cast< CCamera * >( *pVal )->setInternal( found ); } } } @@ -370,7 +370,7 @@ namespace CastorCom if ( hr == S_OK ) { - if ( auto found = m_internal->findMesh( fromBstr( name ) ).lock() ) + if ( auto found = m_internal->findMesh( fromBstr( name ) ) ) { static_cast< CMesh * >( *pVal )->setInternal( found ); } @@ -507,7 +507,7 @@ namespace CastorCom { if ( val ) { - m_internal->getMeshCache().remove( static_cast< CMesh * >( val )->getInternal().lock()->getName() ); + m_internal->getMeshCache().remove( static_cast< CMesh * >( val )->getInternal()->getName() ); static_cast< CMesh * >( val )->setInternal( {} ); hr = S_OK; } diff --git a/source/Interop/ComCastor3D/Castor3D/ComTextureLayout.cpp b/source/Interop/ComCastor3D/Castor3D/ComTextureLayout.cpp index c9b68acb92..ea4e44004c 100644 --- a/source/Interop/ComCastor3D/Castor3D/ComTextureLayout.cpp +++ b/source/Interop/ComCastor3D/Castor3D/ComTextureLayout.cpp @@ -90,7 +90,7 @@ namespace CastorCom if ( m_internal ) { - m_internal->setSource( static_cast< CPixelBuffer * >( val )->getInternal(), true ); + m_internal->setSource( static_cast< CPixelBuffer * >( val )->getInternal()->clone(), true ); hr = S_OK; } else diff --git a/source/Interop/ComCastor3D/CastorUtils/ComFont.cpp b/source/Interop/ComCastor3D/CastorUtils/ComFont.cpp index 5700c7cad3..e00efb72ad 100644 --- a/source/Interop/ComCastor3D/CastorUtils/ComFont.cpp +++ b/source/Interop/ComCastor3D/CastorUtils/ComFont.cpp @@ -29,7 +29,7 @@ namespace CastorCom l_pathFont = l_engine->getDataDirectory() / l_path; } - m_internal = l_engine->createFont( l_name, height, l_pathFont ); + m_internal = l_engine->addNewFont( l_name, height, l_pathFont ); if ( !m_internal ) { diff --git a/source/Interop/ComCastor3D/CastorUtils/ComImage.cpp b/source/Interop/ComCastor3D/CastorUtils/ComImage.cpp index ca4f70c8fa..445d1d03c3 100644 --- a/source/Interop/ComCastor3D/CastorUtils/ComImage.cpp +++ b/source/Interop/ComCastor3D/CastorUtils/ComImage.cpp @@ -41,7 +41,7 @@ namespace CastorCom auto img = l_engine->createImage( l_name , castor::ImageCreateParams{ l_pathImage } ); - m_internal = l_engine->addImage( l_name, img ).lock(); + m_internal = l_engine->addImage( l_name, img ); if ( !m_internal ) { @@ -73,7 +73,7 @@ namespace CastorCom auto img = l_engine->createImage( l_name , castor::ImageCreateParams{ static_cast< CSize * >( size )->getInternal() , castor::PixelFormat( fmt ) } ); - m_internal = l_engine->addImage( l_name, img ).lock(); + m_internal = l_engine->addImage( l_name, img ); } else { @@ -129,7 +129,7 @@ namespace CastorCom if ( hr == S_OK ) { castor::Image l_img = m_internal->flip(); - static_cast< CImage * >( *pVal )->m_internal = std::make_shared< castor::Image >( l_img ); + *static_cast< CImage * >( *pVal )->m_internal = l_img; } } else diff --git a/source/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.cpp b/source/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.cpp index 9f16b159fa..cfb25b5099 100644 --- a/source/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.cpp +++ b/source/Interop/ComCastor3D/CastorUtils/ComPixelBuffer.cpp @@ -36,7 +36,7 @@ namespace CastorCom if ( !m_internal ) { - m_internal = castor::PxBufferBase::create( static_cast< CSize * >( size )->getInternal() + *m_internal = *castor::PxBufferBase::create( static_cast< CSize * >( size )->getInternal() , castor::PixelFormat( format ) ); hr = S_OK; } From f06f777e8668ce69dd180cd402e466f8f6e216ee Mon Sep 17 00:00:00 2001 From: Sylvain Doremus Date: Mon, 10 Apr 2023 19:25:06 +0200 Subject: [PATCH 35/35] Trying to fix vcpkg build on GH Actions. --- data/vcpkg/ports/vkfft/portfile.cmake | 12 ++++++++++++ data/vcpkg/ports/vkfft/vcpkg.json | 7 +++++++ external/vcpkg | 2 +- .../CastorUtils/Config/BeginExternHeaderGuard.hpp | 1 + .../Plugins/Importers/AssimpImporter/CMakeLists.txt | 8 -------- vcpkg.json | 5 +++-- 6 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 data/vcpkg/ports/vkfft/portfile.cmake create mode 100644 data/vcpkg/ports/vkfft/vcpkg.json diff --git a/data/vcpkg/ports/vkfft/portfile.cmake b/data/vcpkg/ports/vkfft/portfile.cmake new file mode 100644 index 0000000000..ab9283298e --- /dev/null +++ b/data/vcpkg/ports/vkfft/portfile.cmake @@ -0,0 +1,12 @@ +# header-only library +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO DTolm/VkFFT + REF e1c58868a9581725dd595975daf780da0a37dad1 #v1.2.31 + SHA512 b113f0117336ef2f6a285166cb4d68ea372e0dbb46025b7fcbae30f4f5147ad0fb1f7abfd91e1a73e2b4d72446c16ac0e90efc467785e035f176e81d95979706 + HEAD_REF master +) + +file(COPY "${SOURCE_PATH}/vkFFT/" DESTINATION "${CURRENT_PACKAGES_DIR}/include/VkFFT") + +file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) diff --git a/data/vcpkg/ports/vkfft/vcpkg.json b/data/vcpkg/ports/vkfft/vcpkg.json new file mode 100644 index 0000000000..6c4076fe48 --- /dev/null +++ b/data/vcpkg/ports/vkfft/vcpkg.json @@ -0,0 +1,7 @@ +{ + "name": "vkfft", + "version": "1.2.31", + "description": "Vulkan/CUDA/HIP/OpenCL/Level Zero Fast Fourier Transform library", + "homepage": "https://github.com/DTolm/VkFFT", + "license": "MIT" +} diff --git a/external/vcpkg b/external/vcpkg index a2addd4bc5..6accd15d64 160000 --- a/external/vcpkg +++ b/external/vcpkg @@ -1 +1 @@ -Subproject commit a2addd4bc5c837747a19a093aa1a493d4c79bdee +Subproject commit 6accd15d644e93cec849ea346a147828437928b3 diff --git a/include/Core/CastorUtils/Config/BeginExternHeaderGuard.hpp b/include/Core/CastorUtils/Config/BeginExternHeaderGuard.hpp index 498131eede..6d7e376af2 100644 --- a/include/Core/CastorUtils/Config/BeginExternHeaderGuard.hpp +++ b/include/Core/CastorUtils/Config/BeginExternHeaderGuard.hpp @@ -19,6 +19,7 @@ See LICENSE file in root folder #pragma warning( disable: 4464 ) #pragma warning( disable: 4616 ) #pragma warning( disable: 4619 ) +#pragma warning( disable: 4702 ) #pragma warning( disable: 4996 ) #pragma warning( disable: 5031 ) #pragma warning( disable: 5054 ) diff --git a/source/Plugins/Importers/AssimpImporter/CMakeLists.txt b/source/Plugins/Importers/AssimpImporter/CMakeLists.txt index 27d305c495..e615154d7a 100644 --- a/source/Plugins/Importers/AssimpImporter/CMakeLists.txt +++ b/source/Plugins/Importers/AssimpImporter/CMakeLists.txt @@ -23,14 +23,6 @@ if ( VCPKG_BUILD OR ( VCPKG_TOOLCHAIN AND NOT CASTOR_USE_SYSTEM_ASSIMP ) ) set( pugixml_DIR ${VCPKG_SHARE_DIR}/pugixml ) set( RapidJSON_DIR ${VCPKG_SHARE_DIR}/rapidjson ) set( utf8cpp_DIR ${VCPKG_SHARE_DIR}/utf8cpp ) - find_package( irrlicht CONFIG QUIET ) - find_package( polyclipping CONFIG QUIET ) - find_package( minizip CONFIG QUIET ) - find_package( kubazip CONFIG QUIET ) - find_package( poly2tri CONFIG QUIET ) - find_package( pugixml CONFIG QUIET ) - find_package( RapidJSON CONFIG QUIET ) - find_package( utf8cpp CONFIG QUIET ) if ( VCPKG_BUILD ) find_library( ZLIB_LIBRARY_DEBUG zlib PATHS ${_VCPKG_INSTALLED_DIR}/debug/lib ) find_library( ZLIB_LIBRARY_RELEASE zlib PATHS ${_VCPKG_INSTALLED_DIR}/lib ) diff --git a/vcpkg.json b/vcpkg.json index a008d35487..6daf6951ab 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,7 +2,7 @@ "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json", "name": "castor3d", "version": "0.15.0", - "builtin-baseline": "648fd374b2e1d8507def23793c8af0cfa89fd0bb", + "builtin-baseline": "6accd15d644e93cec849ea346a147828437928b3", "dependencies": [ "convectionkernels", "freetype", @@ -20,8 +20,9 @@ "vcpkg-configuration": { "overlay-ports": [ "./data/vcpkg/ports/ashes", + "./data/vcpkg/ports/rendergraph", "./data/vcpkg/ports/shaderwriter", - "./data/vcpkg/ports/rendergraph" + "./data/vcpkg/ports/vkfft" ] }, "features": {