View Issue Details

IDProjectCategoryView StatusLast Update
0002641NoesisGUIUnrealpublic2023-09-06 12:14
Reporterhcpizzi Assigned Tohcpizzi  
PrioritynormalSeveritycrashReproducibilityhave not tried
Status resolvedResolutionfixed 
Product Version3.2.1 
Target Version3.2.2Fixed in Version3.2.2 
Summary0002641: Invalid UMaterialInterface pointers in NoesisTypeClasses
DescriptionWhen transitioning between levels the UMaterialInterface pointers in NoesisTypeClasses become invalid.
TagsNo tags attached.
PlatformAny

Activities

jsantos

jsantos

2023-07-06 19:02

manager   ~0008600

MaterialInterfaceDestroyed.patch (1,698 bytes)   
Index: NoesisTypeClass.cpp
===================================================================
--- NoesisTypeClass.cpp	(revision 12575)
+++ NoesisTypeClass.cpp	(working copy)
@@ -2854,17 +2831,34 @@
 
 Noesis::BaseComponent* CallbackCreateMaterialWrapper(Noesis::Symbol Name)
 {
-	NoesisTypeClass* TypeClass = (NoesisTypeClass*)Noesis::Reflection::GetType(Name);
-	UMaterialInterface* Material = TypeClass->Material;
-	UMaterial* BaseMaterial = Material->GetBaseMaterial();
-	if (BaseMaterial->MaterialDomain == MD_UI)
+	/*NoesisTypeClass* TypeClass = (NoesisTypeClass*)Noesis::Reflection::GetType(Name);
+	UMaterialInterface* Material = TypeClass->Material;*/
+
+	FString UnrealTypeName = UTF8_TO_TCHAR(Name.Str());
+	FString GamePath = PathFromRegisterName_GameAsset(UnrealTypeName);
+	UMaterialInterface* Material = LoadObject<UMaterialInterface>(nullptr, *GamePath, nullptr, LOAD_NoWarn);
+	if (Material == nullptr)
 	{
-		return new NoesisUIMaterialWrapper(Material);
+		FString ModulePath = PathFromRegisterName_ModuleAsset(UnrealTypeName);
+		if (!ModulePath.IsEmpty())
+		{
+			Material = LoadObject<UMaterialInterface>(nullptr, *ModulePath, nullptr, LOAD_NoWarn);
+		}
 	}
-	else if (BaseMaterial->MaterialDomain == MD_PostProcess)
+
+	if (Material != nullptr)
 	{
-		return new NoesisPostProcessMaterialWrapper(Material);
+		UMaterial* BaseMaterial = Material->GetBaseMaterial();
+		if (BaseMaterial->MaterialDomain == MD_UI)
+		{
+			return new NoesisUIMaterialWrapper(Material);
+		}
+		else if (BaseMaterial->MaterialDomain == MD_PostProcess)
+		{
+			return new NoesisPostProcessMaterialWrapper(Material);
+		}
 	}
+
 	return nullptr;
 }
 

Issue History

Date Modified Username Field Change
2023-07-05 10:59 hcpizzi New Issue
2023-07-06 11:34 jsantos Assigned To => hcpizzi
2023-07-06 11:34 jsantos Status new => assigned
2023-07-06 11:34 jsantos Target Version => 3.2.2
2023-07-06 18:51 jsantos File Deleted: GoogleAnalytics.php
2023-07-06 19:02 jsantos Note Added: 0008600
2023-07-06 19:02 jsantos File Added: MaterialInterfaceDestroyed.patch
2023-09-06 12:14 hcpizzi Status assigned => resolved
2023-09-06 12:14 hcpizzi Resolution open => fixed
2023-09-06 12:14 hcpizzi Fixed in Version => 3.2.2