feat(rendering): add managed SRP renderer runtime
This commit is contained in:
@@ -11,6 +11,38 @@ namespace Scripting {
|
||||
|
||||
namespace {
|
||||
|
||||
void FilterAndSortScriptClasses(
|
||||
const std::vector<ScriptClassDescriptor>& runtimeClasses,
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName) {
|
||||
outClasses.clear();
|
||||
outClasses.reserve(runtimeClasses.size());
|
||||
for (const ScriptClassDescriptor& descriptor : runtimeClasses) {
|
||||
if (!assemblyName.empty() && descriptor.assemblyName != assemblyName) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptor.className.empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
outClasses.push_back(descriptor);
|
||||
}
|
||||
|
||||
std::sort(
|
||||
outClasses.begin(),
|
||||
outClasses.end(),
|
||||
[](const ScriptClassDescriptor& lhs, const ScriptClassDescriptor& rhs) {
|
||||
if (lhs.assemblyName != rhs.assemblyName) {
|
||||
return lhs.assemblyName < rhs.assemblyName;
|
||||
}
|
||||
if (lhs.namespaceName != rhs.namespaceName) {
|
||||
return lhs.namespaceName < rhs.namespaceName;
|
||||
}
|
||||
return lhs.className < rhs.className;
|
||||
});
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, ScriptFieldValue> CollectClassDefaultValues(
|
||||
const IScriptRuntime* runtime,
|
||||
const ScriptComponent* component,
|
||||
@@ -371,39 +403,26 @@ bool ScriptEngine::HasRuntimeInstance(const ScriptComponent* component) const {
|
||||
bool ScriptEngine::TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName) const {
|
||||
outClasses.clear();
|
||||
|
||||
std::vector<ScriptClassDescriptor> runtimeClasses;
|
||||
if (!m_runtime->TryGetAvailableScriptClasses(runtimeClasses)) {
|
||||
outClasses.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
outClasses.reserve(runtimeClasses.size());
|
||||
for (const ScriptClassDescriptor& descriptor : runtimeClasses) {
|
||||
if (!assemblyName.empty() && descriptor.assemblyName != assemblyName) {
|
||||
continue;
|
||||
}
|
||||
FilterAndSortScriptClasses(runtimeClasses, outClasses, assemblyName);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (descriptor.className.empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
outClasses.push_back(descriptor);
|
||||
bool ScriptEngine::TryGetAvailableRenderPipelineAssetClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName) const {
|
||||
std::vector<ScriptClassDescriptor> runtimeClasses;
|
||||
if (!m_runtime->TryGetAvailableRenderPipelineAssetClasses(runtimeClasses)) {
|
||||
outClasses.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
std::sort(
|
||||
outClasses.begin(),
|
||||
outClasses.end(),
|
||||
[](const ScriptClassDescriptor& lhs, const ScriptClassDescriptor& rhs) {
|
||||
if (lhs.assemblyName != rhs.assemblyName) {
|
||||
return lhs.assemblyName < rhs.assemblyName;
|
||||
}
|
||||
if (lhs.namespaceName != rhs.namespaceName) {
|
||||
return lhs.namespaceName < rhs.namespaceName;
|
||||
}
|
||||
return lhs.className < rhs.className;
|
||||
});
|
||||
|
||||
FilterAndSortScriptClasses(runtimeClasses, outClasses, assemblyName);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user