diff --git a/CUE4Parse b/CUE4Parse index db405ca0..071e4589 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit db405ca009b440244e7c55e9cc0f626d93c468e3 +Subproject commit 071e458907750c5af253079e2e91ddf54b824220 diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 0bf6a794..06aaa1bc 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -549,18 +549,13 @@ namespace FModel.ViewModels ExportData(fullPath); } - private bool CheckExport(UObject export) // return if this loads an image + private bool CheckExport(UObject export) // return true once you wanna stop searching for exports { switch (export) { case UTexture2D texture: { - var bNearest = false; - if (texture.TryGetValue(out FName trigger, "LODGroup", "Filter") && !trigger.IsNone) - bNearest = trigger.Text.EndsWith("TEXTUREGROUP_Pixels2D", StringComparison.OrdinalIgnoreCase) || - trigger.Text.EndsWith("TF_Nearest", StringComparison.OrdinalIgnoreCase); - - TabControl.SelectedTab.ImageRender = bNearest ? BitmapScalingMode.NearestNeighbor : BitmapScalingMode.Linear; + TabControl.SelectedTab.RenderNearestNeighbor = texture.bRenderNearestNeighbor; TabControl.SelectedTab.SetImage(texture.Decode()); return true; } @@ -604,7 +599,7 @@ namespace FModel.ViewModels modelViewer.Load(export); }); } - return false; + return true; } default: { diff --git a/FModel/ViewModels/Commands/ImageCommand.cs b/FModel/ViewModels/Commands/ImageCommand.cs index c6acbbb8..bb3c5ef8 100644 --- a/FModel/ViewModels/Commands/ImageCommand.cs +++ b/FModel/ViewModels/Commands/ImageCommand.cs @@ -5,6 +5,7 @@ using FModel.Views.Resources.Controls; using System.IO; using System.Windows; using System.Windows.Media; +using FModel.Views.Resources.Converters; namespace FModel.ViewModels.Commands { @@ -32,7 +33,7 @@ namespace FModel.ViewModels.Commands WindowState = contextViewModel.Image.Height > 1000 ? WindowState.Maximized : WindowState.Normal, ImageCtrl = {Source = contextViewModel.Image} }; - RenderOptions.SetBitmapScalingMode(popout.ImageCtrl, contextViewModel.ImageRender); + RenderOptions.SetBitmapScalingMode(popout.ImageCtrl, BoolToRenderModeConverter.Instance.Convert(contextViewModel.RenderNearestNeighbor)); popout.Show(); }); break; diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index 306ceb27..60e69467 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -165,12 +165,10 @@ namespace FModel.ViewModels var builder = new MeshBuilder {TextureCoordinates = new Vector2Collection()}; for (var i = 0; i < verts.Length; i++) { - var u = BitConverter.ToSingle(BitConverter.GetBytes((int) verts[i].UV.U)); - var v = BitConverter.ToSingle(BitConverter.GetBytes((int) verts[i].UV.V)); builder.AddNode( new Vector3(verts[i].Position.X, -verts[i].Position.Y, verts[i].Position.Z), new Vector3(verts[i].Normal.X, verts[i].Normal.Y, verts[i].Normal.Z), - new Vector2(u, v)); + new Vector2(verts[i].UV.U, verts[i].UV.V)); } for (var i = 0; i < indices.Length; i++) diff --git a/FModel/ViewModels/TabControlViewModel.cs b/FModel/ViewModels/TabControlViewModel.cs index cf89f59d..f5d7e6c7 100644 --- a/FModel/ViewModels/TabControlViewModel.cs +++ b/FModel/ViewModels/TabControlViewModel.cs @@ -145,11 +145,11 @@ namespace FModel.ViewModels } } - private BitmapScalingMode _imageRender = BitmapScalingMode.Linear; - public BitmapScalingMode ImageRender + private bool _renderNearestNeighbor; + public bool RenderNearestNeighbor { - get => _imageRender; - set => SetProperty(ref _imageRender, value); + get => _renderNearestNeighbor; + set => SetProperty(ref _renderNearestNeighbor, value); } public bool HasImage => Image != null; diff --git a/FModel/Views/Resources/Converters/BoolToRenderModeConverter.cs b/FModel/Views/Resources/Converters/BoolToRenderModeConverter.cs new file mode 100644 index 00000000..1fe28556 --- /dev/null +++ b/FModel/Views/Resources/Converters/BoolToRenderModeConverter.cs @@ -0,0 +1,27 @@ +using System; +using System.Globalization; +using System.Windows.Data; +using System.Windows.Media; + +namespace FModel.Views.Resources.Converters +{ + public class BoolToRenderModeConverter : IValueConverter + { + public static readonly BoolToRenderModeConverter Instance = new(); + + public BitmapScalingMode Convert(bool value) => (BitmapScalingMode) Convert(value, null, null, null); + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return value switch + { + true => BitmapScalingMode.NearestNeighbor, + _ => BitmapScalingMode.Linear + }; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/FModel/Views/Resources/Resources.xaml b/FModel/Views/Resources/Resources.xaml index 21fba142..846e683f 100644 --- a/FModel/Views/Resources/Resources.xaml +++ b/FModel/Views/Resources/Resources.xaml @@ -648,7 +648,7 @@ + Source="{Binding SelectedItem.Image, ElementName=TabControlName}" RenderOptions.BitmapScalingMode="{Binding SelectedItem.RenderNearestNeighbor, ElementName=TabControlName, Converter={x:Static converters:BoolToRenderModeConverter.Instance}}">