Skip to content

Commit 0c0d6ee

Browse files
committed
resolution setting/restoring fixes
dropped 16k rendering as unity does not support it. added UI warning when settings are invalid
1 parent 4c1ccb7 commit 0c0d6ee

File tree

5 files changed

+52
-17
lines changed

5 files changed

+52
-17
lines changed

source/FrameRecorder/Core/Editor/RecorderEditor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ public override void OnInspectorGUI()
128128

129129
serializedObject.ApplyModifiedProperties();
130130
EditorGUI.EndChangeCheck();
131+
132+
133+
if (!(target as RecorderSettings).isValid)
134+
{
135+
EditorGUILayout.HelpBox("Incomplete/Invalid settings", MessageType.Warning);
136+
}
131137
}
132138

133139
protected void AddSourceSettings(RecorderInputSetting sourceSettings)

source/FrameRecorder/Core/Engine/ImageRecorderSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public enum ESuperSamplingCount
1313

1414
public enum EImageDimension
1515
{
16-
x8640p_16K = 8640,
16+
//x8640p_16K = 8640,
1717
x4320p_8K = 4320,
1818
x2880p_5K = 2880,
1919
x2160p_4K = 2160,

source/FrameRecorder/Core/Engine/RecorderSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public virtual bool isValid
8383
{
8484
get
8585
{
86-
if (m_FrameRate == 0)
86+
if (m_FrameRate == 0 || m_CaptureEveryNthFrame <= 0)
8787
return false;
8888

8989
if (m_SourceSettings != null)

source/FrameRecorder/Inputs/CBRenderTexture/Engine/CBRenderTextureInput.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public override void BeginRecording(RecordingSession session)
9393
outputHeight = (outputHeight + 1) & ~1;
9494
}
9595

96-
var size = GameViewSize.FindSize(outputWidth, outputHeight);
96+
var size = GameViewSize.SetCustomSize(outputWidth, outputHeight);
9797
if (size == null)
9898
size = GameViewSize.AddSize(outputWidth, outputHeight);
9999

source/FrameRecorder/Inputs/CBRenderTexture/Engine/GameViewSize.cs

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#if UNITY_EDITOR
22

33
using System;
4+
using System.Collections.Generic;
45
using System.Reflection;
56
using UnityEditor;
67

@@ -9,10 +10,8 @@ namespace UnityEngine.FrameRecorder.Input
910

1011
public class GameViewSize
1112
{
12-
1313
static object m_InitialSizeObj;
1414

15-
1615
public static EditorWindow GetMainGameView()
1716
{
1817
System.Type T = System.Type.GetType("UnityEditor.GameView,UnityEditor");
@@ -63,28 +62,58 @@ static void SizeOf(object gameViewSize, out int width, out int height)
6362
height = (int)gameViewSize.GetType().GetProperty("height", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).GetValue(gameViewSize, new object[0] { });
6463
}
6564

66-
public static object FindSize(int width, int height)
65+
public static object SetCustomSize(int width, int height)
66+
{
67+
// Find recorder size object
68+
var sizeObj = FindRecorderSizeObj();
69+
if (sizeObj != null)
70+
{
71+
sizeObj.GetType().GetField("m_Width",System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(sizeObj,width);
72+
sizeObj.GetType().GetField("m_Height", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(sizeObj,height);
73+
}
74+
else
75+
{
76+
sizeObj = AddSize(width, height);
77+
}
78+
79+
return sizeObj;
80+
}
81+
82+
83+
private static object FindRecorderSizeObj()
6784
{
6885
var group = Group();
6986

70-
int total = TotalCount();
71-
for (int i = 0; i < total; i++)
87+
var customs = group.GetType().GetField("m_Custom", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(group);
88+
89+
var itr = (System.Collections.IEnumerator)customs.GetType().GetMethod("GetEnumerator").Invoke(customs, new object[] {});
90+
while (itr.MoveNext())
7291
{
73-
var sizeObj = GetGameViewSize(group, i);
74-
int x, y;
75-
SizeOf(sizeObj, out x, out y);
76-
if (x == width && y == height)
77-
return sizeObj;
92+
var txt = (string)itr.Current.GetType().GetField("m_BaseText", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(itr.Current);
93+
if (txt == "(Recording resolution)")
94+
return itr.Current;
7895
}
7996

8097
return null;
8198
}
8299

100+
83101
public static int IndexOf(object sizeObj)
84102
{
85103
var group = Group();
86-
var obj = group.GetType().GetMethod("IndexOf", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
87-
return (int)obj.Invoke(group, new object[] {sizeObj}) ;
104+
var method = group.GetType().GetMethod("IndexOf", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
105+
int index = (int)method.Invoke(group, new object[] {sizeObj}) ;
106+
107+
var builtinList = group.GetType().GetField("m_Builtin", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(group);
108+
109+
method = builtinList.GetType().GetMethod("Contains");
110+
if ((bool)method.Invoke(builtinList, new object[] { sizeObj }))
111+
return index;
112+
113+
method = group.GetType().GetMethod("GetBuiltinCount");
114+
index += (int)method.Invoke(group, new object[] { });
115+
116+
return index;
88117
}
89118

90119
static object NewSizeObj(int width, int height)
@@ -95,7 +124,7 @@ static object NewSizeObj(int width, int height)
95124
T.GetProperty("sizeType", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(sizeObj, 1, new object[0] { });
96125
T.GetProperty("width", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(sizeObj, width, new object[0] { });
97126
T.GetProperty("height", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(sizeObj, height, new object[0] { });
98-
T.GetProperty("baseText", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(sizeObj, string.Format("FR:{0}x{1}", width, height), new object[0] { });
127+
T.GetProperty("baseText", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance).SetValue(sizeObj, "(Recording resolution)", new object[0] { });
99128

100129
return sizeObj;
101130
}
@@ -113,7 +142,7 @@ public static object AddSize(int width, int height)
113142

114143
public static void SelectSize(object size)
115144
{
116-
var index = IndexOf(size) + 7;
145+
var index = IndexOf(size);
117146

118147
var gameView = GetMainGameView();
119148
var obj = gameView.GetType().GetMethod("SizeSelectionCallback", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

0 commit comments

Comments
 (0)