Skip to content

Commit 3f7d118

Browse files
Refactored resource registry
1 parent c460b56 commit 3f7d118

1 file changed

Lines changed: 84 additions & 50 deletions

File tree

Graphics/GraphicsTools/interface/ResourceRegistry.hpp

Lines changed: 84 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -54,66 +54,100 @@ class ResourceRegistry
5454
m_Resources.resize(ResourceCount);
5555
}
5656

57-
void Insert(ResourceIdType Id, IDeviceObject* pObject)
58-
{
59-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
60-
m_Resources[Id] = pObject;
61-
}
62-
63-
bool IsInitialized(ResourceIdType Id) const
64-
{
65-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
66-
return m_Resources[Id] != nullptr;
67-
}
68-
69-
ITexture* GetTexture(ResourceIdType Id) const
70-
{
71-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
72-
DEV_CHECK_ERR(RefCntAutoPtr<ITexture>(m_Resources[Id], IID_Texture), "Resource is not a texture");
73-
return StaticCast<ITexture*>(m_Resources[Id]);
74-
}
75-
76-
IBuffer* GetBuffer(ResourceIdType Id) const
77-
{
78-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
79-
DEV_CHECK_ERR(RefCntAutoPtr<IBuffer>(m_Resources[Id], IID_Buffer), "Resource is not a buffer");
80-
return StaticCast<IBuffer*>(m_Resources[Id]);
81-
}
82-
83-
ITextureView* GetTextureSRV(ResourceIdType Id) const
84-
{
85-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
86-
return GetTextureDefaultSRV(m_Resources[Id]);
87-
}
88-
89-
ITextureView* GetTextureRTV(ResourceIdType Id) const
90-
{
91-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
92-
return GetTextureDefaultRTV(m_Resources[Id]);
93-
}
94-
95-
ITextureView* GetTextureDSV(ResourceIdType Id) const
57+
size_t GetSize() const
9658
{
97-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
98-
return GetTextureDefaultDSV(m_Resources[Id]);
59+
return m_Resources.size();
9960
}
10061

101-
ITextureView* GetTextureUAV(ResourceIdType Id) const
62+
void Insert(ResourceIdType Id, IDeviceObject* pObject)
10263
{
10364
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
104-
return GetTextureDefaultUAV(m_Resources[Id]);
65+
m_Resources[Id] = pObject;
10566
}
10667

107-
IBufferView* GetBufferSRV(ResourceIdType Id) const
68+
struct ResourceAccessor
10869
{
109-
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
110-
return GetBufferDefaultSRV(m_Resources[Id]);
111-
}
112-
113-
IBufferView* GetBufferUAV(ResourceIdType Id) const
70+
explicit operator bool() const
71+
{
72+
return Object != nullptr;
73+
}
74+
75+
ITexture* AsTexture() const
76+
{
77+
DEV_CHECK_ERR(Object != nullptr, "Resource is null");
78+
DEV_CHECK_ERR(RefCntAutoPtr<ITexture>(Object, IID_Texture), "Resource is not a texture");
79+
return StaticCast<ITexture*>(Object);
80+
}
81+
82+
IBuffer* AsBuffer() const
83+
{
84+
DEV_CHECK_ERR(Object != nullptr, "Resource is null");
85+
DEV_CHECK_ERR(RefCntAutoPtr<IBuffer>(Object, IID_Buffer), "Resource is not a buffer");
86+
return StaticCast<IBuffer*>(Object);
87+
}
88+
89+
operator ITexture*() const
90+
{
91+
return AsTexture();
92+
}
93+
94+
operator IBuffer*() const
95+
{
96+
return AsBuffer();
97+
}
98+
99+
operator IDeviceObject*() const
100+
{
101+
return Object;
102+
}
103+
104+
IDeviceObject* operator->() const
105+
{
106+
return Object;
107+
}
108+
109+
ITextureView* GetTextureSRV() const
110+
{
111+
return GetTextureDefaultSRV(Object);
112+
}
113+
114+
ITextureView* GetTextureRTV() const
115+
{
116+
return GetTextureDefaultRTV(Object);
117+
}
118+
119+
ITextureView* GetTextureDSV() const
120+
{
121+
return GetTextureDefaultDSV(Object);
122+
}
123+
124+
ITextureView* GetTextureUAV() const
125+
{
126+
return GetTextureDefaultUAV(Object);
127+
}
128+
129+
IBufferView* GetBufferSRV() const
130+
{
131+
return GetBufferDefaultSRV(Object);
132+
}
133+
134+
IBufferView* GetBufferUAV() const
135+
{
136+
return GetBufferDefaultUAV(Object);
137+
}
138+
139+
private:
140+
ResourceAccessor(const RefCntAutoPtr<IDeviceObject>& _Object) :
141+
Object{_Object}
142+
{}
143+
friend ResourceRegistry;
144+
const RefCntAutoPtr<IDeviceObject>& Object;
145+
};
146+
147+
ResourceAccessor operator[](ResourceIdType Id) const
114148
{
115149
DEV_CHECK_ERR(Id < m_Resources.size(), "Resource index is out of range");
116-
return GetBufferDefaultUAV(m_Resources[Id]);
150+
return ResourceAccessor{m_Resources[Id]};
117151
}
118152

119153
private:

0 commit comments

Comments
 (0)