Skip to content

Commit 5c773e3

Browse files
ResourceRegistry: added option to release elements
1 parent 300b293 commit 5c773e3

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

Graphics/GraphicsTools/interface/ResourceRegistry.hpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class ResourceRegistry
6565
m_Resources[Id] = pObject;
6666
}
6767

68+
template <typename T>
6869
struct ResourceAccessor
6970
{
7071
explicit operator bool() const
@@ -136,18 +137,30 @@ class ResourceRegistry
136137
return GetBufferDefaultUAV(Object);
137138
}
138139

140+
template <typename Y = T, typename = typename std::enable_if<!std::is_const<Y>::value>::type>
141+
void Release()
142+
{
143+
Object.Release();
144+
}
145+
139146
private:
140-
ResourceAccessor(const RefCntAutoPtr<IDeviceObject>& _Object) :
147+
ResourceAccessor(T& _Object) :
141148
Object{_Object}
142149
{}
143150
friend ResourceRegistry;
144-
const RefCntAutoPtr<IDeviceObject>& Object;
151+
T& Object;
145152
};
146153

147-
ResourceAccessor operator[](ResourceIdType Id) const
154+
ResourceAccessor<const RefCntAutoPtr<IDeviceObject>> operator[](ResourceIdType Id) const
155+
{
156+
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
157+
return {m_Resources[Id]};
158+
}
159+
160+
ResourceAccessor<RefCntAutoPtr<IDeviceObject>> operator[](ResourceIdType Id)
148161
{
149162
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
150-
return ResourceAccessor{m_Resources[Id]};
163+
return {m_Resources[Id]};
151164
}
152165

153166
void Clear()

0 commit comments

Comments
 (0)