JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/5.3.3/pixi.min.js"></script>
<body>
<img id="grid_img" style="display: none"
src="data:image/gif;base64,R0lGODlhCAAIAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///ywAAAAACAAIAAAILADlDBJIcNCgTbJkkUooR46sYrI2QTSYECFDORYfbqIo8RTChglDFjNYkGBAADs=">
</body>
CSS
body {
background-color: #000;
}
JavaScript
PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.NEAREST;
var app = new PIXI.Application({
width: window.innerWidth,
height: window.innerHeight
})
document.body.appendChild(app.view);
// create filter
var fragSrc = `
precision mediump float;
varying vec2 vTextureCoord;
varying vec4 vColor;
uniform sampler2D uSampler;
uniform float colorAmount;
void main(void)
{
vec2 uvs = vTextureCoord.xy;
vec4 fg = texture2D(uSampler, vTextureCoord);
float val = (fg.r+fg.g+fg.b) / 3.;
float power = colorAmount * 2. + 1.;
vec4 outp;
outp = vec4(pow(val,1./power),pow(val,power),pow(val,power),1.);
gl_FragColor = outp;
}
`;
var container = new PIXI.Container();
app.stage.addChild(container);
// load image
var img = document.getElementById( "grid_img" );
var texture = PIXI.Texture.from( img );
for(col=0; col < 10; col++) {
for(row=0; row < 10; row++) {
tile = new PIXI.Sprite(texture);
tile.x = col * 8;
tile.y = row * 8;
filter = new PIXI.Filter(null, fragSrc, {colorAmount: Math.random()});
//filter.autofit = false;
//filter.padding = 0;
tile.filters = [filter];
container.addChild(tile);
}
}
var resize = function() {
// Get the parent
parent = app.view.parentNode;
// Resize the renderer
app.renderer.resize(window.innerWidth, window.innerHeight);
// Scale the renderer to fit 80x80 plus a 5px margin
narrowest = Math.min(parent.clientWidth, parent.clientHeight);
app.stage.scale.set(narrowest / (80 + 5 * 2));
}
// Listen for window resize events
window.addEventListener('resize', resize);
resize();