Update applyPalette

This commit is contained in:
Bill 2023-01-13 03:11:47 -05:00
parent ce82ff9930
commit 45962ab695

View File

@ -1,5 +1,6 @@
import { Resource, Texture } from '@pixi/core'; import { Renderer, Resource, Texture } from '@pixi/core';
import { NitroSprite, TextureUtils } from '../../pixi-proxy'; import { Sprite } from '@pixi/sprite';
import { PixiApplicationProxy, TextureUtils } from '../../pixi-proxy';
export class GraphicAssetPalette export class GraphicAssetPalette
{ {
@ -24,26 +25,28 @@ export class GraphicAssetPalette
public applyPalette(texture: Texture<Resource>): Texture<Resource> public applyPalette(texture: Texture<Resource>): Texture<Resource>
{ {
const sprite = new NitroSprite(texture); const renderTexture = TextureUtils.createAndWriteRenderTexture(texture.width, texture.height, new Sprite(texture));
const textureCanvas = TextureUtils.generateCanvas(sprite); const pixels = TextureUtils.getPixels(renderTexture);
const textureCtx = textureCanvas.getContext('2d');
const textureImageData = textureCtx.getImageData(0, 0, textureCanvas.width, textureCanvas.height);
const data = textureImageData.data;
for(let i = 0; i < data.length; i += 4) for(let i = 0; i < pixels.length; i += 4)
{ {
let paletteColor = this._palette[data[i + 1]]; let paletteColor = this._palette[pixels[i + 1]];
if(paletteColor === undefined) paletteColor = [0, 0, 0]; if(paletteColor === undefined) paletteColor = [0, 0, 0];
data[i] = paletteColor[0]; pixels[i] = paletteColor[0];
data[i + 1] = paletteColor[1]; pixels[i + 1] = paletteColor[1];
data[i + 2] = paletteColor[2]; pixels[i + 2] = paletteColor[2];
} }
textureCtx.putImageData(textureImageData, 0, 0); const canvaGLTexture = renderTexture.baseTexture._glTextures['1']?.texture;
const gl = (PixiApplicationProxy.instance.renderer as Renderer)?.gl;
return Texture.from(textureCanvas); gl.bindTexture(gl.TEXTURE_2D, canvaGLTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, renderTexture.width, renderTexture.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
gl.bindTexture(gl.TEXTURE_2D, null);
return renderTexture;
} }
public get primaryColor(): number public get primaryColor(): number