Skip to content

Commit bdcb8ba

Browse files
Fix undo/redo compositor (#2300)
* Rename function * Undoable "enable compositor" * Undo/Redo Enable/Disable compositor Co-authored-by: JulienIgnace-Unity <[email protected]>
1 parent 41d1f0f commit bdcb8ba

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

com.unity.render-pipelines.high-definition/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ The version number for this package has increased due to a version update of a r
194194
- Fixed issue that caused non-static object to not render at times in OnEnable reflection probes.
195195
- Baked reflection probes now correctly use static sky for ambient lighting.
196196
- Use draggable fields for float scalable settings
197+
- Fixed undo after enabling compositor.
197198

198199
### Changed
199200
- Preparation pass for RTSSShadows to be supported by render graph.

com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ void Update()
7171

7272
}
7373
}
74-
7574
}
7675

7776
void OnGUI()
@@ -108,10 +107,14 @@ void OnGUI()
108107
compositor.SetupCompositionMaterial();
109108
CompositionUtils.SetDefaultCamera(compositor);
110109
CompositionUtils.SetDefaultLayers(compositor);
111-
}
112110

113-
if (compositor)
111+
Undo.RegisterCreatedObjectUndo(compositor.outputCamera.gameObject, "Create Compositor");
112+
Undo.RegisterCreatedObjectUndo(go, "Create Compositor");
113+
}
114+
else if (compositor)
114115
{
116+
string message = enableCompositor ? "Enable Compositor" : "Disable Compositor";
117+
Undo.RecordObject(compositor, message);
115118
compositor.enabled = enableCompositor;
116119
}
117120
else

com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public static CompositorLayer CreateStackLayer(LayerType type = CompositorLayer.
151151
var newLayer = new CompositorLayer();
152152
newLayer.m_LayerName = layerName;
153153
newLayer.m_Type = type;
154-
newLayer.m_Camera = CompositionManager.GetSceceCamera();
154+
newLayer.m_Camera = CompositionManager.GetSceneCamera();
155155
newLayer.m_CullingMask = newLayer.m_Camera? newLayer.m_Camera.cullingMask : 0; //LayerMask.GetMask("None");
156156
newLayer.m_OutputTarget = CompositorLayer.OutputTarget.CameraStack;
157157
newLayer.m_ClearDepth = true;
@@ -187,6 +187,15 @@ static float EnumToScale(ResolutionScale scale)
187187
return 1.0f / (int)scale;
188188
}
189189

190+
static T AddComponent<T>(GameObject go) where T : Component
191+
{
192+
#if UNITY_EDITOR
193+
return UnityEditor.Undo.AddComponent<T>(go);
194+
#else
195+
return go.AddComponent<T>();
196+
#endif
197+
}
198+
190199
public int pixelWidth
191200
{
192201
get
@@ -222,7 +231,7 @@ public void Init(string layerID = "")
222231
// Note: Movie & image layers are rendered at the output resolution (and not the movie/image resolution). This is required to have post-processing effects like film grain at full res.
223232
if (m_Camera == null)
224233
{
225-
m_Camera = CompositionManager.GetSceceCamera();
234+
m_Camera = CompositionManager.GetSceneCamera();
226235
}
227236

228237
var compositor = CompositionManager.GetInstance();
@@ -340,13 +349,15 @@ public void Init(string layerID = "")
340349
if (m_LayerCamera)
341350
{
342351
m_LayerCamera.enabled = m_Show;
343-
var cameraData = m_LayerCamera.GetComponent<HDAdditionalCameraData>();
352+
var cameraData = m_LayerCamera.GetComponent<HDAdditionalCameraData>()
353+
?? AddComponent<HDAdditionalCameraData>(m_LayerCamera.gameObject);
354+
344355
var layerData = m_LayerCamera.GetComponent<AdditionalCompositorData>();
345356
{
346357
// create the component if it is required and does not exist
347358
if (layerData == null)
348359
{
349-
layerData = m_LayerCamera.gameObject.AddComponent<AdditionalCompositorData>();
360+
layerData = AddComponent<AdditionalCompositorData>(m_LayerCamera.gameObject);
350361
layerData.hideFlags = HideFlags.HideAndDontSave | HideFlags.HideInInspector;
351362
}
352363
// Reset the layer params (in case we cloned a camera which already had AdditionalCompositorData)

com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -826,15 +826,15 @@ internal bool IsThisCameraShared(Camera camera)
826826
return count > 1;
827827
}
828828

829-
static public Camera GetSceceCamera()
829+
static public Camera GetSceneCamera()
830830
{
831831
if (Camera.main != null)
832832
{
833833
return Camera.main;
834834
}
835835
foreach (var camera in Camera.allCameras)
836836
{
837-
if (camera.name != "MainCompositorCamera")
837+
if (camera != CompositionManager.GetInstance().outputCamera)
838838
{
839839
return camera;
840840
}

0 commit comments

Comments
 (0)