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.