diff --git a/include/Nazara/Audio/Music.hpp b/include/Nazara/Audio/Music.hpp index e16592583..abc7e0a62 100644 --- a/include/Nazara/Audio/Music.hpp +++ b/include/Nazara/Audio/Music.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include struct NzMusicParams @@ -27,7 +28,7 @@ using NzMusicLoader = NzResourceLoader; struct NzMusicImpl; -class NAZARA_API NzMusic : public NzSoundEmitter +class NAZARA_API NzMusic : public NzResource, public NzSoundEmitter { friend NzMusicLoader; diff --git a/include/Nazara/Audio/SoundBuffer.hpp b/include/Nazara/Audio/SoundBuffer.hpp index 346d26e68..726eb3b29 100644 --- a/include/Nazara/Audio/SoundBuffer.hpp +++ b/include/Nazara/Audio/SoundBuffer.hpp @@ -11,9 +11,10 @@ #include #include #include +#include +#include #include #include -#include struct NzSoundBufferParams { @@ -25,13 +26,13 @@ struct NzSoundBufferParams class NzSound; class NzSoundBuffer; -using NzSoundBufferConstRef = NzResourceRef; +using NzSoundBufferConstRef = NzObjectRef; using NzSoundBufferLoader = NzResourceLoader; -using NzSoundBufferRef = NzResourceRef; +using NzSoundBufferRef = NzObjectRef; struct NzSoundBufferImpl; -class NAZARA_API NzSoundBuffer : public NzResource, public NzNonCopyable +class NAZARA_API NzSoundBuffer : public NzRefCounted, public NzResource, NzNonCopyable { friend NzSound; friend NzSoundBufferLoader; diff --git a/include/Nazara/Core.hpp b/include/Nazara/Core.hpp index bccbcaad6..3f7f5b424 100644 --- a/include/Nazara/Core.hpp +++ b/include/Nazara/Core.hpp @@ -59,15 +59,15 @@ #include #include #include +#include +#include #include #include #include #include #include #include -#include #include -#include #include #include #include diff --git a/include/Nazara/Core/Config.hpp b/include/Nazara/Core/Config.hpp index a8c33e665..94f2c0ca9 100644 --- a/include/Nazara/Core/Config.hpp +++ b/include/Nazara/Core/Config.hpp @@ -62,7 +62,7 @@ #define NAZARA_THREADSAFETY_DYNLIB 1 // NzDynLib #define NAZARA_THREADSAFETY_FILE 1 // NzFile #define NAZARA_THREADSAFETY_LOG 1 // NzLog -#define NAZARA_THREADSAFETY_RESOURCE 1 // NzResource +#define NAZARA_THREADSAFETY_REFCOUNTED 1 // NzRefCounted // Le nombre de spinlocks à utiliser avec les sections critiques de Windows (0 pour désactiver) #define NAZARA_CORE_WINDOWS_CS_SPINLOCKS 4096 diff --git a/include/Nazara/Core/ObjectListener.hpp b/include/Nazara/Core/ObjectListener.hpp new file mode 100644 index 000000000..60e132245 --- /dev/null +++ b/include/Nazara/Core/ObjectListener.hpp @@ -0,0 +1,26 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_OBJECTLISTENER_HPP +#define NAZARA_OBJECTLISTENER_HPP + +#include + +class NzRefCounted; + +class NAZARA_API NzObjectListener +{ + public: + NzObjectListener() = default; + virtual ~NzObjectListener(); + + virtual bool OnObjectCreated(const NzRefCounted* object, int index); + virtual bool OnObjectDestroy(const NzRefCounted* object, int index); + virtual bool OnObjectModified(const NzRefCounted* object, int index, unsigned int code); + virtual void OnObjectReleased(const NzRefCounted* object, int index); +}; + +#endif // NAZARA_OBJECTLISTENER_HPP diff --git a/include/Nazara/Core/ResourceRef.hpp b/include/Nazara/Core/ObjectRef.hpp similarity index 50% rename from include/Nazara/Core/ResourceRef.hpp rename to include/Nazara/Core/ObjectRef.hpp index 9a5a7eba5..1d7b2b93e 100644 --- a/include/Nazara/Core/ResourceRef.hpp +++ b/include/Nazara/Core/ObjectRef.hpp @@ -8,38 +8,38 @@ #define NAZARA_RESOURCEREF_HPP #include -#include +#include #include template -class NzResourceRef +class NzObjectRef { - static_assert(std::is_base_of::value, "ResourceRef should only be used with resource type"); + static_assert(std::is_base_of::value, "ObjectRef shall only be used with RefCounted-derived type"); public: - NzResourceRef(); - NzResourceRef(T* resource); - NzResourceRef(const NzResourceRef& ref); - NzResourceRef(NzResourceRef&& ref) noexcept; - ~NzResourceRef(); + NzObjectRef(); + NzObjectRef(T* resource); + NzObjectRef(const NzObjectRef& ref); + NzObjectRef(NzObjectRef&& ref) noexcept; + ~NzObjectRef(); bool IsValid() const; T* Release(); bool Reset(T* resource = nullptr); - NzResourceRef& Swap(NzResourceRef& ref); + NzObjectRef& Swap(NzObjectRef& ref); operator bool() const; operator T*() const; T* operator->() const; - NzResourceRef& operator=(T* resource); - NzResourceRef& operator=(const NzResourceRef& ref); - NzResourceRef& operator=(NzResourceRef&& ref) noexcept; + NzObjectRef& operator=(T* resource); + NzObjectRef& operator=(const NzObjectRef& ref); + NzObjectRef& operator=(NzObjectRef&& ref) noexcept; private: T* m_resource; }; -#include +#include #endif // NAZARA_RESOURCEREF_HPP diff --git a/include/Nazara/Core/ResourceRef.inl b/include/Nazara/Core/ObjectRef.inl similarity index 59% rename from include/Nazara/Core/ResourceRef.inl rename to include/Nazara/Core/ObjectRef.inl index 0d4d42614..b598061f5 100644 --- a/include/Nazara/Core/ResourceRef.inl +++ b/include/Nazara/Core/ObjectRef.inl @@ -6,49 +6,49 @@ #include template -NzResourceRef::NzResourceRef() : +NzObjectRef::NzObjectRef() : m_resource(nullptr) { } template -NzResourceRef::NzResourceRef(T* resource) : +NzObjectRef::NzObjectRef(T* resource) : m_resource(resource) { if (m_resource) - m_resource->AddResourceReference(); + m_resource->AddReference(); } template -NzResourceRef::NzResourceRef(const NzResourceRef& ref) : +NzObjectRef::NzObjectRef(const NzObjectRef& ref) : m_resource(ref.m_resource) { if (m_resource) - m_resource->AddResourceReference(); + m_resource->AddReference(); } template -NzResourceRef::NzResourceRef(NzResourceRef&& ref) noexcept : +NzObjectRef::NzObjectRef(NzObjectRef&& ref) noexcept : m_resource(ref.m_resource) { ref.m_resource = nullptr; // On vole la référence } template -NzResourceRef::~NzResourceRef() +NzObjectRef::~NzObjectRef() { if (m_resource) - m_resource->RemoveResourceReference(); + m_resource->RemoveReference(); } template -bool NzResourceRef::IsValid() const +bool NzObjectRef::IsValid() const { return m_resource != nullptr; } template -T* NzResourceRef::Release() +T* NzObjectRef::Release() { T* resource = m_resource; m_resource = nullptr; @@ -57,27 +57,27 @@ T* NzResourceRef::Release() } template -bool NzResourceRef::Reset(T* resource) +bool NzObjectRef::Reset(T* resource) { bool destroyed = false; if (m_resource != resource) { if (m_resource) { - destroyed = m_resource->RemoveResourceReference(); + destroyed = m_resource->RemoveReference(); m_resource = nullptr; } m_resource = resource; if (m_resource) - m_resource->AddResourceReference(); + m_resource->AddReference(); } return destroyed; } template -NzResourceRef& NzResourceRef::Swap(NzResourceRef& ref) +NzObjectRef& NzObjectRef::Swap(NzObjectRef& ref) { std::swap(m_resource, ref.m_resource); @@ -85,25 +85,25 @@ NzResourceRef& NzResourceRef::Swap(NzResourceRef& ref) } template -NzResourceRef::operator bool() const +NzObjectRef::operator bool() const { return IsValid(); } template -NzResourceRef::operator T*() const +NzObjectRef::operator T*() const { return m_resource; } template -T* NzResourceRef::operator->() const +T* NzObjectRef::operator->() const { return m_resource; } template -NzResourceRef& NzResourceRef::operator=(T* resource) +NzObjectRef& NzObjectRef::operator=(T* resource) { Reset(resource); @@ -111,7 +111,7 @@ NzResourceRef& NzResourceRef::operator=(T* resource) } template -NzResourceRef& NzResourceRef::operator=(const NzResourceRef& ref) +NzObjectRef& NzObjectRef::operator=(const NzObjectRef& ref) { Reset(ref.m_resource); @@ -119,7 +119,7 @@ NzResourceRef& NzResourceRef::operator=(const NzResourceRef& ref) } template -NzResourceRef& NzResourceRef::operator=(NzResourceRef&& ref) noexcept +NzObjectRef& NzObjectRef::operator=(NzObjectRef&& ref) noexcept { Reset(); diff --git a/include/Nazara/Core/RefCounted.hpp b/include/Nazara/Core/RefCounted.hpp new file mode 100644 index 000000000..9a24397fc --- /dev/null +++ b/include/Nazara/Core/RefCounted.hpp @@ -0,0 +1,58 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_REFCOUNTED_HPP +#define NAZARA_REFCOUNTED_HPP + +#include +#include +#include + +#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_REFCOUNTED + #include +#else + #include +#endif + +class NzObjectListener; + +class NAZARA_API NzRefCounted +{ + public: + NzRefCounted(bool persistent = true); + virtual ~NzRefCounted(); + + void AddObjectListener(NzObjectListener* listener, int index = 0) const; + void AddReference() const; + + unsigned int GetReferenceCount() const; + + bool IsPersistent() const; + + void RemoveObjectListener(NzObjectListener* listener) const; + bool RemoveReference() const; + + bool SetPersistent(bool persistent = true, bool checkReferenceCount = false); + + protected: + void NotifyCreated(); + void NotifyDestroy(); + void NotifyModified(unsigned int code); + + private: + using ObjectListenerMap = std::unordered_map>; + + void RemoveObjectListenerIterator(ObjectListenerMap::iterator iterator) const; + + NazaraMutexAttrib(m_mutex, mutable) + + mutable ObjectListenerMap m_objectListeners; + std::atomic_bool m_persistent; + mutable std::atomic_uint m_referenceCount; + bool m_objectListenersLocked; +}; + +#endif // NAZARA_RESOURCE_HPP diff --git a/include/Nazara/Core/Resource.hpp b/include/Nazara/Core/Resource.hpp index adf0eace2..875465856 100644 --- a/include/Nazara/Core/Resource.hpp +++ b/include/Nazara/Core/Resource.hpp @@ -8,52 +8,20 @@ #define NAZARA_RESOURCE_HPP #include -#include -#include - -#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_RESOURCE - #include -#else - #include -#endif - -class NzResourceListener; +#include class NAZARA_API NzResource { public: - NzResource(bool persistent = true); + NzResource() = default; virtual ~NzResource(); - void AddResourceListener(NzResourceListener* listener, int index = 0) const; - void AddResourceReference() const; + NzString GetFilePath() const; - unsigned int GetResourceReferenceCount() const; - - bool IsPersistent() const; - - void RemoveResourceListener(NzResourceListener* listener) const; - bool RemoveResourceReference() const; - - bool SetPersistent(bool persistent = true, bool checkReferenceCount = false); - - protected: - void NotifyCreated(); - void NotifyDestroy(); - void NotifyModified(unsigned int code); + void SetFilePath(const NzString& filePath); private: - using ResourceListenerMap = std::unordered_map>; - - void RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const; - - NazaraMutexAttrib(m_mutex, mutable) - - // Je fais précéder le nom par 'resource' pour éviter les éventuels conflits de noms - mutable ResourceListenerMap m_resourceListeners; - std::atomic_bool m_resourcePersistent; - mutable std::atomic_uint m_resourceReferenceCount; - bool m_resourceListenersLocked; + NzString m_filePath; }; #endif // NAZARA_RESOURCE_HPP diff --git a/include/Nazara/Core/ResourceListener.hpp b/include/Nazara/Core/ResourceListener.hpp deleted file mode 100644 index 821d17758..000000000 --- a/include/Nazara/Core/ResourceListener.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014 Jérôme Leclercq -// This file is part of the "Nazara Engine - Core module" -// For conditions of distribution and use, see copyright notice in Config.hpp - -#pragma once - -#ifndef NAZARA_RESOURCELISTENER_HPP -#define NAZARA_RESOURCELISTENER_HPP - -#include - -class NzResource; - -class NAZARA_API NzResourceListener -{ - public: - NzResourceListener() = default; - virtual ~NzResourceListener(); - - virtual bool OnResourceCreated(const NzResource* resource, int index); - virtual bool OnResourceDestroy(const NzResource* resource, int index); - virtual bool OnResourceModified(const NzResource* resource, int index, unsigned int code); - virtual void OnResourceReleased(const NzResource* resource, int index); -}; - -#endif // NAZARA_RESOURCELISTENER_HPP diff --git a/include/Nazara/Core/ResourceLoader.hpp b/include/Nazara/Core/ResourceLoader.hpp index c2139cfec..512b3bc1e 100644 --- a/include/Nazara/Core/ResourceLoader.hpp +++ b/include/Nazara/Core/ResourceLoader.hpp @@ -8,9 +8,11 @@ #define NAZARA_RESOURCELOADER_HPP #include +#include #include #include #include +#include class NzInputStream; diff --git a/include/Nazara/Core/ResourceLoader.inl b/include/Nazara/Core/ResourceLoader.inl index 8e4fef13d..2d1cf2466 100644 --- a/include/Nazara/Core/ResourceLoader.inl +++ b/include/Nazara/Core/ResourceLoader.inl @@ -84,7 +84,10 @@ bool NzResourceLoader::LoadFromFile(Type* resource, const NzSt } if (fileLoader(resource, filePath, parameters)) + { + resource->SetFilePath(filePath); return true; + } } else { @@ -99,7 +102,10 @@ bool NzResourceLoader::LoadFromFile(Type* resource, const NzSt file.SetCursorPos(0); if (streamLoader(resource, file, parameters)) + { + resource->SetFilePath(filePath); return true; + } } if (recognized == nzTernary_True) diff --git a/include/Nazara/Graphics/DeferredRenderQueue.hpp b/include/Nazara/Graphics/DeferredRenderQueue.hpp index 8cec0ecea..b5ee2b395 100644 --- a/include/Nazara/Graphics/DeferredRenderQueue.hpp +++ b/include/Nazara/Graphics/DeferredRenderQueue.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -22,7 +22,7 @@ class NzMaterial; class NzSkeletalMesh; class NzStaticMesh; -class NAZARA_API NzDeferredRenderQueue : public NzAbstractRenderQueue, NzResourceListener +class NAZARA_API NzDeferredRenderQueue : public NzAbstractRenderQueue, NzObjectListener { public: NzDeferredRenderQueue(NzForwardRenderQueue* forwardQueue); @@ -63,8 +63,8 @@ class NAZARA_API NzDeferredRenderQueue : public NzAbstractRenderQueue, NzResourc NzForwardRenderQueue* m_forwardQueue; private: - bool OnResourceDestroy(const NzResource* resource, int index) override; - void OnResourceReleased(const NzResource* resource, int index) override; + bool OnObjectDestroy(const NzRefCounted* object, int index) override; + void OnObjectReleased(const NzRefCounted* object, int index) override; }; #endif // NAZARA_DEFERREDRENDERQUEUE_HPP diff --git a/include/Nazara/Graphics/ForwardRenderQueue.hpp b/include/Nazara/Graphics/ForwardRenderQueue.hpp index 85710cd0d..b57ca839c 100644 --- a/include/Nazara/Graphics/ForwardRenderQueue.hpp +++ b/include/Nazara/Graphics/ForwardRenderQueue.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -22,7 +22,7 @@ class NzMaterial; class NzSkeletalMesh; class NzStaticMesh; -class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResourceListener +class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzObjectListener { friend class NzForwardRenderTechnique; @@ -40,8 +40,8 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResource void Sort(const NzAbstractViewer* viewer); private: - bool OnResourceDestroy(const NzResource* resource, int index) override; - void OnResourceReleased(const NzResource* resource, int index) override; + bool OnObjectDestroy(const NzRefCounted* object, int index) override; + void OnObjectReleased(const NzRefCounted* object, int index) override; struct TransparentModelData { diff --git a/include/Nazara/Graphics/ForwardRenderTechnique.hpp b/include/Nazara/Graphics/ForwardRenderTechnique.hpp index 9050cda20..a7e0fefc0 100644 --- a/include/Nazara/Graphics/ForwardRenderTechnique.hpp +++ b/include/Nazara/Graphics/ForwardRenderTechnique.hpp @@ -8,7 +8,6 @@ #define NAZARA_FORWARDRENDERTECHNIQUE_HPP #include -#include #include #include #include @@ -16,7 +15,7 @@ #include #include -class NAZARA_API NzForwardRenderTechnique : public NzAbstractRenderTechnique, NzResourceListener +class NAZARA_API NzForwardRenderTechnique : public NzAbstractRenderTechnique { public: NzForwardRenderTechnique(); diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index c381beb3a..15311fd54 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -9,9 +9,10 @@ #include #include +#include +#include #include #include -#include #include #include #include @@ -34,11 +35,11 @@ struct NAZARA_API NzMaterialParams class NzMaterial; -using NzMaterialConstRef = NzResourceRef; +using NzMaterialConstRef = NzObjectRef; using NzMaterialLoader = NzResourceLoader; -using NzMaterialRef = NzResourceRef; +using NzMaterialRef = NzObjectRef; -class NAZARA_API NzMaterial : public NzResource +class NAZARA_API NzMaterial : public NzRefCounted, public NzResource { friend NzMaterialLoader; friend class NzGraphics; diff --git a/include/Nazara/Graphics/Model.hpp b/include/Nazara/Graphics/Model.hpp index ea5b937ba..5c390d8c5 100644 --- a/include/Nazara/Graphics/Model.hpp +++ b/include/Nazara/Graphics/Model.hpp @@ -8,6 +8,7 @@ #define NAZARA_MODEL_HPP #include +#include #include #include #include @@ -28,7 +29,7 @@ class NzModel; using NzModelLoader = NzResourceLoader; -class NAZARA_API NzModel : public NzSceneNode +class NAZARA_API NzModel : public NzResource, public NzSceneNode { friend NzModelLoader; friend class NzScene; diff --git a/include/Nazara/Renderer/Context.hpp b/include/Nazara/Renderer/Context.hpp index 217680934..29c4a3714 100644 --- a/include/Nazara/Renderer/Context.hpp +++ b/include/Nazara/Renderer/Context.hpp @@ -8,20 +8,20 @@ #define NAZARA_CONTEXT_HPP #include -#include -#include +#include +#include #include #include #include class NzContext; -using NzContextConstRef = NzResourceRef; -using NzContextRef = NzResourceRef; +using NzContextConstRef = NzObjectRef; +using NzContextRef = NzObjectRef; class NzContextImpl; -class NAZARA_API NzContext : public NzResource +class NAZARA_API NzContext : public NzRefCounted { friend NzContextImpl; friend class NzOpenGL; diff --git a/include/Nazara/Renderer/RenderBuffer.hpp b/include/Nazara/Renderer/RenderBuffer.hpp index 0c4415068..207f33f59 100644 --- a/include/Nazara/Renderer/RenderBuffer.hpp +++ b/include/Nazara/Renderer/RenderBuffer.hpp @@ -9,16 +9,16 @@ #include #include -#include -#include +#include +#include #include class NzRenderBuffer; -using NzRenderBufferConstRef = NzResourceRef; -using NzRenderBufferRef = NzResourceRef; +using NzRenderBufferConstRef = NzObjectRef; +using NzRenderBufferRef = NzObjectRef; -class NAZARA_API NzRenderBuffer : public NzResource, NzNonCopyable +class NAZARA_API NzRenderBuffer : public NzRefCounted, NzNonCopyable { public: NzRenderBuffer(); diff --git a/include/Nazara/Renderer/RenderTexture.hpp b/include/Nazara/Renderer/RenderTexture.hpp index 0e1dc5b65..10bdfc84e 100644 --- a/include/Nazara/Renderer/RenderTexture.hpp +++ b/include/Nazara/Renderer/RenderTexture.hpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -20,7 +20,7 @@ class NzRenderBuffer; struct NzRenderTextureImpl; -class NAZARA_API NzRenderTexture : public NzRenderTarget, NzResourceListener, NzNonCopyable +class NAZARA_API NzRenderTexture : public NzRenderTarget, NzObjectListener, NzNonCopyable { public: NzRenderTexture() = default; @@ -66,7 +66,7 @@ class NAZARA_API NzRenderTexture : public NzRenderTarget, NzResourceListener, Nz void EnsureTargetUpdated() const override; private: - bool OnResourceDestroy(const NzResource* resource, int index) override; + bool OnObjectDestroy(const NzRefCounted* object, int index) override; void UpdateDrawBuffers() const; void UpdateTargets() const; diff --git a/include/Nazara/Renderer/Shader.hpp b/include/Nazara/Renderer/Shader.hpp index 9c8f4e0dc..76e37af08 100644 --- a/include/Nazara/Renderer/Shader.hpp +++ b/include/Nazara/Renderer/Shader.hpp @@ -11,8 +11,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -23,10 +23,10 @@ class NzShader; class NzShaderStage; -using NzShaderConstRef = NzResourceRef; -using NzShaderRef = NzResourceRef; +using NzShaderConstRef = NzObjectRef; +using NzShaderRef = NzObjectRef; -class NAZARA_API NzShader : public NzResource, NzNonCopyable +class NAZARA_API NzShader : public NzRefCounted, NzNonCopyable { friend class NzRenderer; diff --git a/include/Nazara/Renderer/Texture.hpp b/include/Nazara/Renderer/Texture.hpp index 53cb9e442..30eddb909 100644 --- a/include/Nazara/Renderer/Texture.hpp +++ b/include/Nazara/Renderer/Texture.hpp @@ -9,8 +9,9 @@ #include #include +#include +#include #include -#include #include #include #include @@ -18,12 +19,12 @@ class NzTexture; -using NzTextureConstRef = NzResourceRef; -using NzTextureRef = NzResourceRef; +using NzTextureConstRef = NzObjectRef; +using NzTextureRef = NzObjectRef; struct NzTextureImpl; -class NAZARA_API NzTexture : public NzResource, NzNonCopyable +class NAZARA_API NzTexture : public NzRefCounted, public NzResource, NzNonCopyable { friend class NzRenderer; friend class NzRenderTexture; diff --git a/include/Nazara/Renderer/UberShader.hpp b/include/Nazara/Renderer/UberShader.hpp index c01d512d6..355ccf968 100644 --- a/include/Nazara/Renderer/UberShader.hpp +++ b/include/Nazara/Renderer/UberShader.hpp @@ -9,17 +9,17 @@ #include #include -#include -#include +#include +#include #include #include class NzUberShader; -using NzUberShaderConstRef = NzResourceRef; -using NzUberShaderRef = NzResourceRef; +using NzUberShaderConstRef = NzObjectRef; +using NzUberShaderRef = NzObjectRef; -class NAZARA_API NzUberShader : public NzResource +class NAZARA_API NzUberShader : public NzRefCounted { public: NzUberShader() = default; diff --git a/include/Nazara/Utility/Animation.hpp b/include/Nazara/Utility/Animation.hpp index ae642bcc6..c76438303 100644 --- a/include/Nazara/Utility/Animation.hpp +++ b/include/Nazara/Utility/Animation.hpp @@ -8,9 +8,10 @@ #define NAZARA_ANIMATION_HPP #include +#include +#include #include #include -#include #include #include #include @@ -28,13 +29,13 @@ struct NAZARA_API NzAnimationParams class NzAnimation; class NzSkeleton; -using NzAnimationConstRef = NzResourceRef; +using NzAnimationConstRef = NzObjectRef; using NzAnimationLoader = NzResourceLoader; -using NzAnimationRef = NzResourceRef; +using NzAnimationRef = NzObjectRef; struct NzAnimationImpl; -class NAZARA_API NzAnimation : public NzResource +class NAZARA_API NzAnimation : public NzRefCounted, public NzResource { friend NzAnimationLoader; diff --git a/include/Nazara/Utility/Buffer.hpp b/include/Nazara/Utility/Buffer.hpp index be48b34ad..3f5b1ef06 100644 --- a/include/Nazara/Utility/Buffer.hpp +++ b/include/Nazara/Utility/Buffer.hpp @@ -9,18 +9,18 @@ #include #include -#include -#include +#include +#include #include class NzBuffer; -using NzBufferConstRef = NzResourceRef; -using NzBufferRef = NzResourceRef; +using NzBufferConstRef = NzObjectRef; +using NzBufferRef = NzObjectRef; class NzAbstractBuffer; -class NAZARA_API NzBuffer : public NzResource, NzNonCopyable +class NAZARA_API NzBuffer : public NzRefCounted, NzNonCopyable { friend class NzUtility; diff --git a/include/Nazara/Utility/Image.hpp b/include/Nazara/Utility/Image.hpp index 2234b7c3e..beff250a3 100644 --- a/include/Nazara/Utility/Image.hpp +++ b/include/Nazara/Utility/Image.hpp @@ -10,9 +10,10 @@ #include #include #include +#include +#include #include #include -#include #include #include #include @@ -36,11 +37,11 @@ struct NAZARA_API NzImageParams class NzImage; -using NzImageConstRef = NzResourceRef; +using NzImageConstRef = NzObjectRef; using NzImageLoader = NzResourceLoader; -using NzImageRef = NzResourceRef; +using NzImageRef = NzObjectRef; -class NAZARA_API NzImage : public NzResource +class NAZARA_API NzImage : public NzRefCounted, public NzResource { friend NzImageLoader; diff --git a/include/Nazara/Utility/IndexBuffer.hpp b/include/Nazara/Utility/IndexBuffer.hpp index ea7745c42..67b8a9f3e 100644 --- a/include/Nazara/Utility/IndexBuffer.hpp +++ b/include/Nazara/Utility/IndexBuffer.hpp @@ -8,16 +8,16 @@ #define NAZARA_INDEXBUFFER_HPP #include +#include #include -#include #include class NzIndexBuffer; -using NzIndexBufferConstRef = NzResourceRef; -using NzIndexBufferRef = NzResourceRef; +using NzIndexBufferConstRef = NzObjectRef; +using NzIndexBufferRef = NzObjectRef; -class NAZARA_API NzIndexBuffer : public NzResource +class NAZARA_API NzIndexBuffer : public NzRefCounted { public: NzIndexBuffer() = default; diff --git a/include/Nazara/Utility/Mesh.hpp b/include/Nazara/Utility/Mesh.hpp index 8c2036f05..9a3480741 100644 --- a/include/Nazara/Utility/Mesh.hpp +++ b/include/Nazara/Utility/Mesh.hpp @@ -9,11 +9,12 @@ #include #include +#include +#include #include +#include #include -#include #include -#include #include #include #include @@ -49,13 +50,13 @@ class NzPrimitiveList; typedef NzVertexStruct_XYZ_Normal_UV_Tangent NzMeshVertex; typedef NzVertexStruct_XYZ_Normal_UV_Tangent_Skinning NzSkeletalMeshVertex; -using NzMeshConstRef = NzResourceRef; +using NzMeshConstRef = NzObjectRef; using NzMeshLoader = NzResourceLoader; -using NzMeshRef = NzResourceRef; +using NzMeshRef = NzObjectRef; struct NzMeshImpl; -class NAZARA_API NzMesh : public NzResource, NzResourceListener +class NAZARA_API NzMesh : public NzRefCounted, public NzResource, NzObjectListener { friend NzMeshLoader; @@ -118,7 +119,7 @@ class NAZARA_API NzMesh : public NzResource, NzResourceListener void Transform(const NzMatrix4f& matrix); private: - void OnResourceReleased(const NzResource* resource, int index) override; + void OnObjectReleased(const NzRefCounted* object, int index) override; NzMeshImpl* m_impl = nullptr; diff --git a/include/Nazara/Utility/SkeletalMesh.hpp b/include/Nazara/Utility/SkeletalMesh.hpp index 2ac55cd82..01ab224bb 100644 --- a/include/Nazara/Utility/SkeletalMesh.hpp +++ b/include/Nazara/Utility/SkeletalMesh.hpp @@ -13,8 +13,8 @@ class NzSkeletalMesh; -using NzSkeletalMeshConstRef = NzResourceRef; -using NzSkeletalMeshRef = NzResourceRef; +using NzSkeletalMeshConstRef = NzObjectRef; +using NzSkeletalMeshRef = NzObjectRef; class NAZARA_API NzSkeletalMesh final : public NzSubMesh { diff --git a/include/Nazara/Utility/Skeleton.hpp b/include/Nazara/Utility/Skeleton.hpp index ca327b96c..bbe780a01 100644 --- a/include/Nazara/Utility/Skeleton.hpp +++ b/include/Nazara/Utility/Skeleton.hpp @@ -8,14 +8,14 @@ #define NAZARA_SKELETON_HPP #include -#include +#include #include #include #include struct NzSkeletonImpl; -class NAZARA_API NzSkeleton : public NzResource +class NAZARA_API NzSkeleton : public NzRefCounted { friend NzJoint; diff --git a/include/Nazara/Utility/StaticMesh.hpp b/include/Nazara/Utility/StaticMesh.hpp index 4bd8b4bea..45d4f6ef4 100644 --- a/include/Nazara/Utility/StaticMesh.hpp +++ b/include/Nazara/Utility/StaticMesh.hpp @@ -8,15 +8,14 @@ #define NAZARA_STATICMESH_HPP #include -#include #include class NzStaticMesh; -using NzStaticMeshConstRef = NzResourceRef; -using NzStaticMeshRef = NzResourceRef; +using NzStaticMeshConstRef = NzObjectRef; +using NzStaticMeshRef = NzObjectRef; -class NAZARA_API NzStaticMesh final : public NzSubMesh, NzResourceListener +class NAZARA_API NzStaticMesh final : public NzSubMesh { public: NzStaticMesh(const NzMesh* parent); diff --git a/include/Nazara/Utility/SubMesh.hpp b/include/Nazara/Utility/SubMesh.hpp index f8a7be0f9..db9b0c07c 100644 --- a/include/Nazara/Utility/SubMesh.hpp +++ b/include/Nazara/Utility/SubMesh.hpp @@ -8,8 +8,8 @@ #define NAZARA_SUBMESH_HPP #include -#include -#include +#include +#include #include #include #include @@ -19,10 +19,10 @@ class NzMesh; class NzSubMesh; -using NzSubMeshConstRef = NzResourceRef; -using NzSubMeshRef = NzResourceRef; +using NzSubMeshConstRef = NzObjectRef; +using NzSubMeshRef = NzObjectRef; -class NAZARA_API NzSubMesh : public NzResource +class NAZARA_API NzSubMesh : public NzRefCounted { friend NzMesh; diff --git a/include/Nazara/Utility/VertexBuffer.hpp b/include/Nazara/Utility/VertexBuffer.hpp index 0bbb8b68a..593d6edf2 100644 --- a/include/Nazara/Utility/VertexBuffer.hpp +++ b/include/Nazara/Utility/VertexBuffer.hpp @@ -8,17 +8,17 @@ #define NAZARA_VERTEXBUFFER_HPP #include -#include -#include +#include +#include #include #include class NzVertexBuffer; -using NzVertexBufferConstRef = NzResourceRef; -using NzVertexBufferRef = NzResourceRef; +using NzVertexBufferConstRef = NzObjectRef; +using NzVertexBufferRef = NzObjectRef; -class NAZARA_API NzVertexBuffer : public NzResource +class NAZARA_API NzVertexBuffer : public NzRefCounted { public: NzVertexBuffer() = default; diff --git a/include/Nazara/Utility/VertexDeclaration.hpp b/include/Nazara/Utility/VertexDeclaration.hpp index 19fb6931e..55f37c389 100644 --- a/include/Nazara/Utility/VertexDeclaration.hpp +++ b/include/Nazara/Utility/VertexDeclaration.hpp @@ -8,16 +8,16 @@ #define NAZARA_VERTEXDECLARATION_HPP #include -#include -#include +#include +#include #include class NzVertexDeclaration; -using NzVertexDeclarationConstRef = NzResourceRef; -using NzVertexDeclarationRef = NzResourceRef; +using NzVertexDeclarationConstRef = NzObjectRef; +using NzVertexDeclarationRef = NzObjectRef; -class NAZARA_API NzVertexDeclaration : public NzResource +class NAZARA_API NzVertexDeclaration : public NzRefCounted { friend class NzUtility; diff --git a/src/Nazara/Core/ObjectListener.cpp b/src/Nazara/Core/ObjectListener.cpp new file mode 100644 index 000000000..61deacee2 --- /dev/null +++ b/src/Nazara/Core/ObjectListener.cpp @@ -0,0 +1,39 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +NzObjectListener::~NzObjectListener() = default; + +bool NzObjectListener::OnObjectCreated(const NzRefCounted* object, int index) +{ + NazaraUnused(object); + NazaraUnused(index); + + return true; +} + +bool NzObjectListener::OnObjectDestroy(const NzRefCounted* object, int index) +{ + NazaraUnused(object); + NazaraUnused(index); + + return true; +} + +bool NzObjectListener::OnObjectModified(const NzRefCounted* object, int index, unsigned int code) +{ + NazaraUnused(object); + NazaraUnused(index); + NazaraUnused(code); + + return true; +} + +void NzObjectListener::OnObjectReleased(const NzRefCounted* object, int index) +{ + NazaraUnused(object); + NazaraUnused(index); +} diff --git a/src/Nazara/Core/RefCounted.cpp b/src/Nazara/Core/RefCounted.cpp new file mode 100644 index 000000000..449e379dc --- /dev/null +++ b/src/Nazara/Core/RefCounted.cpp @@ -0,0 +1,173 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include + +#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_REFCOUNTED + #include +#else + #include +#endif + +#include + +NzRefCounted::NzRefCounted(bool persistent) : +m_persistent(persistent), +m_referenceCount(0), +m_objectListenersLocked(false) +{ +} + +NzRefCounted::~NzRefCounted() +{ + m_objectListenersLocked = true; + for (auto& pair : m_objectListeners) + pair.first->OnObjectReleased(this, pair.second.first); + + #if NAZARA_CORE_SAFE + if (m_referenceCount > 0) + NazaraWarning("Resource destroyed while still referenced " + NzString::Number(m_referenceCount) + " time(s)"); + #endif +} + +void NzRefCounted::AddObjectListener(NzObjectListener* listener, int index) const +{ + ///DOC: Est ignoré si appelé depuis un évènement + NazaraLock(m_mutex) + + if (!m_objectListenersLocked) + { + auto pair = m_objectListeners.insert(std::make_pair(listener, std::make_pair(index, 1U))); + if (!pair.second) + pair.first->second.second++; + } +} + +void NzRefCounted::AddReference() const +{ + m_referenceCount++; +} + +unsigned int NzRefCounted::GetReferenceCount() const +{ + return m_referenceCount; +} + +bool NzRefCounted::IsPersistent() const +{ + return m_persistent; +} + +void NzRefCounted::RemoveObjectListener(NzObjectListener* listener) const +{ + ///DOC: Est ignoré si appelé depuis un évènement + NazaraLock(m_mutex); + + if (!m_objectListenersLocked) + { + ObjectListenerMap::iterator it = m_objectListeners.find(listener); + if (it != m_objectListeners.end()) + RemoveObjectListenerIterator(it); + } +} + +bool NzRefCounted::RemoveReference() const +{ + #if NAZARA_CORE_SAFE + if (m_referenceCount == 0) + { + NazaraError("Impossible to remove reference (Ref. counter is already 0)"); + return false; + } + #endif + + if (--m_referenceCount == 0 && !m_persistent) + { + delete this; // Suicide + + return true; + } + else + return false; +} + +bool NzRefCounted::SetPersistent(bool persistent, bool checkReferenceCount) +{ + m_persistent = persistent; + + if (checkReferenceCount && !persistent && m_referenceCount == 0) + { + delete this; + + return true; + } + else + return false; +} + +void NzRefCounted::NotifyCreated() +{ + NazaraLock(m_mutex) + + m_objectListenersLocked = true; + + auto it = m_objectListeners.begin(); + while (it != m_objectListeners.end()) + { + if (!it->first->OnObjectCreated(this, it->second.first)) + RemoveObjectListenerIterator(it++); + else + ++it; + } + + m_objectListenersLocked = false; +} + +void NzRefCounted::NotifyDestroy() +{ + NazaraLock(m_mutex) + + m_objectListenersLocked = true; + + auto it = m_objectListeners.begin(); + while (it != m_objectListeners.end()) + { + if (!it->first->OnObjectDestroy(this, it->second.first)) + RemoveObjectListenerIterator(it++); + else + ++it; + } + + m_objectListenersLocked = false; +} + +void NzRefCounted::NotifyModified(unsigned int code) +{ + NazaraLock(m_mutex) + + m_objectListenersLocked = true; + + auto it = m_objectListeners.begin(); + while (it != m_objectListeners.end()) + { + if (!it->first->OnObjectModified(this, it->second.first, code)) + RemoveObjectListenerIterator(it++); + else + ++it; + } + + m_objectListenersLocked = false; +} + +void NzRefCounted::RemoveObjectListenerIterator(ObjectListenerMap::iterator iterator) const +{ + unsigned int& referenceCount = iterator->second.second; + if (referenceCount == 1) + m_objectListeners.erase(iterator); + else + referenceCount--; +} diff --git a/src/Nazara/Core/Resource.cpp b/src/Nazara/Core/Resource.cpp index 461cda9b2..3c8bf27fd 100644 --- a/src/Nazara/Core/Resource.cpp +++ b/src/Nazara/Core/Resource.cpp @@ -3,174 +3,16 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#include -#include -#include -#include -#include -#include - -#if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_RESOURCE - #include -#else - #include -#endif - #include -NzResource::NzResource(bool persistent) : -m_resourcePersistent(persistent), -m_resourceReferenceCount(0), -m_resourceListenersLocked(false) +NzResource::~NzResource() = default; + +NzString NzResource::GetFilePath() const { + return m_filePath; } -NzResource::~NzResource() +void NzResource::SetFilePath(const NzString& filePath) { - m_resourceListenersLocked = true; - for (auto& pair : m_resourceListeners) - pair.first->OnResourceReleased(this, pair.second.first); - - #if NAZARA_CORE_SAFE - if (m_resourceReferenceCount > 0) - NazaraWarning("Resource destroyed while still referenced " + NzString::Number(m_resourceReferenceCount) + " time(s)"); - #endif -} - -void NzResource::AddResourceListener(NzResourceListener* listener, int index) const -{ - ///DOC: Est ignoré si appelé depuis un évènement - NazaraLock(m_mutex) - - if (!m_resourceListenersLocked) - { - auto pair = m_resourceListeners.insert(std::make_pair(listener, std::make_pair(index, 1U))); - if (!pair.second) - pair.first->second.second++; - } -} - -void NzResource::AddResourceReference() const -{ - m_resourceReferenceCount++; -} - -unsigned int NzResource::GetResourceReferenceCount() const -{ - return m_resourceReferenceCount; -} - -bool NzResource::IsPersistent() const -{ - return m_resourcePersistent; -} - -void NzResource::RemoveResourceListener(NzResourceListener* listener) const -{ - ///DOC: Est ignoré si appelé depuis un évènement - NazaraLock(m_mutex); - - if (!m_resourceListenersLocked) - { - ResourceListenerMap::iterator it = m_resourceListeners.find(listener); - if (it != m_resourceListeners.end()) - RemoveResourceListenerIterator(it); - } -} - -bool NzResource::RemoveResourceReference() const -{ - #if NAZARA_CORE_SAFE - if (m_resourceReferenceCount == 0) - { - NazaraError("Impossible to remove reference (Ref. counter is already 0)"); - return false; - } - #endif - - if (--m_resourceReferenceCount == 0 && !m_resourcePersistent) - { - delete this; // Suicide - - return true; - } - else - return false; -} - -bool NzResource::SetPersistent(bool persistent, bool checkReferenceCount) -{ - m_resourcePersistent = persistent; - - if (checkReferenceCount && !persistent && m_resourceReferenceCount == 0) - { - delete this; - - return true; - } - else - return false; -} - -void NzResource::NotifyCreated() -{ - NazaraLock(m_mutex) - - m_resourceListenersLocked = true; - - auto it = m_resourceListeners.begin(); - while (it != m_resourceListeners.end()) - { - if (!it->first->OnResourceCreated(this, it->second.first)) - RemoveResourceListenerIterator(it++); - else - ++it; - } - - m_resourceListenersLocked = false; -} - -void NzResource::NotifyDestroy() -{ - NazaraLock(m_mutex) - - m_resourceListenersLocked = true; - - auto it = m_resourceListeners.begin(); - while (it != m_resourceListeners.end()) - { - if (!it->first->OnResourceDestroy(this, it->second.first)) - RemoveResourceListenerIterator(it++); - else - ++it; - } - - m_resourceListenersLocked = false; -} - -void NzResource::NotifyModified(unsigned int code) -{ - NazaraLock(m_mutex) - - m_resourceListenersLocked = true; - - auto it = m_resourceListeners.begin(); - while (it != m_resourceListeners.end()) - { - if (!it->first->OnResourceModified(this, it->second.first, code)) - RemoveResourceListenerIterator(it++); - else - ++it; - } - - m_resourceListenersLocked = false; -} - -void NzResource::RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const -{ - unsigned int& referenceCount = iterator->second.second; - if (referenceCount == 1) - m_resourceListeners.erase(iterator); - else - referenceCount--; + m_filePath = filePath; } diff --git a/src/Nazara/Core/ResourceListener.cpp b/src/Nazara/Core/ResourceListener.cpp deleted file mode 100644 index 6e8019a84..000000000 --- a/src/Nazara/Core/ResourceListener.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2014 Jérôme Leclercq -// This file is part of the "Nazara Engine - Core module" -// For conditions of distribution and use, see copyright notice in Config.hpp - -#include -#include - -NzResourceListener::~NzResourceListener() = default; - -bool NzResourceListener::OnResourceCreated(const NzResource* resource, int index) -{ - NazaraUnused(resource); - NazaraUnused(index); - - return true; -} - -bool NzResourceListener::OnResourceDestroy(const NzResource* resource, int index) -{ - NazaraUnused(resource); - NazaraUnused(index); - - return true; -} - -bool NzResourceListener::OnResourceModified(const NzResource* resource, int index, unsigned int code) -{ - NazaraUnused(resource); - NazaraUnused(index); - NazaraUnused(code); - - return true; -} - -void NzResourceListener::OnResourceReleased(const NzResource* resource, int index) -{ - NazaraUnused(resource); - NazaraUnused(index); -} diff --git a/src/Nazara/Graphics/DeferredRenderQueue.cpp b/src/Nazara/Graphics/DeferredRenderQueue.cpp index c4e393ec1..b57ac1959 100644 --- a/src/Nazara/Graphics/DeferredRenderQueue.cpp +++ b/src/Nazara/Graphics/DeferredRenderQueue.cpp @@ -13,11 +13,11 @@ namespace { - enum ResourceType + enum ObjectType { - ResourceType_IndexBuffer, - ResourceType_Material, - ResourceType_VertexBuffer + ObjectType_IndexBuffer, + ObjectType_Material, + ObjectType_VertexBuffer }; } @@ -74,7 +74,7 @@ void NzDeferredRenderQueue::AddMesh(const NzMaterial* material, const NzMeshData if (it == opaqueModels.end()) { it = opaqueModels.insert(std::make_pair(material, ModelBatches::mapped_type())).first; - material->AddResourceListener(this, ResourceType_Material); + material->AddObjectListener(this, ObjectType_Material); } bool& used = std::get<0>(it->second); @@ -89,9 +89,9 @@ void NzDeferredRenderQueue::AddMesh(const NzMaterial* material, const NzMeshData it2 = meshMap.insert(std::make_pair(meshData, MeshInstanceContainer::mapped_type())).first; if (meshData.indexBuffer) - meshData.indexBuffer->AddResourceListener(this, ResourceType_IndexBuffer); + meshData.indexBuffer->AddObjectListener(this, ObjectType_IndexBuffer); - meshData.vertexBuffer->AddResourceListener(this, ResourceType_VertexBuffer); + meshData.vertexBuffer->AddObjectListener(this, ObjectType_VertexBuffer); } std::vector& instances = it2->second; @@ -139,7 +139,7 @@ void NzDeferredRenderQueue::Clear(bool fully) for (auto& matIt : opaqueModels) { const NzMaterial* material = matIt.first; - material->RemoveResourceListener(this); + material->RemoveObjectListener(this); MeshInstanceContainer& instances = std::get<2>(matIt.second); for (auto& instanceIt : instances) @@ -147,9 +147,9 @@ void NzDeferredRenderQueue::Clear(bool fully) const NzMeshData& renderData = instanceIt.first; if (renderData.indexBuffer) - renderData.indexBuffer->RemoveResourceListener(this); + renderData.indexBuffer->RemoveObjectListener(this); - renderData.vertexBuffer->RemoveResourceListener(this); + renderData.vertexBuffer->RemoveObjectListener(this); } } @@ -160,11 +160,11 @@ void NzDeferredRenderQueue::Clear(bool fully) m_forwardQueue->Clear(fully); } -bool NzDeferredRenderQueue::OnResourceDestroy(const NzResource* resource, int index) +bool NzDeferredRenderQueue::OnObjectDestroy(const NzRefCounted* object, int index) { switch (index) { - case ResourceType_IndexBuffer: + case ObjectType_IndexBuffer: { for (auto& modelPair : opaqueModels) { @@ -172,7 +172,7 @@ bool NzDeferredRenderQueue::OnResourceDestroy(const NzResource* resource, int in for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.indexBuffer == resource) + if (renderData.indexBuffer == object) it = meshes.erase(it); else ++it; @@ -181,11 +181,11 @@ bool NzDeferredRenderQueue::OnResourceDestroy(const NzResource* resource, int in break; } - case ResourceType_Material: - opaqueModels.erase(static_cast(resource)); + case ObjectType_Material: + opaqueModels.erase(static_cast(object)); break; - case ResourceType_VertexBuffer: + case ObjectType_VertexBuffer: { for (auto& modelPair : opaqueModels) { @@ -193,7 +193,7 @@ bool NzDeferredRenderQueue::OnResourceDestroy(const NzResource* resource, int in for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.vertexBuffer == resource) + if (renderData.vertexBuffer == object) it = meshes.erase(it); else ++it; @@ -206,14 +206,14 @@ bool NzDeferredRenderQueue::OnResourceDestroy(const NzResource* resource, int in return false; // Nous ne voulons plus recevoir d'évènement de cette ressource } -void NzDeferredRenderQueue::OnResourceReleased(const NzResource* resource, int index) +void NzDeferredRenderQueue::OnObjectReleased(const NzRefCounted* object, int index) { // La ressource vient d'être libérée, nous ne pouvons donc plus utiliser la méthode traditionnelle de recherche // des pointeurs stockés (À cause de la fonction de triage utilisant des spécificités des ressources) switch (index) { - case ResourceType_IndexBuffer: + case ObjectType_IndexBuffer: { for (auto& modelPair : opaqueModels) { @@ -221,7 +221,7 @@ void NzDeferredRenderQueue::OnResourceReleased(const NzResource* resource, int i for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.indexBuffer == resource) + if (renderData.indexBuffer == object) it = meshes.erase(it); else ++it; @@ -230,11 +230,11 @@ void NzDeferredRenderQueue::OnResourceReleased(const NzResource* resource, int i break; } - case ResourceType_Material: + case ObjectType_Material: { for (auto it = opaqueModels.begin(); it != opaqueModels.end(); ++it) { - if (it->first == resource) + if (it->first == object) { opaqueModels.erase(it); break; @@ -243,7 +243,7 @@ void NzDeferredRenderQueue::OnResourceReleased(const NzResource* resource, int i break; } - case ResourceType_VertexBuffer: + case ObjectType_VertexBuffer: { for (auto& modelPair : opaqueModels) { @@ -251,7 +251,7 @@ void NzDeferredRenderQueue::OnResourceReleased(const NzResource* resource, int i for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.vertexBuffer == resource) + if (renderData.vertexBuffer == object) it = meshes.erase(it); else ++it; diff --git a/src/Nazara/Graphics/ForwardRenderQueue.cpp b/src/Nazara/Graphics/ForwardRenderQueue.cpp index 90770660d..19bc866bf 100644 --- a/src/Nazara/Graphics/ForwardRenderQueue.cpp +++ b/src/Nazara/Graphics/ForwardRenderQueue.cpp @@ -89,7 +89,7 @@ void NzForwardRenderQueue::AddMesh(const NzMaterial* material, const NzMeshData& if (it == opaqueModels.end()) { it = opaqueModels.insert(std::make_pair(material, ModelBatches::mapped_type())).first; - material->AddResourceListener(this, ResourceType_Material); + material->AddObjectListener(this, ResourceType_Material); } bool& used = std::get<0>(it->second); @@ -107,9 +107,9 @@ void NzForwardRenderQueue::AddMesh(const NzMaterial* material, const NzMeshData& squaredBoundingSphere.Set(meshAABB.GetSquaredBoundingSphere()); if (meshData.indexBuffer) - meshData.indexBuffer->AddResourceListener(this, ResourceType_IndexBuffer); + meshData.indexBuffer->AddObjectListener(this, ResourceType_IndexBuffer); - meshData.vertexBuffer->AddResourceListener(this, ResourceType_VertexBuffer); + meshData.vertexBuffer->AddObjectListener(this, ResourceType_VertexBuffer); } std::vector& instances = it2->second.second; @@ -153,7 +153,7 @@ void NzForwardRenderQueue::Clear(bool fully) for (auto& matIt : opaqueModels) { const NzMaterial* material = matIt.first; - material->RemoveResourceListener(this); + material->RemoveObjectListener(this); MeshInstanceContainer& instances = std::get<2>(matIt.second); for (auto& instanceIt : instances) @@ -161,9 +161,9 @@ void NzForwardRenderQueue::Clear(bool fully) const NzMeshData& renderData = instanceIt.first; if (renderData.indexBuffer) - renderData.indexBuffer->RemoveResourceListener(this); + renderData.indexBuffer->RemoveObjectListener(this); - renderData.vertexBuffer->RemoveResourceListener(this); + renderData.vertexBuffer->RemoveObjectListener(this); } } opaqueModels.clear(); @@ -188,7 +188,7 @@ void NzForwardRenderQueue::Sort(const NzAbstractViewer* viewer) }); } -bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int index) +bool NzForwardRenderQueue::OnObjectDestroy(const NzRefCounted* object, int index) { switch (index) { @@ -200,7 +200,7 @@ bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.indexBuffer == resource) + if (renderData.indexBuffer == object) it = meshes.erase(it); else ++it; @@ -210,7 +210,7 @@ bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind } case ResourceType_Material: - opaqueModels.erase(static_cast(resource)); + opaqueModels.erase(static_cast(object)); break; case ResourceType_VertexBuffer: @@ -221,7 +221,7 @@ bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.vertexBuffer == resource) + if (renderData.vertexBuffer == object) it = meshes.erase(it); else ++it; @@ -234,7 +234,7 @@ bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind return false; // Nous ne voulons plus recevoir d'évènement de cette ressource } -void NzForwardRenderQueue::OnResourceReleased(const NzResource* resource, int index) +void NzForwardRenderQueue::OnObjectReleased(const NzRefCounted* object, int index) { // La ressource vient d'être libérée, nous ne pouvons donc plus utiliser la méthode traditionnelle de recherche // des pointeurs stockés (À cause de la fonction de triage utilisant des spécificités des ressources) @@ -249,7 +249,7 @@ void NzForwardRenderQueue::OnResourceReleased(const NzResource* resource, int in for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.indexBuffer == resource) + if (renderData.indexBuffer == object) it = meshes.erase(it); else ++it; @@ -262,7 +262,7 @@ void NzForwardRenderQueue::OnResourceReleased(const NzResource* resource, int in { for (auto it = opaqueModels.begin(); it != opaqueModels.end(); ++it) { - if (it->first == resource) + if (it->first == object) { opaqueModels.erase(it); break; @@ -279,7 +279,7 @@ void NzForwardRenderQueue::OnResourceReleased(const NzResource* resource, int in for (auto it = meshes.begin(); it != meshes.end();) { const NzMeshData& renderData = it->first; - if (renderData.vertexBuffer == resource) + if (renderData.vertexBuffer == object) it = meshes.erase(it); else ++it; diff --git a/src/Nazara/Graphics/Material.cpp b/src/Nazara/Graphics/Material.cpp index 123db7ffc..007f25984 100644 --- a/src/Nazara/Graphics/Material.cpp +++ b/src/Nazara/Graphics/Material.cpp @@ -29,6 +29,7 @@ NzMaterial::NzMaterial() } NzMaterial::NzMaterial(const NzMaterial& material) : +NzRefCounted(), NzResource() { Copy(material); diff --git a/src/Nazara/Graphics/SkinningManager.cpp b/src/Nazara/Graphics/SkinningManager.cpp index 9200b1186..4eb73f9d8 100644 --- a/src/Nazara/Graphics/SkinningManager.cpp +++ b/src/Nazara/Graphics/SkinningManager.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include @@ -16,10 +16,10 @@ namespace { - enum ResourceType + enum ObjectType { - ResourceType_SkeletalMesh, - ResourceType_Skeleton, + ObjectType_SkeletalMesh, + ObjectType_Skeleton, }; struct BufferData @@ -40,38 +40,38 @@ namespace SkeletonMap s_cache; std::vector s_skinningQueue; - class ResourceListener : public NzResourceListener + class ObjectListener : public NzObjectListener { public: - bool OnResourceDestroy(const NzResource* resource, int index) + bool OnObjectDestroy(const NzRefCounted* object, int index) override { switch (index) { - case ResourceType_SkeletalMesh: + case ObjectType_SkeletalMesh: { for (auto& pair : s_cache) { MeshMap& meshMap = pair.second; - meshMap.erase(static_cast(resource)); + meshMap.erase(static_cast(object)); } break; } - case ResourceType_Skeleton: - s_cache.erase(static_cast(resource)); + case ObjectType_Skeleton: + s_cache.erase(static_cast(object)); break; } return false; } - bool OnResourceModified(const NzResource* resource, int index, unsigned int code) + bool OnObjectModified(const NzRefCounted* object, int index, unsigned int code) override { NazaraUnused(code); switch (index) { - case ResourceType_SkeletalMesh: + case ObjectType_SkeletalMesh: { for (auto& pair : s_cache) { @@ -82,9 +82,9 @@ namespace break; } - case ResourceType_Skeleton: + case ObjectType_Skeleton: { - for (auto& pair : s_cache.at(static_cast(resource))) + for (auto& pair : s_cache.at(static_cast(object))) pair.second.updated = false; break; } @@ -93,13 +93,13 @@ namespace return true; } - void OnResourceReleased(const NzResource* resource, int index) + void OnObjectReleased(const NzRefCounted* resource, int index) override { - OnResourceDestroy(resource, index); + OnObjectDestroy(resource, index); } }; - ResourceListener listener; + ObjectListener listener; void Skin_MonoCPU(const NzSkeletalMesh* mesh, const NzSkeleton* skeleton, NzVertexBuffer* buffer) { @@ -163,7 +163,7 @@ NzVertexBuffer* NzSkinningManager::GetBuffer(const NzSkeletalMesh* mesh, const N if (it == s_cache.end()) { it = s_cache.insert(std::make_pair(skeleton, SkeletonMap::mapped_type())).first; - skeleton->AddResourceListener(&listener, ResourceType_Skeleton); + skeleton->AddObjectListener(&listener, ObjectType_Skeleton); } NzVertexBuffer* buffer; @@ -179,7 +179,7 @@ NzVertexBuffer* NzSkinningManager::GetBuffer(const NzSkeletalMesh* mesh, const N BufferData data({vertexBuffer.get(), true}); meshMap.insert(std::make_pair(mesh, data)); - mesh->AddResourceListener(&listener, ResourceType_SkeletalMesh); + mesh->AddObjectListener(&listener, ObjectType_SkeletalMesh); s_skinningQueue.push_back(SkinningData{mesh, skeleton, vertexBuffer.get()}); @@ -223,10 +223,10 @@ void NzSkinningManager::Uninitialize() { for (auto& pair : s_cache) { - pair.first->RemoveResourceListener(&listener); + pair.first->RemoveObjectListener(&listener); MeshMap& meshMap = pair.second; for (auto& pair2 : meshMap) - pair2.first->RemoveResourceListener(&listener); + pair2.first->RemoveObjectListener(&listener); } s_cache.clear(); s_skinningQueue.clear(); diff --git a/src/Nazara/Renderer/RenderTexture.cpp b/src/Nazara/Renderer/RenderTexture.cpp index 5c5ae4cdf..1a0c0119d 100644 --- a/src/Nazara/Renderer/RenderTexture.cpp +++ b/src/Nazara/Renderer/RenderTexture.cpp @@ -150,7 +150,7 @@ bool NzRenderTexture::AttachBuffer(nzAttachmentPoint attachmentPoint, nzUInt8 in attachment.height = buffer->GetHeight(); attachment.width = buffer->GetWidth(); - buffer->AddResourceListener(this, attachIndex); + buffer->AddObjectListener(this, attachIndex); m_impl->checked = false; @@ -294,7 +294,7 @@ bool NzRenderTexture::AttachTexture(nzAttachmentPoint attachmentPoint, nzUInt8 i attachment.texture = texture; attachment.width = texture->GetWidth(); - texture->AddResourceListener(this, attachIndex); + texture->AddObjectListener(this, attachIndex); m_impl->checked = false; @@ -339,7 +339,7 @@ bool NzRenderTexture::Create(bool lock) m_impl = impl.release(); m_impl->context = NzContext::GetCurrent(); - m_impl->context->AddResourceListener(this); + m_impl->context->AddObjectListener(this); if (lock) { @@ -371,16 +371,16 @@ void NzRenderTexture::Destroy() if (IsActive()) NzRenderer::SetTarget(nullptr); - m_impl->context->RemoveResourceListener(this); + m_impl->context->RemoveObjectListener(this); for (const Attachment& attachment : m_impl->attachments) { if (attachment.isUsed) { if (attachment.isBuffer) - attachment.buffer->RemoveResourceListener(this); + attachment.buffer->RemoveObjectListener(this); else - attachment.texture->RemoveResourceListener(this); + attachment.texture->RemoveObjectListener(this); } } @@ -429,7 +429,7 @@ void NzRenderTexture::Detach(nzAttachmentPoint attachmentPoint, nzUInt8 index) { glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, NzOpenGL::Attachment[attachmentPoint]+index, GL_RENDERBUFFER, 0); - attachement.buffer->RemoveResourceListener(this); + attachement.buffer->RemoveObjectListener(this); attachement.buffer = nullptr; } else @@ -439,7 +439,7 @@ void NzRenderTexture::Detach(nzAttachmentPoint attachmentPoint, nzUInt8 index) else glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, NzOpenGL::Attachment[attachmentPoint]+index, 0, 0, 0); - attachement.texture->RemoveResourceListener(this); + attachement.texture->RemoveObjectListener(this); attachement.texture = nullptr; } @@ -877,10 +877,10 @@ void NzRenderTexture::EnsureTargetUpdated() const } } -bool NzRenderTexture::OnResourceDestroy(const NzResource* resource, int index) +bool NzRenderTexture::OnObjectDestroy(const NzRefCounted* object, int index) { - if (resource == m_impl->context) - // Notre contexte va être détruit, libérons la RenderTexture pour éviter un leak + if (object == m_impl->context) + // Notre contexte va être détruit, libérons la RenderTexture pour éviter un éventuel leak Destroy(); else // Sinon, c'est une texture { diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index 0fc62e782..9c0c76375 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -34,12 +35,12 @@ namespace { - enum ResourceType + enum ObjectType { - ResourceType_Context, - ResourceType_IndexBuffer, - ResourceType_VertexBuffer, - ResourceType_VertexDeclaration + ObjectType_Context, + ObjectType_IndexBuffer, + ObjectType_VertexBuffer, + ObjectType_VertexDeclaration }; enum UpdateFlags @@ -95,23 +96,23 @@ namespace unsigned int s_maxTextureUnit; unsigned int s_maxVertexAttribs; - class ResourceListener : public NzResourceListener + class ObjectListener : public NzObjectListener { public: - void OnResourceReleased(const NzResource* resource, int index) override + void OnObjectReleased(const NzRefCounted* object, int index) override { switch (index) { - case ResourceType_Context: + case ObjectType_Context: { - const NzContext* context = static_cast(resource); + const NzContext* context = static_cast(object); s_vaos.erase(context); break; } - case ResourceType_IndexBuffer: + case ObjectType_IndexBuffer: { - const NzIndexBuffer* indexBuffer = static_cast(resource); + const NzIndexBuffer* indexBuffer = static_cast(object); for (auto& pair : s_vaos) { const NzContext* context = pair.first; @@ -140,9 +141,9 @@ namespace break; } - case ResourceType_VertexBuffer: + case ObjectType_VertexBuffer: { - const NzVertexBuffer* vertexBuffer = static_cast(resource); + const NzVertexBuffer* vertexBuffer = static_cast(object); for (auto& pair : s_vaos) { const NzContext* context = pair.first; @@ -171,9 +172,9 @@ namespace break; } - case ResourceType_VertexDeclaration: + case ObjectType_VertexDeclaration: { - const NzVertexDeclaration* vertexDeclaration = static_cast(resource); + const NzVertexDeclaration* vertexDeclaration = static_cast(object); for (auto& pair : s_vaos) { const NzContext* context = pair.first; @@ -210,7 +211,7 @@ namespace } }; - ResourceListener s_listener; + ObjectListener s_listener; } void NzRenderer::BeginCondition(const NzGpuQuery& query, nzGpuQueryCondition condition) @@ -1530,13 +1531,13 @@ void NzRenderer::Uninitialize() const NzVertexDeclaration* instancingDeclaration = std::get<3>(key); if (indexBuffer) - indexBuffer->RemoveResourceListener(&s_listener); + indexBuffer->RemoveObjectListener(&s_listener); - vertexBuffer->RemoveResourceListener(&s_listener); - vertexDeclaration->RemoveResourceListener(&s_listener); + vertexBuffer->RemoveObjectListener(&s_listener); + vertexDeclaration->RemoveObjectListener(&s_listener); if (instancingDeclaration) - instancingDeclaration->RemoveResourceListener(&s_listener); + instancingDeclaration->RemoveObjectListener(&s_listener); NzOpenGL::DeleteVertexArray(context, pair2.second); } @@ -1710,7 +1711,7 @@ bool NzRenderer::EnsureStateUpdate() auto it = s_vaos.find(context); if (it == s_vaos.end()) { - context->AddResourceListener(&s_listener, ResourceType_Context); + context->AddObjectListener(&s_listener, ObjectType_Context); auto pair = s_vaos.insert(std::make_pair(context, Context_Map::mapped_type())); vaos = &pair.first->second; } @@ -1733,13 +1734,13 @@ bool NzRenderer::EnsureStateUpdate() // On l'ajoute à notre liste vaoIt = vaos->insert(std::make_pair(key, s_currentVAO)).first; if (s_indexBuffer) - s_indexBuffer->AddResourceListener(&s_listener, ResourceType_IndexBuffer); + s_indexBuffer->AddObjectListener(&s_listener, ObjectType_IndexBuffer); - s_vertexBuffer->AddResourceListener(&s_listener, ResourceType_VertexBuffer); - vertexDeclaration->AddResourceListener(&s_listener, ResourceType_VertexDeclaration); + s_vertexBuffer->AddObjectListener(&s_listener, ObjectType_VertexBuffer); + vertexDeclaration->AddObjectListener(&s_listener, ObjectType_VertexDeclaration); if (instancingDeclaration) - instancingDeclaration->AddResourceListener(&s_listener, ResourceType_VertexDeclaration); + instancingDeclaration->AddObjectListener(&s_listener, ObjectType_VertexDeclaration); // Et on indique qu'on veut le programmer update = true; diff --git a/src/Nazara/Utility/Image.cpp b/src/Nazara/Utility/Image.cpp index a6ceaf41a..18ab39727 100644 --- a/src/Nazara/Utility/Image.cpp +++ b/src/Nazara/Utility/Image.cpp @@ -51,6 +51,7 @@ m_sharedImage(&emptyImage) } NzImage::NzImage(const NzImage& image) : +NzRefCounted(), NzResource(), m_sharedImage(image.m_sharedImage) { diff --git a/src/Nazara/Utility/IndexBuffer.cpp b/src/Nazara/Utility/IndexBuffer.cpp index 2f13fad5f..542a872d1 100644 --- a/src/Nazara/Utility/IndexBuffer.cpp +++ b/src/Nazara/Utility/IndexBuffer.cpp @@ -22,7 +22,7 @@ NzIndexBuffer::NzIndexBuffer(bool largeIndices, unsigned int length, nzBufferSto } NzIndexBuffer::NzIndexBuffer(const NzIndexBuffer& indexBuffer) : -NzResource(), +NzRefCounted(), m_buffer(indexBuffer.m_buffer), m_largeIndices(indexBuffer.m_largeIndices), m_endOffset(indexBuffer.m_endOffset), @@ -32,7 +32,7 @@ m_startOffset(indexBuffer.m_startOffset) } NzIndexBuffer::NzIndexBuffer(NzIndexBuffer&& indexBuffer) noexcept : -NzResource(), +NzRefCounted(), m_buffer(std::move(indexBuffer.m_buffer)), m_largeIndices(indexBuffer.m_largeIndices), m_endOffset(indexBuffer.m_endOffset), diff --git a/src/Nazara/Utility/Mesh.cpp b/src/Nazara/Utility/Mesh.cpp index fc1c7109b..634a3c36d 100644 --- a/src/Nazara/Utility/Mesh.cpp +++ b/src/Nazara/Utility/Mesh.cpp @@ -91,8 +91,8 @@ void NzMesh::AddSubMesh(NzSubMesh* subMesh) } #endif - subMesh->AddResourceListener(this, m_impl->subMeshes.size()); - subMesh->AddResourceReference(); + subMesh->AddObjectListener(this, m_impl->subMeshes.size()); + subMesh->AddReference(); m_impl->aabbUpdated = false; // On invalide l'AABB m_impl->subMeshes.push_back(subMesh); @@ -135,8 +135,8 @@ void NzMesh::AddSubMesh(const NzString& identifier, NzSubMesh* subMesh) int index = m_impl->subMeshes.size(); - subMesh->AddResourceListener(this, index); - subMesh->AddResourceReference(); + subMesh->AddObjectListener(this, index); + subMesh->AddReference(); m_impl->aabbUpdated = false; // On invalide l'AABB m_impl->subMeshes.push_back(subMesh); @@ -373,8 +373,8 @@ void NzMesh::Destroy() for (NzSubMesh* subMesh : m_impl->subMeshes) { - subMesh->RemoveResourceListener(this); - subMesh->RemoveResourceReference(); + subMesh->RemoveObjectListener(this); + subMesh->RemoveReference(); } delete m_impl; @@ -866,8 +866,8 @@ void NzMesh::RemoveSubMesh(const NzString& identifier) // On libère la ressource NzSubMesh* subMesh = *it2; - subMesh->RemoveResourceListener(this); - subMesh->RemoveResourceReference(); + subMesh->RemoveObjectListener(this); + subMesh->RemoveReference(); m_impl->subMeshes.erase(it2); @@ -896,8 +896,8 @@ void NzMesh::RemoveSubMesh(unsigned int index) // On libère la ressource NzSubMesh* subMesh = *it; - subMesh->RemoveResourceListener(this); - subMesh->RemoveResourceReference(); + subMesh->RemoveObjectListener(this); + subMesh->RemoveReference(); m_impl->subMeshes.erase(it); @@ -1011,9 +1011,9 @@ void NzMesh::Transform(const NzMatrix4f& matrix) m_impl->aabbUpdated = false; } -void NzMesh::OnResourceReleased(const NzResource* resource, int index) +void NzMesh::OnObjectReleased(const NzRefCounted* object, int index) { - NazaraUnused(resource); + NazaraUnused(object); RemoveSubMesh(index); } diff --git a/src/Nazara/Utility/Skeleton.cpp b/src/Nazara/Utility/Skeleton.cpp index a58ba6a92..7d3a38f24 100644 --- a/src/Nazara/Utility/Skeleton.cpp +++ b/src/Nazara/Utility/Skeleton.cpp @@ -16,7 +16,7 @@ struct NzSkeletonImpl }; NzSkeleton::NzSkeleton(const NzSkeleton& skeleton) : -NzResource(), +NzRefCounted(), m_impl(nullptr) { operator=(skeleton); diff --git a/src/Nazara/Utility/SubMesh.cpp b/src/Nazara/Utility/SubMesh.cpp index f44380a2f..3db528225 100644 --- a/src/Nazara/Utility/SubMesh.cpp +++ b/src/Nazara/Utility/SubMesh.cpp @@ -13,7 +13,7 @@ #include NzSubMesh::NzSubMesh(const NzMesh* parent) : -NzResource(false), // Un SubMesh n'est pas persistant par défaut +NzRefCounted(false), // Un SubMesh n'est pas persistant par défaut m_primitiveMode(nzPrimitiveMode_TriangleList), m_parent(parent), m_matIndex(0) diff --git a/src/Nazara/Utility/VertexBuffer.cpp b/src/Nazara/Utility/VertexBuffer.cpp index 594b77129..08f12381f 100644 --- a/src/Nazara/Utility/VertexBuffer.cpp +++ b/src/Nazara/Utility/VertexBuffer.cpp @@ -18,7 +18,7 @@ NzVertexBuffer::NzVertexBuffer(const NzVertexDeclaration* vertexDeclaration, uns } NzVertexBuffer::NzVertexBuffer(const NzVertexBuffer& vertexBuffer) : -NzResource(), +NzRefCounted(), m_buffer(vertexBuffer.m_buffer), m_vertexDeclaration(vertexBuffer.m_vertexDeclaration), m_endOffset(vertexBuffer.m_endOffset), diff --git a/src/Nazara/Utility/VertexDeclaration.cpp b/src/Nazara/Utility/VertexDeclaration.cpp index de4860d82..8b0633573 100644 --- a/src/Nazara/Utility/VertexDeclaration.cpp +++ b/src/Nazara/Utility/VertexDeclaration.cpp @@ -19,7 +19,7 @@ m_stride(0) } NzVertexDeclaration::NzVertexDeclaration(const NzVertexDeclaration& declaration) : -NzResource(), +NzRefCounted(), m_stride(declaration.m_stride) { std::memcpy(m_components, declaration.m_components, sizeof(Component)*(nzVertexComponent_Max+1));