Configure default project render pipeline asset

This commit is contained in:
2026-04-26 13:47:09 +08:00
parent bd060ba031
commit 4b25457257
6 changed files with 163 additions and 8 deletions

View File

@@ -62,6 +62,10 @@ namespace Scripting {
namespace {
constexpr const char* kManagedRenderingNamespace = "XCEngine.Rendering";
constexpr const char* kProjectDefaultRenderPipelineAssetNamespace =
"ProjectScripts";
constexpr const char* kProjectDefaultRenderPipelineAssetClassName =
"ProjectDefaultRenderPipelineAsset";
struct MonoRootState {
MonoDomain* rootDomain = nullptr;
@@ -6819,6 +6823,41 @@ bool MonoScriptRuntime::TryGetAvailableRenderPipelineAssetClasses(
return true;
}
bool MonoScriptRuntime::TryConfigureDefaultProjectRenderPipelineAsset() {
if (!m_initialized) {
return false;
}
Rendering::GraphicsSettingsState& graphicsSettings =
Rendering::GetGraphicsSettingsState();
if (graphicsSettings
.GetConfiguredRenderPipelineAssetDescriptor()
.IsValid()) {
return false;
}
const ScriptClassDescriptor defaultAssetClass = {
m_settings.appAssemblyName,
kProjectDefaultRenderPipelineAssetNamespace,
kProjectDefaultRenderPipelineAssetClassName
};
const auto defaultAssetIt = std::find(
m_renderPipelineAssetClasses.begin(),
m_renderPipelineAssetClasses.end(),
defaultAssetClass);
if (defaultAssetIt == m_renderPipelineAssetClasses.end()) {
return false;
}
graphicsSettings.SetConfiguredRenderPipelineAssetDescriptor(
Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor{
defaultAssetIt->assemblyName,
defaultAssetIt->namespaceName,
defaultAssetIt->className,
0u});
return true;
}
std::vector<std::string> MonoScriptRuntime::GetScriptClassNames(const std::string& assemblyName) const {
std::vector<ScriptClassDescriptor> classes;
if (!TryGetAvailableScriptClasses(classes)) {
@@ -6942,6 +6981,7 @@ void MonoScriptRuntime::OnRuntimeStart(Components::Scene* scene) {
m_activeScene = nullptr;
GetInternalCallDeltaTime() = 0.0f;
if (Initialize()) {
TryConfigureDefaultProjectRenderPipelineAsset();
m_activeScene = scene;
GetInternalCallScene() = scene;
}