PR #219 but neater and allowing debugging in VS

This commit is contained in:
dexy 2024-07-11 10:51:17 +10:00
parent 86044e2c89
commit bad84d7bdc
17 changed files with 117 additions and 92 deletions

View File

@ -3,7 +3,9 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
@ -14,6 +16,29 @@ namespace CodeWalker
{
public static class PathUtil
{
public static string AppPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static string WorkPath = Directory.GetCurrentDirectory();
public static string GetFilePath(string appRelativePath)
{
var path = Path.Combine(AppPath, appRelativePath);
if (File.Exists(path)) return path;
path = Path.Combine(WorkPath, appRelativePath);
return path;
}
public static byte[] ReadAllBytes(string appRelativePath)
{
var path = GetFilePath(appRelativePath);
return File.ReadAllBytes(path);
}
}
public static class TextUtil
{

View File

@ -184,34 +184,34 @@ namespace CodeWalker.Rendering
public BasicShader(Device device)
{
byte[] vspnctbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCT.cso");
byte[] vspncttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTT.cso");
byte[] vspnctttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTTT.cso");
byte[] vspncctbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCT.cso");
byte[] vspnccttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTT.cso");
byte[] vspncctttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTTT.cso");
byte[] vspnctxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTX.cso");
byte[] vspncctxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTX.cso");
byte[] vspncttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTTX.cso");
byte[] vspnccttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTTX.cso");
byte[] vspnctttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTTTX.cso");
byte[] vspncctttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTTTX.cso");
byte[] vspnctbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCT.cso");
byte[] vspncttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCTT.cso");
byte[] vspnctttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCTTT.cso");
byte[] vspncctbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCT.cso");
byte[] vspnccttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCTT.cso");
byte[] vspncctttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCTTT.cso");
byte[] vspnctxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCTX.cso");
byte[] vspncctxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCTX.cso");
byte[] vspncttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCTTX.cso");
byte[] vspnccttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCTTX.cso");
byte[] vspnctttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCTTTX.cso");
byte[] vspncctttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PNCCTTTX.cso");
byte[] vspbbnctbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCT.cso");
byte[] vspbbnctxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTX.cso");
byte[] vspbbncttbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTT.cso");
byte[] vspbbnctttbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTTT.cso");
byte[] vspbbncctbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCT.cso");
byte[] vspbbncctxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCTX.cso");
byte[] vspbbnccttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCCTTX.cso");
byte[] vspbbncttxbytes = File.ReadAllBytes("Shaders\\BasicVS_PBBNCTTX.cso");
byte[] vspbbnctbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCT.cso");
byte[] vspbbnctxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCTX.cso");
byte[] vspbbncttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCTT.cso");
byte[] vspbbnctttbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCTTT.cso");
byte[] vspbbncctbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCCT.cso");
byte[] vspbbncctxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCCTX.cso");
byte[] vspbbnccttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCCTTX.cso");
byte[] vspbbncttxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_PBBNCTTX.cso");
byte[] vsboxbytes = File.ReadAllBytes("Shaders\\BasicVS_Box.cso");
byte[] vsspherebytes = File.ReadAllBytes("Shaders\\BasicVS_Sphere.cso");
byte[] vscapsulebytes = File.ReadAllBytes("Shaders\\BasicVS_Capsule.cso");
byte[] vscylinderbytes = File.ReadAllBytes("Shaders\\BasicVS_Cylinder.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\BasicPS.cso");
byte[] psdefbytes = File.ReadAllBytes("Shaders\\BasicPS_Deferred.cso");
byte[] vsboxbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_Box.cso");
byte[] vsspherebytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_Sphere.cso");
byte[] vscapsulebytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_Capsule.cso");
byte[] vscylinderbytes = PathUtil.ReadAllBytes("Shaders\\BasicVS_Cylinder.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\BasicPS.cso");
byte[] psdefbytes = PathUtil.ReadAllBytes("Shaders\\BasicPS_Deferred.cso");
basicvspnct = new VertexShader(device, vspnctbytes);
basicvspnctt = new VertexShader(device, vspncttbytes);

View File

@ -71,9 +71,9 @@ namespace CodeWalker.Rendering
public BoundsShader(Device device)
{
byte[] spherevsbytes = File.ReadAllBytes("Shaders\\BoundingSphereVS.cso");
byte[] boxvsbytes = File.ReadAllBytes("Shaders\\BoundingBoxVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\BoundsPS.cso");
byte[] spherevsbytes = PathUtil.ReadAllBytes("Shaders\\BoundingSphereVS.cso");
byte[] boxvsbytes = PathUtil.ReadAllBytes("Shaders\\BoundingBoxVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\BoundsPS.cso");
spherevs = new VertexShader(device, spherevsbytes);
boxvs = new VertexShader(device, boxvsbytes);

View File

@ -88,9 +88,9 @@ namespace CodeWalker.Rendering
public CableShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\CableVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\CablePS.cso");
byte[] psdefbytes = File.ReadAllBytes("Shaders\\CablePS_Deferred.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\CableVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\CablePS.cso");
byte[] psdefbytes = PathUtil.ReadAllBytes("Shaders\\CablePS_Deferred.cso");
vs = new VertexShader(device, vsbytes);
ps = new PixelShader(device, psbytes);

View File

@ -106,8 +106,8 @@ namespace CodeWalker.Rendering
public CloudsShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\CloudsVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\CloudsPS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\CloudsVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\CloudsPS.cso");
vs = new VertexShader(device, vsbytes);
ps = new PixelShader(device, psbytes);

View File

@ -128,17 +128,17 @@ namespace CodeWalker.Rendering
{
var device = dxman.device;
byte[] bDirLightVS = File.ReadAllBytes("Shaders\\DirLightVS.cso");
byte[] bDirLightPS = File.ReadAllBytes("Shaders\\DirLightPS.cso");
byte[] bDirLightMSPS = File.ReadAllBytes("Shaders\\DirLightPS_MS.cso");
byte[] bLodLightVS = File.ReadAllBytes("Shaders\\LodLightsVS.cso");
byte[] bLodLightPS = File.ReadAllBytes("Shaders\\LodLightsPS.cso");
byte[] bLodLightMSPS = File.ReadAllBytes("Shaders\\LodLightsPS_MS.cso");
byte[] bLightVS = File.ReadAllBytes("Shaders\\LightVS.cso");
byte[] bLightPS = File.ReadAllBytes("Shaders\\LightPS.cso");
byte[] bLightMSPS = File.ReadAllBytes("Shaders\\LightPS_MS.cso");
byte[] bFinalVS = File.ReadAllBytes("Shaders\\PPFinalPassVS.cso");
byte[] bSSAAPS = File.ReadAllBytes("Shaders\\PPSSAAPS.cso");
byte[] bDirLightVS = PathUtil.ReadAllBytes("Shaders\\DirLightVS.cso");
byte[] bDirLightPS = PathUtil.ReadAllBytes("Shaders\\DirLightPS.cso");
byte[] bDirLightMSPS = PathUtil.ReadAllBytes("Shaders\\DirLightPS_MS.cso");
byte[] bLodLightVS = PathUtil.ReadAllBytes("Shaders\\LodLightsVS.cso");
byte[] bLodLightPS = PathUtil.ReadAllBytes("Shaders\\LodLightsPS.cso");
byte[] bLodLightMSPS = PathUtil.ReadAllBytes("Shaders\\LodLightsPS_MS.cso");
byte[] bLightVS = PathUtil.ReadAllBytes("Shaders\\LightVS.cso");
byte[] bLightPS = PathUtil.ReadAllBytes("Shaders\\LightPS.cso");
byte[] bLightMSPS = PathUtil.ReadAllBytes("Shaders\\LightPS_MS.cso");
byte[] bFinalVS = PathUtil.ReadAllBytes("Shaders\\PPFinalPassVS.cso");
byte[] bSSAAPS = PathUtil.ReadAllBytes("Shaders\\PPSSAAPS.cso");
DirLightVS = new VertexShader(device, bDirLightVS);
DirLightPS = new PixelShader(device, bDirLightPS);

View File

@ -41,8 +41,8 @@ namespace CodeWalker.Rendering
public DistantLightsShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\DistantLightsVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\DistantLightsPS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\DistantLightsVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\DistantLightsPS.cso");
lightsvs = new VertexShader(device, vsbytes);
lightsps = new PixelShader(device, psbytes);

View File

@ -46,8 +46,8 @@ namespace CodeWalker.Rendering
public MarkerShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\MarkerVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\MarkerPS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\MarkerVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\MarkerPS.cso");
markervs = new VertexShader(device, vsbytes);
markerps = new PixelShader(device, psbytes);

View File

@ -46,11 +46,11 @@ namespace CodeWalker.Rendering
public PathShader(Device device)
{
byte[] boxvsbytes = File.ReadAllBytes("Shaders\\PathBoxVS.cso");
byte[] boxpsbytes = File.ReadAllBytes("Shaders\\PathBoxPS.cso");
byte[] dynvsbytes = File.ReadAllBytes("Shaders\\PathDynVS.cso");
byte[] vsbytes = File.ReadAllBytes("Shaders\\PathVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\PathPS.cso");
byte[] boxvsbytes = PathUtil.ReadAllBytes("Shaders\\PathBoxVS.cso");
byte[] boxpsbytes = PathUtil.ReadAllBytes("Shaders\\PathBoxPS.cso");
byte[] dynvsbytes = PathUtil.ReadAllBytes("Shaders\\PathDynVS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\PathVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\PathPS.cso");
boxvs = new VertexShader(device, boxvsbytes);

View File

@ -186,14 +186,14 @@ namespace CodeWalker.Rendering
{
var device = dxman.device;
byte[] bReduceTo1DCS = File.ReadAllBytes("Shaders\\PPReduceTo1DCS.cso");
byte[] bReduceTo0DCS = File.ReadAllBytes("Shaders\\PPReduceTo0DCS.cso");
byte[] bLumBlendCS = File.ReadAllBytes("Shaders\\PPLumBlendCS.cso");
byte[] bBloomFilterBPHCS = File.ReadAllBytes("Shaders\\PPBloomFilterBPHCS.cso");
byte[] bBloomFilterVCS = File.ReadAllBytes("Shaders\\PPBloomFilterVCS.cso");
byte[] bCopyPixelsPS = File.ReadAllBytes("Shaders\\PPCopyPixelsPS.cso");
byte[] bFinalPassVS = File.ReadAllBytes("Shaders\\PPFinalPassVS.cso");
byte[] bFinalPassPS = File.ReadAllBytes("Shaders\\PPFinalPassPS.cso");
byte[] bReduceTo1DCS = PathUtil.ReadAllBytes("Shaders\\PPReduceTo1DCS.cso");
byte[] bReduceTo0DCS = PathUtil.ReadAllBytes("Shaders\\PPReduceTo0DCS.cso");
byte[] bLumBlendCS = PathUtil.ReadAllBytes("Shaders\\PPLumBlendCS.cso");
byte[] bBloomFilterBPHCS = PathUtil.ReadAllBytes("Shaders\\PPBloomFilterBPHCS.cso");
byte[] bBloomFilterVCS = PathUtil.ReadAllBytes("Shaders\\PPBloomFilterVCS.cso");
byte[] bCopyPixelsPS = PathUtil.ReadAllBytes("Shaders\\PPCopyPixelsPS.cso");
byte[] bFinalPassVS = PathUtil.ReadAllBytes("Shaders\\PPFinalPassVS.cso");
byte[] bFinalPassPS = PathUtil.ReadAllBytes("Shaders\\PPFinalPassPS.cso");
ReduceTo1DCS = new ComputeShader(device, bReduceTo1DCS);
ReduceTo0DCS = new ComputeShader(device, bReduceTo0DCS);

View File

@ -81,9 +81,9 @@ namespace CodeWalker.Rendering
public ShadowShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\ShadowVS.cso");
byte[] vssbytes = File.ReadAllBytes("Shaders\\ShadowVS_Skin.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\ShadowPS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\ShadowVS.cso");
byte[] vssbytes = PathUtil.ReadAllBytes("Shaders\\ShadowVS_Skin.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\ShadowPS.cso");
shadowvs = new VertexShader(device, vsbytes);
shadowvs_skin = new VertexShader(device, vssbytes);

View File

@ -131,12 +131,12 @@ namespace CodeWalker.Rendering
public SkydomeShader(Device device)
{
byte[] skyvsbytes = File.ReadAllBytes("Shaders\\SkydomeVS.cso");
byte[] skypsbytes = File.ReadAllBytes("Shaders\\SkydomePS.cso");
byte[] sunvsbytes = File.ReadAllBytes("Shaders\\SkySunVS.cso");
byte[] sunpsbytes = File.ReadAllBytes("Shaders\\SkySunPS.cso");
byte[] moonvsbytes = File.ReadAllBytes("Shaders\\SkyMoonVS.cso");
byte[] moonpsbytes = File.ReadAllBytes("Shaders\\SkyMoonPS.cso");
byte[] skyvsbytes = PathUtil.ReadAllBytes("Shaders\\SkydomeVS.cso");
byte[] skypsbytes = PathUtil.ReadAllBytes("Shaders\\SkydomePS.cso");
byte[] sunvsbytes = PathUtil.ReadAllBytes("Shaders\\SkySunVS.cso");
byte[] sunpsbytes = PathUtil.ReadAllBytes("Shaders\\SkySunPS.cso");
byte[] moonvsbytes = PathUtil.ReadAllBytes("Shaders\\SkyMoonVS.cso");
byte[] moonpsbytes = PathUtil.ReadAllBytes("Shaders\\SkyMoonPS.cso");
skyvs = new VertexShader(device, skyvsbytes);
skyps = new PixelShader(device, skypsbytes);

View File

@ -101,15 +101,15 @@ namespace CodeWalker.Rendering
public TerrainShader(Device device)
{
byte[] vspncct = File.ReadAllBytes("Shaders\\TerrainVS_PNCCT.cso");
byte[] vspncctt = File.ReadAllBytes("Shaders\\TerrainVS_PNCCTT.cso");
byte[] vspnccttx = File.ReadAllBytes("Shaders\\TerrainVS_PNCCTTX.cso");
byte[] vspncctttx = File.ReadAllBytes("Shaders\\TerrainVS_PNCCTTTX.cso");
byte[] vspncctx = File.ReadAllBytes("Shaders\\TerrainVS_PNCCTX.cso");
byte[] vspnctttx = File.ReadAllBytes("Shaders\\TerrainVS_PNCTTTX.cso");
byte[] vspncttx = File.ReadAllBytes("Shaders\\TerrainVS_PNCTTX.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\TerrainPS.cso");
byte[] psdefbytes = File.ReadAllBytes("Shaders\\TerrainPS_Deferred.cso");
byte[] vspncct = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCCT.cso");
byte[] vspncctt = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCCTT.cso");
byte[] vspnccttx = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCCTTX.cso");
byte[] vspncctttx = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCCTTTX.cso");
byte[] vspncctx = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCCTX.cso");
byte[] vspnctttx = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCTTTX.cso");
byte[] vspncttx = PathUtil.ReadAllBytes("Shaders\\TerrainVS_PNCTTX.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\TerrainPS.cso");
byte[] psdefbytes = PathUtil.ReadAllBytes("Shaders\\TerrainPS_Deferred.cso");
pncctvs = new VertexShader(device, vspncct);
pnccttvs = new VertexShader(device, vspncctt);

View File

@ -77,9 +77,9 @@ namespace CodeWalker.Rendering
public TreesLodShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\TreesLodVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\TreesLodPS.cso");
byte[] psdefbytes = File.ReadAllBytes("Shaders\\TreesLodPS_Deferred.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\TreesLodVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\TreesLodPS.cso");
byte[] psdefbytes = PathUtil.ReadAllBytes("Shaders\\TreesLodPS_Deferred.cso");
vs = new VertexShader(device, vsbytes);
ps = new PixelShader(device, psbytes);

View File

@ -121,12 +121,12 @@ namespace CodeWalker.Rendering
public WaterShader(Device device)
{
byte[] vsptbytes = File.ReadAllBytes("Shaders\\WaterVS_PT.cso");
byte[] vspctbytes = File.ReadAllBytes("Shaders\\WaterVS_PCT.cso");
byte[] vspnctbytes = File.ReadAllBytes("Shaders\\WaterVS_PNCT.cso");
byte[] vspnctxbytes = File.ReadAllBytes("Shaders\\WaterVS_PNCTX.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\WaterPS.cso");
byte[] psdefbytes = File.ReadAllBytes("Shaders\\WaterPS_Deferred.cso");
byte[] vsptbytes = PathUtil.ReadAllBytes("Shaders\\WaterVS_PT.cso");
byte[] vspctbytes = PathUtil.ReadAllBytes("Shaders\\WaterVS_PCT.cso");
byte[] vspnctbytes = PathUtil.ReadAllBytes("Shaders\\WaterVS_PNCT.cso");
byte[] vspnctxbytes = PathUtil.ReadAllBytes("Shaders\\WaterVS_PNCTX.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\WaterPS.cso");
byte[] psdefbytes = PathUtil.ReadAllBytes("Shaders\\WaterPS_Deferred.cso");
vspt = new VertexShader(device, vsptbytes);

View File

@ -39,8 +39,8 @@ namespace CodeWalker.Rendering
public WidgetShader(Device device)
{
byte[] vsbytes = File.ReadAllBytes("Shaders\\WidgetVS.cso");
byte[] psbytes = File.ReadAllBytes("Shaders\\WidgetPS.cso");
byte[] vsbytes = PathUtil.ReadAllBytes("Shaders\\WidgetVS.cso");
byte[] psbytes = PathUtil.ReadAllBytes("Shaders\\WidgetPS.cso");
vs = new VertexShader(device, vsbytes);
ps = new PixelShader(device, psbytes);

View File

@ -314,7 +314,7 @@ namespace CodeWalker
private MapIcon AddIcon(string name, string filename, int texw, int texh, float centerx, float centery, float scale)
{
string filepath = "icons\\" + filename;
string filepath = PathUtil.GetFilePath("icons\\" + filename);
try
{
MapIcon mi = new MapIcon(name, filepath, texw, texh, centerx, centery, scale);