rendering: close renderer override bridge phase 4.4
This commit is contained in:
@@ -2747,6 +2747,20 @@ private:
|
||||
|
||||
namespace {
|
||||
|
||||
std::string ResolveManagedMonoClassAssemblyName(MonoClass* monoClass) {
|
||||
if (monoClass == nullptr) {
|
||||
return {};
|
||||
}
|
||||
|
||||
MonoImage* const image =
|
||||
mono_class_get_image(monoClass);
|
||||
return TrimAssemblyName(
|
||||
SafeString(
|
||||
image != nullptr
|
||||
? mono_image_get_name(image)
|
||||
: nullptr));
|
||||
}
|
||||
|
||||
ManagedComponentTypeInfo ResolveManagedComponentTypeInfo(MonoClass* monoClass) {
|
||||
ManagedComponentTypeInfo typeInfo;
|
||||
if (!monoClass) {
|
||||
@@ -2783,13 +2797,17 @@ ManagedComponentTypeInfo ResolveManagedComponentTypeInfo(MonoClass* monoClass) {
|
||||
}
|
||||
|
||||
MonoScriptRuntime* runtime = GetActiveMonoScriptRuntime();
|
||||
const std::string assemblyName =
|
||||
ResolveManagedMonoClassAssemblyName(
|
||||
monoClass);
|
||||
if (runtime
|
||||
&& !assemblyName.empty()
|
||||
&& runtime->IsClassAvailable(
|
||||
runtime->GetSettings().appAssemblyName,
|
||||
assemblyName,
|
||||
typeInfo.namespaceName,
|
||||
typeInfo.className)) {
|
||||
typeInfo.kind = ManagedComponentKind::Script;
|
||||
typeInfo.assemblyName = runtime->GetSettings().appAssemblyName;
|
||||
typeInfo.assemblyName = assemblyName;
|
||||
}
|
||||
|
||||
return typeInfo;
|
||||
@@ -7596,6 +7614,12 @@ bool MonoScriptRuntime::DiscoverScriptClasses() {
|
||||
}
|
||||
|
||||
DiscoverScriptClassesInImage(m_settings.appAssemblyName, m_appImage);
|
||||
for (const ManagedAssemblyDescriptor& assembly :
|
||||
m_settings.engineAssemblies) {
|
||||
DiscoverScriptClassesInImage(
|
||||
assembly.name,
|
||||
FindLoadedAssemblyImage(assembly.name));
|
||||
}
|
||||
DiscoverRenderPipelineAssetClassesInImage(
|
||||
m_settings.coreAssemblyName,
|
||||
m_coreImage);
|
||||
@@ -8748,11 +8772,14 @@ bool MonoScriptRuntime::TrySetFieldValue(
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::string componentAssemblyName =
|
||||
ResolveManagedMonoClassAssemblyName(
|
||||
fieldMetadata.componentClass);
|
||||
ScriptComponent* component = FindScriptComponentByUUID(reference.scriptComponentUUID);
|
||||
if (!component
|
||||
|| !component->GetGameObject()
|
||||
|| component->GetGameObject()->GetUUID() != reference.gameObjectUUID
|
||||
|| component->GetAssemblyName() != m_settings.appAssemblyName
|
||||
|| component->GetAssemblyName() != componentAssemblyName
|
||||
|| component->GetNamespaceName() != SafeString(mono_class_get_namespace(fieldMetadata.componentClass))
|
||||
|| component->GetClassName() != SafeString(mono_class_get_name(fieldMetadata.componentClass))) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user