Skip to content

Commit

Permalink
Update v3.0.7.5
Browse files Browse the repository at this point in the history
  • Loading branch information
Lunaretic committed Jul 18, 2024
2 parents bb5211f + 34b3578 commit 191f081
Show file tree
Hide file tree
Showing 10 changed files with 132 additions and 150 deletions.
36 changes: 24 additions & 12 deletions FFXIV_TexTools/Custom/CustomEffectsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,26 @@
using System;
using System.IO;
using SharpDX.Direct3D;
using SharpDX.Direct3D11;
using SharpDX.DXGI;

namespace FFXIV_TexTools.Custom
{
public class CustomEffectsManager : DefaultEffectsManager
{
private static readonly InputElement[] CustomVSInput = new InputElement[10]
{
new InputElement("POSITION", 0, Format.R32G32B32A32_Float, InputElement.AppendAligned, 0),
new InputElement("NORMAL", 0, Format.R32G32B32_Float, InputElement.AppendAligned, 0),
new InputElement("TANGENT", 0, Format.R32G32B32_Float, InputElement.AppendAligned, 0),
new InputElement("BINORMAL", 0, Format.R32G32B32_Float, InputElement.AppendAligned, 0),
new InputElement("TEXCOORD", 0, Format.R32G32_Float, InputElement.AppendAligned, 1),
new InputElement("COLOR", 0, Format.R32G32B32A32_Float, InputElement.AppendAligned, 2),
new InputElement("TEXCOORD", 1, Format.R32G32B32A32_Float, InputElement.AppendAligned, 3, InputClassification.PerInstanceData, 1),
new InputElement("TEXCOORD", 2, Format.R32G32B32A32_Float, InputElement.AppendAligned, 3, InputClassification.PerInstanceData, 1),
new InputElement("TEXCOORD", 3, Format.R32G32B32A32_Float, InputElement.AppendAligned, 3, InputClassification.PerInstanceData, 1),
new InputElement("TEXCOORD", 4, Format.R32G32B32A32_Float, InputElement.AppendAligned, 3, InputClassification.PerInstanceData, 1)
};
public static class CustomShaderNames
{
public static readonly string CustomShader = "CustomShader";
Expand All @@ -36,7 +51,7 @@ public CustomEffectsManager()
{
var customMesh = new TechniqueDescription(CustomShaderNames.CustomShader)
{
InputLayoutDescription = new InputLayoutDescription(DefaultVSShaderByteCodes.VSMeshDefault, DefaultInputLayout.VSInput),
InputLayoutDescription = new InputLayoutDescription(DefaultVSShaderByteCodes.VSMeshDefault, CustomVSInput),
PassDescriptions = new[]
{
new ShaderPassDescription(DefaultPassNames.Default)
Expand Down Expand Up @@ -371,21 +386,18 @@ public CustomEffectsManager()
public static class CustomPSShaderDescription
{
public static ShaderDescription PSCustomMesh = new ShaderDescription(nameof(PSCustomMesh), ShaderStage.Pixel,
new ShaderReflector(), ShaderHelper.LoadShaderCode($"{AppDomain.CurrentDomain.BaseDirectory}\\Resources\\Shaders\\psCustomMeshBlinnPhong.cso"));
new ShaderReflector(), LoadShaderCode($"{AppDomain.CurrentDomain.BaseDirectory}\\Resources\\Shaders\\psCustomMeshBlinnPhong.cso"));
}

public static class ShaderHelper
public static byte[] LoadShaderCode(string path)
{
public static byte[] LoadShaderCode(string path)
if (File.Exists(path))
{
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
else
{
throw new ArgumentException($"Shader File not found: {path}");
}
return File.ReadAllBytes(path);
}
else
{
throw new ArgumentException($"Shader File not found: {path}");
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions FFXIV_TexTools/FFXIV_TexTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
<Product>FFXIV_TexTools</Product>
<Copyright>Copyright © 2024</Copyright>

<ApplicationVersion>3.0.7.4</ApplicationVersion>
<AssemblyVersion>3.0.7.4</AssemblyVersion>
<FileVersion>3.0.7.4</FileVersion>
<ApplicationVersion>3.0.7.5</ApplicationVersion>
<AssemblyVersion>3.0.7.5</AssemblyVersion>
<FileVersion>3.0.7.5</FileVersion>

<LangVersion>9.0</LangVersion>
<UseWPF>true</UseWPF>
Expand Down
2 changes: 1 addition & 1 deletion FFXIV_TexTools/Models/PenumbraUpgradeStatus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public async Task<EUpgradeResult> ProcessMod(string baseDir, string targetDir, s
} catch (Exception ex)
{
LogUpgradeError(targetDir, mod, ex);
if (Directory.Exists(target))
if (Directory.Exists(target) && Directory.Exists(source))
{
if (source != target)
{
Expand Down
111 changes: 25 additions & 86 deletions FFXIV_TexTools/ViewModels/BaseViewPortViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,137 +14,76 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

using FFXIV_TexTools.Custom;
using FFXIV_TexTools.Helpers;
using HelixToolkit.Wpf.SharpDX;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;

namespace FFXIV_TexTools.ViewModels
{
public class BaseViewPortViewModel: ObservableObject, IDisposable
{
private const string Orthographic = "Orthographic Camera";
private Camera _Camera;

private const string Perspective = "Perspective Camera";
private IRenderTechnique _RenderTechnique;

private string _cameraModel;
private string _SubTitle;

private Camera _camera;

private IRenderTechnique _renderTechnique;

private string _subTitle;

private string _title;
private string _Title;

public string Title
{
get => _title;
set => SetValue(ref _title, value, "Title");
get => _Title;
set => SetValue(ref _Title, value, "Title");
}

public string SubTitle
{
get => _subTitle;
set => SetValue(ref _subTitle, value, "SubTitle");
get => _SubTitle;
set => SetValue(ref _SubTitle, value, "SubTitle");
}

public IRenderTechnique RenderTechnique
{
get => _renderTechnique;
set => SetValue(ref _renderTechnique, value, "RenderTechnique");
get => _RenderTechnique;
set => SetValue(ref _RenderTechnique, value, "RenderTechnique");
}

private List<string> CameraModelCollection { get; set; }

public string CameraModel
{
get => _cameraModel;
set
{
if (SetValue(ref _cameraModel, value, "CameraModel"))
{
OnCameraModelChanged();
}
}
}

public Camera Camera
{
get => _camera;
get => _Camera;

set
{
SetValue(ref _camera, value, "Camera");
CameraModel = value is PerspectiveCamera
? Perspective
: value is OrthographicCamera ? Orthographic : null;
SetValue(ref _Camera, value, "Camera");
}
}

private IEffectsManager effectsManager;
private IEffectsManager _EffectsManager;

public IEffectsManager EffectsManager
{
get => effectsManager;
set => SetValue(ref effectsManager, value);
}

private string _renderTechniqueName = DefaultRenderTechniqueNames.Mesh;
public string RenderTechniqueName
{
get => _renderTechniqueName;
set
{
_renderTechniqueName = value;
RenderTechnique = EffectsManager[value];
}

get => _EffectsManager;
set => SetValue(ref _EffectsManager, value);
}

private readonly OrthographicCamera _defaultOrthographicCamera = new OrthographicCamera { Position = new System.Windows.Media.Media3D.Point3D(0, 0, 5), LookDirection = new System.Windows.Media.Media3D.Vector3D(-0, -0, -5), UpDirection = new System.Windows.Media.Media3D.Vector3D(0, 1, 0), NearPlaneDistance = 1, FarPlaneDistance = 100 };

private readonly PerspectiveCamera _defaultPerspectiveCamera = new PerspectiveCamera { Position = new System.Windows.Media.Media3D.Point3D(0, 0, 5), LookDirection = new System.Windows.Media.Media3D.Vector3D(-0, -0, -5), UpDirection = new System.Windows.Media.Media3D.Vector3D(0, 1, 0), NearPlaneDistance = 0.5, FarPlaneDistance = 150 };

public event EventHandler CameraModelChanged;

public BaseViewPortViewModel()
{
// camera models
CameraModelCollection = new List<string>()
try
{
Orthographic,
Perspective,
};

// on camera changed callback
CameraModelChanged += (s, e) =>
// The effect manager automatically attaches itself to the renderer via AddTechnique() somehow.
EffectsManager = new CustomEffectsManager();
}
catch (Exception ex)
{
if (_cameraModel == Orthographic)
{
if (!(Camera is OrthographicCamera))
Camera = _defaultOrthographicCamera;
}
else if (_cameraModel == Perspective)
{
if (!(Camera is PerspectiveCamera))
Camera = _defaultPerspectiveCamera;
}
else
{
throw new HelixToolkitException("Camera Model Error.".L());
}
};

// default camera model
CameraModel = Perspective;
}

public void OnCameraModelChanged()
{
var eh = CameraModelChanged;
eh?.Invoke(this, new EventArgs());
Trace.WriteLine(ex);
}
Camera = new PerspectiveCamera();
}

#region IDisposable Support
Expand Down
68 changes: 34 additions & 34 deletions FFXIV_TexTools/ViewModels/ColorsetEditorViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@
using xivModdingFramework.Textures.FileTypes;
using Vector3D = System.Windows.Media.Media3D.Vector3D;
using WinColor = System.Windows.Media.Color;
using Point3D = System.Windows.Media.Media3D.Point3D;
using SharpDX.Direct3D11;

namespace FFXIV_TexTools.ViewModels
{
public class ColorsetEditorViewModel : INotifyPropertyChanged, IDisposable
public class ColorsetEditorViewModel : BaseViewPortViewModel, INotifyPropertyChanged, IDisposable
{
private static XivTex TileTextureNormal;
private static XivTex TileTextureOrb;
Expand All @@ -36,9 +38,6 @@ public class ColorsetEditorViewModel : INotifyPropertyChanged, IDisposable
private Viewport3DX _viewport;

public ObservableElement3DCollection Models { get; } = new ObservableElement3DCollection();
public Camera Camera { get; set; }
bool _NeedLights = true;
public EffectsManager EffectsManager { get; }

private XivMtrl _mtrl;
private int RowId;
Expand Down Expand Up @@ -78,16 +77,11 @@ private bool LegacyShader
}
}

public ColorsetEditorViewModel(Viewport3DX viewport)
public ColorsetEditorViewModel(Viewport3DX viewport) : base()
{

// Eat exception to not immediately crash in VirtualBox
try
{
EffectsManager = new DefaultEffectsManager();
} catch { }
Camera = new PerspectiveCamera();
_viewport = viewport;
Camera.UpDirection = new System.Windows.Media.Media3D.Vector3D(0, 1, 0);
Camera.LookAt(new Point3D(0, 0, 0), new Vector3D(-4, 0, 0), 0);
}


Expand All @@ -97,16 +91,6 @@ public async Task SetMaterial(XivMtrl mtrl, StainingTemplateFile dyeFile) {
_viewport.BackgroundColor = System.Windows.Media.Colors.Gray;
_viewport.Background = Brushes.Gray;

if (_NeedLights) {


_NeedLights = false;
}

_viewport.Camera.UpDirection = new System.Windows.Media.Media3D.Vector3D(0, 1, 0);
_viewport.Camera.LookDirection = new System.Windows.Media.Media3D.Vector3D(0, 0, -1);
_viewport.Camera.Position = new System.Windows.Media.Media3D.Point3D(0, 0, 3);



if (TileTextureNormal == null)
Expand Down Expand Up @@ -348,6 +332,10 @@ await TextureHelpers.ModifyPixels((offset) =>
lmMaterial.DiffuseAlphaMap = MakeTextureModel(diffuseMask);
lmMaterial.SpecularColorMap = MakeTextureModel(specularMask);

var sampler = HelixToolkit.SharpDX.Core.Shaders.DefaultSamplers.LinearSamplerWrapAni1;
sampler.AddressU = TextureAddressMode.Wrap;
sampler.AddressV = TextureAddressMode.Wrap;
lmMaterial.DiffuseMapSampler = sampler;
}

MeshGeometryModel3D mgm3 = new MeshGeometryModel3D()
Expand Down Expand Up @@ -517,21 +505,33 @@ private void AddQuad(MeshBuilder plane, PlaneAxis axis, float offset)
plane.Normals[uvOffset + 2] = new SharpDX.Vector3(0, 0, 1);
plane.Normals[uvOffset + 3] = new SharpDX.Vector3(0, 0, 1);
}

private bool _UseSphere = true;
private MeshGeometry3D MakeCube()
{
var plane = new MeshBuilder();
plane.CreateTextureCoordinates = true;

//AddQuad(plane, PlaneAxis.X, 0.5f);
//AddQuad(plane, PlaneAxis.X, -0.5f);
//AddQuad(plane, PlaneAxis.Y, 0.5f);
//AddQuad(plane, PlaneAxis.Y, -0.5f);
AddQuad(plane, PlaneAxis.Z, 100.0f);
//AddQuad(plane, PlaneAxis.Z, -0.5f);

plane.ComputeTangents(MeshFaces.Default);

return plane.ToMeshGeometry3D();
if (_UseSphere)
{
var builder = new MeshBuilder();
builder.AddSphere(SharpDX.Vector3.Zero);
builder.ComputeTangents(MeshFaces.Default);
var mg = builder.ToMesh();
return mg;
}
else
{
var builder = new MeshBuilder();
builder.AddCube();
/*AddQuad(builder, PlaneAxis.X, 0.5f);
AddQuad(builder, PlaneAxis.X, -0.5f);
AddQuad(builder, PlaneAxis.Y, 0.5f);
AddQuad(builder, PlaneAxis.Y, -0.5f);
AddQuad(builder, PlaneAxis.Z, 0.5f);
AddQuad(builder, PlaneAxis.Z, -0.5f);*/

builder.ComputeTangents(MeshFaces.Default);
return builder.ToMeshGeometry3D();
}
}


Expand Down
10 changes: 2 additions & 8 deletions FFXIV_TexTools/ViewModels/Viewport3DViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,18 +70,11 @@ public class Viewport3DViewModel : BaseViewPortViewModel, INotifyPropertyChanged

public ObservableElement3DCollection Models { get; } = new ObservableElement3DCollection();

public Viewport3DViewModel()
public Viewport3DViewModel() : base()
{
Title = "";
SubTitle = "";

// Eat exception to not immediately crash in VirtualBox
try
{
EffectsManager = new CustomEffectsManager();
} catch { }

Camera = new PerspectiveCamera();
Camera.CameraInternal.PropertyChanged += CameraInternal_PropertyChanged;

BackgroundColor = Properties.Settings.Default.BG_Color;
Expand Down Expand Up @@ -380,6 +373,7 @@ await Application.Current.Dispatcher.InvokeAsync(() =>
DiffuseMapSampler = sampler
};


lock (_Materials)
{
_Materials.Add(material);
Expand Down
Loading

0 comments on commit 191f081

Please sign in to comment.