refactor(rendering): formalize pipeline selection and engine asset discovery
This commit is contained in:
@@ -25,19 +25,19 @@ public:
|
||||
return m_environmentGeneration;
|
||||
}
|
||||
|
||||
void SetRenderPipelineAssetDescriptor(
|
||||
void SetConfiguredRenderPipelineAssetDescriptor(
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor& descriptor);
|
||||
void ClearRenderPipelineAssetDescriptor();
|
||||
void ClearConfiguredRenderPipelineAssetDescriptor();
|
||||
Pipelines::ManagedRenderPipelineAssetDescriptor
|
||||
GetRenderPipelineAssetDescriptor() const {
|
||||
return m_renderPipelineAssetDescriptor;
|
||||
GetConfiguredRenderPipelineAssetDescriptor() const {
|
||||
return m_configuredRenderPipelineAssetDescriptor;
|
||||
}
|
||||
|
||||
private:
|
||||
void BumpEnvironmentGeneration();
|
||||
|
||||
Pipelines::ManagedRenderPipelineAssetDescriptor
|
||||
m_renderPipelineAssetDescriptor = {};
|
||||
m_configuredRenderPipelineAssetDescriptor = {};
|
||||
std::shared_ptr<const Pipelines::ManagedRenderPipelineBridge>
|
||||
m_managedRenderPipelineBridge = nullptr;
|
||||
size_t m_managedRenderPipelineBridgeGeneration = 1u;
|
||||
|
||||
@@ -61,7 +61,7 @@ private:
|
||||
ResolveManagedAssetRuntime() const;
|
||||
|
||||
ManagedRenderPipelineAssetDescriptor m_descriptor;
|
||||
ScriptableRenderPipelineHostAsset m_fallbackAsset;
|
||||
ScriptableRenderPipelineHostAsset m_executionHostAsset;
|
||||
mutable std::shared_ptr<const class ManagedRenderPipelineAssetRuntime>
|
||||
m_managedAssetRuntime = nullptr;
|
||||
mutable size_t m_managedAssetRuntimeBridgeGeneration = 0u;
|
||||
@@ -108,12 +108,13 @@ std::shared_ptr<const ManagedRenderPipelineBridge>
|
||||
GetManagedRenderPipelineBridge();
|
||||
size_t GetManagedRenderPipelineEnvironmentGeneration();
|
||||
|
||||
void SetManagedRenderPipelineAssetDescriptor(
|
||||
void SetConfiguredManagedRenderPipelineAssetDescriptor(
|
||||
const ManagedRenderPipelineAssetDescriptor& descriptor);
|
||||
void ClearManagedRenderPipelineAssetDescriptor();
|
||||
ManagedRenderPipelineAssetDescriptor GetManagedRenderPipelineAssetDescriptor();
|
||||
void ClearConfiguredManagedRenderPipelineAssetDescriptor();
|
||||
ManagedRenderPipelineAssetDescriptor
|
||||
GetConfiguredManagedRenderPipelineAssetDescriptor();
|
||||
std::shared_ptr<const RenderPipelineAsset>
|
||||
CreateManagedOrDefaultScriptableRenderPipelineAsset();
|
||||
CreateConfiguredManagedRenderPipelineAsset();
|
||||
|
||||
} // namespace Pipelines
|
||||
} // namespace Rendering
|
||||
|
||||
@@ -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