package com.shavenpuppy.jglib.sprites;
import java.nio.FloatBuffer;
import org.lwjgl.util.ReadableColor;
/**
* What to do with the alpha to the colours of a sprite
*/
public enum AlphaOp {
PREMULTIPLY {
@Override
protected int calc(ReadableColor c, int alpha) {
float alpha00 = c.getAlpha() * alpha * PREMULT_ALPHA;
float preMultAlpha00 = alpha00 * PREMULT_ALPHA;
return ((int)(c.getRed() * preMultAlpha00) << 0) | ((int)(c.getGreen() * preMultAlpha00) << 8) | ((int)(c.getBlue() * preMultAlpha00) << 16) | (int) alpha00 << 24;
}
},
KEEP {
@Override
protected int calc(ReadableColor c, int alpha) {
return (c.getRed() << 0) | (c.getGreen() << 8) | (c.getBlue() << 16) | ((c.getAlpha() * alpha) << 24);
}
},
ZERO {
@Override
protected int calc(ReadableColor c, int alpha) {
float alpha00 = c.getAlpha() * alpha * PREMULT_ALPHA;
float preMultAlpha00 = alpha00 * PREMULT_ALPHA;
return ((int)(c.getRed() * preMultAlpha00) << 0) | ((int)(c.getGreen() * preMultAlpha00) << 8) | ((int)(c.getBlue() * preMultAlpha00) << 16);
}
};
private static final float PREMULT_ALPHA = 1.0f / 255.0f;
public final void op(ReadableColor c, int alpha, FloatBuffer dest) {
dest.put(Float.intBitsToFloat(calc(c, alpha)));
}
public final void op(ReadableColor c, int alpha, SimpleRenderer renderer) {
renderer.glColori(calc(c, alpha));
}
protected abstract int calc(ReadableColor c, int alpha);
}