CustomBitmapLayer = {
return class CustomBitmapLayer extends deck.BitmapLayer {
getShaders() {
const shaders = super.getShaders();
shaders.inject = {
'fs:#decl': `uniform vec3 uColor; uniform float uOpacityScale;`,
'fs:DECKGL_FILTER_COLOR': `
// Convert color to grayscale and apply opacity scale
float grayscale = ((color.r + color.g + color.b) / 3.0) * uOpacityScale;
// Clamp grayscale to valid range
grayscale = clamp(grayscale, 0.0, 1.0);
// Apply custom color and scaled opacity
color = vec4(uColor, grayscale);
`
};
return shaders;
}
updateState(params) {
super.updateState(params);
const {props, oldProps} = params;
if (props.color !== oldProps.color || props.opacityScale !== oldProps.opacityScale) {
this.setState({
uniforms: {
uColor: props.color.map(c => c / 255),
uOpacityScale: props.opacityScale
}
});
}
}
draw(opts) {
const {uniforms} = this.state;
super.draw({
...opts,
uniforms: {
...opts.uniforms,
...uniforms,
},
});
}
}
}