diff --git a/Assets/Plugins/LibreMetaverse/Capabilities/CapsBase.cs b/Assets/Plugins/LibreMetaverse/Capabilities/CapsBase.cs index 7baa524..c297169 100644 --- a/Assets/Plugins/LibreMetaverse/Capabilities/CapsBase.cs +++ b/Assets/Plugins/LibreMetaverse/Capabilities/CapsBase.cs @@ -109,7 +109,6 @@ namespace OpenMetaverse.Http // Start the request for the remote server response IAsyncResult result = request.BeginGetResponse(GetResponse, state); - Debug.Log("testing"); // Register a timeout for the request ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, state, millisecondsTimeout, true); } diff --git a/Assets/Raindrop/UI/map/MapLogic.cs b/Assets/Raindrop/UI/map/MapLogic.cs index a048843..34dc15a 100644 --- a/Assets/Raindrop/UI/map/MapLogic.cs +++ b/Assets/Raindrop/UI/map/MapLogic.cs @@ -2,8 +2,10 @@ using Raindrop.Network; using Raindrop.UI; using System; +using System.Collections; using System.Collections.Generic; using System.IO; +using UniRx; using UnityEngine; using static Raindrop.MapDataPool; @@ -80,7 +82,7 @@ namespace Raindrop downloader.QueueDownlad( new Uri(string.Format("http://map.secondlife.com/map-{0}-{1}-{2}-objects.jpg", zoom, regX, regY)), - 3 * 1000, // was 20. + 20 * 1000, null, null, (request, response, responseData, error) => @@ -89,59 +91,38 @@ namespace Raindrop { try { - Debug.Log("done!"); + Debug.Log("fetching the texture was successful!"); //using (MemoryStream s = new MemoryStream(responseData)) //s of JPEG //{ - //lock (mapData.regionTiles) - //{ - // //decode http response data into texture2d - // MapTile tex = mapData.getUnusedTex(); - // tex.texture.LoadImage(responseData); //Image.FromStream(s); - // //mapData.regionTiles[handle] = - // //needRepaint = true; - //} + + lock (mapData.regionTiles) + { + //decode http response data into texture2d + MapTile tex = mapData.getUnusedTex(); + + //run jpeg decoding on the main thread, for now. + MainThreadDispatcher.StartCoroutine(TestAsync(tex, responseData)); + + + //Image.FromStream(s); + //mapData.regionTiles[handle] = + //needRepaint = true; + + mapData.regionTiles.Add( handle,tex); + } + //} + + } + catch (Exception e) + { + Debug.LogError(e.Message); } - catch { } } } ); - - //downloader.QueueDownlad( - // new Uri(string.Format("http://map.secondlife.com/map-{0}-{1}-{2}-objects.jpg", zoom, regX, regY)), - // 3 * 1000, // was 20. - // null, - // null, - // (request, response, responseData, error) => - // { - // if (error == null && responseData != null) - // { - // try - // { - // Debug.Log("done!"); - // //using (MemoryStream s = new MemoryStream(responseData)) //s of JPEG - // //{ - // //lock (mapData.regionTiles) - // //{ - // // //decode http response data into texture2d - // // MapTile tex = mapData.getUnusedTex(); - // // tex.texture.LoadImage(responseData); //Image.FromStream(s); - // // //mapData.regionTiles[handle] = - // // //needRepaint = true; - // //} - // //} - // } - // catch { } - // } - // } - //); - - - - - lock (mapData.regionTiles) { mapData.regionTiles[handle] = null; @@ -151,6 +132,23 @@ namespace Raindrop } } + private IEnumerator TestAsync(MapTile tex, byte[] responseData) + { + try + { + bool success = tex.texture.LoadImage(responseData); + + } + catch (Exception w) + { + Debug.Log("decode the texture failed : " + w.Message); + } + Debug.Log("completed mainthread async texture Decode."); + + yield return null; + + } + // get image from cache or asset manager. returns tex2D. // should only be used for the minimap. Use http map API fetch for normal map. diff --git a/Assets/Raindrop/UI/testing/MapViewer.cs b/Assets/Raindrop/UI/testing/MapViewer.cs index 9de979e..2db747d 100644 --- a/Assets/Raindrop/UI/testing/MapViewer.cs +++ b/Assets/Raindrop/UI/testing/MapViewer.cs @@ -39,8 +39,7 @@ public class MapViewer : MonoBehaviour System.Threading.Timer repaint; private void Awake() { - //in main thread, before all uses. - //BetterStreamingAssets.Initialize(); + mapFetcher = new MapLogic.MapFetcher(); } @@ -78,7 +77,10 @@ public class MapViewer : MonoBehaviour ulong handle = mapMover.GetLookAt(); int zoom = (int)zoomSlider.value; // how 2 convert look at floats into uints? (uints are gridpos * 256) - mapFetcher.GetRegionTileExternal(handle, zoom); + if (mapFetcher.GetMapTile(handle, 1) == null) //hack for now. + { + mapFetcher.GetRegionTileExternal(handle, 1); + } needRepaint = true; @@ -86,6 +88,8 @@ public class MapViewer : MonoBehaviour return; } + + // 1. checks if repaint is needed 2. proceeds to get the view-ablemaptiles 3. draws these subset of tiles. private void drawImage( ) { onRefresh(); //hacky @@ -99,7 +103,11 @@ public class MapViewer : MonoBehaviour } ulong handle = mapMover.GetLookAt(); MapTile tex = mapFetcher.GetMapTile(handle, 1); - iv.setRawImage(tex.texture); + + if (tex != null) + { + iv.setRawImage(tex.texture); + } Debug.Log("drew images."); } } diff --git a/Assets/Raindrop/UI/testing/TestTextureFetcher.cs b/Assets/Raindrop/UI/testing/TestTextureFetcher.cs index aeb0423..2e3b8b0 100644 --- a/Assets/Raindrop/UI/testing/TestTextureFetcher.cs +++ b/Assets/Raindrop/UI/testing/TestTextureFetcher.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; +using UniRx; using UnityEngine; namespace Raindrop @@ -15,11 +16,11 @@ namespace Raindrop { [SerializeField] public MapLogic.MapFetcher mapFetcher; //fetching logic + pooling data here - + private void Awake() { - + MainThreadDispatcher.Initialize(); mapFetcher = new MapLogic.MapFetcher(); } @@ -38,10 +39,5 @@ namespace Raindrop } - - //private void Finish(IAsyncResult result) - //{ - // Debug.Log("FINISH"); - //} } } diff --git a/Assets/Scenes/MapViewerTest.unity b/Assets/Scenes/MapViewerTest.unity index 3f1835e..44fe3ae 100644 --- a/Assets/Scenes/MapViewerTest.unity +++ b/Assets/Scenes/MapViewerTest.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_IndirectSpecularColor: {r: 0.44657826, g: 0.49641263, b: 0.57481676, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -593,6 +593,62 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 250150713} m_CullTransparentMesh: 1 +--- !u!1 &424157930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 424157932} + - component: {fileID: 424157931} + - component: {fileID: 424157933} + m_Layer: 0 + m_Name: mainthreaddispatcher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &424157931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424157930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3cd207057515c4438a31a6a7b548fe7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &424157932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424157930} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &424157933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424157930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 166e46cf3e858f546afb5238ba99e9bd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &442553463 GameObject: m_ObjectHideFlags: 0 @@ -697,7 +753,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2142188249} - m_RootOrder: 9 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -846,7 +902,7 @@ RectTransform: - {fileID: 2111508551} - {fileID: 1137755964} m_Father: {fileID: 2142188249} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1386,7 +1442,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2142188249} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1458,7 +1514,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &974969035 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1571,7 +1627,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2142188249} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1801,7 +1857,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2142188249} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1984,7 +2040,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 2142188249} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2442,7 +2498,7 @@ RectTransform: - {fileID: 527187305} - {fileID: 1717188576} m_Father: {fileID: 2142188249} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2532,7 +2588,7 @@ RectTransform: m_Children: - {fileID: 616826258} m_Father: {fileID: 2142188249} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2741,7 +2797,7 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 10, y: 0} m_Pivot: {x: 0.5, y: 0.5} @@ -2851,7 +2907,7 @@ RectTransform: m_Children: - {fileID: 1337363390} m_Father: {fileID: 2142188249} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -2979,12 +3035,12 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1836143117} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 250150714} - m_Father: {fileID: 1838026984} + m_Father: {fileID: 2142188249} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -3098,106 +3154,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1836143117} m_CullTransparentMesh: 1 ---- !u!1 &1838026980 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1838026984} - - component: {fileID: 1838026983} - - component: {fileID: 1838026982} - - component: {fileID: 1838026981} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1838026981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1838026980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &1838026982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1838026980} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &1838026983 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1838026980} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 25 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1838026984 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1838026980} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 1836143118} - m_Father: {fileID: 0} - m_RootOrder: 11 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} --- !u!1 &1875686734 GameObject: m_ObjectHideFlags: 0 @@ -3231,7 +3187,7 @@ RectTransform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 12.996216, y: 0} m_SizeDelta: {x: 45.9923, y: 0} m_Pivot: {x: 0.5, y: 0.5} @@ -3305,7 +3261,7 @@ RectTransform: - {fileID: 1972450272} - {fileID: 122388698} m_Father: {fileID: 2142188249} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -3615,6 +3571,7 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: + - {fileID: 1836143118} - {fileID: 926232952} - {fileID: 1546686510} - {fileID: 1815988573} @@ -3640,7 +3597,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2142188248} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 94a035e39438d0e48b0e7c85961e829e, type: 3} m_Name: