From 8d14854b4eb3c814ac35e8e31569465a21c6b5b1 Mon Sep 17 00:00:00 2001 From: dank074 Date: Wed, 1 Sep 2021 13:02:09 -0500 Subject: [PATCH] shader works for all channel paletttes now --- src/core/utils/PaletteMapFilter.ts | 52 ++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/src/core/utils/PaletteMapFilter.ts b/src/core/utils/PaletteMapFilter.ts index 89e50e34..801397eb 100644 --- a/src/core/utils/PaletteMapFilter.ts +++ b/src/core/utils/PaletteMapFilter.ts @@ -25,17 +25,13 @@ void main(void) { { if(channel == 0) { - vec2 index = vec2(currentColor.r, 0.5); - adjusted = texture2D(lut, index); + adjusted = texture2D(lut, vec2(currentColor.r, 0.5)); } else if(channel == 1) { - vec2 index = vec2(currentColor.g, 0.5); - adjusted = texture2D(lut, index); + adjusted = texture2D(lut, vec2(currentColor.g, 0.5)); } else if(channel == 2) { - vec2 index = vec2(currentColor.b, 0.5); - adjusted = texture2D(lut, index); + adjusted = texture2D(lut, vec2(currentColor.b, 0.5)); } else if(channel == 3) { - vec2 index = vec2(currentColor.a, 0.5); - adjusted = texture2D(lut, index); + adjusted = texture2D(lut, vec2(currentColor.a, 0.5)); } } @@ -44,6 +40,11 @@ void main(void) { export class PaletteMapFilter extends NitroFilter { + public static readonly CHANNEL_RED = 0; + public static readonly CHANNEL_GREEN = 1; + public static readonly CHANNEL_BLUE = 2; + public static readonly CHANNEL_ALPHA = 3; + private _lut: NitroBasetexture; private _channel: number; @@ -51,7 +52,24 @@ export class PaletteMapFilter extends NitroFilter { super(vertex, fragment); this._channel = this.getChannelForPalette(reds, greens, blues, alphas); - const lut = this.getLutForPalette(reds); + let lut: number[] = []; + + switch(this._channel) + { + case (PaletteMapFilter.CHANNEL_RED): + lut = this.getLutForPalette(reds); + break; + case (PaletteMapFilter.CHANNEL_GREEN): + lut = this.getLutForPalette(greens); + break; + case (PaletteMapFilter.CHANNEL_BLUE): + lut = this.getLutForPalette(blues); + break; + case (PaletteMapFilter.CHANNEL_ALPHA): + lut = this.getLutForPalette(alphas); + break; + } + this._lut = NitroBasetexture.fromBuffer(Uint8Array.from(lut), lut.length / 4, 1); this.uniforms.lut = this._lut; @@ -65,13 +83,13 @@ export class PaletteMapFilter extends NitroFilter for(let i = 0; i < data.length; i++) { // R - lut[(i * 4)] = ((data[i] >> 16) & 0xFF); + lut[(i * 4) + PaletteMapFilter.CHANNEL_RED] = ((data[i] >> 16) & 0xFF); // G - lut[(i * 4) + 1] = ((data[i] >> 8) & 0xFF); + lut[(i * 4) + PaletteMapFilter.CHANNEL_GREEN] = ((data[i] >> 8) & 0xFF); // B - lut[(i * 4) + 2] = (data[i] & 0xFF); + lut[(i * 4) + PaletteMapFilter.CHANNEL_BLUE] = (data[i] & 0xFF); // A - lut[(i * 4) + 3] = ((data[i] >> 24) & 0xFF); + lut[(i * 4) + PaletteMapFilter.CHANNEL_ALPHA] = ((data[i] >> 24) & 0xFF); } return lut; @@ -79,10 +97,10 @@ export class PaletteMapFilter extends NitroFilter private getChannelForPalette(reds: number[], greens: number[], blues: number[], alphas: number[]): number { - if(reds.length === 256) return 0; - if(greens.length === 256) return 1; - if(blues.length === 256) return 2; - if(alphas.length === 256) return 3; + if(reds.length === 256) return PaletteMapFilter.CHANNEL_RED; + if(greens.length === 256) return PaletteMapFilter.CHANNEL_GREEN; + if(blues.length === 256) return PaletteMapFilter.CHANNEL_BLUE; + if(alphas.length === 256) return PaletteMapFilter.CHANNEL_ALPHA; } public get lut(): NitroBasetexture