Minor fixes and improvements

This commit is contained in:
Wojtek Figat
2025-01-03 01:10:31 +01:00
parent 7b7dd9d142
commit ea5cb5d83a
10 changed files with 36 additions and 25 deletions

View File

@@ -191,6 +191,8 @@ bool BinaryAsset::HasDependenciesModified() const
FlaxChunk* BinaryAsset::GetOrCreateChunk(int32 index) FlaxChunk* BinaryAsset::GetOrCreateChunk(int32 index)
{ {
if (IsVirtual()) // Virtual assets don't own storage container
return nullptr;
ASSERT(Math::IsInRange(index, 0, ASSET_FILE_DATA_CHUNKS - 1)); ASSERT(Math::IsInRange(index, 0, ASSET_FILE_DATA_CHUNKS - 1));
// Try get // Try get

View File

@@ -75,8 +75,7 @@ public:
}; };
private: private:
Upgrader const* _upgraders; Array<Upgrader, InlinedAllocation<8>> _upgraders;
int32 _upgradersCount;
public: public:
/// <summary> /// <summary>
@@ -87,10 +86,8 @@ public:
/// <returns>True if cannot upgrade or upgrade failed, otherwise false</returns> /// <returns>True if cannot upgrade or upgrade failed, otherwise false</returns>
bool Upgrade(uint32 serializedVersion, AssetMigrationContext& context) const bool Upgrade(uint32 serializedVersion, AssetMigrationContext& context) const
{ {
// Find upgrader for (auto& upgrader : _upgraders)
for (int32 i = 0; i < _upgradersCount; i++)
{ {
auto& upgrader = _upgraders[i];
if (upgrader.CurrentVersion == serializedVersion) if (upgrader.CurrentVersion == serializedVersion)
{ {
// Set target version and preserve metadata // Set target version and preserve metadata
@@ -105,7 +102,6 @@ public:
return upgrader.Handler(context); return upgrader.Handler(context);
} }
} }
return true; return true;
} }
@@ -127,7 +123,6 @@ public:
context.Output.Header.Chunks[chunkIndex]->Data.Copy(srcChunk->Data); context.Output.Header.Chunks[chunkIndex]->Data.Copy(srcChunk->Data);
} }
} }
return false; return false;
} }
@@ -176,27 +171,22 @@ public:
protected: protected:
BinaryAssetUpgrader() BinaryAssetUpgrader()
{ {
_upgraders = nullptr;
_upgradersCount = 0;
} }
void setup(Upgrader const* upgraders, int32 upgradersCount) void setup(Upgrader const* upgraders, int32 upgradersCount)
{ {
_upgraders = upgraders; _upgraders.Add(upgraders, upgradersCount);
_upgradersCount = upgradersCount;
} }
public: public:
// [IAssetUpgrader] // [IAssetUpgrader]
bool ShouldUpgrade(uint32 serializedVersion) const override bool ShouldUpgrade(uint32 serializedVersion) const override
{ {
// Find upgrader for (auto& upgrader : _upgraders)
for (int32 i = 0; i < _upgradersCount; i++)
{ {
if (_upgraders[i].CurrentVersion == serializedVersion) if (upgrader.CurrentVersion == serializedVersion)
return true; return true;
} }
return false; return false;
} }
}; };

View File

@@ -663,7 +663,7 @@ bool MaterialParams::Load(ReadStream* stream)
param->_type = static_cast<MaterialParameterType>(stream->ReadByte()); param->_type = static_cast<MaterialParameterType>(stream->ReadByte());
param->_isPublic = stream->ReadBool(); param->_isPublic = stream->ReadBool();
param->_override = param->_isPublic; param->_override = param->_isPublic;
stream->ReadString(&param->_name, 10421); stream->Read(param->_name, 10421);
param->_registerIndex = stream->ReadByte(); param->_registerIndex = stream->ReadByte();
stream->ReadUint16(&param->_offset); stream->ReadUint16(&param->_offset);
@@ -738,7 +738,7 @@ bool MaterialParams::Load(ReadStream* stream)
stream->Read(param->_paramId); stream->Read(param->_paramId);
param->_isPublic = stream->ReadBool(); param->_isPublic = stream->ReadBool();
param->_override = param->_isPublic; param->_override = param->_isPublic;
stream->ReadString(&param->_name, 10421); stream->Read(param->_name, 10421);
param->_registerIndex = stream->ReadByte(); param->_registerIndex = stream->ReadByte();
stream->ReadUint16(&param->_offset); stream->ReadUint16(&param->_offset);

View File

@@ -67,6 +67,8 @@ enum class MeshBufferType
/// The vertex buffer (third). /// The vertex buffer (third).
/// </summary> /// </summary>
Vertex2 = 3, Vertex2 = 3,
MAX,
}; };
// Vertex structure for all models (versioned) // Vertex structure for all models (versioned)

View File

@@ -70,7 +70,7 @@ namespace
String VertexElement::ToString() const String VertexElement::ToString() const
{ {
#if GPU_ENABLE_RESOURCE_NAMING #if GPU_ENABLE_RESOURCE_NAMING
return String::Format(TEXT("{}, format {}, offset {}, per-instance {}, slot {}"), ScriptingEnum::ToString(Type), ScriptingEnum::ToString(Format), Offset, PerInstance, Slot); return String::Format(TEXT("{}, {}, offset {}, {}, slot {}"), ScriptingEnum::ToString(Type), ScriptingEnum::ToString(Format), Offset, PerInstance ? TEXT("per-instance") : TEXT("per-vertex"), Slot);
#else #else
return TEXT("VertexElement"); return TEXT("VertexElement");
#endif #endif
@@ -116,6 +116,18 @@ void GPUVertexLayout::SetElements(const Elements& elements, bool explicitOffsets
_stride += offset; _stride += offset;
} }
String GPUVertexLayout::GetElementsString() const
{
String result;
for (int32 i = 0; i < _elements.Count(); i++)
{
if (i != 0)
result += '\n';
result += _elements[i].ToString();
}
return result;
}
GPUVertexLayout* GPUVertexLayout::Get(const Elements& elements, bool explicitOffsets) GPUVertexLayout* GPUVertexLayout::Get(const Elements& elements, bool explicitOffsets)
{ {
// Hash input layout // Hash input layout

View File

@@ -34,6 +34,11 @@ public:
return _elements; return _elements;
} }
/// <summary>
/// Gets the list of elements used by this layout as a text (each element in a new line).
/// </summary>
API_PROPERTY() String GetElementsString() const;
/// <summary> /// <summary>
/// Gets the size in bytes of all elements in the layout structure (including their offsets). /// Gets the size in bytes of all elements in the layout structure (including their offsets).
/// </summary> /// </summary>

View File

@@ -331,11 +331,11 @@ void MeshAccelerationStructure::Add(Model* model, int32 lodIndex)
} }
} }
void MeshAccelerationStructure::Add(ModelData* modelData, int32 lodIndex, bool copy) void MeshAccelerationStructure::Add(const ModelData* modelData, int32 lodIndex, bool copy)
{ {
PROFILE_CPU(); PROFILE_CPU();
lodIndex = Math::Clamp(lodIndex, 0, modelData->LODs.Count() - 1); lodIndex = Math::Clamp(lodIndex, 0, modelData->LODs.Count() - 1);
ModelLodData& lod = modelData->LODs[lodIndex]; const ModelLodData& lod = modelData->LODs[lodIndex];
_meshes.EnsureCapacity(_meshes.Count() + lod.Meshes.Count()); _meshes.EnsureCapacity(_meshes.Count() + lod.Meshes.Count());
for (int32 i = 0; i < lod.Meshes.Count(); i++) for (int32 i = 0; i < lod.Meshes.Count(); i++)
{ {

View File

@@ -61,7 +61,7 @@ public:
void Add(Model* model, int32 lodIndex); void Add(Model* model, int32 lodIndex);
// Adds the model geometry for the build to the structure. // Adds the model geometry for the build to the structure.
void Add(ModelData* modelData, int32 lodIndex, bool copy = false); void Add(const ModelData* modelData, int32 lodIndex, bool copy = false);
// Adds the triangles geometry for the build to the structure. // Adds the triangles geometry for the build to the structure.
void Add(Float3* vb, int32 vertices, void* ib, int32 indices, bool use16BitIndex, bool copy = false); void Add(Float3* vb, int32 vertices, void* ib, int32 indices, bool use16BitIndex, bool copy = false);

View File

@@ -81,7 +81,7 @@ class GPUModelSDFTask : public GPUTask
ConditionVariable* _signal; ConditionVariable* _signal;
AssetReference<Shader> _shader; AssetReference<Shader> _shader;
Model* _inputModel; Model* _inputModel;
ModelData* _modelData; const ModelData* _modelData;
int32 _lodIndex; int32 _lodIndex;
Int3 _resolution; Int3 _resolution;
ModelBase::SDFData* _sdf; ModelBase::SDFData* _sdf;
@@ -104,7 +104,7 @@ class GPUModelSDFTask : public GPUTask
}); });
public: public:
GPUModelSDFTask(ConditionVariable& signal, Model* inputModel, ModelData* modelData, int32 lodIndex, const Int3& resolution, ModelBase::SDFData* sdf, GPUTexture* sdfResult, const Float3& xyzToLocalMul, const Float3& xyzToLocalAdd) GPUModelSDFTask(ConditionVariable& signal, Model* inputModel, const ModelData* modelData, int32 lodIndex, const Int3& resolution, ModelBase::SDFData* sdf, GPUTexture* sdfResult, const Float3& xyzToLocalMul, const Float3& xyzToLocalAdd)
: GPUTask(Type::Custom) : GPUTask(Type::Custom)
, _signal(&signal) , _signal(&signal)
, _shader(Content::LoadAsyncInternal<Shader>(TEXT("Shaders/SDF"))) , _shader(Content::LoadAsyncInternal<Shader>(TEXT("Shaders/SDF")))
@@ -350,7 +350,7 @@ public:
} }
}; };
bool ModelTool::GenerateModelSDF(Model* inputModel, ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, MemoryWriteStream* outputStream, const StringView& assetName, float backfacesThreshold, bool useGPU) bool ModelTool::GenerateModelSDF(Model* inputModel, const ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, MemoryWriteStream* outputStream, const StringView& assetName, float backfacesThreshold, bool useGPU)
{ {
PROFILE_CPU(); PROFILE_CPU();
auto startTime = Platform::GetTimeSeconds(); auto startTime = Platform::GetTimeSeconds();

View File

@@ -98,7 +98,7 @@ API_CLASS(Namespace="FlaxEngine.Tools", Static) class FLAXENGINE_API ModelTool
// Optional: inputModel or modelData // Optional: inputModel or modelData
// Optional: outputSDF or null, outputStream or null // Optional: outputSDF or null, outputStream or null
static bool GenerateModelSDF(class Model* inputModel, class ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, class MemoryWriteStream* outputStream, const StringView& assetName, float backfacesThreshold = 0.6f, bool useGPU = true); static bool GenerateModelSDF(class Model* inputModel, const class ModelData* modelData, float resolutionScale, int32 lodIndex, ModelBase::SDFData* outputSDF, class MemoryWriteStream* outputStream, const StringView& assetName, float backfacesThreshold = 0.6f, bool useGPU = true);
#if USE_EDITOR #if USE_EDITOR