diff --git a/dependencies/mapbox-sdk-cs b/dependencies/mapbox-sdk-cs index d4850704d..1121e372d 160000 --- a/dependencies/mapbox-sdk-cs +++ b/dependencies/mapbox-sdk-cs @@ -1 +1 @@ -Subproject commit d4850704db12269df261ff61aea999fef542e3f6 +Subproject commit 1121e372dafb4e8d13be1d45329099704a8c4553 diff --git a/documentation/docs/05-changelog.md b/documentation/docs/05-changelog.md index 19dd19f6c..d5a05f90f 100644 --- a/documentation/docs/05-changelog.md +++ b/documentation/docs/05-changelog.md @@ -1,5 +1,10 @@ ## CHANGELOG +#### [Develop](https://github.com/mapbox/mapbox-unity-sdk/tree/develop) + +- Added new raster tiles that request retina resolution +- Added mipmap, texture format (and compression via DXT), and retina resolution support to `MapImageFactory` + #### v0.5.1 *05/01/2017* diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Editor/MapImageFactoryEditor.cs b/sdkproject/Assets/Mapbox/Core/Unity/Editor/MapImageFactoryEditor.cs index 027a25406..a48cdecde 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Editor/MapImageFactoryEditor.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Editor/MapImageFactoryEditor.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using System.Collections; using UnityEditor; using Mapbox.Unity.MeshGeneration.Factories; @@ -12,6 +12,9 @@ public SerializedProperty material_Prop, basicMaps_Prop, customMapId_Prop, + useMipMap_Prop, + textureFormat_Prop, + useRetina_Prop, mapId_Prop; private MonoScript script; @@ -39,8 +42,9 @@ void OnEnable() mapIdType_Prop = serializedObject.FindProperty("_mapIdType"); mapId_Prop = serializedObject.FindProperty("_mapId"); material_Prop = serializedObject.FindProperty("_baseMaterial"); - basicMaps_Prop = serializedObject.FindProperty("_basicMapIds"); - + useMipMap_Prop = serializedObject.FindProperty("_useMipMap"); + textureFormat_Prop = serializedObject.FindProperty("_textureFormat"); + useRetina_Prop = serializedObject.FindProperty("_useRetina"); script = MonoScript.FromScriptableObject((MapImageFactory)target); for (int i = 0; i < _basicMapIds.Length; i++) { @@ -49,7 +53,7 @@ void OnEnable() _choiceIndex = i; break; } - } + } } public override void OnInspectorGUI() @@ -65,7 +69,7 @@ public override void OnInspectorGUI() EditorGUILayout.Space(); var st = (MapImageType)mapIdType_Prop.enumValueIndex; EditorGUI.indentLevel++; - + switch (st) { case MapImageType.BasicMapboxStyle: @@ -90,6 +94,33 @@ public override void OnInspectorGUI() } EditorGUI.indentLevel--; + EditorGUILayout.Space(); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Raster Tile Texture Settings"); + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(textureFormat_Prop, new GUIContent("Texture Format")); + var textureFormat = (TextureFormat)textureFormat_Prop.intValue; + if (textureFormat == TextureFormat.DXT1 || textureFormat == TextureFormat.DXT5) + { + EditorGUILayout.HelpBox("Texture will be compressed. This will reduce image quality and lead to longer initialization times but save memory.", MessageType.Info); + } + else + { + EditorGUILayout.HelpBox("Use DXT format to save memory.", MessageType.Warning); + } + + EditorGUILayout.PropertyField(useMipMap_Prop, new GUIContent("Create Mip Maps")); + if (useMipMap_Prop.boolValue) + { + EditorGUILayout.HelpBox("Mip maps will consume additional memory but reduce noise at increasing distances.", MessageType.Warning); + } + EditorGUILayout.PropertyField(useRetina_Prop, new GUIContent("Request Retina-resolution")); + if (useRetina_Prop.boolValue) + { + EditorGUILayout.HelpBox("Retina will consume additional memory but greatly improves visual quality.", MessageType.Warning); + } + EditorGUI.indentLevel--; if (GUILayout.Button("Update")) { diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs index 4f6ad271c..0965f39c3 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs @@ -1,3 +1,4 @@ +using Mapbox.Unity.Utilities; namespace Mapbox.Unity.MeshGeneration.Factories { using System; @@ -30,6 +31,15 @@ public class MapImageFactory : Factory [SerializeField] public Material _baseMaterial; + [SerializeField] + TextureFormat _textureFormat = TextureFormat.DXT1; + + [SerializeField] + bool _useMipMap = false; + + [SerializeField] + bool _useRetina; + private Dictionary _tiles; public override void Initialize(IFileSource fs) @@ -69,7 +79,17 @@ private void Run(UnityTile tile) parameters.MapId = _mapId; tile.ImageDataState = TilePropertyState.Loading; - var rasterTile = parameters.MapId.StartsWith("mapbox://") ? new RasterTile() : new ClassicRasterTile(); + + RasterTile rasterTile; + if (parameters.MapId.StartsWith("mapbox://", StringComparison.Ordinal)) + { + rasterTile = _useRetina ? new RetinaRasterTile() : new RasterTile(); + } + else + { + rasterTile = _useRetina ? new ClassicRetinaRasterTile() : new ClassicRasterTile(); + } + rasterTile.Initialize(parameters, (Action)(() => { if (rasterTile.Error != null) @@ -80,8 +100,7 @@ private void Run(UnityTile tile) var rend = tile.GetComponent(); rend.material = _baseMaterial; - tile.ImageData = new Texture2D(256, 256, TextureFormat.RGB24, false); - tile.ImageData.wrapMode = TextureWrapMode.Clamp; + tile.ImageData = new Texture2D(0, 0, _textureFormat, _useMipMap); tile.ImageData.LoadImage(rasterTile.Data); rend.material.mainTexture = tile.ImageData; tile.ImageDataState = TilePropertyState.Loaded;