refactor(rendering): formalize pipeline selection and engine asset discovery
This commit is contained in:
@@ -34,6 +34,11 @@ class MonoManagedRenderPipelineStageRecorder;
|
||||
|
||||
class MonoScriptRuntime : public IScriptRuntime {
|
||||
public:
|
||||
struct ManagedAssemblyDescriptor {
|
||||
std::string name;
|
||||
std::filesystem::path path;
|
||||
};
|
||||
|
||||
struct Settings {
|
||||
std::filesystem::path assemblyDirectory;
|
||||
std::filesystem::path corlibDirectory;
|
||||
@@ -41,6 +46,7 @@ public:
|
||||
std::filesystem::path appAssemblyPath;
|
||||
std::string coreAssemblyName = "XCEngine.ScriptCore";
|
||||
std::string appAssemblyName = "GameScripts";
|
||||
std::vector<ManagedAssemblyDescriptor> engineAssemblies;
|
||||
std::string baseNamespace = "XCEngine";
|
||||
std::string baseClassName = "MonoBehaviour";
|
||||
};
|
||||
@@ -179,6 +185,11 @@ private:
|
||||
uint32_t gcHandle = 0;
|
||||
};
|
||||
|
||||
struct LoadedManagedAssemblyData {
|
||||
MonoAssembly* assembly = nullptr;
|
||||
MonoImage* image = nullptr;
|
||||
};
|
||||
|
||||
void ResolveSettings();
|
||||
bool InitializeRootDomain();
|
||||
bool CreateAppDomain();
|
||||
@@ -186,6 +197,11 @@ private:
|
||||
void SetCurrentDomain() const;
|
||||
|
||||
bool LoadAssemblies();
|
||||
bool LoadAssemblyImage(
|
||||
const ManagedAssemblyDescriptor& descriptor,
|
||||
const char* roleLabel,
|
||||
MonoAssembly*& outAssembly,
|
||||
MonoImage*& outImage);
|
||||
bool DiscoverScriptClasses();
|
||||
void DiscoverScriptClassesInImage(const std::string& assemblyName, MonoImage* image);
|
||||
void DiscoverRenderPipelineAssetClassesInImage(
|
||||
@@ -223,6 +239,7 @@ private:
|
||||
void ClearManagedInstances();
|
||||
void ClearExternalManagedObjects();
|
||||
void ClearClassCache();
|
||||
MonoImage* FindLoadedAssemblyImage(const std::string& assemblyName) const;
|
||||
bool ResolveManagedClass(
|
||||
const std::string& assemblyName,
|
||||
const std::string& namespaceName,
|
||||
@@ -296,6 +313,8 @@ private:
|
||||
|
||||
std::unordered_map<std::string, ClassMetadata> m_classes;
|
||||
std::vector<ScriptClassDescriptor> m_renderPipelineAssetClasses;
|
||||
std::unordered_map<std::string, LoadedManagedAssemblyData>
|
||||
m_loadedManagedAssemblies;
|
||||
std::unordered_map<InstanceKey, InstanceData, InstanceKeyHasher> m_instances;
|
||||
std::unordered_map<uint32_t, ExternalManagedObjectData> m_externalManagedObjects;
|
||||
std::shared_ptr<void> m_runtimeLifetimeToken;
|
||||
|
||||
Reference in New Issue
Block a user