refactor(srp): make URP scene setup policy explicit
This commit is contained in:
@@ -4044,6 +4044,62 @@ void InternalCall_Camera_SetStackType(uint64_t gameObjectUUID, int32_t value) {
|
||||
static_cast<Components::CameraStackType>(value));
|
||||
}
|
||||
|
||||
int32_t InternalCall_Camera_GetProjectionType(uint64_t gameObjectUUID) {
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
return component != nullptr
|
||||
? static_cast<int32_t>(component->GetProjectionType())
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool InternalCall_Camera_GetSkyboxEnabled(uint64_t gameObjectUUID) {
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
return (component && component->IsSkyboxEnabled()) ? 1 : 0;
|
||||
}
|
||||
|
||||
mono_bool InternalCall_Camera_GetHasSkyboxMaterial(uint64_t gameObjectUUID) {
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
return (component && component->GetSkyboxMaterial() != nullptr) ? 1 : 0;
|
||||
}
|
||||
|
||||
void InternalCall_Camera_GetSkyboxTopColor(
|
||||
uint64_t gameObjectUUID,
|
||||
XCEngine::Math::Color* outColor) {
|
||||
if (outColor == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
*outColor = component != nullptr
|
||||
? component->GetSkyboxTopColor()
|
||||
: XCEngine::Math::Color();
|
||||
}
|
||||
|
||||
void InternalCall_Camera_GetSkyboxHorizonColor(
|
||||
uint64_t gameObjectUUID,
|
||||
XCEngine::Math::Color* outColor) {
|
||||
if (outColor == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
*outColor = component != nullptr
|
||||
? component->GetSkyboxHorizonColor()
|
||||
: XCEngine::Math::Color();
|
||||
}
|
||||
|
||||
void InternalCall_Camera_GetSkyboxBottomColor(
|
||||
uint64_t gameObjectUUID,
|
||||
XCEngine::Math::Color* outColor) {
|
||||
if (outColor == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
Components::CameraComponent* component = FindCameraComponent(gameObjectUUID);
|
||||
*outColor = component != nullptr
|
||||
? component->GetSkyboxBottomColor()
|
||||
: XCEngine::Math::Color();
|
||||
}
|
||||
|
||||
float InternalCall_Light_GetIntensity(uint64_t gameObjectUUID) {
|
||||
Components::LightComponent* component = FindLightComponent(gameObjectUUID);
|
||||
return component ? component->GetIntensity() : 0.0f;
|
||||
@@ -5613,60 +5669,41 @@ InternalCall_Rendering_RenderSceneSetupContext_GetIsConfigured(
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_RenderSceneSetupContext_UseDefaultSceneSetup(
|
||||
int32_t InternalCall_Rendering_RenderSceneSetupContext_GetClearFlags(
|
||||
uint64_t nativeHandle) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
const ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr ||
|
||||
state->plan == nullptr ||
|
||||
state->sceneData == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Rendering::ApplyDefaultRenderPipelineSceneSetupPolicy(
|
||||
*state->plan,
|
||||
*state->sceneData);
|
||||
state->explicitlyConfigured = true;
|
||||
return 1;
|
||||
return state != nullptr &&
|
||||
state->plan != nullptr
|
||||
? static_cast<int32_t>(state->plan->request.clearFlags)
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_RenderSceneSetupContext_UseDefaultEnvironment(
|
||||
InternalCall_Rendering_RenderSceneSetupContext_GetHasMainSceneDepthAttachment(
|
||||
uint64_t nativeHandle) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
const ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr ||
|
||||
state->plan == nullptr ||
|
||||
state->sceneData == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
state->sceneData->environment =
|
||||
Rendering::BuildDefaultRenderPipelineEnvironmentData(
|
||||
*state->plan);
|
||||
state->explicitlyConfigured = true;
|
||||
return 1;
|
||||
return state != nullptr &&
|
||||
state->plan != nullptr &&
|
||||
state->plan->GetMainSceneSurface().GetDepthAttachment() != nullptr
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_RenderSceneSetupContext_UseDefaultGlobalShaderKeywords(
|
||||
InternalCall_Rendering_RenderSceneSetupContext_GetHasMainDirectionalShadow(
|
||||
uint64_t nativeHandle) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
const ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr || state->sceneData == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
state->sceneData->globalShaderKeywords =
|
||||
Rendering::
|
||||
BuildDefaultRenderPipelineSceneGlobalShaderKeywords(
|
||||
*state->sceneData);
|
||||
state->explicitlyConfigured = true;
|
||||
return 1;
|
||||
return state != nullptr &&
|
||||
state->sceneData != nullptr &&
|
||||
state->sceneData->lighting.HasMainDirectionalShadow()
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
|
||||
void InternalCall_Rendering_RenderSceneSetupContext_ClearEnvironment(
|
||||
void InternalCall_Rendering_RenderSceneSetupContext_SetEnvironmentNone(
|
||||
uint64_t nativeHandle) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
@@ -5678,6 +5715,56 @@ void InternalCall_Rendering_RenderSceneSetupContext_ClearEnvironment(
|
||||
state->explicitlyConfigured = true;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_RenderSceneSetupContext_UseCameraSkyboxMaterial(
|
||||
uint64_t nativeHandle) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr ||
|
||||
state->plan == nullptr ||
|
||||
state->sceneData == nullptr ||
|
||||
state->plan->request.camera == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const Resources::Material* skyboxMaterial =
|
||||
state->plan->request.camera->GetSkyboxMaterial();
|
||||
if (skyboxMaterial == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
state->sceneData->environment = {};
|
||||
state->sceneData->environment.mode =
|
||||
Rendering::RenderEnvironmentMode::MaterialSkybox;
|
||||
state->sceneData->environment.materialSkybox.material =
|
||||
skyboxMaterial;
|
||||
state->explicitlyConfigured = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void InternalCall_Rendering_RenderSceneSetupContext_SetProceduralSkybox(
|
||||
uint64_t nativeHandle,
|
||||
XCEngine::Math::Color* topColor,
|
||||
XCEngine::Math::Color* horizonColor,
|
||||
XCEngine::Math::Color* bottomColor) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr || state->sceneData == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
state->sceneData->environment = {};
|
||||
state->sceneData->environment.mode =
|
||||
Rendering::RenderEnvironmentMode::ProceduralSkybox;
|
||||
state->sceneData->environment.skybox.topColor =
|
||||
topColor != nullptr ? *topColor : XCEngine::Math::Color();
|
||||
state->sceneData->environment.skybox.horizonColor =
|
||||
horizonColor != nullptr ? *horizonColor : XCEngine::Math::Color();
|
||||
state->sceneData->environment.skybox.bottomColor =
|
||||
bottomColor != nullptr ? *bottomColor : XCEngine::Math::Color();
|
||||
state->explicitlyConfigured = true;
|
||||
}
|
||||
|
||||
void
|
||||
InternalCall_Rendering_RenderSceneSetupContext_ClearGlobalShaderKeywords(
|
||||
uint64_t nativeHandle) {
|
||||
@@ -5691,16 +5778,55 @@ InternalCall_Rendering_RenderSceneSetupContext_ClearGlobalShaderKeywords(
|
||||
state->explicitlyConfigured = true;
|
||||
}
|
||||
|
||||
void InternalCall_Rendering_RenderSceneSetupContext_ClearSceneSetup(
|
||||
uint64_t nativeHandle) {
|
||||
void InternalCall_Rendering_RenderSceneSetupContext_SetGlobalShaderKeyword(
|
||||
uint64_t nativeHandle,
|
||||
MonoString* keyword,
|
||||
mono_bool enabled) {
|
||||
ManagedRenderSceneSetupContextState* const state =
|
||||
FindManagedRenderSceneSetupContextState(nativeHandle);
|
||||
if (state == nullptr || state->sceneData == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
state->sceneData->environment = {};
|
||||
state->sceneData->globalShaderKeywords = {};
|
||||
const XCEngine::Containers::String normalizedKeyword =
|
||||
Resources::NormalizeShaderKeywordToken(
|
||||
XCEngine::Containers::String(
|
||||
MonoStringToUtf8(keyword).c_str()));
|
||||
if (normalizedKeyword.Empty()) {
|
||||
state->explicitlyConfigured = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Resources::ShaderKeywordSet& keywordSet =
|
||||
state->sceneData->globalShaderKeywords;
|
||||
bool foundKeyword = false;
|
||||
size_t foundIndex = 0;
|
||||
for (size_t keywordIndex = 0;
|
||||
keywordIndex < keywordSet.enabledKeywords.Size();
|
||||
++keywordIndex) {
|
||||
if (keywordSet.enabledKeywords[keywordIndex] ==
|
||||
normalizedKeyword) {
|
||||
foundKeyword = true;
|
||||
foundIndex = keywordIndex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (enabled != 0) {
|
||||
if (!foundKeyword) {
|
||||
keywordSet.enabledKeywords.PushBack(normalizedKeyword);
|
||||
}
|
||||
} else if (foundKeyword) {
|
||||
const size_t lastIndex =
|
||||
keywordSet.enabledKeywords.Size() - 1;
|
||||
if (foundIndex != lastIndex) {
|
||||
keywordSet.enabledKeywords[foundIndex] =
|
||||
keywordSet.enabledKeywords[lastIndex];
|
||||
}
|
||||
keywordSet.enabledKeywords.PopBack();
|
||||
}
|
||||
|
||||
Resources::NormalizeShaderKeywordSetInPlace(keywordSet);
|
||||
state->explicitlyConfigured = true;
|
||||
}
|
||||
|
||||
@@ -6100,6 +6226,12 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_SetClearMode", reinterpret_cast<const void*>(&InternalCall_Camera_SetClearMode));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetStackType", reinterpret_cast<const void*>(&InternalCall_Camera_GetStackType));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_SetStackType", reinterpret_cast<const void*>(&InternalCall_Camera_SetStackType));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetProjectionType", reinterpret_cast<const void*>(&InternalCall_Camera_GetProjectionType));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetSkyboxEnabled", reinterpret_cast<const void*>(&InternalCall_Camera_GetSkyboxEnabled));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetHasSkyboxMaterial", reinterpret_cast<const void*>(&InternalCall_Camera_GetHasSkyboxMaterial));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetSkyboxTopColor", reinterpret_cast<const void*>(&InternalCall_Camera_GetSkyboxTopColor));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetSkyboxHorizonColor", reinterpret_cast<const void*>(&InternalCall_Camera_GetSkyboxHorizonColor));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Camera_GetSkyboxBottomColor", reinterpret_cast<const void*>(&InternalCall_Camera_GetSkyboxBottomColor));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Light_GetIntensity", reinterpret_cast<const void*>(&InternalCall_Light_GetIntensity));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Light_SetIntensity", reinterpret_cast<const void*>(&InternalCall_Light_SetIntensity));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Light_GetRange", reinterpret_cast<const void*>(&InternalCall_Light_GetRange));
|
||||
@@ -6239,12 +6371,14 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetRendererIndex", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetRendererIndex));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetCameraGameObjectUUID", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetCameraGameObjectUUID));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetIsConfigured", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetIsConfigured));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_UseDefaultSceneSetup", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_UseDefaultSceneSetup));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_UseDefaultEnvironment", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_UseDefaultEnvironment));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_UseDefaultGlobalShaderKeywords", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_UseDefaultGlobalShaderKeywords));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_ClearEnvironment", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_ClearEnvironment));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetClearFlags", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetClearFlags));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetHasMainSceneDepthAttachment", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetHasMainSceneDepthAttachment));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_GetHasMainDirectionalShadow", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_GetHasMainDirectionalShadow));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_SetEnvironmentNone", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_SetEnvironmentNone));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_UseCameraSkyboxMaterial", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_UseCameraSkyboxMaterial));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_SetProceduralSkybox", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_SetProceduralSkybox));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_ClearGlobalShaderKeywords", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_ClearGlobalShaderKeywords));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_ClearSceneSetup", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_ClearSceneSetup));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_RenderSceneSetupContext_SetGlobalShaderKeyword", reinterpret_cast<const void*>(&InternalCall_Rendering_RenderSceneSetupContext_SetGlobalShaderKeyword));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_DirectionalShadowExecutionContext_GetHasPlannedMainDirectionalShadow", reinterpret_cast<const void*>(&InternalCall_Rendering_DirectionalShadowExecutionContext_GetHasPlannedMainDirectionalShadow));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_DirectionalShadowExecutionContext_GetRendererIndex", reinterpret_cast<const void*>(&InternalCall_Rendering_DirectionalShadowExecutionContext_GetRendererIndex));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_DirectionalShadowExecutionContext_GetIsConfigured", reinterpret_cast<const void*>(&InternalCall_Rendering_DirectionalShadowExecutionContext_GetIsConfigured));
|
||||
|
||||
Reference in New Issue
Block a user