diff options
Diffstat (limited to 'Third_Party/at.pimaker.ltcgi/Runtime')
6 files changed, 2707 insertions, 0 deletions
diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_Assembly.asmdef b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_Assembly.asmdef new file mode 100644 index 0000000..91bce4f --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_Assembly.asmdef @@ -0,0 +1,23 @@ +{ + "name": "LTCGI_Assembly", + "references": [ + "GUID:99835874ee819da44948776e0df4ff1d", + "GUID:f70a94b0bedfa8ec50ed757f72032810", + "GUID:a1653399f63795746b1857281d1e400d" + ], + "includePlatforms": [ + "Android", + "Editor", + "LinuxStandalone64", + "WebGL", + "WindowsStandalone64" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +}
\ No newline at end of file diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_AssemblyUdon.asset b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_AssemblyUdon.asset new file mode 100644 index 0000000..75d2304 --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_AssemblyUdon.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5136146375e9a0a498a72a0091b40cc1, type: 3} + m_Name: LTCGI_AssemblyUdon + m_EditorClassIdentifier: + sourceAssembly: {fileID: 5897886265953266890, guid: f16c18940d95fd44a911829bf5e37070, + type: 3} diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.asset b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.asset new file mode 100644 index 0000000..0999032 --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.asset @@ -0,0 +1,221 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: LTCGI_ExampleToggle + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 249e288d0fd67ea43b1daba53b5cadbc, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 861eec196aa5ee449a74f3e1d2b4aff7, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 1 + scriptID: 9036805435049282693 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: LTCGI_Controller + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: LTCGI_Controller + - Name: <UserType>k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: LTCGI_UdonAdapter, LTCGI_Assembly + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 7 + Data: 4|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 6|UnityEngine.Serialization.FormerlySerializedAsAttribute, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - 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: StartingState + - Name: $v + Entry: 7 + Data: 7|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: StartingState + - Name: <UserType>k__BackingField + Entry: 7 + Data: 8|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 8 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 9|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: state + - Name: $v + Entry: 7 + Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: state + - Name: <UserType>k__BackingField + Entry: 9 + Data: 8 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 8 + - 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: 11|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: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.cs b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.cs new file mode 100644 index 0000000..290f498 --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_ExampleToggle.cs @@ -0,0 +1,32 @@ +#if UDONSHARP +using UdonSharp; +using UnityEngine.Serialization; + +// NOTE: This script has to be in the "_LTCGI/Scripts" folder, *or* reference +// the "LTCGI_AssemblyUdon" to allow it to use the "LTCGI_UdonAdapter" type! + +[UdonBehaviourSyncMode(BehaviourSyncMode.None)] +public class LTCGI_ExampleToggle : UdonSharpBehaviour +{ + // set this to your controller object (specifically the adapter object): + [FormerlySerializedAs("Adapter")] + public LTCGI_UdonAdapter LTCGI_Controller; + + // set this however you want: + public bool StartingState = true; + private bool state; + + void Start() + { + state = StartingState; + LTCGI_Controller._SetGlobalState(state); + } + + // you can make this a UI event as well! + public override void Interact() + { + state = !state; + LTCGI_Controller._SetGlobalState(state); + } +} +#endif
\ No newline at end of file diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.asset b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.asset new file mode 100644 index 0000000..8a8d8ba --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.asset @@ -0,0 +1,1970 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: LTCGI_UdonAdapter + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 5bd39a6c4bb253e4087c7b2b92d17eb3, + type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: 0007c466735eb8848af37d146d777ba4, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 1 + hasInteractEvent: 0 + scriptID: 6231842042114027118 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 38 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: DEBUG_ReverseUnityLightmapST + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: DEBUG_ReverseUnityLightmapST + - Name: <UserType>k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Boolean, mscorlib + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 3 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 4|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: _Renderers + - Name: $v + Entry: 7 + Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _Renderers + - Name: <UserType>k__BackingField + Entry: 7 + Data: 6|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Renderer[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 6 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 7|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 8|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: Internal Data (auto-generated, do not edit!) + - Name: + Entry: 8 + Data: + - 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: _LTCGI_DefaultLightmap + - Name: $v + Entry: 7 + Data: 9|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_DefaultLightmap + - Name: <UserType>k__BackingField + Entry: 7 + Data: 10|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Texture2D, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 10 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 11|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: _LTCGI_Lightmaps + - Name: $v + Entry: 7 + Data: 12|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Lightmaps + - Name: <UserType>k__BackingField + Entry: 7 + Data: 13|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Texture2D[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 13 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 14|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: _LTCGI_LightmapST + - Name: $v + Entry: 7 + Data: 15|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_LightmapST + - Name: <UserType>k__BackingField + Entry: 7 + Data: 16|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Vector4[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 17|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: _LTCGI_Mask + - Name: $v + Entry: 7 + Data: 18|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Mask + - Name: <UserType>k__BackingField + Entry: 7 + Data: 19|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Single[], mscorlib + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 19 + - 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: true + - 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: _LTCGI_MaskAvatars + - Name: $v + Entry: 7 + Data: 21|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_MaskAvatars + - Name: <UserType>k__BackingField + Entry: 9 + Data: 19 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 19 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 22|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: _LTCGI_LightmapMult + - Name: $v + Entry: 7 + Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_LightmapMult + - Name: <UserType>k__BackingField + Entry: 7 + Data: 24|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Vector4, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 24 + - 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: true + - 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: _Screens + - Name: $v + Entry: 7 + Data: 26|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _Screens + - Name: <UserType>k__BackingField + Entry: 7 + Data: 27|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.GameObject[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 27 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 28|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: _LTCGI_lut1 + - Name: $v + Entry: 7 + Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_lut1 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 10 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 10 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 30|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: _LTCGI_lut2 + - Name: $v + Entry: 7 + Data: 31|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_lut2 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 10 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 10 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 32|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: _LTCGI_LODs + - Name: $v + Entry: 7 + Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_LODs + - Name: <UserType>k__BackingField + Entry: 7 + Data: 34|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Texture[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 34 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 35|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: _LTCGI_Static_LODs_0 + - Name: $v + Entry: 7 + Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Static_LODs_0 + - Name: <UserType>k__BackingField + Entry: 7 + Data: 37|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Texture2DArray, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 37 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 38|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: _LTCGI_Static_LODs_1 + - Name: $v + Entry: 7 + Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Static_LODs_1 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 37 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 37 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 40|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: _LTCGI_Static_LODs_2 + - Name: $v + Entry: 7 + Data: 41|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Static_LODs_2 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 37 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 37 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 42|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: _LTCGI_Static_LODs_3 + - Name: $v + Entry: 7 + Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Static_LODs_3 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 37 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 37 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 44|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: _LTCGI_Vertices_0 + - Name: $v + Entry: 7 + Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_0 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 46|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: _LTCGI_Vertices_1 + - Name: $v + Entry: 7 + Data: 47|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_1 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 48|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: _LTCGI_Vertices_2 + - Name: $v + Entry: 7 + Data: 49|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_2 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 50|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: _LTCGI_Vertices_3 + - Name: $v + Entry: 7 + Data: 51|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_3 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 52|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: _LTCGI_Vertices_0t + - Name: $v + Entry: 7 + Data: 53|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_0t + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: 54|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: _LTCGI_Vertices_1t + - Name: $v + Entry: 7 + Data: 55|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_1t + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: 56|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: _LTCGI_Vertices_2t + - Name: $v + Entry: 7 + Data: 57|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_2t + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: 58|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: _LTCGI_Vertices_3t + - Name: $v + Entry: 7 + Data: 59|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_Vertices_3t + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: 60|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: _LTCGI_ExtraData + - Name: $v + Entry: 7 + Data: 61|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ExtraData + - Name: <UserType>k__BackingField + Entry: 9 + Data: 16 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 16 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 62|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: _LTCGI_static_uniforms + - Name: $v + Entry: 7 + Data: 63|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_static_uniforms + - Name: <UserType>k__BackingField + Entry: 9 + Data: 10 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 10 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 64|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: _LTCGI_ScreenTransforms + - Name: $v + Entry: 7 + Data: 65|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ScreenTransforms + - Name: <UserType>k__BackingField + Entry: 7 + Data: 66|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.Transform[], UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 66 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 67|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: _LTCGI_ScreenCount + - Name: $v + Entry: 7 + Data: 68|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ScreenCount + - Name: <UserType>k__BackingField + Entry: 7 + Data: 69|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32, mscorlib + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 70|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: _LTCGI_ScreenCountMaskedAvatars + - Name: $v + Entry: 7 + Data: 71|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ScreenCountMaskedAvatars + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 72|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: _LTCGI_ScreenCountMasked + - Name: $v + Entry: 7 + Data: 73|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ScreenCountMasked + - Name: <UserType>k__BackingField + Entry: 7 + Data: 74|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: System.Int32[], mscorlib + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 74 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 75|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: _LTCGI_ScreenCountDynamic + - Name: $v + Entry: 7 + Data: 76|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _LTCGI_ScreenCountDynamic + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 77|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: BlurCRTInput + - Name: $v + Entry: 7 + Data: 78|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: BlurCRTInput + - Name: <UserType>k__BackingField + Entry: 7 + Data: 79|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.CustomRenderTexture, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 79 + - 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: true + - Name: _fieldAttributes + Entry: 7 + Data: 80|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: prop_Udon_LTCGI_ExtraData + - Name: $v + Entry: 7 + Data: 81|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: prop_Udon_LTCGI_ExtraData + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: 82|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: prop_Udon_LTCGI_Vertices_0 + - Name: $v + Entry: 7 + Data: 83|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: prop_Udon_LTCGI_Vertices_0 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: 84|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: prop_Udon_LTCGI_Vertices_1 + - Name: $v + Entry: 7 + Data: 85|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: prop_Udon_LTCGI_Vertices_1 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: 86|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: prop_Udon_LTCGI_Vertices_2 + - Name: $v + Entry: 7 + Data: 87|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: prop_Udon_LTCGI_Vertices_2 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: 88|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: prop_Udon_LTCGI_Vertices_3 + - Name: $v + Entry: 7 + Data: 89|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: prop_Udon_LTCGI_Vertices_3 + - Name: <UserType>k__BackingField + Entry: 9 + Data: 69 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 69 + - 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: 90|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: _globalState + - Name: $v + Entry: 7 + Data: 91|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: <Name>k__BackingField + Entry: 1 + Data: _globalState + - Name: <UserType>k__BackingField + Entry: 9 + Data: 3 + - Name: <SystemType>k__BackingField + Entry: 9 + Data: 3 + - 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: 92|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: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.cs b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.cs new file mode 100644 index 0000000..857707e --- /dev/null +++ b/Third_Party/at.pimaker.ltcgi/Runtime/LTCGI_UdonAdapter.cs @@ -0,0 +1,445 @@ +using System; +using UnityEngine; + +#if UDONSHARP +using UdonSharp; +using VRC.SDKBase; +using VRC.Udon; +#endif + +#if COMPILER_UDONSHARP +using GlobalShader = VRC.SDKBase.VRCShader; +#else +using GlobalShader = UnityEngine.Shader; +#endif + +#if UDONSHARP +[UdonBehaviourSyncMode(BehaviourSyncMode.None)] +public class LTCGI_UdonAdapter : UdonSharpBehaviour +#else +// FIXME: This makes the filename mismatch the class name +// - I think Unity doesn't like that? +public class LTCGI_RuntimeAdapter : MonoBehaviour +#endif + +{ + // perhaps fixes some lightmap issues with static batching? + public bool DEBUG_ReverseUnityLightmapST = false; + + [Header("Internal Data (auto-generated, do not edit!)")] + public Renderer[] _Renderers; + public Texture2D _LTCGI_DefaultLightmap; + public Texture2D[] _LTCGI_Lightmaps; + public Vector4[] _LTCGI_LightmapST; + public float[] _LTCGI_Mask; + public float[] _LTCGI_MaskAvatars; + public Vector4 _LTCGI_LightmapMult; + public GameObject[] _Screens; + public Texture2D _LTCGI_lut1, _LTCGI_lut2; + public Texture[] _LTCGI_LODs; + public Texture2DArray _LTCGI_Static_LODs_0; + public Texture2DArray _LTCGI_Static_LODs_1; + public Texture2DArray _LTCGI_Static_LODs_2; + public Texture2DArray _LTCGI_Static_LODs_3; + public Vector4[] _LTCGI_Vertices_0, _LTCGI_Vertices_1, _LTCGI_Vertices_2, _LTCGI_Vertices_3; + private Vector4[] _LTCGI_Vertices_0t, _LTCGI_Vertices_1t, _LTCGI_Vertices_2t, _LTCGI_Vertices_3t; + public Vector4[] _LTCGI_ExtraData; + public Texture2D _LTCGI_static_uniforms; + public Transform[] _LTCGI_ScreenTransforms; + public int _LTCGI_ScreenCount; + public int _LTCGI_ScreenCountMaskedAvatars; + public int[] _LTCGI_ScreenCountMasked; + public int _LTCGI_ScreenCountDynamic; + public CustomRenderTexture BlurCRTInput; + + private int prop_Udon_LTCGI_ExtraData; + private int prop_Udon_LTCGI_Vertices_0; + private int prop_Udon_LTCGI_Vertices_1; + private int prop_Udon_LTCGI_Vertices_2; + private int prop_Udon_LTCGI_Vertices_3; + + void Start() + { + Debug.Log("LTCGI adapter start"); + + if (DEBUG_ReverseUnityLightmapST) + { + Debug.LogWarning("WARNING: LTCGI DEBUG_ReverseUnityLightmapST is active! This is probably not what you want!"); + } + + if (_LTCGI_ScreenCount == 0) + { + Debug.LogError("LTCGI Adapter: No screens found! Try deleting the LTCGI_UdonAdapter component from the controller object and clicking 'Force Update' on the controller if this is unexpected."); + this.enabled = false; + return; + } + + var stopwatch = new System.Diagnostics.Stopwatch(); + stopwatch.Start(); + _Initialize(); + stopwatch.Stop(); + + var udon = false; +#if UDONSHARP + udon = true; +#endif + Debug.Log($"LTCGI adapter started for {_LTCGI_ScreenCount} ({_LTCGI_ScreenCountDynamic} dynamic) screens (max: {_LTCGI_Vertices_0t.Length}), {_Renderers.Length} renderers, GlobalShader mode, udon: {udon}, took: {stopwatch.ElapsedMilliseconds}ms"); + + if (_LTCGI_ScreenCountDynamic == 0 || _Renderers.Length == 0) + { + Debug.Log("LTCGI adapter going to sleep 😴"); + this.enabled = false; + } + } + + public void _Initialize() + { + // must be full length (16) otherwise Unity will allocate too little GPU memory and this may break between worlds that use different amounts of screens + // pretty cursed, but w/e, keep in mind that this means vrc worlds that adjust the max cap above 16 will most likely not work in-game + var maxScreens = _LTCGI_Vertices_0.Length; + _LTCGI_Vertices_0t = new Vector4[maxScreens]; + _LTCGI_Vertices_1t = new Vector4[maxScreens]; + _LTCGI_Vertices_2t = new Vector4[maxScreens]; + _LTCGI_Vertices_3t = new Vector4[maxScreens]; + + for (int i = 0; i < _LTCGI_ScreenCount; i++) + { + var transform = _LTCGI_ScreenTransforms[i]; + _LTCGI_Vertices_0t[i] = CalcTransform(_LTCGI_Vertices_0[i], transform); + _LTCGI_Vertices_1t[i] = CalcTransform(_LTCGI_Vertices_1[i], transform); + _LTCGI_Vertices_2t[i] = CalcTransform(_LTCGI_Vertices_2[i], transform); + _LTCGI_Vertices_3t[i] = CalcTransform(_LTCGI_Vertices_3[i], transform); + } + + // Set global material properties (anything not overridden below is for avatar support) + for (int j = 0; j < _LTCGI_LODs.Length; j++) + if (_LTCGI_LODs[j] != null) + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD" + j), _LTCGI_LODs[j]); + + if (_LTCGI_Static_LODs_0 != null) + { + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD0_arr"), _LTCGI_Static_LODs_0); + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD1_arr"), _LTCGI_Static_LODs_1); + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD2_arr"), _LTCGI_Static_LODs_2); + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD3_arr"), _LTCGI_Static_LODs_3); + } + + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_lut1"), _LTCGI_lut1); + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_lut2"), _LTCGI_lut2); + + GlobalShader.SetGlobalFloatArray(GlobalShader.PropertyToID("_Udon_LTCGI_Mask"), _LTCGI_MaskAvatars); + #if COMPILER_UDONSHARP + GlobalShader.SetGlobalInteger(GlobalShader.PropertyToID("_Udon_LTCGI_ScreenCount"), _LTCGI_ScreenCountMaskedAvatars); + #else + GlobalShader.SetGlobalInt(GlobalShader.PropertyToID("_Udon_LTCGI_ScreenCount"), _LTCGI_ScreenCountMaskedAvatars); + #endif + + _SetGlobalState(true); + + if (_LTCGI_static_uniforms != null) + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_static_uniforms"), _LTCGI_static_uniforms); + if (_LTCGI_DefaultLightmap != null) + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Lightmap"), _LTCGI_DefaultLightmap); + + // Set per world-renderer overrides + var maskSubset = new float[_LTCGI_ScreenCount]; + for (int i = 0; i < _Renderers.Length; i++) + { + var r = _Renderers[i]; + var block = new MaterialPropertyBlock(); + if (r.HasPropertyBlock()) + r.GetPropertyBlock(block); + + Array.Copy(_LTCGI_Mask, i * _LTCGI_ScreenCount, maskSubset, 0, _LTCGI_ScreenCount); + block.SetFloatArray("_Udon_LTCGI_Mask", maskSubset); + block.SetInt("_Udon_LTCGI_ScreenCount", _LTCGI_ScreenCountMasked[i]); + + if (_LTCGI_Lightmaps[i] != null) + block.SetTexture("_Udon_LTCGI_Lightmap", _LTCGI_Lightmaps[i]); + block.SetVector("_Udon_LTCGI_LightmapMult", _LTCGI_LightmapMult); + var lmst = _LTCGI_LightmapST[i]; + if (DEBUG_ReverseUnityLightmapST) + { + // workaround? + lmst.x /= r.lightmapScaleOffset.x; + lmst.y /= r.lightmapScaleOffset.y; + lmst.z -= r.lightmapScaleOffset.z; + lmst.w -= r.lightmapScaleOffset.w; + } + block.SetVector("_Udon_LTCGI_LightmapST", lmst); + + r.SetPropertyBlock(block); + } + + prop_Udon_LTCGI_ExtraData = GlobalShader.PropertyToID("_Udon_LTCGI_ExtraData"); + prop_Udon_LTCGI_Vertices_0 = GlobalShader.PropertyToID("_Udon_LTCGI_Vertices_0"); + prop_Udon_LTCGI_Vertices_1 = GlobalShader.PropertyToID("_Udon_LTCGI_Vertices_1"); + prop_Udon_LTCGI_Vertices_2 = GlobalShader.PropertyToID("_Udon_LTCGI_Vertices_2"); + prop_Udon_LTCGI_Vertices_3 = GlobalShader.PropertyToID("_Udon_LTCGI_Vertices_3"); + + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_ExtraData, _LTCGI_ExtraData); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_0, _LTCGI_Vertices_0t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_1, _LTCGI_Vertices_1t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_2, _LTCGI_Vertices_2t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_3, _LTCGI_Vertices_3t); + } + + private Vector4 CalcTransform(Vector4 i, Transform t) + { + var ret = (Vector4)t.TransformPoint((Vector3)i); + ret.w = i.w; // keep UV the same + return ret; + } + + void Update() + { + // update vertex data + for (int i = 0; i < _LTCGI_ScreenCountDynamic /* only run for dynamic screens */; i++) + { + var transform = _LTCGI_ScreenTransforms[i]; + _LTCGI_Vertices_0t[i] = CalcTransform(_LTCGI_Vertices_0[i], transform); + _LTCGI_Vertices_1t[i] = CalcTransform(_LTCGI_Vertices_1[i], transform); + _LTCGI_Vertices_2t[i] = CalcTransform(_LTCGI_Vertices_2[i], transform); + _LTCGI_Vertices_3t[i] = CalcTransform(_LTCGI_Vertices_3[i], transform); + } + + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_ExtraData, _LTCGI_ExtraData); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_0, _LTCGI_Vertices_0t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_1, _LTCGI_Vertices_1t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_2, _LTCGI_Vertices_2t); + GlobalShader.SetGlobalVectorArray(prop_Udon_LTCGI_Vertices_3, _LTCGI_Vertices_3t); + } + + // See the docs for more info: + // https://github.com/PiMaker/ltcgi/wiki#udonsharp-api + + public int _GetIndex(GameObject screen) + { + var idx = Array.IndexOf(_Screens, screen); + if (idx != -1) + { + // if (idx >= _LTCGI_ScreenCountDynamic) + // { + // Debug.LogError("LTCGI: Cannot index non-dynamic object " + screen.name); + // return -1; + // } + + return idx; + } + else + { + Debug.LogError("LTCGI: Cannot index unregistered object " + (screen == null ? "<null>" : screen.name)); + return -1; + } + } + + public Color _GetColor(int screen) + { + if (screen < 0) return Color.black; + var data = _LTCGI_ExtraData[screen]; + return new Color(data.x, data.y, data.z); + } + + public void _SetColor(int screen, Color color) + { + if (screen < 0) return; + _LTCGI_ExtraData[screen].x = color.r; + _LTCGI_ExtraData[screen].y = color.g; + _LTCGI_ExtraData[screen].z = color.b; + + if (!this.enabled) Update(); + } + + public void _SetVideoTexture(Texture texture) + { + BlurCRTInput.material.SetTexture("_MainTex", texture); + GlobalShader.SetGlobalTexture(GlobalShader.PropertyToID("_Udon_LTCGI_Texture_LOD0"), texture); + } + + private uint getFlags(int screen) + { + var raw = _LTCGI_ExtraData[screen].w; + var buffer = new byte[4]; + WriteSingle(raw, buffer, 0); + return ReadUInt32(buffer, 0); + } + + private void setFlags(int screen, uint flags) + { + var buffer = new byte[4]; + WriteUInt32(flags, buffer, 0); + var raw = ReadSingle(buffer, 0); + _LTCGI_ExtraData[screen].w = raw; + } + + public void _SetTexture(int screen, uint index) + { + if (screen < 0) return; + var flags = getFlags(screen); + flags &= ~(0xfU << 4); + flags |= (index & 0xf) << 4; + setFlags(screen, flags); + + if (!this.enabled) Update(); + } + + private bool _globalState = false; + public void _SetGlobalState(bool enabled) + { + float fstate = enabled ? 1.0f : 0.0f; + GlobalShader.SetGlobalFloat(GlobalShader.PropertyToID("_Udon_LTCGI_GlobalEnable"), fstate); + _globalState = enabled; + } + public bool _GetGlobalState() => _globalState; + + // Below code from: https://github.com/Xytabich/UNet + + private const int BIT8 = 8; + private const int BIT16 = 16; + private const int BIT24 = 24; + private const int BIT32 = 32; + private const int BIT40 = 40; + private const int BIT48 = 48; + private const int BIT56 = 56; + + private const uint FLOAT_SIGN_BIT = 0x80000000; + private const uint FLOAT_EXP_MASK = 0x7F800000; + private const uint FLOAT_FRAC_MASK = 0x007FFFFF; + + /// <summary> + /// Writes unsigned 32-bit integer (<see cref="uint"/>) + /// </summary> + /// <remarks>Takes 4 bytes</remarks> + /// <param name="buffer">Target buffer</param> + /// <param name="index">Index in the buffer at which to start writing data</param> + /// <returns>Size in bytes</returns> + public int WriteUInt32(uint value, byte[] buffer, int index) + { + buffer[index] = (byte)((value >> BIT24) & 255u); + index++; + buffer[index] = (byte)((value >> BIT16) & 255u); + index++; + buffer[index] = (byte)((value >> BIT8) & 255u); + index++; + buffer[index] = (byte)(value & 255u); + return 4; + } + + /// <summary> + /// Reads unsigned 32-bit integer (<see cref="uint"/>) + /// </summary> + /// <remarks>Takes 4 bytes</remarks> + /// <param name="buffer">Target buffer</param> + /// <param name="index">Index in the buffer where to start reading data</param> + public uint ReadUInt32(byte[] buffer, int index) + { + uint value = 0; + value |= (uint)buffer[index] << BIT24; + index++; + value |= (uint)buffer[index] << BIT16; + index++; + value |= (uint)buffer[index] << BIT8; + index++; + value |= (uint)buffer[index]; + return value; + } + + /// <summary> + /// Writes single-precision floating-point number + /// </summary> + /// <remarks>Takes 4 bytes</remarks> + /// <param name="buffer">Target buffer</param> + /// <param name="index">Index in the buffer at which to start writing data</param> + /// <returns>Size in bytes</returns> + public int WriteSingle(float value, byte[] buffer, int index) + { + uint tmp = 0; + if(float.IsNaN(value)) + { + tmp = FLOAT_EXP_MASK | FLOAT_FRAC_MASK; + } + else if(float.IsInfinity(value)) + { + tmp = FLOAT_EXP_MASK; + if(float.IsNegativeInfinity(value)) tmp |= FLOAT_SIGN_BIT; + } + else if(value != 0f) + { + if(value < 0f) + { + value = -value; + tmp |= FLOAT_SIGN_BIT; + } + + int exp = 0; + bool normal = true; + while(value >= 2f) + { + value *= 0.5f; + exp++; + } + while(value < 1f) + { + if(exp == -126) + { + normal = false; + break; + } + value *= 2f; + exp--; + } + + if(normal) + { + value -= 1f; + exp += 127; + } + else exp = 0; + + tmp |= Convert.ToUInt32(exp << 23) & FLOAT_EXP_MASK; + tmp |= Convert.ToUInt32(value * (2 << 22)) & FLOAT_FRAC_MASK; + } + return WriteUInt32(tmp, buffer, index); + } + + /// <summary> + /// Reads single-precision floating-point number + /// </summary> + /// <remarks>Takes 4 bytes</remarks> + /// <param name="buffer">Target buffer</param> + /// <param name="index">Index in the buffer where to start reading data</param> + public float ReadSingle(byte[] buffer, int index) + { + uint value = ReadUInt32(buffer, index); + if(value == 0 || value == FLOAT_SIGN_BIT) return 0f; + + int exp = (int)((value & FLOAT_EXP_MASK) >> 23); + int frac = (int)(value & FLOAT_FRAC_MASK); + bool negate = (value & FLOAT_SIGN_BIT) == FLOAT_SIGN_BIT; + if(exp == 0xFF) + { + if(frac == 0) + { + return negate ? float.NegativeInfinity : float.PositiveInfinity; + } + return float.NaN; + } + + bool normal = exp != 0x00; + if(normal) exp -= 127; + else exp = -126; + + float result = frac / (float)(2 << 22); + if(normal) result += 1f; + + result *= Mathf.Pow(2, exp); + if(negate) result = -result; + return result; + } + + // extremely cursed compat stuff + #if !UDONSHARP + public void UpdateProxy() {} + public void ApplyProxyModifications() {} + #endif +}
\ No newline at end of file |
