summaryrefslogtreecommitdiffstats
path: root/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Scripts')
-rw-r--r--Scripts/DataDecoder.asset206
-rw-r--r--Scripts/DataDecoder.cs40
2 files changed, 214 insertions, 32 deletions
diff --git a/Scripts/DataDecoder.asset b/Scripts/DataDecoder.asset
index 26b5e70..b8be961 100644
--- a/Scripts/DataDecoder.asset
+++ b/Scripts/DataDecoder.asset
@@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3}
m_Name: DataDecoder
m_EditorClassIdentifier:
- serializedUdonProgramAsset: {fileID: 11400000, guid: b63b58ca1fad83a46a36891e4e44e019,
+ serializedUdonProgramAsset: {fileID: 11400000, guid: 38593ce802cabb24286414629c53980c,
type: 2}
udonAssembly:
assemblyError:
@@ -44,7 +44,7 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
- Data: 7
+ Data: 10
- Name:
Entry: 7
Data:
@@ -104,19 +104,19 @@ MonoBehaviour:
Data:
- Name: $k
Entry: 1
- Data: tileToCheck
+ Data: target
- Name: $v
Entry: 7
Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
- Data: tileToCheck
+ Data: target
- Name: <UserType>k__BackingField
Entry: 7
Data: 6|System.RuntimeType, mscorlib
- Name:
Entry: 1
- Data: System.Int32, mscorlib
+ Data: UnityEngine.MeshRenderer, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
@@ -166,11 +166,17 @@ MonoBehaviour:
Entry: 1
Data: tileSize
- Name: <UserType>k__BackingField
- Entry: 9
- Data: 6
+ Entry: 7
+ Data: 9|System.RuntimeType, mscorlib
+ - Name:
+ Entry: 1
+ Data: System.Int32, mscorlib
+ - Name:
+ Entry: 8
+ Data:
- Name: <SystemType>k__BackingField
Entry: 9
- Data: 6
+ Data: 9
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -185,7 +191,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
- Data: 9|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ Data: 10|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -209,13 +215,13 @@ MonoBehaviour:
Data: pixelData
- Name: $v
Entry: 7
- Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ Data: 11|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: pixelData
- Name: <UserType>k__BackingField
Entry: 7
- Data: 11|System.RuntimeType, mscorlib
+ Data: 12|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Color32[], UnityEngine.CoreModule
@@ -224,7 +230,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
- Data: 11
+ Data: 12
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -239,7 +245,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
- Data: 12|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ Data: 13|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -263,13 +269,13 @@ MonoBehaviour:
Data: hasData
- Name: $v
Entry: 7
- Data: 13|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: hasData
- Name: <UserType>k__BackingField
Entry: 7
- Data: 14|System.RuntimeType, mscorlib
+ Data: 15|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Boolean, mscorlib
@@ -278,7 +284,7 @@ MonoBehaviour:
Data:
- Name: <SystemType>k__BackingField
Entry: 9
- Data: 14
+ Data: 15
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -293,7 +299,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
- Data: 15|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ Data: 16|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -317,16 +323,16 @@ MonoBehaviour:
Data: readWidth
- Name: $v
Entry: 7
- Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ Data: 17|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: readWidth
- Name: <UserType>k__BackingField
Entry: 9
- Data: 6
+ Data: 9
- Name: <SystemType>k__BackingField
Entry: 9
- Data: 6
+ Data: 9
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -341,7 +347,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
- Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
@@ -365,16 +371,166 @@ MonoBehaviour:
Data: readHeight
- Name: $v
Entry: 7
- Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ Data: 19|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: readHeight
- Name: <UserType>k__BackingField
Entry: 9
- Data: 6
+ Data: 9
- Name: <SystemType>k__BackingField
Entry: 9
- Data: 6
+ Data: 9
+ - Name: <SyncMode>k__BackingField
+ Entry: 7
+ Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
+ - Name:
+ Entry: 6
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name: <IsSerialized>k__BackingField
+ Entry: 5
+ Data: false
+ - Name: _fieldAttributes
+ Entry: 7
+ Data: 20|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 7
+ Data:
+ - Name: $k
+ Entry: 1
+ Data: wallSyncTime
+ - Name: $v
+ Entry: 7
+ Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ - Name: <Name>k__BackingField
+ Entry: 1
+ Data: wallSyncTime
+ - Name: <UserType>k__BackingField
+ Entry: 7
+ Data: 22|System.RuntimeType, mscorlib
+ - Name:
+ Entry: 1
+ Data: System.Single, mscorlib
+ - Name:
+ Entry: 8
+ Data:
+ - Name: <SystemType>k__BackingField
+ Entry: 9
+ Data: 22
+ - Name: <SyncMode>k__BackingField
+ Entry: 7
+ Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
+ - Name:
+ Entry: 6
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name: <IsSerialized>k__BackingField
+ Entry: 5
+ Data: false
+ - Name: _fieldAttributes
+ Entry: 7
+ Data: 23|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 7
+ Data:
+ - Name: $k
+ Entry: 1
+ Data: logicalSyncTimeMs
+ - Name: $v
+ Entry: 7
+ Data: 24|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ - Name: <Name>k__BackingField
+ Entry: 1
+ Data: logicalSyncTimeMs
+ - Name: <UserType>k__BackingField
+ Entry: 9
+ Data: 22
+ - Name: <SystemType>k__BackingField
+ Entry: 9
+ Data: 22
+ - Name: <SyncMode>k__BackingField
+ Entry: 7
+ Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
+ - Name:
+ Entry: 6
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name: <IsSerialized>k__BackingField
+ Entry: 5
+ Data: false
+ - Name: _fieldAttributes
+ Entry: 7
+ Data: 25|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ - Name:
+ Entry: 12
+ Data: 0
+ - Name:
+ Entry: 13
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 8
+ Data:
+ - Name:
+ Entry: 7
+ Data:
+ - Name: $k
+ Entry: 1
+ Data: logicalTimeFactor
+ - Name: $v
+ Entry: 7
+ Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
+ - Name: <Name>k__BackingField
+ Entry: 1
+ Data: logicalTimeFactor
+ - Name: <UserType>k__BackingField
+ Entry: 9
+ Data: 22
+ - Name: <SystemType>k__BackingField
+ Entry: 9
+ Data: 22
- Name: <SyncMode>k__BackingField
Entry: 7
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
@@ -389,7 +545,7 @@ MonoBehaviour:
Data: false
- Name: _fieldAttributes
Entry: 7
- Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
+ Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
diff --git a/Scripts/DataDecoder.cs b/Scripts/DataDecoder.cs
index 96f4a7d..9715d81 100644
--- a/Scripts/DataDecoder.cs
+++ b/Scripts/DataDecoder.cs
@@ -9,7 +9,7 @@ using VRC.Udon.Common.Interfaces;
public class DataDecoder : UdonSharpBehaviour
{
public RenderTexture sourceTexture;
- public int tileToCheck = 0;
+ public MeshRenderer target;
private int tileSize = 8;
// Minimum size (in pixels) of a tile. This is shared with our tixl operator.
@@ -20,6 +20,13 @@ public class DataDecoder : UdonSharpBehaviour
private int readWidth;
private int readHeight;
+ // The wall time at which we last saw a sync event
+ private float wallSyncTime;
+ // The logical time corresponding to the last sync event
+ private float logicalSyncTimeMs;
+ // The rate at which logical time passes every second.
+ private float logicalTimeFactor;
+
// Top-level data types.
private const int kT_TimeSyncData = 0;
@@ -65,6 +72,14 @@ public class DataDecoder : UdonSharpBehaviour
ProcessTiles();
hasData = false;
}
+
+ if (wallSyncTime != null) {
+ float logicalTime = logicalSyncTimeMs * 0.001f +
+ logicalTimeFactor * (Time.time - wallSyncTime);
+ if (target != null) {
+ target.material.SetFloat("_Logical_Time", logicalTime);
+ }
+ }
}
public override void OnAsyncGpuReadbackComplete(VRCAsyncGPUReadbackRequest request)
@@ -146,10 +161,12 @@ public class DataDecoder : UdonSharpBehaviour
int checksumLocal = tileSize + lengthSubpixels;
Color32 parsed_first = GetTileRGB(0);
+ /*
Debug.Log($"First tile: {parsed_first.r} {parsed_first.g} {parsed_first.b}");
Debug.Log($"Parsed size {tileSize}");
Debug.Log($"Parsed length {lengthSubpixels}");
Debug.Log($"Parsed checksum {checksumRemote}");
+ */
// Collect all nibbles into a flat array. Note that these are still
// encoded.
@@ -173,10 +190,10 @@ public class DataDecoder : UdonSharpBehaviour
checksumLocal += (nibbles[i] >> 4) & 0x0F;
}
- Debug.Log($"Local checksum {checksumLocal}");
+ //Debug.Log($"Local checksum {checksumLocal}");
if (checksumLocal != checksumRemote) {
- Debug.LogWarning($"Checksums don't match. Attempting error recovery.");
+ //Debug.LogWarning($"Checksums don't match. Attempting error recovery.");
// Data is submitted in triplicate. Perform a bitwise majority vote
// with `(a & b) | (a & c) | (b & c)`.
@@ -219,8 +236,9 @@ public class DataDecoder : UdonSharpBehaviour
// See DataEncoder.cs. It puts the upper 4 bits before the lower 4 bits.
bytes[i] = (byte) ((nibbles[2*i] & 0xF0) | ((nibbles[2*i+1] & 0xF0) >> 4));
}
- Debug.Log($"Parsed {bytes.Length} bytes from {nibbles.Length} subpixels");
+ //Debug.Log($"Parsed {bytes.Length} bytes from {nibbles.Length} subpixels");
+ // Parse input.
int bOff = 0;
while (HasBytesLeft(bytes, bOff, 8)) {
int type = GetInt(ref bytes, ref bOff);
@@ -232,9 +250,17 @@ public class DataDecoder : UdonSharpBehaviour
switch (type) {
case kT_TimeSyncData:
{
- float lastSyncTimeMs = GetFloat(ref bytes, ref bOff);
- float measureTimeUs = GetFloat(ref bytes, ref bOff);
- Debug.Log($"Parsed time sync data: {lastSyncTimeMs} {measureTimeUs}");
+ float syncTimeMs = GetFloat(ref bytes, ref bOff);
+ float measureTime = GetFloat(ref bytes, ref bOff) * 1e-6f;
+ //Debug.Log($"Parsed time sync data: {syncTimeMs} {measureTimeUs}");
+
+ if (logicalSyncTimeMs != syncTimeMs) {
+ // Indicate that we have seen a sync event.
+ wallSyncTime = Time.time;
+ Debug.Log($"Sync time updated: t0={logicalSyncTimeMs} ms, k=${measureTime}");
+ }
+ logicalSyncTimeMs = syncTimeMs;
+ logicalTimeFactor = 1.0f / measureTime;
break;
}
}