public static void SetSampler(Texture2D texture, glTFTextureSampler sampler) { if (texture == null) { return; } foreach (var kv in GetUnityWrapMode(sampler)) { switch (kv.Key) { case TextureWrapType.All: texture.wrapMode = kv.Value; break; #if UNITY_2017_1_OR_NEWER case TextureWrapType.U: texture.wrapModeU = kv.Value; break; case TextureWrapType.V: texture.wrapModeV = kv.Value; break; case TextureWrapType.W: texture.wrapModeW = kv.Value; break; #endif default: throw new NotImplementedException(); } } texture.filterMode = ImportFilterMode(sampler.minFilter); }
public static IEnumerable <KeyValuePair <TextureWrapType, TextureWrapMode> > GetUnityWrapMode(glTFTextureSampler sampler) { #if UNITY_2017_1_OR_NEWER if (sampler.wrapS == sampler.wrapT) { switch (sampler.wrapS) { case glWrap.NONE: // default yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat)); break; case glWrap.CLAMP_TO_EDGE: yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Clamp)); break; case glWrap.REPEAT: yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat)); break; case glWrap.MIRRORED_REPEAT: yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Mirror)); break; default: throw new NotImplementedException(); } } else { switch (sampler.wrapS) { case glWrap.NONE: // default yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Repeat)); break; case glWrap.CLAMP_TO_EDGE: yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Clamp)); break; case glWrap.REPEAT: yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Repeat)); break; case glWrap.MIRRORED_REPEAT: yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Mirror)); break; default: throw new NotImplementedException(); } switch (sampler.wrapT) { case glWrap.NONE: // default yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Repeat)); break; case glWrap.CLAMP_TO_EDGE: yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Clamp)); break; case glWrap.REPEAT: yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Repeat)); break; case glWrap.MIRRORED_REPEAT: yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Mirror)); break; default: throw new NotImplementedException(); } #else // Unity2017.1より前 // * wrapSとwrapTの区別が無くてwrapしかない // * Mirrorが無い switch (sampler.wrapS) { case glWrap.NONE: // default yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat)); break; case glWrap.CLAMP_TO_EDGE: case glWrap.MIRRORED_REPEAT: yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Clamp)); break; case glWrap.REPEAT: yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat)); break; default: throw new NotImplementedException(); #endif } }