feat(rendering): add managed SRP renderer runtime
This commit is contained in:
@@ -74,6 +74,8 @@ public:
|
||||
|
||||
virtual bool TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const = 0;
|
||||
virtual bool TryGetAvailableRenderPipelineAssetClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const = 0;
|
||||
|
||||
virtual bool TryGetClassFieldMetadata(
|
||||
const std::string& assemblyName,
|
||||
|
||||
@@ -19,6 +19,12 @@ typedef struct _MonoMethod MonoMethod;
|
||||
typedef struct _MonoClassField MonoClassField;
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
namespace Pipelines {
|
||||
struct ManagedRenderPipelineAssetDescriptor;
|
||||
} // namespace Pipelines
|
||||
} // namespace Rendering
|
||||
|
||||
namespace Scripting {
|
||||
|
||||
class ScriptComponent;
|
||||
@@ -56,6 +62,8 @@ public:
|
||||
std::vector<std::string> GetScriptClassNames(const std::string& assemblyName = std::string()) const;
|
||||
bool TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const override;
|
||||
bool TryGetAvailableRenderPipelineAssetClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const override;
|
||||
bool TryGetClassFieldMetadata(
|
||||
const std::string& assemblyName,
|
||||
const std::string& namespaceName,
|
||||
@@ -76,6 +84,8 @@ public:
|
||||
uint32_t RetainExternalManagedObjectReference(MonoObject* managedObject);
|
||||
void ReleaseExternalManagedObject(uint32_t gcHandle);
|
||||
bool IsScriptableRenderPipelineAssetObject(MonoObject* managedObject) const;
|
||||
bool TryEnsureManagedRenderPipelineAssetHandle(
|
||||
Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor& ioDescriptor);
|
||||
|
||||
bool TryGetFieldValue(
|
||||
const ScriptComponent* component,
|
||||
@@ -178,6 +188,9 @@ private:
|
||||
bool LoadAssemblies();
|
||||
bool DiscoverScriptClasses();
|
||||
void DiscoverScriptClassesInImage(const std::string& assemblyName, MonoImage* image);
|
||||
void DiscoverRenderPipelineAssetClassesInImage(
|
||||
const std::string& assemblyName,
|
||||
MonoImage* image);
|
||||
bool IsMonoBehaviourSubclass(MonoClass* monoClass) const;
|
||||
bool IsSupportedComponentFieldClass(MonoClass* monoClass) const;
|
||||
bool IsScriptComponentFieldClass(MonoClass* monoClass) const;
|
||||
@@ -282,6 +295,7 @@ private:
|
||||
MonoClassField* m_scriptComponentUUIDField = nullptr;
|
||||
|
||||
std::unordered_map<std::string, ClassMetadata> m_classes;
|
||||
std::vector<ScriptClassDescriptor> m_renderPipelineAssetClasses;
|
||||
std::unordered_map<InstanceKey, InstanceData, InstanceKeyHasher> m_instances;
|
||||
std::unordered_map<uint32_t, ExternalManagedObjectData> m_externalManagedObjects;
|
||||
std::shared_ptr<void> m_runtimeLifetimeToken;
|
||||
|
||||
@@ -11,6 +11,8 @@ public:
|
||||
void OnRuntimeStop(Components::Scene* scene) override;
|
||||
bool TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const override;
|
||||
bool TryGetAvailableRenderPipelineAssetClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses) const override;
|
||||
bool TryGetClassFieldMetadata(
|
||||
const std::string& assemblyName,
|
||||
const std::string& namespaceName,
|
||||
|
||||
@@ -60,6 +60,9 @@ public:
|
||||
bool TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName = std::string()) const;
|
||||
bool TryGetAvailableRenderPipelineAssetClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName = std::string()) const;
|
||||
bool TrySetScriptFieldValue(
|
||||
ScriptComponent* component,
|
||||
const std::string& fieldName,
|
||||
|
||||
Reference in New Issue
Block a user