Skip to content

Commit f90759b

Browse files
Cache factory function pointers to avoid repeated DLL loads
1 parent a965e4c commit f90759b

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

Graphics/Archiver/interface/ArchiverFactoryLoader.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ typedef struct IArchiverFactory* (*GetArchiverFactoryType)();
5050

5151
inline GetArchiverFactoryType DILIGENT_GLOBAL_FUNCTION(LoadArchiverFactory)()
5252
{
53-
return (GetArchiverFactoryType)LoadEngineDll("Archiver", "GetArchiverFactory");
53+
static GetArchiverFactoryType GetFactoryFunc = NULL;
54+
if (GetFactoryFunc == NULL)
55+
{
56+
GetFactoryFunc = (GetArchiverFactoryType)LoadEngineDll("Archiver", "GetArchiverFactory");
57+
}
58+
return GetFactoryFunc;
5459
}
5560

5661
#else

Graphics/GraphicsEngineD3D11/interface/EngineFactoryD3D11.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,12 @@ typedef struct IEngineFactoryD3D11* (*GetEngineFactoryD3D11Type)();
157157

158158
inline GetEngineFactoryD3D11Type DILIGENT_GLOBAL_FUNCTION(LoadGraphicsEngineD3D11)()
159159
{
160-
return (GetEngineFactoryD3D11Type)LoadEngineDll("GraphicsEngineD3D11", "GetEngineFactoryD3D11");
160+
static GetEngineFactoryD3D11Type GetFactoryFunc = NULL;
161+
if (GetFactoryFunc == NULL)
162+
{
163+
GetFactoryFunc = (GetEngineFactoryD3D11Type)LoadEngineDll("GraphicsEngineD3D11", "GetEngineFactoryD3D11");
164+
}
165+
return GetFactoryFunc;
161166
}
162167

163168
#else

Graphics/GraphicsEngineD3D12/interface/EngineFactoryD3D12.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,12 @@ typedef struct IEngineFactoryD3D12* (*GetEngineFactoryD3D12Type)();
193193

194194
inline GetEngineFactoryD3D12Type DILIGENT_GLOBAL_FUNCTION(LoadGraphicsEngineD3D12)()
195195
{
196-
return (GetEngineFactoryD3D12Type)LoadEngineDll("GraphicsEngineD3D12", "GetEngineFactoryD3D12");
196+
static GetEngineFactoryD3D12Type GetFactoryFunc = NULL;
197+
if (GetFactoryFunc == NULL)
198+
{
199+
GetFactoryFunc = (GetEngineFactoryD3D12Type)LoadEngineDll("GraphicsEngineD3D12", "GetEngineFactoryD3D12");
200+
}
201+
return GetFactoryFunc;
197202
}
198203

199204
#else

Graphics/GraphicsEngineOpenGL/interface/EngineFactoryOpenGL.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,12 @@ typedef struct IEngineFactoryOpenGL* (*GetEngineFactoryOpenGLType)();
130130

131131
inline GetEngineFactoryOpenGLType DILIGENT_GLOBAL_FUNCTION(LoadGraphicsEngineOpenGL)()
132132
{
133-
return (GetEngineFactoryOpenGLType)LoadEngineDll("GraphicsEngineOpenGL", "GetEngineFactoryOpenGL");
133+
static GetEngineFactoryOpenGLType GetFactoryFunc = NULL;
134+
if (GetFactoryFunc == NULL)
135+
{
136+
GetFactoryFunc = (GetEngineFactoryOpenGLType)LoadEngineDll("GraphicsEngineOpenGL", "GetEngineFactoryOpenGL");
137+
}
138+
return GetFactoryFunc;
134139
}
135140

136141
#else

Graphics/GraphicsEngineVulkan/interface/EngineFactoryVk.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,12 @@ typedef struct IEngineFactoryVk* (*GetEngineFactoryVkType)();
136136

137137
inline GetEngineFactoryVkType DILIGENT_GLOBAL_FUNCTION(LoadGraphicsEngineVk)()
138138
{
139-
return (GetEngineFactoryVkType)LoadEngineDll("GraphicsEngineVk", "GetEngineFactoryVk");
139+
static GetEngineFactoryVkType GetFactoryFunc = NULL;
140+
if (GetFactoryFunc == NULL)
141+
{
142+
GetFactoryFunc = (GetEngineFactoryVkType)LoadEngineDll("GraphicsEngineVk", "GetEngineFactoryVk");
143+
}
144+
return GetFactoryFunc;
140145
}
141146

142147
#else

Graphics/GraphicsEngineWebGPU/interface/EngineFactoryWebGPU.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,12 @@ typedef struct IEngineFactoryWebGPU* (*GetEngineFactoryWebGPUType)();
145145

146146
inline GetEngineFactoryWebGPUType DILIGENT_GLOBAL_FUNCTION(LoadGraphicsEngineWebGPU)()
147147
{
148-
return (GetEngineFactoryWebGPUType)LoadEngineDll("GraphicsEngineWebGPU", "GetEngineFactoryWebGPU");
148+
static GetEngineFactoryWebGPUType GetFactoryFunc = NULL;
149+
if (GetFactoryFunc == NULL)
150+
{
151+
GetFactoryFunc = (GetEngineFactoryWebGPUType)LoadEngineDll("GraphicsEngineWebGPU", "GetEngineFactoryWebGPU");
152+
}
153+
return GetFactoryFunc;
149154
}
150155

151156
#else

0 commit comments

Comments
 (0)