From a5af0a1c819121b81c550e9fc9e1e9cf3ac4ab97 Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Fri, 25 Mar 2022 11:42:09 +0100 Subject: [PATCH] Fix game build --- Source/Engine/Content/Assets/Model.cpp | 11 +++++++++-- Source/Engine/Content/Assets/Model.h | 2 +- Source/Engine/Graphics/Models/ModelData.cpp | 11 +++++++++++ Source/Engine/Graphics/Models/ModelData.h | 12 +----------- .../Engine/Renderer/GlobalSignDistanceFieldPass.cpp | 2 +- Source/Engine/Tools/ModelTool/ModelTool.cpp | 2 ++ Source/Engine/Tools/ModelTool/ModelTool.h | 3 +-- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/Source/Engine/Content/Assets/Model.cpp b/Source/Engine/Content/Assets/Model.cpp index 507360611..5b7ebac9b 100644 --- a/Source/Engine/Content/Assets/Model.cpp +++ b/Source/Engine/Content/Assets/Model.cpp @@ -617,17 +617,24 @@ bool Model::GenerateSDF(float resolutionScale, int32 lodIndex, bool cacheData) LOG(Warning, "Cannot generate SDF for virtual models on a main thread."); return true; } - cacheData &= Storage != nullptr; // Cache only if has storage linked lodIndex = Math::Clamp(lodIndex, HighestResidentLODIndex(), LODs.Count() - 1); // Generate SDF +#if USE_EDITOR + cacheData &= Storage != nullptr; // Cache only if has storage linked MemoryWriteStream sdfStream; - if (ModelTool::GenerateModelSDF(this, nullptr, resolutionScale, lodIndex, &SDF, cacheData ? &sdfStream : nullptr, GetPath())) + MemoryWriteStream* outputStream = cacheData ? &sdfStream : nullptr; +#else + class MemoryWriteStream* outputStream = nullptr; +#endif + if (ModelTool::GenerateModelSDF(this, nullptr, resolutionScale, lodIndex, &SDF, outputStream, GetPath())) return true; +#if USE_EDITOR // Set asset data if (cacheData) GetOrCreateChunk(15)->Data.Copy(sdfStream.GetHandle(), sdfStream.GetPosition()); +#endif return false; } diff --git a/Source/Engine/Content/Assets/Model.h b/Source/Engine/Content/Assets/Model.h index d58fb469b..15744148f 100644 --- a/Source/Engine/Content/Assets/Model.h +++ b/Source/Engine/Content/Assets/Model.h @@ -212,7 +212,7 @@ public: /// Can be called in async in case of SDF generation on a CPU (assuming model is not during rendering). /// The SDF texture resolution scale. Use higher values for more precise data but with significant performance and memory overhead. /// The index of the LOD to use for the SDF building. - /// If true, the generated SDF texture data will be cached on CPU (in asset chunk storage) to allow saving it later, otherwise it will be runtime for GPU-only. Ignored for virtual assets. + /// If true, the generated SDF texture data will be cached on CPU (in asset chunk storage) to allow saving it later, otherwise it will be runtime for GPU-only. Ignored for virtual assets or in build. /// True if failed, otherwise false. API_FUNCTION() bool GenerateSDF(float resolutionScale = 1.0f, int32 lodIndex = 6, bool cacheData = true); diff --git a/Source/Engine/Graphics/Models/ModelData.cpp b/Source/Engine/Graphics/Models/ModelData.cpp index cf7657039..f5f6ce94f 100644 --- a/Source/Engine/Graphics/Models/ModelData.cpp +++ b/Source/Engine/Graphics/Models/ModelData.cpp @@ -531,6 +531,17 @@ void MeshData::TransformBuffer(const Matrix& matrix) } } +void MeshData::NormalizeBlendWeights() +{ + ASSERT(Positions.Count() == BlendWeights.Count()); + for (int32 i = 0; i < Positions.Count(); i++) + { + const float sum = BlendWeights[i].SumValues(); + const float invSum = sum > ZeroTolerance ? 1.0f / sum : 0.0f; + BlendWeights[i] *= invSum; + } +} + void MeshData::Merge(MeshData& other) { // Merge index buffer (and remap indices) diff --git a/Source/Engine/Graphics/Models/ModelData.h b/Source/Engine/Graphics/Models/ModelData.h index 2a7164123..364400384 100644 --- a/Source/Engine/Graphics/Models/ModelData.h +++ b/Source/Engine/Graphics/Models/ModelData.h @@ -2,7 +2,6 @@ #pragma once -#include "Engine/Core/Common.h" #include "Engine/Core/Math/BoundingSphere.h" #include "Engine/Core/Math/BoundingBox.h" #include "Engine/Core/Math/Int4.h" @@ -281,16 +280,7 @@ public: /// /// Normalizes the blend weights. Requires to have vertices with positions and blend weights setup. /// - void NormalizeBlendWeights() - { - ASSERT(Positions.Count() == BlendWeights.Count()); - for (int32 i = 0; i < Positions.Count(); i++) - { - const float sum = BlendWeights[i].SumValues(); - const float invSum = sum > ZeroTolerance ? 1.0f / sum : 0.0f; - BlendWeights[i] *= invSum; - } - } + void NormalizeBlendWeights(); /// /// Merges this mesh data with the specified other mesh. diff --git a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp index e9024ee9b..5a64860b9 100644 --- a/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp +++ b/Source/Engine/Renderer/GlobalSignDistanceFieldPass.cpp @@ -183,7 +183,7 @@ bool GlobalSignDistanceFieldPass::setupResources() return false; } -#if USE_EDITOR +#if COMPILE_WITH_DEV_ENV void GlobalSignDistanceFieldPass::OnShaderReloading(Asset* obj) { diff --git a/Source/Engine/Tools/ModelTool/ModelTool.cpp b/Source/Engine/Tools/ModelTool/ModelTool.cpp index 85776e5d6..36aaf0b15 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.cpp @@ -12,7 +12,9 @@ #include "Engine/Threading/JobSystem.h" #include "Engine/Graphics/RenderTools.h" #include "Engine/Graphics/Async/GPUTask.h" +#include "Engine/Graphics/Textures/GPUTexture.h" #include "Engine/Graphics/Textures/TextureData.h" +#include "Engine/Graphics/Models/ModelData.h" #include "Engine/Content/Assets/Model.h" #include "Engine/Serialization/MemoryWriteStream.h" #if USE_EDITOR diff --git a/Source/Engine/Tools/ModelTool/ModelTool.h b/Source/Engine/Tools/ModelTool/ModelTool.h index 8173df383..15a7d4def 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.h +++ b/Source/Engine/Tools/ModelTool/ModelTool.h @@ -12,7 +12,6 @@ #include "Engine/Graphics/Models/SkeletonData.h" #include "Engine/Animations/AnimationData.h" -class MemoryWriteStream; class JsonWriter; /// @@ -186,7 +185,7 @@ public: // Optional: inputModel or modelData // Optional: outputSDF or null, outputStream or null - static bool GenerateModelSDF(Model* inputModel, ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, MemoryWriteStream* outputStream, const StringView& assetName); + static bool GenerateModelSDF(class Model* inputModel, class ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, class MemoryWriteStream* outputStream, const StringView& assetName); #if USE_EDITOR public: