Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,14 @@ public static void SetVolumeFrameworkUpdateMode(this Camera camera, VolumeFramew
return;
}

bool requiredUpdatePreviously = cameraData.requiresVolumeFrameworkUpdate;
cameraData.volumeFrameworkUpdateMode = mode;

// We only update the local volume stacks for cameras set to ViaScripting.
// Otherwise it will be updated in every frame.
if (!cameraData.requiresVolumeFrameworkUpdate)
// We also check the previous value to make sure we're not updating when
// switching between Camera ViaScripting and the URP Asset set to ViaScripting
if (requiredUpdatePreviously && !cameraData.requiresVolumeFrameworkUpdate)
{
camera.UpdateVolumeStack(cameraData);
}
Expand Down Expand Up @@ -161,6 +164,27 @@ public static void UpdateVolumeStack(this Camera camera, UniversalAdditionalCame
VolumeManager.instance.Update(cameraData.volumeStack, trigger, layerMask);
}

/// <summary>
/// Destroys the volume stack for this camera.
/// </summary>
/// <param name="camera"></param>
public static void DestroyVolumeStack(this Camera camera)
{
UniversalAdditionalCameraData cameraData = camera.GetUniversalAdditionalCameraData();
camera.DestroyVolumeStack(cameraData);
}

/// <summary>
/// Destroys the volume stack for this camera.
/// </summary>
/// <param name="camera"></param>
/// <param name="cameraData"></param>
public static void DestroyVolumeStack(this Camera camera, UniversalAdditionalCameraData cameraData)
{
cameraData.volumeStack.Dispose();
cameraData.volumeStack = null;
}

/// <summary>
/// Returns the mask and trigger assigned for volumes on the camera.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,15 @@ static void UpdateVolumeFramework(Camera camera, UniversalAdditionalCameraData a
}

// When we want to update the volumes every frame...

// We destroy the volumeStack in the additional camera data, if present, to make sure
// it gets recreated and initialized if the update mode gets later changed to ViaScripting...
if (additionalCameraData && additionalCameraData.volumeStack != null)
{
camera.DestroyVolumeStack(additionalCameraData);
}

// Get the mask + trigger and update the stack
camera.GetVolumeLayerMaskAndTrigger(additionalCameraData, out LayerMask layerMask, out Transform trigger);
VolumeManager.instance.ResetMainStack();
VolumeManager.instance.Update(trigger, layerMask);
Expand Down