Skip to content

Commit d651976

Browse files
committed
Add material cache reset for mesh
1 parent 5d35a63 commit d651976

File tree

4 files changed

+26
-26
lines changed

4 files changed

+26
-26
lines changed

scripts/Base/Overrides/meshMeshAppearance.reds

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ public native class meshMeshAppearance extends ISerializable {
33
public native let chunkMaterials: array<CName>;
44
public native let tags: array<CName>;
55
6-
public native func SetMesh(mesh: ref<CMesh>)
7-
public native func ResetMaterialCache()
6+
public static native func SetMesh(self: ref<meshMeshAppearance>, mesh: ref<CMesh>)
7+
public static native func ResetMaterialCache(self: ref<meshMeshAppearance>)
88
}

src/App/Depot/MeshEx.hpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,31 @@ namespace App
88
{
99
struct MeshAppearanceEx : Red::meshMeshAppearance
1010
{
11-
void SetMesh(const Red::Handle<Red::CMesh>& aMesh)
11+
static void SetMesh(const Red::Handle<Red::meshMeshAppearance>& aSelf, const Red::Handle<Red::CMesh>& aMesh)
1212
{
13-
Raw::MeshAppearance::Owner::Set(this, aMesh);
13+
Raw::MeshAppearance::Owner::Set(aSelf, aMesh);
1414
}
1515

16-
void ResetMaterialCache()
16+
static void ResetMaterialCache(const Red::Handle<Red::meshMeshAppearance>& aSelf)
1717
{
18+
auto& materialJob = Raw::MeshAppearance::MaterialJob::Ref(aSelf);
19+
auto& materialLock = Raw::MeshAppearance::MaterialLock::Ref(aSelf);
20+
auto& materialPtr = Raw::MeshAppearance::MaterialData::Ref(aSelf);
21+
auto& materialMap = Raw::MeshAppearance::MaterialMap::Ref(aSelf);
22+
auto& materialCached = Raw::MeshAppearance::ForceCache::Ref(aSelf);
23+
24+
Red::WaitForJob(materialJob, std::chrono::milliseconds(5000));
25+
26+
std::scoped_lock _(materialLock);
27+
28+
if (materialPtr.data)
29+
{
30+
Raw::RenderData::Release(materialPtr.data);
31+
materialPtr.data = nullptr;
32+
}
33+
34+
materialMap.Clear();
35+
materialCached = false;
1836
}
1937
};
2038
}

src/App/Entity/ComponentWrapper.cpp

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "ComponentWrapper.hpp"
2+
#include "App/Depot/MeshEx.hpp"
23
#include "Red/Mesh.hpp"
34

45
namespace
@@ -389,26 +390,7 @@ bool App::ComponentWrapper::ResetMaterialCache() const
389390
if (!meshApp)
390391
return false;
391392

392-
{
393-
auto& materialJob = Raw::MeshAppearance::MaterialJob::Ref(meshApp);
394-
auto& materialLock = Raw::MeshAppearance::MaterialLock::Ref(meshApp);
395-
auto& materialPtr = Raw::MeshAppearance::MaterialData::Ref(meshApp);
396-
auto& materialMap = Raw::MeshAppearance::MaterialMap::Ref(meshApp);
397-
auto& materialCached = Raw::MeshAppearance::ForceCache::Ref(meshApp);
398-
399-
Red::WaitForJob(materialJob, std::chrono::milliseconds(5000));
400-
401-
std::scoped_lock _(materialLock);
402-
403-
if (materialPtr.data)
404-
{
405-
Raw::RenderData::Release(materialPtr.data);
406-
materialPtr.data = nullptr;
407-
}
408-
409-
materialMap.Clear();
410-
materialCached = false;
411-
}
393+
MeshAppearanceEx::ResetMaterialCache(meshApp);
412394

413395
return true;
414396
}

xmake.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
set_xmakever("2.5.9")
22

33
set_project("Codeware")
4-
set_version("1.18.0", {build = "%y%m%d%H%M"})
4+
set_version("1.18.1", {build = "%y%m%d%H%M"})
55

66
set_arch("x64")
77
set_languages("cxx2a")

0 commit comments

Comments
 (0)