Skip to content

Commit

Permalink
Merge pull request #890 from ousttrue/fix/texture_extract_subassetkey
Browse files Browse the repository at this point in the history
Fix/texture extract subassetkey
  • Loading branch information
PoChang007 authored Apr 20, 2021
2 parents 737359b + 01241ac commit 67744ec
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ public void Extract(SubAssetKey key, TextureImportParam param)
case TextureImportTypes.StandardMap:
{
// write converted texture
var (_, subAsset) = m_subAssets.FirstOrDefault(x => x.Equals(key));
var (_, subAsset) = m_subAssets.FirstOrDefault(kv => kv.Key.Equals(key));
if (subAsset == null)
{
throw new KeyNotFoundException();
}
targetPath = m_textureDirectory.Child($"{key.Name}.png");
File.WriteAllBytes(targetPath.FullPath, subAsset.EncodeToPNG().ToArray());
targetPath.ImportAsset();
Expand Down
65 changes: 65 additions & 0 deletions Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
using System;
using System.IO;
using System.Linq;
using NUnit.Framework;
using UnityEngine;
using VRMShaders;
Expand Down Expand Up @@ -31,5 +34,67 @@ public void TextureExportTest()
Assert.AreEqual(glFilter.LINEAR_MIPMAP_LINEAR, sampler.minFilter);
Assert.AreEqual(glFilter.LINEAR_MIPMAP_LINEAR, sampler.magFilter);
}

static FileInfo Find(DirectoryInfo current, string target)
{
foreach (var child in current.EnumerateFiles())
{
if (child.Name == target)
{
return child;
}
}

foreach (var child in current.EnumerateDirectories())
{
var found = Find(child, target);
if (found != null)
{
return found;
}
}

return null;
}

static FileInfo GetGltfTestModelPath(string name)
{
var env = System.Environment.GetEnvironmentVariable("GLTF_SAMPLE_MODELS");
if (string.IsNullOrEmpty(env))
{
return null;
}
var root = new DirectoryInfo($"{env}/2.0");
if (!root.Exists)
{
return null;
}

return Find(root, name);
}

[Test]
public void TextureExtractTest()
{
var path = GetGltfTestModelPath("BoomBox.glb");
if (path == null)
{
return;
}

// parse
var parser = new GltfParser();
parser.ParsePath(path.FullName);

// load
var loader = new ImporterContext(parser);
loader.Load();

// extractor
var extractor = new TextureExtractor(parser, UnityPath.FromUnityPath(""), loader.TextureFactory.Textures.Select(x => (new SubAssetKey(typeof(Texture2D), x.Texture.name), x.Texture)).ToArray());
var m = GltfTextureEnumerator.EnumerateTexturesForMaterial(parser, 0).FirstOrDefault(x => x.Item1.Name == "texture_1.standard");

Assert.Catch<NotImplementedException>(() => extractor.Extract(m.Item1, m.Item2));
}
}
}

0 comments on commit 67744ec

Please sign in to comment.