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 { Sprite } from '@pixi/sprite';
|
||||||
import { NitroContainer, NitroSprite } from '../../core';
|
import { NitroContainer, NitroSprite } from '../../core';
|
||||||
import { AdvancedMap } from '../../core/utils/AdvancedMap';
|
import { AdvancedMap } from '../../core/utils/AdvancedMap';
|
||||||
|
import { PaletteMapFilter } from '../../core/utils/PaletteMapFilter';
|
||||||
import { IGraphicAsset } from '../../room/object/visualization/utils/IGraphicAsset';
|
import { IGraphicAsset } from '../../room/object/visualization/utils/IGraphicAsset';
|
||||||
import { TextureUtils } from '../../room/utils/TextureUtils';
|
import { TextureUtils } from '../../room/utils/TextureUtils';
|
||||||
import { Nitro } from '../Nitro';
|
import { Nitro } from '../Nitro';
|
||||||
@ -394,6 +395,8 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||||||
if(this._avatarSpriteData && this._avatarSpriteData.paletteIsGrayscale)
|
if(this._avatarSpriteData && this._avatarSpriteData.paletteIsGrayscale)
|
||||||
{
|
{
|
||||||
this.convertToGrayscale(container);
|
this.convertToGrayscale(container);
|
||||||
|
|
||||||
|
container.filters.push(new PaletteMapFilter(this._avatarSpriteData.reds, [], [], []));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!cache)
|
if(!cache)
|
||||||
@ -415,13 +418,13 @@ export class AvatarImage implements IAvatarImage, IAvatarEffectListener
|
|||||||
|
|
||||||
if(!this._reusableTexture) return null;
|
if(!this._reusableTexture) return null;
|
||||||
|
|
||||||
if(this._avatarSpriteData)
|
// if(this._avatarSpriteData)
|
||||||
{
|
// {
|
||||||
if(this._avatarSpriteData.paletteIsGrayscale)
|
// if(this._avatarSpriteData.paletteIsGrayscale)
|
||||||
{
|
// {
|
||||||
this._reusableTexture = this.applyPalette(this._reusableTexture, this._avatarSpriteData.reds, [], []);
|
// this._reusableTexture = this.applyPalette(this._reusableTexture, this._avatarSpriteData.reds, [], []);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
this._image = this._reusableTexture;
|
this._image = this._reusableTexture;
|
||||||
this._changes = false;
|
this._changes = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user