Updates FrameDataLoader to reuse Textures

This commit is contained in:
Momo The Monster
2023-02-15 17:25:39 -08:00
parent 8757357580
commit 237b17fdb6
3 changed files with 175 additions and 43 deletions

File diff suppressed because one or more lines are too long

View File

@@ -44,25 +44,25 @@ MonoBehaviour:
Data: Data:
- Name: - Name:
Entry: 12 Entry: 12
Data: 9 Data: 11
- Name: - Name:
Entry: 7 Entry: 7
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: _imageDownloader Data: rgbUrl
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: _imageDownloader Data: rgbUrl
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 3|System.RuntimeType, mscorlib Data: 3|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: VRC.SDK3.Image.VRCImageDownloader, VRCSDK3 Data: VRC.SDKBase.VRCUrl[], VRCSDKBase
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -80,7 +80,7 @@ MonoBehaviour:
Data: Data:
- Name: <IsSerialized>k__BackingField - Name: <IsSerialized>k__BackingField
Entry: 5 Entry: 5
Data: false Data: true
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 Entry: 7
Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib Data: 4|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -104,19 +104,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: udonEventReceiver Data: stringUrl
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 5|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: udonEventReceiver Data: stringUrl
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 6|System.RuntimeType, mscorlib Data: 6|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: VRC.Udon.Common.Interfaces.IUdonEventReceiver, VRC.Udon.Common Data: VRC.SDKBase.VRCUrl, VRCSDKBase
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -134,7 +134,7 @@ MonoBehaviour:
Data: Data:
- Name: <IsSerialized>k__BackingField - Name: <IsSerialized>k__BackingField
Entry: 5 Entry: 5
Data: false Data: true
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 Entry: 7
Data: 7|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib Data: 7|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -158,19 +158,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: rgbUrl Data: renderer
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 8|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 8|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: rgbUrl Data: renderer
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 9|System.RuntimeType, mscorlib Data: 9|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: VRC.SDKBase.VRCUrl[], VRCSDKBase Data: UnityEngine.Renderer, UnityEngine.CoreModule
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -212,19 +212,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: stringUrl Data: field
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 11|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 11|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: stringUrl Data: field
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 12|System.RuntimeType, mscorlib Data: 12|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: VRC.SDKBase.VRCUrl, VRCSDKBase Data: UnityEngine.UI.Text, UnityEngine.UI
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -266,19 +266,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: renderer Data: photoDurationSeconds
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 14|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: renderer Data: photoDurationSeconds
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 15|System.RuntimeType, mscorlib Data: 15|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: UnityEngine.Renderer, UnityEngine.CoreModule Data: System.Single, mscorlib
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -320,19 +320,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: field Data: _loadedIndex
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 17|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 17|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: field Data: _loadedIndex
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 18|System.RuntimeType, mscorlib Data: 18|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: UnityEngine.UI.Text, UnityEngine.UI Data: System.Int32, mscorlib
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -350,7 +350,7 @@ MonoBehaviour:
Data: Data:
- Name: <IsSerialized>k__BackingField - Name: <IsSerialized>k__BackingField
Entry: 5 Entry: 5
Data: true Data: false
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 Entry: 7
Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib Data: 19|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -374,19 +374,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: photoDurationSeconds Data: _imageDownloader
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 20|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: photoDurationSeconds Data: _imageDownloader
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 21|System.RuntimeType, mscorlib Data: 21|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: System.Single, mscorlib Data: VRC.SDK3.Image.VRCImageDownloader, VRCSDK3
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -404,7 +404,7 @@ MonoBehaviour:
Data: Data:
- Name: <IsSerialized>k__BackingField - Name: <IsSerialized>k__BackingField
Entry: 5 Entry: 5
Data: true Data: false
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 Entry: 7
Data: 22|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib Data: 22|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -428,19 +428,19 @@ MonoBehaviour:
Data: Data:
- Name: $k - Name: $k
Entry: 1 Entry: 1
Data: _loadedIndex Data: udonEventReceiver
- Name: $v - Name: $v
Entry: 7 Entry: 7
Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor Data: 23|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField - Name: <Name>k__BackingField
Entry: 1 Entry: 1
Data: _loadedIndex Data: udonEventReceiver
- Name: <UserType>k__BackingField - Name: <UserType>k__BackingField
Entry: 7 Entry: 7
Data: 24|System.RuntimeType, mscorlib Data: 24|System.RuntimeType, mscorlib
- Name: - Name:
Entry: 1 Entry: 1
Data: System.Int32, mscorlib Data: VRC.Udon.Common.Interfaces.IUdonEventReceiver, VRC.Udon.Common
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
@@ -512,7 +512,7 @@ MonoBehaviour:
Data: Data:
- Name: <IsSerialized>k__BackingField - Name: <IsSerialized>k__BackingField
Entry: 5 Entry: 5
Data: true Data: false
- Name: _fieldAttributes - Name: _fieldAttributes
Entry: 7 Entry: 7
Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
@@ -531,6 +531,114 @@ MonoBehaviour:
- Name: - Name:
Entry: 8 Entry: 8
Data: Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: downloadsComplete
- Name: $v
Entry: 7
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: downloadsComplete
- Name: <UserType>k__BackingField
Entry: 7
Data: 30|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Boolean[], mscorlib
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 30
- 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: 31|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: _textures
- Name: $v
Entry: 7
Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: <Name>k__BackingField
Entry: 1
Data: _textures
- Name: <UserType>k__BackingField
Entry: 7
Data: 33|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.Texture2D[], UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: <SystemType>k__BackingField
Entry: 9
Data: 33
- 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: 34|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: - Name:
Entry: 13 Entry: 13
Data: Data:

View File

@@ -8,22 +8,36 @@ using VRC.Udon.Common.Interfaces;
public class FrameDataLoader : UdonSharpBehaviour public class FrameDataLoader : UdonSharpBehaviour
{ {
private VRCImageDownloader _imageDownloader;
private IUdonEventReceiver udonEventReceiver;
public VRCUrl[] rgbUrl; public VRCUrl[] rgbUrl;
public VRCUrl stringUrl; public VRCUrl stringUrl;
public Renderer renderer; public new Renderer renderer;
public Text field; public Text field;
public float photoDurationSeconds = 10f; public float photoDurationSeconds = 10f;
private int _loadedIndex = -1;
public string[] captions = new string[0]; // Private Variables
private int _loadedIndex = -1;
private VRCImageDownloader _imageDownloader;
private IUdonEventReceiver udonEventReceiver;
private string[] captions = new string[0];
private bool[] downloadsComplete;
private Texture2D[] _textures;
void Start() void Start()
{ {
// Cast self to the type needed for Image and String Loading methods
udonEventReceiver = (IUdonEventReceiver)this; udonEventReceiver = (IUdonEventReceiver)this;
// Track which downloads have been completed already
downloadsComplete = new bool[rgbUrl.Length];
_textures = new Texture2D[rgbUrl.Length];
// Construct Image Downloader to reuse
_imageDownloader = new VRCImageDownloader(); _imageDownloader = new VRCImageDownloader();
// Load Captions
VRCStringDownloader.LoadUrl(stringUrl, udonEventReceiver); VRCStringDownloader.LoadUrl(stringUrl, udonEventReceiver);
LoadNextRecursive(); LoadNextRecursive();
} }
@@ -37,10 +51,17 @@ public class FrameDataLoader : UdonSharpBehaviour
{ {
_loadedIndex = (int)(Networking.GetServerTimeInMilliseconds() / 1000f / photoDurationSeconds) % rgbUrl.Length; _loadedIndex = (int)(Networking.GetServerTimeInMilliseconds() / 1000f / photoDurationSeconds) % rgbUrl.Length;
var rgbInfo = new TextureInfo(); if (downloadsComplete[_loadedIndex])
rgbInfo.WrapModeU = TextureWrapMode.Mirror; {
rgbInfo.WrapModeV = TextureWrapMode.Mirror; renderer.sharedMaterial.mainTexture = _textures[_loadedIndex];
_imageDownloader.DownloadImage(rgbUrl[_loadedIndex], renderer.material, udonEventReceiver, rgbInfo); }
else
{
var rgbInfo = new TextureInfo();
rgbInfo.WrapModeU = TextureWrapMode.Mirror;
rgbInfo.WrapModeV = TextureWrapMode.Mirror;
_imageDownloader.DownloadImage(rgbUrl[_loadedIndex], renderer.material, udonEventReceiver, rgbInfo);
}
// Set caption if one is provided // Set caption if one is provided
if (_loadedIndex < captions.Length) if (_loadedIndex < captions.Length)
@@ -55,7 +76,6 @@ public class FrameDataLoader : UdonSharpBehaviour
public override void OnStringLoadSuccess(IVRCStringDownload result) public override void OnStringLoadSuccess(IVRCStringDownload result)
{ {
Debug.Log($"Loaded String, making Captions from {result.Result}");
captions = result.Result.Split('\n'); captions = result.Result.Split('\n');
} }
@@ -67,11 +87,15 @@ public class FrameDataLoader : UdonSharpBehaviour
public override void OnImageLoadSuccess(IVRCImageDownload result) public override void OnImageLoadSuccess(IVRCImageDownload result)
{ {
Debug.Log($"Image loaded: {result.SizeInMemoryBytes} bytes."); Debug.Log($"Image loaded: {result.SizeInMemoryBytes} bytes.");
downloadsComplete[_loadedIndex] = true;
_textures[_loadedIndex] = result.Result;
} }
public override void OnImageLoadError(IVRCImageDownload result) public override void OnImageLoadError(IVRCImageDownload result)
{ {
Debug.Log($"Image not loaded: {result.Error.ToString()}: {result.ErrorMessage}."); Debug.Log($"Image not loaded: {result.Error.ToString()}: {result.ErrorMessage}.");
downloadsComplete[_loadedIndex] = false;
} }
private void OnDestroy() private void OnDestroy()