refactor(srp): split universal managed pipeline assembly
This commit is contained in:
@@ -49,17 +49,34 @@ void Application::InitializeScriptingRuntime(const std::string& projectPath) {
|
||||
settings.assemblyDirectory = assemblyDirectory;
|
||||
settings.corlibDirectory = assemblyDirectory;
|
||||
settings.coreAssemblyPath = assemblyDirectory / L"XCEngine.ScriptCore.dll";
|
||||
settings.engineAssemblies.push_back(
|
||||
::XCEngine::Scripting::MonoScriptRuntime::ManagedAssemblyDescriptor{
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
assemblyDirectory / L"XCEngine.RenderPipelines.Universal.dll"});
|
||||
settings.appAssemblyPath = assemblyDirectory / L"GameScripts.dll";
|
||||
|
||||
std::error_code ec;
|
||||
const bool hasCoreAssembly = fs::exists(settings.coreAssemblyPath, ec);
|
||||
ec.clear();
|
||||
bool hasEngineAssemblies = true;
|
||||
for (const auto& assembly : settings.engineAssemblies) {
|
||||
const bool hasAssembly = fs::exists(assembly.path, ec);
|
||||
ec.clear();
|
||||
hasEngineAssemblies = hasEngineAssemblies && hasAssembly;
|
||||
}
|
||||
const bool hasAppAssembly = fs::exists(settings.appAssemblyPath, ec);
|
||||
ec.clear();
|
||||
const bool hasCorlibAssembly = fs::exists(assemblyDirectory / L"mscorlib.dll", ec);
|
||||
m_scriptRuntimeStatus.assembliesFound = hasCoreAssembly && hasAppAssembly && hasCorlibAssembly;
|
||||
m_scriptRuntimeStatus.assembliesFound =
|
||||
hasCoreAssembly &&
|
||||
hasEngineAssemblies &&
|
||||
hasAppAssembly &&
|
||||
hasCorlibAssembly;
|
||||
|
||||
if (!hasCoreAssembly || !hasAppAssembly || !hasCorlibAssembly) {
|
||||
if (!hasCoreAssembly ||
|
||||
!hasEngineAssemblies ||
|
||||
!hasAppAssembly ||
|
||||
!hasCorlibAssembly) {
|
||||
m_scriptRuntimeStatus.statusMessage =
|
||||
"Script assemblies were not found in " + Platform::WideToUtf8(assemblyDirectory.wstring()) +
|
||||
". Script class discovery is disabled until the managed assemblies are built.";
|
||||
|
||||
@@ -250,6 +250,8 @@ EditorScriptAssemblyBuildResult EditorScriptAssemblyBuilder::RebuildProjectAssem
|
||||
const fs::path outputDirectory = projectRoot / "Library" / "ScriptAssemblies";
|
||||
const fs::path generatedDirectory = outputDirectory / "Generated";
|
||||
const fs::path scriptCoreOutputPath = outputDirectory / "XCEngine.ScriptCore.dll";
|
||||
const fs::path renderPipelinesUniversalOutputPath =
|
||||
outputDirectory / "XCEngine.RenderPipelines.Universal.dll";
|
||||
const fs::path gameScriptsOutputPath = outputDirectory / "GameScripts.dll";
|
||||
const fs::path corlibOutputPath = outputDirectory / "mscorlib.dll";
|
||||
const fs::path monoCorlibSourcePath = monoRoot / "binary" / "mscorlib.dll";
|
||||
@@ -306,11 +308,33 @@ EditorScriptAssemblyBuildResult EditorScriptAssemblyBuilder::RebuildProjectAssem
|
||||
return BuildFailure("Mono corlib was not found: " + ScriptBuilderPathToUtf8(monoCorlibSourcePath));
|
||||
}
|
||||
|
||||
std::vector<fs::path> scriptCoreSources = CollectCSharpSourceFiles(scriptCoreSourceRoot);
|
||||
const std::vector<fs::path> allScriptCoreSources =
|
||||
CollectCSharpSourceFiles(scriptCoreSourceRoot);
|
||||
std::vector<fs::path> scriptCoreSources;
|
||||
std::vector<fs::path> renderPipelinesUniversalSources;
|
||||
scriptCoreSources.reserve(allScriptCoreSources.size());
|
||||
renderPipelinesUniversalSources.reserve(allScriptCoreSources.size());
|
||||
for (const fs::path& sourcePath : allScriptCoreSources) {
|
||||
const std::string relativePath =
|
||||
sourcePath.lexically_relative(scriptCoreSourceRoot)
|
||||
.generic_string();
|
||||
if (relativePath.rfind("Rendering/Renderer/", 0) == 0 ||
|
||||
relativePath.rfind("Rendering/FirstParty/", 0) == 0) {
|
||||
renderPipelinesUniversalSources.push_back(sourcePath);
|
||||
} else {
|
||||
scriptCoreSources.push_back(sourcePath);
|
||||
}
|
||||
}
|
||||
|
||||
if (scriptCoreSources.empty()) {
|
||||
return BuildFailure("No ScriptCore C# source files were found under: " +
|
||||
ScriptBuilderPathToUtf8(scriptCoreSourceRoot));
|
||||
}
|
||||
if (renderPipelinesUniversalSources.empty()) {
|
||||
return BuildFailure(
|
||||
"No RenderPipelines.Universal C# source files were found under: " +
|
||||
ScriptBuilderPathToUtf8(scriptCoreSourceRoot / "Rendering"));
|
||||
}
|
||||
|
||||
std::vector<fs::path> projectScriptSources = CollectCSharpSourceFiles(projectRoot / "Assets");
|
||||
std::string placeholderError;
|
||||
@@ -333,6 +357,22 @@ EditorScriptAssemblyBuildResult EditorScriptAssemblyBuilder::RebuildProjectAssem
|
||||
return BuildFailure("Failed to build XCEngine.ScriptCore.dll: " + compileError);
|
||||
}
|
||||
|
||||
std::vector<fs::path> renderPipelinesUniversalReferences =
|
||||
frameworkReferences;
|
||||
renderPipelinesUniversalReferences.push_back(scriptCoreOutputPath);
|
||||
if (!RunCSharpCompiler(
|
||||
dotnetExecutable,
|
||||
cscDllPath,
|
||||
projectRoot,
|
||||
renderPipelinesUniversalOutputPath,
|
||||
renderPipelinesUniversalReferences,
|
||||
renderPipelinesUniversalSources,
|
||||
compileError)) {
|
||||
return BuildFailure(
|
||||
"Failed to build XCEngine.RenderPipelines.Universal.dll: " +
|
||||
compileError);
|
||||
}
|
||||
|
||||
// Mono can keep the project-local corlib mapped for the lifetime of the process.
|
||||
// Once it exists in the output folder, reuse it across incremental rebuilds.
|
||||
ec.clear();
|
||||
@@ -350,6 +390,7 @@ EditorScriptAssemblyBuildResult EditorScriptAssemblyBuilder::RebuildProjectAssem
|
||||
|
||||
std::vector<fs::path> gameScriptReferences = frameworkReferences;
|
||||
gameScriptReferences.push_back(scriptCoreOutputPath);
|
||||
gameScriptReferences.push_back(renderPipelinesUniversalOutputPath);
|
||||
if (!RunCSharpCompiler(
|
||||
dotnetExecutable,
|
||||
cscDllPath,
|
||||
|
||||
@@ -36,6 +36,11 @@ set(XCENGINE_MONO_CORLIB_DIR "${XCENGINE_MONO_ROOT_DIR}/binary" CACHE PATH "Dire
|
||||
set(XCENGINE_MONO_MSCORLIB_PATH "${XCENGINE_MONO_CORLIB_DIR}/mscorlib.dll")
|
||||
|
||||
set(XCENGINE_SCRIPT_CORE_DLL "${XCENGINE_MANAGED_OUTPUT_DIR}/XCEngine.ScriptCore.dll" CACHE FILEPATH "Generated XCEngine.ScriptCore assembly")
|
||||
set(
|
||||
XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL
|
||||
"${XCENGINE_MANAGED_OUTPUT_DIR}/XCEngine.RenderPipelines.Universal.dll"
|
||||
CACHE FILEPATH
|
||||
"Generated XCEngine.RenderPipelines.Universal assembly")
|
||||
set(XCENGINE_GAME_SCRIPTS_DLL "${XCENGINE_MANAGED_OUTPUT_DIR}/GameScripts.dll" CACHE FILEPATH "Generated GameScripts assembly")
|
||||
set(
|
||||
XCENGINE_PROJECT_ASSETS_DIR
|
||||
@@ -52,6 +57,11 @@ set(
|
||||
"${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR}/XCEngine.ScriptCore.dll"
|
||||
CACHE FILEPATH
|
||||
"Generated script core assembly copied into the project script assembly directory")
|
||||
set(
|
||||
XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL
|
||||
"${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR}/XCEngine.RenderPipelines.Universal.dll"
|
||||
CACHE FILEPATH
|
||||
"Generated render pipelines universal assembly copied into the project script assembly directory")
|
||||
set(
|
||||
XCENGINE_PROJECT_GAME_SCRIPTS_DLL
|
||||
"${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR}/GameScripts.dll"
|
||||
@@ -74,6 +84,12 @@ set(
|
||||
CACHE FILEPATH
|
||||
"ScriptCore assembly used by scripting tests for project asset assembly validation"
|
||||
)
|
||||
set(
|
||||
XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL
|
||||
"${XCENGINE_SCRIPTING_TEST_PROJECT_MANAGED_OUTPUT_DIR}/XCEngine.RenderPipelines.Universal.dll"
|
||||
CACHE FILEPATH
|
||||
"RenderPipelines.Universal assembly used by scripting tests for project asset assembly validation"
|
||||
)
|
||||
set(
|
||||
XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL
|
||||
"${XCENGINE_SCRIPTING_TEST_PROJECT_MANAGED_OUTPUT_DIR}/GameScripts.dll"
|
||||
@@ -99,6 +115,7 @@ foreach(XCENGINE_REQUIRED_PATH
|
||||
endforeach()
|
||||
|
||||
set(XCENGINE_SCRIPT_CORE_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/AssemblyInfo.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Behaviour.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Camera.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Color.cs
|
||||
@@ -141,16 +158,6 @@ set(XCENGINE_SCRIPT_CORE_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineAsset.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelineCameraRequestContext.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/ScriptableRenderPipelinePlanningContext.cs
|
||||
# Rendering renderer model
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererBackedRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererBackedRenderPipelineAsset.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererRecordingContext.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererDrivenRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RenderPassEvent.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRenderPass.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRenderer.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRendererData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRendererFeature.cs
|
||||
# Rendering shared data
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/CameraData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/DirectionalLightData.cs
|
||||
@@ -163,6 +170,19 @@ set(XCENGINE_SCRIPT_CORE_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/RenderingData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/ShadowData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Data/StageColorData.cs
|
||||
)
|
||||
|
||||
set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES
|
||||
# Rendering renderer model
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererBackedRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererBackedRenderPipelineAsset.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererRecordingContext.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RendererDrivenRenderPipeline.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/RenderPassEvent.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRenderPass.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRenderer.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRendererData.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Renderer/ScriptableRendererFeature.cs
|
||||
# First-party rendering
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/FirstParty/ColorScalePostProcessRendererFeature.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/FirstParty/DisableDirectionalShadowRendererFeature.cs
|
||||
@@ -240,6 +260,24 @@ add_custom_command(
|
||||
VERBATIM
|
||||
COMMENT "Building XCEngine.ScriptCore.dll")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_MANAGED_OUTPUT_DIR}
|
||||
COMMAND ${XCENGINE_DOTNET_EXECUTABLE} ${XCENGINE_CSC_DLL}
|
||||
/nologo
|
||||
/target:library
|
||||
/langversion:latest
|
||||
/nostdlib+
|
||||
/out:${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_MANAGED_FRAMEWORK_REFERENCES}
|
||||
/reference:${XCENGINE_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES}
|
||||
DEPENDS
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES}
|
||||
${XCENGINE_SCRIPT_CORE_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Building XCEngine.RenderPipelines.Universal.dll")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_GAME_SCRIPTS_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_MANAGED_OUTPUT_DIR}
|
||||
@@ -251,8 +289,12 @@ add_custom_command(
|
||||
/out:${XCENGINE_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_MANAGED_FRAMEWORK_REFERENCES}
|
||||
/reference:${XCENGINE_SCRIPT_CORE_DLL}
|
||||
/reference:${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_GAME_SCRIPT_SOURCES}
|
||||
DEPENDS ${XCENGINE_GAME_SCRIPT_SOURCES} ${XCENGINE_SCRIPT_CORE_DLL}
|
||||
DEPENDS
|
||||
${XCENGINE_GAME_SCRIPT_SOURCES}
|
||||
${XCENGINE_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Building GameScripts.dll")
|
||||
|
||||
@@ -270,6 +312,7 @@ add_custom_target(
|
||||
xcengine_managed_assemblies
|
||||
DEPENDS
|
||||
${XCENGINE_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_MANAGED_OUTPUT_DIR}/mscorlib.dll
|
||||
)
|
||||
@@ -284,6 +327,16 @@ add_custom_command(
|
||||
VERBATIM
|
||||
COMMENT "Copying XCEngine.ScriptCore.dll into the scripting test project assembly directory")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_SCRIPTING_TEST_PROJECT_MANAGED_OUTPUT_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
DEPENDS ${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Copying XCEngine.RenderPipelines.Universal.dll into the scripting test project assembly directory")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_SCRIPTING_TEST_PROJECT_MANAGED_OUTPUT_DIR}
|
||||
@@ -295,8 +348,12 @@ add_custom_command(
|
||||
/out:${XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_MANAGED_FRAMEWORK_REFERENCES}
|
||||
/reference:${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}
|
||||
/reference:${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES}
|
||||
DEPENDS ${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES} ${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}
|
||||
DEPENDS
|
||||
${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Building scripting test GameScripts.dll from project asset scripts")
|
||||
|
||||
@@ -314,6 +371,7 @@ add_custom_target(
|
||||
xcengine_test_project_managed_assemblies
|
||||
DEPENDS
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_SCRIPTING_TEST_PROJECT_MONO_MSCORLIB_PATH}
|
||||
)
|
||||
@@ -328,6 +386,16 @@ add_custom_command(
|
||||
VERBATIM
|
||||
COMMENT "Copying XCEngine.ScriptCore.dll into the project script assembly directory")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
DEPENDS ${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Copying XCEngine.RenderPipelines.Universal.dll into the project script assembly directory")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XCENGINE_PROJECT_GAME_SCRIPTS_DLL}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR}
|
||||
@@ -339,8 +407,12 @@ add_custom_command(
|
||||
/out:${XCENGINE_PROJECT_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_MANAGED_FRAMEWORK_REFERENCES}
|
||||
/reference:${XCENGINE_PROJECT_SCRIPT_CORE_DLL}
|
||||
/reference:${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES}
|
||||
DEPENDS ${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES} ${XCENGINE_PROJECT_SCRIPT_CORE_DLL}
|
||||
DEPENDS
|
||||
${XCENGINE_PROJECT_GAME_SCRIPT_SOURCES}
|
||||
${XCENGINE_PROJECT_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
VERBATIM
|
||||
COMMENT "Building project GameScripts.dll from project asset scripts")
|
||||
|
||||
@@ -358,6 +430,7 @@ add_custom_target(
|
||||
xcengine_project_managed_assemblies ALL
|
||||
DEPENDS
|
||||
${XCENGINE_PROJECT_SCRIPT_CORE_DLL}
|
||||
${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}
|
||||
${XCENGINE_PROJECT_GAME_SCRIPTS_DLL}
|
||||
${XCENGINE_PROJECT_MONO_MSCORLIB_PATH}
|
||||
)
|
||||
|
||||
3
managed/XCEngine.ScriptCore/AssemblyInfo.cs
Normal file
3
managed/XCEngine.ScriptCore/AssemblyInfo.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("XCEngine.RenderPipelines.Universal")]
|
||||
@@ -66,68 +66,68 @@ namespace XCEngine.Rendering
|
||||
m_stageColorData ??
|
||||
(m_stageColorData = ResolveStageColorData());
|
||||
|
||||
internal bool RecordScene()
|
||||
public bool RecordScene()
|
||||
{
|
||||
return InternalCalls
|
||||
.Rendering_ScriptableRenderContext_RecordScene(
|
||||
m_nativeHandle);
|
||||
}
|
||||
|
||||
internal bool RecordOpaqueScenePhase()
|
||||
public bool RecordOpaqueScenePhase()
|
||||
{
|
||||
return RecordScenePhaseInternal(
|
||||
RecordedScenePhase.Opaque);
|
||||
}
|
||||
|
||||
internal bool RecordSkyboxScenePhase()
|
||||
public bool RecordSkyboxScenePhase()
|
||||
{
|
||||
return RecordScenePhaseInternal(
|
||||
RecordedScenePhase.Skybox);
|
||||
}
|
||||
|
||||
internal bool RecordTransparentScenePhase()
|
||||
public bool RecordTransparentScenePhase()
|
||||
{
|
||||
return RecordScenePhaseInternal(
|
||||
RecordedScenePhase.Transparent);
|
||||
}
|
||||
|
||||
internal bool RecordBeforeOpaqueInjection()
|
||||
public bool RecordBeforeOpaqueInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.BeforeOpaque);
|
||||
}
|
||||
|
||||
internal bool RecordAfterOpaqueInjection()
|
||||
public bool RecordAfterOpaqueInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.AfterOpaque);
|
||||
}
|
||||
|
||||
internal bool RecordBeforeSkyboxInjection()
|
||||
public bool RecordBeforeSkyboxInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.BeforeSkybox);
|
||||
}
|
||||
|
||||
internal bool RecordAfterSkyboxInjection()
|
||||
public bool RecordAfterSkyboxInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.AfterSkybox);
|
||||
}
|
||||
|
||||
internal bool RecordBeforeTransparentInjection()
|
||||
public bool RecordBeforeTransparentInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.BeforeTransparent);
|
||||
}
|
||||
|
||||
internal bool RecordAfterTransparentInjection()
|
||||
public bool RecordAfterTransparentInjection()
|
||||
{
|
||||
return RecordSceneInjectionPointInternal(
|
||||
RecordedSceneInjectionPoint.AfterTransparent);
|
||||
}
|
||||
|
||||
internal bool RecordColorScaleFullscreenPass(
|
||||
public bool RecordColorScaleFullscreenPass(
|
||||
Vector4 colorScale)
|
||||
{
|
||||
return RecordFullscreenPassInternal(
|
||||
@@ -137,7 +137,7 @@ namespace XCEngine.Rendering
|
||||
colorScale);
|
||||
}
|
||||
|
||||
internal bool RecordShaderVectorFullscreenPass(
|
||||
public bool RecordShaderVectorFullscreenPass(
|
||||
string shaderPath,
|
||||
Vector4 vectorPayload,
|
||||
string passName = null)
|
||||
|
||||
@@ -8,13 +8,13 @@ namespace XCEngine.Rendering
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual bool SupportsStageRenderGraph(
|
||||
protected virtual bool SupportsStageRenderGraph(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected internal virtual bool RecordStageRenderGraph(
|
||||
protected virtual bool RecordStageRenderGraph(
|
||||
ScriptableRenderContext context)
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -8,22 +8,22 @@ namespace XCEngine.Rendering
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual ScriptableRenderPipeline CreatePipeline()
|
||||
protected virtual ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
protected internal virtual void ConfigureCameraRenderRequest(
|
||||
protected virtual void ConfigureCameraRenderRequest(
|
||||
ScriptableRenderPipelineCameraRequestContext context)
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual void ConfigureCameraFramePlan(
|
||||
protected virtual void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
}
|
||||
|
||||
protected internal virtual FinalColorSettings GetDefaultFinalColorSettings()
|
||||
protected virtual FinalColorSettings GetDefaultFinalColorSettings()
|
||||
{
|
||||
return FinalColorSettings.CreateDefault();
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace XCEngine.Rendering.Renderer
|
||||
return null;
|
||||
}
|
||||
|
||||
protected internal override bool SupportsStageRenderGraph(
|
||||
protected override bool SupportsStageRenderGraph(
|
||||
CameraFrameStage stage)
|
||||
{
|
||||
ScriptableRenderer renderer = GetOrCreateRenderer();
|
||||
@@ -25,7 +25,7 @@ namespace XCEngine.Rendering.Renderer
|
||||
renderer.SupportsStageRenderGraph(stage);
|
||||
}
|
||||
|
||||
protected internal override bool RecordStageRenderGraph(
|
||||
protected override bool RecordStageRenderGraph(
|
||||
ScriptableRenderContext context)
|
||||
{
|
||||
ScriptableRenderer renderer = GetOrCreateRenderer();
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace XCEngine.Rendering.Renderer
|
||||
{
|
||||
}
|
||||
|
||||
protected internal override ScriptableRenderPipeline CreatePipeline()
|
||||
protected override ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
ScriptableRendererData rendererData =
|
||||
ResolveRendererData();
|
||||
@@ -19,7 +19,7 @@ namespace XCEngine.Rendering.Renderer
|
||||
: null;
|
||||
}
|
||||
|
||||
protected internal override void ConfigureCameraRenderRequest(
|
||||
protected override void ConfigureCameraRenderRequest(
|
||||
ScriptableRenderPipelineCameraRequestContext context)
|
||||
{
|
||||
ScriptableRendererData rendererData =
|
||||
@@ -31,7 +31,7 @@ namespace XCEngine.Rendering.Renderer
|
||||
}
|
||||
}
|
||||
|
||||
protected internal override void ConfigureCameraFramePlan(
|
||||
protected override void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
ScriptableRendererData rendererData =
|
||||
|
||||
@@ -169,12 +169,17 @@ if(XCENGINE_ENABLE_MONO_SCRIPTING AND TARGET xcengine_managed_assemblies)
|
||||
|
||||
file(TO_CMAKE_PATH "${XCENGINE_MANAGED_OUTPUT_DIR}" XCENGINE_MANAGED_OUTPUT_DIR_CMAKE)
|
||||
file(TO_CMAKE_PATH "${XCENGINE_SCRIPT_CORE_DLL}" XCENGINE_SCRIPT_CORE_DLL_CMAKE)
|
||||
file(
|
||||
TO_CMAKE_PATH
|
||||
"${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}"
|
||||
XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE)
|
||||
file(TO_CMAKE_PATH "${XCENGINE_GAME_SCRIPTS_DLL}" XCENGINE_GAME_SCRIPTS_DLL_CMAKE)
|
||||
|
||||
target_compile_definitions(editor_tests PRIVATE
|
||||
XCENGINE_ENABLE_MONO_SCRIPTING
|
||||
XCENGINE_TEST_MANAGED_OUTPUT_DIR="${XCENGINE_MANAGED_OUTPUT_DIR_CMAKE}"
|
||||
XCENGINE_TEST_SCRIPT_CORE_DLL="${XCENGINE_SCRIPT_CORE_DLL_CMAKE}"
|
||||
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL="${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE}"
|
||||
XCENGINE_TEST_GAME_SCRIPTS_DLL="${XCENGINE_GAME_SCRIPTS_DLL_CMAKE}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -55,6 +55,7 @@ TEST_F(EditorScriptAssemblyBuilderTest, RebuildsProjectScriptAssembliesIntoLibra
|
||||
ASSERT_TRUE(result.succeeded) << result.message;
|
||||
|
||||
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "XCEngine.ScriptCore.dll"));
|
||||
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "XCEngine.RenderPipelines.Universal.dll"));
|
||||
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "GameScripts.dll"));
|
||||
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "mscorlib.dll"));
|
||||
}
|
||||
@@ -79,6 +80,11 @@ TEST_F(EditorScriptAssemblyBuilderTest, RebuildFailsWhileLoadedAssemblyIsStillHe
|
||||
settings.assemblyDirectory = m_projectRoot / "Library" / "ScriptAssemblies";
|
||||
settings.corlibDirectory = settings.assemblyDirectory;
|
||||
settings.coreAssemblyPath = settings.assemblyDirectory / "XCEngine.ScriptCore.dll";
|
||||
settings.engineAssemblies.push_back(
|
||||
XCEngine::Scripting::MonoScriptRuntime::ManagedAssemblyDescriptor{
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
settings.assemblyDirectory /
|
||||
"XCEngine.RenderPipelines.Universal.dll"});
|
||||
settings.appAssemblyPath = settings.assemblyDirectory / "GameScripts.dll";
|
||||
|
||||
auto runtime = std::make_unique<XCEngine::Scripting::MonoScriptRuntime>(settings);
|
||||
|
||||
@@ -27,6 +27,10 @@ MonoScriptRuntime::Settings CreateMonoSettings() {
|
||||
settings.assemblyDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
|
||||
settings.corlibDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
|
||||
settings.coreAssemblyPath = XCENGINE_TEST_SCRIPT_CORE_DLL;
|
||||
settings.engineAssemblies.push_back(
|
||||
MonoScriptRuntime::ManagedAssemblyDescriptor{
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL});
|
||||
settings.appAssemblyPath = XCENGINE_TEST_GAME_SCRIPTS_DLL;
|
||||
return settings;
|
||||
}
|
||||
|
||||
@@ -60,11 +60,16 @@ if(TARGET xcengine_managed_assemblies)
|
||||
|
||||
file(TO_CMAKE_PATH "${XCENGINE_MANAGED_OUTPUT_DIR}" XCENGINE_MANAGED_OUTPUT_DIR_CMAKE)
|
||||
file(TO_CMAKE_PATH "${XCENGINE_SCRIPT_CORE_DLL}" XCENGINE_SCRIPT_CORE_DLL_CMAKE)
|
||||
file(
|
||||
TO_CMAKE_PATH
|
||||
"${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}"
|
||||
XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE)
|
||||
file(TO_CMAKE_PATH "${XCENGINE_GAME_SCRIPTS_DLL}" XCENGINE_GAME_SCRIPTS_DLL_CMAKE)
|
||||
|
||||
target_compile_definitions(scripting_tests PRIVATE
|
||||
XCENGINE_TEST_MANAGED_OUTPUT_DIR=\"${XCENGINE_MANAGED_OUTPUT_DIR_CMAKE}\"
|
||||
XCENGINE_TEST_SCRIPT_CORE_DLL=\"${XCENGINE_SCRIPT_CORE_DLL_CMAKE}\"
|
||||
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL=\"${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE}\"
|
||||
XCENGINE_TEST_GAME_SCRIPTS_DLL=\"${XCENGINE_GAME_SCRIPTS_DLL_CMAKE}\"
|
||||
)
|
||||
endif()
|
||||
@@ -83,6 +88,10 @@ if(TARGET xcengine_test_project_managed_assemblies)
|
||||
TO_CMAKE_PATH
|
||||
"${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}"
|
||||
XCENGINE_PROJECT_SCRIPT_CORE_DLL_CMAKE)
|
||||
file(
|
||||
TO_CMAKE_PATH
|
||||
"${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}"
|
||||
XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE)
|
||||
file(
|
||||
TO_CMAKE_PATH
|
||||
"${XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL}"
|
||||
@@ -91,6 +100,7 @@ if(TARGET xcengine_test_project_managed_assemblies)
|
||||
target_compile_definitions(scripting_tests PRIVATE
|
||||
XCENGINE_TEST_PROJECT_MANAGED_OUTPUT_DIR=\"${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR_CMAKE}\"
|
||||
XCENGINE_TEST_PROJECT_SCRIPT_CORE_DLL=\"${XCENGINE_PROJECT_SCRIPT_CORE_DLL_CMAKE}\"
|
||||
XCENGINE_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL=\"${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE}\"
|
||||
XCENGINE_TEST_PROJECT_GAME_SCRIPTS_DLL=\"${XCENGINE_PROJECT_GAME_SCRIPTS_DLL_CMAKE}\"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -121,6 +121,10 @@ MonoScriptRuntime::Settings CreateMonoSettings() {
|
||||
settings.assemblyDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
|
||||
settings.corlibDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
|
||||
settings.coreAssemblyPath = XCENGINE_TEST_SCRIPT_CORE_DLL;
|
||||
settings.engineAssemblies.push_back(
|
||||
MonoScriptRuntime::ManagedAssemblyDescriptor{
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL});
|
||||
settings.appAssemblyPath = XCENGINE_TEST_GAME_SCRIPTS_DLL;
|
||||
return settings;
|
||||
}
|
||||
@@ -240,7 +244,7 @@ TEST_F(
|
||||
classes.begin(),
|
||||
classes.end(),
|
||||
ScriptClassDescriptor{
|
||||
"XCEngine.ScriptCore",
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
"XCEngine.Rendering.FirstParty",
|
||||
"ForwardRenderPipelineAsset"}),
|
||||
classes.end());
|
||||
@@ -438,7 +442,7 @@ TEST_F(
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor =
|
||||
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
|
||||
EXPECT_EQ(descriptor.assemblyName, "XCEngine.ScriptCore");
|
||||
EXPECT_EQ(descriptor.assemblyName, "XCEngine.RenderPipelines.Universal");
|
||||
EXPECT_EQ(descriptor.namespaceName, "XCEngine.Rendering.FirstParty");
|
||||
EXPECT_EQ(descriptor.className, "ForwardRenderPipelineAsset");
|
||||
EXPECT_NE(descriptor.managedAssetHandle, 0u);
|
||||
@@ -773,7 +777,9 @@ TEST_F(
|
||||
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset());
|
||||
ASSERT_NE(asset, nullptr);
|
||||
EXPECT_EQ(asset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
|
||||
EXPECT_EQ(
|
||||
asset->GetDescriptor().assemblyName,
|
||||
"XCEngine.RenderPipelines.Universal");
|
||||
EXPECT_EQ(
|
||||
asset->GetDescriptor().namespaceName,
|
||||
"XCEngine.Rendering.FirstParty");
|
||||
@@ -1025,7 +1031,9 @@ TEST_F(
|
||||
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset());
|
||||
ASSERT_NE(pipelineAsset, nullptr);
|
||||
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
|
||||
EXPECT_EQ(
|
||||
pipelineAsset->GetDescriptor().assemblyName,
|
||||
"XCEngine.RenderPipelines.Universal");
|
||||
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
|
||||
EXPECT_EQ(
|
||||
pipelineAsset->GetDescriptor().className,
|
||||
@@ -1101,7 +1109,9 @@ TEST_F(
|
||||
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset());
|
||||
ASSERT_NE(pipelineAsset, nullptr);
|
||||
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
|
||||
EXPECT_EQ(
|
||||
pipelineAsset->GetDescriptor().assemblyName,
|
||||
"XCEngine.RenderPipelines.Universal");
|
||||
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
|
||||
EXPECT_EQ(
|
||||
pipelineAsset->GetDescriptor().className,
|
||||
|
||||
@@ -58,11 +58,26 @@ std::filesystem::path ResolveProjectGameScriptsDllPath() {
|
||||
return ResolveProjectManagedOutputDirectory() / "GameScripts.dll";
|
||||
}
|
||||
|
||||
std::filesystem::path ResolveProjectRenderPipelinesUniversalDllPath() {
|
||||
constexpr const char* configuredPath =
|
||||
XCENGINE_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL;
|
||||
if (configuredPath[0] != '\0') {
|
||||
return std::filesystem::path(configuredPath);
|
||||
}
|
||||
|
||||
return ResolveProjectManagedOutputDirectory() /
|
||||
"XCEngine.RenderPipelines.Universal.dll";
|
||||
}
|
||||
|
||||
MonoScriptRuntime::Settings CreateProjectMonoSettings() {
|
||||
MonoScriptRuntime::Settings settings;
|
||||
settings.assemblyDirectory = ResolveProjectManagedOutputDirectory();
|
||||
settings.corlibDirectory = settings.assemblyDirectory;
|
||||
settings.coreAssemblyPath = ResolveProjectScriptCoreDllPath();
|
||||
settings.engineAssemblies.push_back(
|
||||
MonoScriptRuntime::ManagedAssemblyDescriptor{
|
||||
"XCEngine.RenderPipelines.Universal",
|
||||
ResolveProjectRenderPipelinesUniversalDllPath()});
|
||||
settings.appAssemblyPath = ResolveProjectGameScriptsDllPath();
|
||||
return settings;
|
||||
}
|
||||
@@ -71,6 +86,9 @@ class ProjectScriptAssemblyTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
ASSERT_TRUE(std::filesystem::exists(ResolveProjectScriptCoreDllPath()));
|
||||
ASSERT_TRUE(
|
||||
std::filesystem::exists(
|
||||
ResolveProjectRenderPipelinesUniversalDllPath()));
|
||||
ASSERT_TRUE(std::filesystem::exists(ResolveProjectGameScriptsDllPath()));
|
||||
|
||||
runtime = std::make_unique<MonoScriptRuntime>(CreateProjectMonoSettings());
|
||||
|
||||
Reference in New Issue
Block a user