Skip to content

Commit

Permalink
ResourceGraphs - Destroy Objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Daethalus committed May 11, 2024
1 parent b3f1c1f commit fb985bf
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
39 changes: 38 additions & 1 deletion Engine/Source/Fyrion/Resource/ResourceGraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace Fyrion

for (auto& data : m_resourceGraph->m_data)
{
if (data.defaultValue == nullptr && data.typeHandler && data.offset != U32_MAX)
if (!data.offsetFromInstance && data.defaultValue == nullptr && data.typeHandler && data.offset != U32_MAX)
{
data.typeHandler->Construct(&m_instanceData[data.offset]);
}
Expand Down Expand Up @@ -123,6 +123,23 @@ namespace Fyrion

void ResourceGraphInstance::Destroy()
{
for (auto& data : m_resourceGraph->m_data)
{
if (!data.offsetFromInstance && data.defaultValue == nullptr && data.typeHandler && data.offset != U32_MAX)
{
data.typeHandler->Destructor(&m_instanceData[data.offset]);
}
}

for (auto& node : m_resourceGraph->m_nodes)
{
if (node->m_typeHandler && node->m_outputOffset != U32_MAX)
{
node->m_typeHandler->Destructor(&m_instanceData[node->m_outputOffset]);
}
}

m_resourceGraph->m_allocator.MemFree(m_instanceData);
m_resourceGraph->m_allocator.DestroyAndFree(this);
}

Expand Down Expand Up @@ -263,6 +280,7 @@ namespace Fyrion
auto& data = m_data.EmplaceBack(ResourceGraphNodeParamData{
.offset = node->m_outputOffset + (u32)fieldInfo.offsetOf,
.typeHandler = fieldType,
.offsetFromInstance = true
});

if (auto it = node->m_inputLinks.Find(fieldHandler->GetName()))
Expand All @@ -280,6 +298,8 @@ namespace Fyrion

void ResourceGraph::SetGraph(RID assetGraph)
{
FY_ASSERT(m_nodes.Empty(), "Graph is not empty");

ResourceObject graphAsset = Repository::Read(assetGraph);

Array<RID> nodes = graphAsset.GetSubObjectSetAsArray(ResourceGraphAsset::Nodes);
Expand Down Expand Up @@ -355,6 +375,23 @@ namespace Fyrion
return m_nodes;
}

void ResourceGraph::Destroy()
{
for (auto& data : m_data)
{
if (!data.offsetFromInstance && data.defaultValue != nullptr && data.typeHandler)
{
data.typeHandler->Destroy(data.defaultValue);
}
}

m_nodes.Clear();
m_links.Clear();
m_data.Clear();
m_publicInputs.Clear();
m_outputs.Clear();
}

void RegisterResourceGraphTypes()
{
}
Expand Down
6 changes: 5 additions & 1 deletion Engine/Source/Fyrion/Resource/ResourceGraph.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ namespace Fyrion
TypeHandler* typeHandler{};
VoidPtr defaultValue{};
u32 copyOffset = U32_MAX;
bool offsetFromInstance = false;
};

class FY_API ResourceGraphNodeData
Expand Down Expand Up @@ -85,6 +86,7 @@ namespace Fyrion
void SetInputValue(const StringView& inputName, ConstPtr data);
Span<ConstPtr> GetOutputs(TypeID typeId) const;
void Destroy();

void Execute();

template <typename T>
Expand All @@ -105,6 +107,7 @@ namespace Fyrion
class FY_API ResourceGraph
{
public:

void SetGraph(const Span<ResourceGraphNodeInfo>& nodes,
const Span<ResourceGraphLinkInfo>& links);

Expand All @@ -113,6 +116,8 @@ namespace Fyrion
ResourceGraphInstance* CreateInstance();
Span<SharedPtr<ResourceGraphNodeData>> GetNodes() const;

void Destroy();

friend class ResourceGraphInstance;
friend class ResourceGraphNodeData;

Expand All @@ -125,7 +130,6 @@ namespace Fyrion
HashMap<String, u32> m_publicInputs;
HashMap<TypeID, Array<u32>> m_outputs;


u32 m_instanceAllocRequiredSize = 0;
};
}
3 changes: 3 additions & 0 deletions Engine/Test/Fyrion/Resource/ResourceGraphTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ namespace
CHECK(testOutputNode->stringValue == "valuevalue1valuevalue2");

instance->Destroy();
resourceGraph.Destroy();
}
Engine::Destroy();
}
Expand Down Expand Up @@ -221,6 +222,8 @@ namespace
CHECK(testOutputNode->stringSize == testOutputNode->stringValue.Size() * defaultValue);

instance->Destroy();

resourceGraph.Destroy();
}
Engine::Destroy();
}
Expand Down

0 comments on commit fb985bf

Please sign in to comment.