From 6bf74fa9291e9126d66e4c8bb39912e7395e34c7 Mon Sep 17 00:00:00 2001 From: Jan Racek Date: Thu, 26 Mar 2026 20:27:23 +0100 Subject: [PATCH] Fixed ui textures --- Runtime/PSXUIExporter.cs | 17 ++++++++++++++--- Runtime/TexturePacker.cs | 4 ++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Runtime/PSXUIExporter.cs b/Runtime/PSXUIExporter.cs index b5eec89..f2701cc 100644 --- a/Runtime/PSXUIExporter.cs +++ b/Runtime/PSXUIExporter.cs @@ -287,9 +287,10 @@ namespace SplashEdit.RuntimeCode data.ClutY = (ushort)tex.ClutPackingY; data.U0 = (byte)(tex.PackingX * expander); data.V0 = (byte)tex.PackingY; - // Width is already in source pixels = texture-pixel units - data.U1 = (byte)(tex.PackingX * expander + tex.Width); - data.V1 = (byte)(tex.PackingY + tex.Height); + // U1/V1 are the LAST texel (inclusive), not one-past-end. + // Without -1, values >= 256 overflow byte to 0. + data.U1 = (byte)(tex.PackingX * expander + tex.Width - 1); + data.V1 = (byte)(tex.PackingY + tex.Height - 1); data.BitDepthIndex = tex.BitDepth switch { PSXBPP.TEX_4BIT => 0, @@ -297,6 +298,16 @@ namespace SplashEdit.RuntimeCode PSXBPP.TEX_16BIT => 2, _ => 2 }; + + Debug.Log($"[UIImage] '{img.ElementName}' src='{(tex.OriginalTexture ? tex.OriginalTexture.name : "null")}' " + + $"bpp={(int)tex.BitDepth} W={tex.Width} H={tex.Height} QW={tex.QuantizedWidth} " + + $"packXY=({tex.PackingX},{tex.PackingY}) tpage=({tex.TexpageX},{tex.TexpageY}) " + + $"clutXY=({tex.ClutPackingX},{tex.ClutPackingY}) " + + $"UV=({data.U0},{data.V0})->({data.U1},{data.V1}) expander={expander} bitIdx={data.BitDepthIndex}"); + } + else + { + Debug.LogWarning($"[UIImage] '{img.ElementName}' has NULL PackedTexture!"); } elements.Add(data); diff --git a/Runtime/TexturePacker.cs b/Runtime/TexturePacker.cs index 3aeb1c4..1cee001 100644 --- a/Runtime/TexturePacker.cs +++ b/Runtime/TexturePacker.cs @@ -54,6 +54,10 @@ namespace SplashEdit.RuntimeCode _reservedAreas.Add(framebuffers[0]); _reservedAreas.Add(framebuffers[1]); + // Reserve the font column (x=960-1023) — custom fonts and the system font + // are placed here by PSXUIExporter, outside the packer's control. + _reservedAreas.Add(new Rect(960, 0, 64, VramHeight)); + _vramPixels = new VRAMPixel[VramWidth, VramHeight]; }