public abstract class JoglMaterialStateUtil {
public static void apply(final JoglRenderer renderer, final MaterialState state) {
// ask for the current state record
final RenderContext context = ContextManager.getCurrentContext();
final MaterialStateRecord record = (MaterialStateRecord) context.getStateRecord(StateType.Material);
context.setCurrentState(StateType.Material, state);
if (state.isEnabled()) {
// setup colormaterial, if changed.
applyColorMaterial(state.getColorMaterial(), state.getColorMaterialFace(), record);
// apply colors, if needed and not what is currently set.
applyColor(ColorMaterial.Ambient, state.getAmbient(), state.getBackAmbient(), record);
applyColor(ColorMaterial.Diffuse, state.getDiffuse(), state.getBackDiffuse(), record);
applyColor(ColorMaterial.Emissive, state.getEmissive(), state.getBackEmissive(), record);
applyColor(ColorMaterial.Specular, state.getSpecular(), state.getBackSpecular(), record);
// set our shine
applyShininess(state.getShininess(), state.getBackShininess(), record);
} else {
// apply defaults
applyColorMaterial(MaterialState.DEFAULT_COLOR_MATERIAL, MaterialState.DEFAULT_COLOR_MATERIAL_FACE, record);
applyColor(ColorMaterial.Ambient, MaterialState.DEFAULT_AMBIENT, MaterialState.DEFAULT_AMBIENT, record);
applyColor(ColorMaterial.Diffuse, MaterialState.DEFAULT_DIFFUSE, MaterialState.DEFAULT_DIFFUSE, record);
applyColor(ColorMaterial.Emissive, MaterialState.DEFAULT_EMISSIVE, MaterialState.DEFAULT_EMISSIVE, record);
applyColor(ColorMaterial.Specular, MaterialState.DEFAULT_SPECULAR, MaterialState.DEFAULT_SPECULAR, record);
applyShininess(MaterialState.DEFAULT_SHININESS, MaterialState.DEFAULT_SHININESS, record);
}
if (!record.isValid()) {
record.validate();
}
}