mirror of
https://github.com/billsonnn/nitro-renderer.git
synced 2024-10-23 03:33:04 +02:00
PaletteMapFilter
This commit is contained in:
parent
31fc2b714c
commit
270d785d27
65
src/core/utils/PaletteMapFilter.ts
Normal file
65
src/core/utils/PaletteMapFilter.ts
Normal file
@ -0,0 +1,65 @@
|
||||
import { NitroFilter } from './proxy';
|
||||
|
||||
const vertex = `
|
||||
attribute vec2 aVertexPosition;
|
||||
attribute vec2 aTextureCoord;
|
||||
uniform mat3 projectionMatrix;
|
||||
varying vec2 vTextureCoord;
|
||||
void main(void)
|
||||
{
|
||||
gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);
|
||||
vTextureCoord = aTextureCoord;
|
||||
}`;
|
||||
|
||||
const fragment = `
|
||||
varying vec2 vTextureCoord;
|
||||
uniform sampler2D uSampler;
|
||||
uint8_t reds[256];
|
||||
uint8_t greens[256];
|
||||
uint8_t blues[256];
|
||||
uint8_t alphas[256];
|
||||
|
||||
void main(void) {
|
||||
vec4 currentColor = texture2D(uSampler, vTextureCoord);
|
||||
vec4 newColor =
|
||||
|
||||
gl_FragColor = vec4(newColor.r, newColor.g, newColor.b, newColor.a);
|
||||
}`;
|
||||
|
||||
export class PaletteMapFilter extends NitroFilter
|
||||
{
|
||||
private _reds: number[];
|
||||
private _greens: number[];
|
||||
private _blues: number[];
|
||||
private _alphas: number[];
|
||||
|
||||
constructor(reds: number[], greens: number[], blues: number[], alphas: number[])
|
||||
{
|
||||
super(vertex, fragment);
|
||||
|
||||
this._reds = reds;
|
||||
this._greens = greens;
|
||||
this._blues = blues;
|
||||
this._alphas = alphas;
|
||||
}
|
||||
|
||||
public get reds(): number[]
|
||||
{
|
||||
return this._reds;
|
||||
}
|
||||
|
||||
public get blues(): number[]
|
||||
{
|
||||
return this._blues;
|
||||
}
|
||||
|
||||
public get greens(): number[]
|
||||
{
|
||||
return this._greens;
|
||||
}
|
||||
|
||||
public get alphas(): number[]
|
||||
{
|
||||
return this._alphas;
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@ import { Rectangle } from '@pixi/math';
|
||||
import { Sprite } from '@pixi/sprite';
|
||||
import { NitroContainer, NitroSprite } from '../../core';
|
||||
import { AdvancedMap } from '../../core/utils/AdvancedMap';
|
||||
import { PaletteMapFilter } from '../../core/utils/PaletteMapFilter';
|
||||
import { IGraphicAsset } from '../../room/object/visualization/utils/IGraphicAsset';
|
||||
import { TextureUtils } from '../../room/utils/TextureUtils';
|
||||
import { Nitro } from '../Nitro';
|
||||
@ -394,6 +395,8 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
||||
if(this._avatarSpriteData && this._avatarSpriteData.paletteIsGrayscale)
|
||||
{
|
||||
this.convertToGrayscale(container);
|
||||
|
||||
container.filters.push(new PaletteMapFilter(this._avatarSpriteData.reds, [], [], []));
|
||||
}
|
||||
|
||||
if(!cache)
|
||||
@ -415,13 +418,13 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
||||
|
||||
if(!this._reusableTexture) return null;
|
||||
|
||||
if(this._avatarSpriteData)
|
||||
{
|
||||
if(this._avatarSpriteData.paletteIsGrayscale)
|
||||
{
|
||||
this._reusableTexture = this.applyPalette(this._reusableTexture, this._avatarSpriteData.reds, [], []);
|
||||
}
|
||||
}
|
||||
// if(this._avatarSpriteData)
|
||||
// {
|
||||
// if(this._avatarSpriteData.paletteIsGrayscale)
|
||||
// {
|
||||
// this._reusableTexture = this.applyPalette(this._reusableTexture, this._avatarSpriteData.reds, [], []);
|
||||
// }
|
||||
// }
|
||||
|
||||
this._image = this._reusableTexture;
|
||||
this._changes = false;
|
||||
|
Loading…
Reference in New Issue
Block a user