Add GPU_ENABLE_PRELOADING_RESOURCES and use it on Web/Android/iOS to reduce engine resources preloading
This commit is contained in:
@@ -64,6 +64,11 @@
|
||||
#define GPU_ENABLE_ASYNC_RESOURCES_CREATION 1
|
||||
#endif
|
||||
|
||||
// Enable/disable preloading GPU resources (eg. shaders, default assets)
|
||||
#ifndef GPU_ENABLE_PRELOADING_RESOURCES
|
||||
#define GPU_ENABLE_PRELOADING_RESOURCES 1
|
||||
#endif
|
||||
|
||||
// Enable/disable force shaders recompilation
|
||||
#define GPU_FORCE_RECOMPILE_SHADERS 0
|
||||
|
||||
|
||||
@@ -38,5 +38,6 @@
|
||||
|
||||
#define GPU_ALLOW_TESSELLATION_SHADERS 0 // Tess on mobile is not well supported
|
||||
#define GPU_ALLOW_GEOMETRY_SHADERS 0 // Don't even try GS on mobile
|
||||
#define GPU_ENABLE_PRELOADING_RESOURCES 0 // Don't preload things unless needed
|
||||
|
||||
#endif
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#define GPU_ALLOW_TESSELLATION_SHADERS 0
|
||||
#define GPU_ALLOW_GEOMETRY_SHADERS 0
|
||||
#define GPU_ALLOW_PROFILE_EVENTS 0
|
||||
#define GPU_ENABLE_PRELOADING_RESOURCES 0 // Don't preload things unless needed
|
||||
|
||||
// Threading is optional
|
||||
#ifdef __EMSCRIPTEN_PTHREADS__
|
||||
|
||||
@@ -21,5 +21,6 @@
|
||||
|
||||
#define GPU_ALLOW_TESSELLATION_SHADERS 0 // MoltenVK has artifacts when using tess so disable it
|
||||
#define GPU_ALLOW_GEOMETRY_SHADERS 0 // Don't even try GS on mobile
|
||||
#define GPU_ENABLE_PRELOADING_RESOURCES 0 // Don't preload things unless needed
|
||||
|
||||
#endif
|
||||
|
||||
@@ -105,6 +105,7 @@ bool RendererService::Init()
|
||||
return false;
|
||||
}
|
||||
|
||||
#if GPU_ENABLE_PRELOADING_RESOURCES
|
||||
// Init child services
|
||||
for (int32 i = 0; i < PassList.Count(); i++)
|
||||
{
|
||||
@@ -114,6 +115,7 @@ bool RendererService::Init()
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
class FLAXENGINE_API RendererPassBase : public Object
|
||||
{
|
||||
protected:
|
||||
|
||||
#if !GPU_ENABLE_PRELOADING_RESOURCES
|
||||
bool _lazyInit = true;
|
||||
#endif
|
||||
bool _hasValidResources;
|
||||
|
||||
/// <summary>
|
||||
@@ -66,7 +68,13 @@ protected:
|
||||
{
|
||||
if (_hasValidResources)
|
||||
return false;
|
||||
|
||||
#if !GPU_ENABLE_PRELOADING_RESOURCES
|
||||
if (_lazyInit)
|
||||
{
|
||||
_lazyInit = false;
|
||||
Init();
|
||||
}
|
||||
#endif
|
||||
const bool setupFailed = setupResources();
|
||||
_hasValidResources = !setupFailed;
|
||||
return setupFailed;
|
||||
|
||||
@@ -68,6 +68,15 @@ TerrainManagerService TerrainManagerServiceInstance;
|
||||
|
||||
MaterialBase* TerrainManager::GetDefaultTerrainMaterial()
|
||||
{
|
||||
if (!DefaultTerrainMaterial)
|
||||
{
|
||||
// Load default terrain material as fallback
|
||||
DefaultTerrainMaterial = Content::LoadAsyncInternal<MaterialBase>(TEXT("Engine/DefaultTerrainMaterial"));
|
||||
if (DefaultTerrainMaterial == nullptr)
|
||||
{
|
||||
LOG(Warning, "Default terrain material is missing.");
|
||||
}
|
||||
}
|
||||
return DefaultTerrainMaterial.Get();
|
||||
}
|
||||
|
||||
@@ -221,13 +230,9 @@ bool TerrainManager::GetChunkGeometry(DrawCall& drawCall, int32 chunkSize, int32
|
||||
|
||||
bool TerrainManagerService::Init()
|
||||
{
|
||||
// Load default terrain material as fallback
|
||||
DefaultTerrainMaterial = Content::LoadAsyncInternal<MaterialBase>(TEXT("Engine/DefaultTerrainMaterial"));
|
||||
if (DefaultTerrainMaterial == nullptr)
|
||||
{
|
||||
LOG(Warning, "Default terrain material is missing.");
|
||||
}
|
||||
|
||||
#if GPU_ENABLE_PRELOADING_RESOURCES
|
||||
TerrainManager::GetDefaultTerrainMaterial();
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user