Plasma Engine  2.0
Loading...
Searching...
No Matches
ResourceLock.h
1#pragma once
2
3#include <Core/ResourceManager/Implementation/Declarations.h>
4
19template <class RESOURCE_TYPE>
21{
22public:
23 PL_ALWAYS_INLINE plResourceLock(const plTypedResourceHandle<RESOURCE_TYPE>& hResource, plResourceAcquireMode mode,
25 {
26 m_pResource = plResourceManager::BeginAcquireResource(hResource, mode, hFallbackResource, &m_AcquireResult);
27 }
28
29 plResourceLock(const plResourceLock&) = delete;
30
32 : m_AcquireResult(other.m_AcquireResult)
33 , m_pResource(other.m_pResource)
34 {
35 other.m_pResource = nullptr;
36 other.m_AcquireResult = plResourceAcquireResult::None;
37 }
38
39 PL_ALWAYS_INLINE ~plResourceLock()
40 {
41 if (m_pResource)
42 {
44 }
45 }
46
47 PL_ALWAYS_INLINE RESOURCE_TYPE* operator->() { return m_pResource; }
48 PL_ALWAYS_INLINE const RESOURCE_TYPE* operator->() const { return m_pResource; }
49
50 PL_ALWAYS_INLINE bool IsValid() const { return m_pResource != nullptr; }
51 PL_ALWAYS_INLINE explicit operator bool() const { return m_pResource != nullptr; }
52
53 PL_ALWAYS_INLINE plResourceAcquireResult GetAcquireResult() const { return m_AcquireResult; }
54
55 PL_ALWAYS_INLINE const RESOURCE_TYPE* GetPointer() const { return m_pResource; }
56 PL_ALWAYS_INLINE RESOURCE_TYPE* GetPointerNonConst() const { return m_pResource; }
57
58private:
59 plResourceAcquireResult m_AcquireResult;
60 RESOURCE_TYPE* m_pResource;
61};
Helper class to acquire and release a resource safely.
Definition ResourceLock.h:21
static void EndAcquireResource(ResourceType *pResource)
Needs to be called in concert with BeginAcquireResource() after accessing a resource has been finishe...
Definition ResourceManager_inl.h:231
static ResourceType * BeginAcquireResource(const plTypedResourceHandle< ResourceType > &hResource, plResourceAcquireMode mode, const plTypedResourceHandle< ResourceType > &hLoadingFallback=plTypedResourceHandle< ResourceType >(), plResourceAcquireResult *out_pAcquireResult=nullptr)
Acquires a resource pointer from a handle. Prefer to use plResourceLock, which wraps BeginAcquireReso...
Definition ResourceManager_inl.h:115
The plTypedResourceHandle controls access to an plResource.
Definition ResourceHandle.h:136