diff --git a/Source/Engine/Content/Storage/FlaxStorage.cpp b/Source/Engine/Content/Storage/FlaxStorage.cpp
index 74b114f52..26816a026 100644
--- a/Source/Engine/Content/Storage/FlaxStorage.cpp
+++ b/Source/Engine/Content/Storage/FlaxStorage.cpp
@@ -1336,6 +1336,8 @@ FileReadStream* FlaxStorage::OpenFile()
bool FlaxStorage::CloseFileHandles()
{
+ if (Platform::AtomicRead(&_chunksLock) == 0)
+ return false; // Early out
PROFILE_CPU();
// Note: this is usually called by the content manager when this file is not used or on exit
diff --git a/Source/Engine/Graphics/PostProcessSettings.h b/Source/Engine/Graphics/PostProcessSettings.h
index a0b7cedab..525da3f36 100644
--- a/Source/Engine/Graphics/PostProcessSettings.h
+++ b/Source/Engine/Graphics/PostProcessSettings.h
@@ -4,9 +4,9 @@
#include "Engine/Core/Math/Vector3.h"
#include "Engine/Core/Math/Vector4.h"
+#include "Engine/Core/ISerializable.h"
#include "Engine/Content/AssetReference.h"
#include "Engine/Content/SoftAssetReference.h"
-#include "Engine/Core/ISerializable.h"
#include "Engine/Content/Assets/Texture.h"
#include "Engine/Content/Assets/MaterialBase.h"
@@ -2015,7 +2015,7 @@ API_STRUCT() struct FLAXENGINE_API PostProcessSettings : ISerializable
ScreenSpaceReflectionsSettings ScreenSpaceReflections;
///
- /// The anti-aliasing effect settings.
+ /// The antialiasing effect settings.
///
API_FIELD(Attributes="EditorDisplay(\"Anti Aliasing\"), EditorOrder(1100), JsonProperty(\"AA\")")
AntiAliasingSettings AntiAliasing;
diff --git a/Source/Engine/Level/SceneQuery.h b/Source/Engine/Level/SceneQuery.h
index a352e66ef..53e01829a 100644
--- a/Source/Engine/Level/SceneQuery.h
+++ b/Source/Engine/Level/SceneQuery.h
@@ -18,7 +18,7 @@ class FLAXENGINE_API SceneQuery
{
public:
///
- /// Try to find actor hit by the given ray
+ /// Try to find actor hit by the given ray.
///
/// Ray to test
/// Hit actor or nothing
@@ -55,19 +55,16 @@ public:
public:
///
/// Execute custom action on actors tree.
- /// Action should returns false to stop calling deeper.
- /// First action argument is current actor object.
///
/// Actor to call on every actor in the tree. Returns true if keep calling deeper.
/// Custom arguments for the function
template
- static void TreeExecute(Function& action, Params ... args)
+ static void TreeExecute(Function& action, Params... args)
{
#if SCENE_QUERIES_WITH_LOCK
ScopeLock lock(Level::ScenesLock);
#endif
-
for (int32 i = 0; i < Level::Scenes.Count(); i++)
- Level::Scenes[i]->TreeExecute(action, args...);
+ Level::Scenes.Get()[i]->TreeExecute(action, args...);
}
};
diff --git a/Source/Engine/Physics/CollisionData.cpp b/Source/Engine/Physics/CollisionData.cpp
index 116d929cc..78a67f0b1 100644
--- a/Source/Engine/Physics/CollisionData.cpp
+++ b/Source/Engine/Physics/CollisionData.cpp
@@ -8,6 +8,7 @@
#include "Engine/Physics/PhysicsScene.h"
#include "Engine/Physics/PhysicsBackend.h"
#include "Engine/Physics/CollisionCooking.h"
+#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Threading/Threading.h"
REGISTER_BINARY_ASSET(CollisionData, "FlaxEngine.CollisionData", true);
@@ -33,6 +34,7 @@ bool CollisionData::CookCollision(CollisionDataType type, ModelBase* modelObj, i
LOG(Error, "Cannot cook collision data for virtual models on a main thread (virtual models data is stored on GPU only). Use thread pool or async task.");
return true;
}
+ PROFILE_CPU();
// Prepare
CollisionCooking::Argument arg;
@@ -61,6 +63,7 @@ bool CollisionData::CookCollision(CollisionDataType type, ModelBase* modelObj, i
bool CollisionData::CookCollision(CollisionDataType type, const Span& vertices, const Span& triangles, ConvexMeshGenerationFlags convexFlags, int32 convexVertexLimit)
{
+ PROFILE_CPU();
CHECK_RETURN(vertices.Length() != 0, true);
CHECK_RETURN(triangles.Length() != 0 && triangles.Length() % 3 == 0, true);
ModelData modelData;
@@ -74,6 +77,7 @@ bool CollisionData::CookCollision(CollisionDataType type, const Span& ve
bool CollisionData::CookCollision(CollisionDataType type, const Span& vertices, const Span& triangles, ConvexMeshGenerationFlags convexFlags, int32 convexVertexLimit)
{
+ PROFILE_CPU();
CHECK_RETURN(vertices.Length() != 0, true);
CHECK_RETURN(triangles.Length() != 0 && triangles.Length() % 3 == 0, true);
ModelData modelData;
@@ -89,12 +93,12 @@ bool CollisionData::CookCollision(CollisionDataType type, const Span& ve
bool CollisionData::CookCollision(CollisionDataType type, ModelData* modelData, ConvexMeshGenerationFlags convexFlags, int32 convexVertexLimit)
{
- // Validate state
if (!IsVirtual())
{
LOG(Warning, "Only virtual assets can be modified at runtime.");
return true;
}
+ PROFILE_CPU();
// Prepare
CollisionCooking::Argument arg;
@@ -107,18 +111,14 @@ bool CollisionData::CookCollision(CollisionDataType type, ModelData* modelData,
SerializedOptions options;
BytesContainer outputData;
if (CollisionCooking::CookCollision(arg, options, outputData))
- {
return true;
- }
// Clear state
unload(true);
// Load data
if (load(&options, outputData.Get(), outputData.Length()) != LoadResult::Ok)
- {
return true;
- }
// Mark as loaded (eg. Mesh Colliders using this asset will update shape for physics simulation)
onLoaded();
@@ -133,6 +133,7 @@ bool CollisionData::GetModelTriangle(uint32 faceIndex, MeshBase*& mesh, uint32&
meshTriangleIndex = MAX_uint32;
if (!IsLoaded())
return false;
+ PROFILE_CPU();
ScopeLock lock(Locker);
if (_triangleMesh)
{
@@ -178,6 +179,7 @@ bool CollisionData::GetModelTriangle(uint32 faceIndex, MeshBase*& mesh, uint32&
void CollisionData::ExtractGeometry(Array& vertexBuffer, Array& indexBuffer) const
{
+ PROFILE_CPU();
vertexBuffer.Clear();
indexBuffer.Clear();
@@ -194,6 +196,7 @@ const Array& CollisionData::GetDebugLines()
{
if (_hasMissingDebugLines && IsLoaded())
{
+ PROFILE_CPU();
ScopeLock lock(Locker);
_hasMissingDebugLines = false;
diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp
index 5d86ed8c9..8824abdfa 100644
--- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp
+++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp
@@ -4265,6 +4265,7 @@ void* PhysicsBackend::CreateHeightField(byte* data, int32 dataSize)
void PhysicsBackend::GetConvexMeshTriangles(void* contextMesh, Array& vertexBuffer, Array& indexBuffer)
{
+ PROFILE_CPU();
auto contextMeshPhysX = (PxConvexMesh*)contextMesh;
uint32 numIndices = 0;
uint32 numVertices = contextMeshPhysX->getNbVertices();
@@ -4304,6 +4305,7 @@ void PhysicsBackend::GetConvexMeshTriangles(void* contextMesh, Array& vertexBuffer, Array& indexBuffer)
{
+ PROFILE_CPU();
auto triangleMeshPhysX = (PxTriangleMesh*)triangleMesh;
uint32 numVertices = triangleMeshPhysX->getNbVertices();
uint32 numIndices = triangleMeshPhysX->getNbTriangles() * 3;
diff --git a/Source/Engine/Terrain/TerrainPatch.cpp b/Source/Engine/Terrain/TerrainPatch.cpp
index 34fc57e84..4272cabe8 100644
--- a/Source/Engine/Terrain/TerrainPatch.cpp
+++ b/Source/Engine/Terrain/TerrainPatch.cpp
@@ -2474,7 +2474,7 @@ void TerrainPatch::ExtractCollisionGeometry(Array& vertexBuffer, Array_chunkSize * TERRAIN_UNITS_PER_VERTEX * Terrain::Terrain::ChunksCountEdge;
diff --git a/Source/ThirdParty/recastnavigation/Recast.h b/Source/ThirdParty/recastnavigation/Recast.h
index 9def8fd2a..4515b1fc5 100644
--- a/Source/ThirdParty/recastnavigation/Recast.h
+++ b/Source/ThirdParty/recastnavigation/Recast.h
@@ -196,6 +196,10 @@ protected:
class rcScopedTimer
{
public:
+#if 1
+ // Disable timer functionality
+ inline rcScopedTimer(rcContext* ctx, const rcTimerLabel label) { }
+#else
/// Constructs an instance and starts the timer.
/// @param[in] ctx The context to use.
/// @param[in] label The category of the timer.
@@ -209,6 +213,7 @@ private:
rcContext* const m_ctx;
const rcTimerLabel m_label;
+#endif
};
/// Specifies a configuration to use when performing Recast builds.