From 7b7bed22c4606a82fa4845ae270529261de09875 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 28 May 2019 23:00:03 +0300 Subject: [PATCH] TextureManager: palette load --- .../dmx/lwjake2/render/TextureManager.java | 42 ++++++++++++++++++- src/main/java/lwjake2/client/particle_t.java | 5 --- src/main/java/lwjake2/render/lwjgl/Image.java | 27 ++---------- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/main/java/dmx/lwjake2/render/TextureManager.java b/src/main/java/dmx/lwjake2/render/TextureManager.java index 50a6f7c..9c2e246 100644 --- a/src/main/java/dmx/lwjake2/render/TextureManager.java +++ b/src/main/java/dmx/lwjake2/render/TextureManager.java @@ -1,10 +1,48 @@ package dmx.lwjake2.render; +import dmx.lwjake2.UnpackLoader; +import lombok.extern.slf4j.Slf4j; + +import static lwjake2.render.lwjgl.Main.d_8to24table; + +@Slf4j public class TextureManager { - private static int[] colorTable = new int[256]; + private static final String $PALETTE_PATH = "pics/colormap.pcx"; + private static int[] colorTable; - public static void setColorPalette(int[] palette) { + public static void LoadPalette() { + byte[] raw = UnpackLoader.loadFile($PALETTE_PATH); + + if (raw == null) { + log.error("Error load palette"); + return; + } + + byte[] pal = new byte[768]; + System.arraycopy(raw, raw.length - 768, pal, 0, 768); + + int r, g, b; + int j = 0; + for (int i = 0; i < 256; i++) { + r = pal[j++] & 0xFF; + g = pal[j++] & 0xFF; + b = pal[j++] & 0xFF; + + d_8to24table[i] = (255 << 24) | (b << 16) | (g << 8) | (r); + } + + d_8to24table[255] &= 0x00FFFFFF; // 255 is transparent + + setColorPalette(d_8to24table); + } + + private static void setColorPalette(int[] palette) { + if (colorTable != null) { + return; + } + + colorTable = new int[256]; for (int i = 0; i < 256; i++) { colorTable[i] = palette[i] & 0x00FFFFFF; } diff --git a/src/main/java/lwjake2/client/particle_t.java b/src/main/java/lwjake2/client/particle_t.java index fe8f400..79384bd 100644 --- a/src/main/java/lwjake2/client/particle_t.java +++ b/src/main/java/lwjake2/client/particle_t.java @@ -35,11 +35,6 @@ public class particle_t { public static FloatBuffer vertexArray = Lib.newFloatBuffer(Defines.MAX_PARTICLES * 3); public static IntBuffer colorArray = colorByteArray.asIntBuffer(); - @Deprecated - public static void setColorPalette(int[] palette) { - TextureManager.setColorPalette(palette); - } - public static ByteBuffer getColorAsByteBuffer() { return colorByteArray; } diff --git a/src/main/java/lwjake2/render/lwjgl/Image.java b/src/main/java/lwjake2/render/lwjgl/Image.java index c315305..86dbe72 100644 --- a/src/main/java/lwjake2/render/lwjgl/Image.java +++ b/src/main/java/lwjake2/render/lwjgl/Image.java @@ -19,6 +19,7 @@ package lwjake2.render.lwjgl; import dmx.lwjake2.render.PcxTexture; +import dmx.lwjake2.render.TextureManager; import lwjake2.Defines; import lwjake2.ErrorCode; import dmx.lwjake2.UnpackLoader; @@ -1523,31 +1524,9 @@ public abstract class Image extends Main { Draw_GetPalette =============== */ + @Deprecated protected void Draw_GetPalette() { - int r, g, b; - byte[][] palette = new byte[1][]; //new byte[768]; - - // get the palette - - LoadPCX("pics/colormap.pcx", palette, new Dimension()); - - if (palette[0] == null || palette[0].length != 768) - Com.Error(ErrorCode.ERR_FATAL, "Couldn't load pics/colormap.pcx"); - - byte[] pal = palette[0]; - - int j = 0; - for (int i = 0; i < 256; i++) { - r = pal[j++] & 0xFF; - g = pal[j++] & 0xFF; - b = pal[j++] & 0xFF; - - d_8to24table[i] = (255 << 24) | (b << 16) | (g << 8) | (r); - } - - d_8to24table[255] &= 0x00FFFFFF; // 255 is transparent - - particle_t.setColorPalette(d_8to24table); + TextureManager.LoadPalette(); } /*