private static void applyShininess(final float frontShininess, final float backShininess, final MaterialStateRecord record) { if (frontShininess == backShininess) { // consolidate to one call if (!record.isValid() || frontShininess != record.frontShininess || record.backShininess != backShininess) { GL11.glMaterialf(getGLMaterialFace(MaterialFace.FrontAndBack), GL11.GL_SHININESS, frontShininess); record.backShininess = record.frontShininess = frontShininess; } } else { if (!record.isValid() || frontShininess != record.frontShininess) { GL11.glMaterialf(getGLMaterialFace(MaterialFace.Front), GL11.GL_SHININESS, frontShininess); record.frontShininess = frontShininess; } if (!record.isValid() || backShininess != record.backShininess) { GL11.glMaterialf(getGLMaterialFace(MaterialFace.Back), GL11.GL_SHININESS, backShininess); record.backShininess = backShininess; } } }
@Override public StateRecord createStateRecord(final ContextCapabilities caps) { return new MaterialStateRecord(); } }
if (!record.isValid() || !record.isSetColor(MaterialFace.FrontAndBack, glMatColor, frontColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(frontColor.getRed()).put(frontColor.getGreen()).put(frontColor.getBlue()) record.tempColorBuff.flip(); GL11.glMaterial(getGLMaterialFace(MaterialFace.FrontAndBack), glMat, record.tempColorBuff); record.setColor(MaterialFace.FrontAndBack, glMatColor, frontColor); if (!record.isValid() || !record.isSetColor(MaterialFace.Front, glMatColor, frontColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(frontColor.getRed()).put(frontColor.getGreen()).put(frontColor.getBlue()) record.tempColorBuff.flip(); GL11.glMaterial(getGLMaterialFace(MaterialFace.Front), glMat, record.tempColorBuff); record.setColor(MaterialFace.Front, glMatColor, frontColor); if (!record.isValid() || !record.isSetColor(MaterialFace.Back, glMatColor, backColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(backColor.getRed()).put(backColor.getGreen()).put(backColor.getBlue()) record.tempColorBuff.flip(); GL11.glMaterial(getGLMaterialFace(MaterialFace.Back), glMat, record.tempColorBuff); record.setColor(MaterialFace.Back, glMatColor, backColor);
private static void applyColorMaterial(final ColorMaterial colorMaterial, final MaterialFace face, final MaterialStateRecord record) { if (!record.isValid() || face != record.colorMaterialFace || colorMaterial != record.colorMaterial) { if (colorMaterial == ColorMaterial.None) { GL11.glDisable(GL11.GL_COLOR_MATERIAL); } else { final int glMat = getGLColorMaterial(colorMaterial); final int glFace = getGLMaterialFace(face); GL11.glColorMaterial(glFace, glMat); GL11.glEnable(GL11.GL_COLOR_MATERIAL); record.resetColorsForCM(face, colorMaterial); } record.colorMaterial = colorMaterial; record.colorMaterialFace = face; } }
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(); } }
if (!record.isValid() || !record.isSetColor(MaterialFace.FrontAndBack, glMatColor, frontColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(frontColor.getRed()).put(frontColor.getGreen()).put(frontColor.getBlue()) record.tempColorBuff.flip(); gl.getGL2().glMaterialfv(getGLMaterialFace(MaterialFace.FrontAndBack), glMat, record.tempColorBuff); record.setColor(MaterialFace.FrontAndBack, glMatColor, frontColor); if (!record.isValid() || !record.isSetColor(MaterialFace.Front, glMatColor, frontColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(frontColor.getRed()).put(frontColor.getGreen()).put(frontColor.getBlue()) record.tempColorBuff.flip(); gl.getGL2().glMaterialfv(getGLMaterialFace(MaterialFace.Front), glMat, record.tempColorBuff); record.setColor(MaterialFace.Front, glMatColor, frontColor); if (!record.isValid() || !record.isSetColor(MaterialFace.Back, glMatColor, backColor, record)) { record.tempColorBuff.clear(); record.tempColorBuff.put(backColor.getRed()).put(backColor.getGreen()).put(backColor.getBlue()) record.tempColorBuff.flip(); gl.getGL2().glMaterialfv(getGLMaterialFace(MaterialFace.Back), glMat, record.tempColorBuff); record.setColor(MaterialFace.Back, glMatColor, backColor);
private static void applyColorMaterial(final ColorMaterial colorMaterial, final MaterialFace face, final MaterialStateRecord record) { if (!record.isValid() || face != record.colorMaterialFace || colorMaterial != record.colorMaterial) { final GL gl = GLContext.getCurrentGL(); if (colorMaterial == ColorMaterial.None) { gl.glDisable(GLLightingFunc.GL_COLOR_MATERIAL); } else { final int glMat = getGLColorMaterial(colorMaterial); final int glFace = getGLMaterialFace(face); gl.getGL2().glColorMaterial(glFace, glMat); gl.glEnable(GLLightingFunc.GL_COLOR_MATERIAL); record.resetColorsForCM(face, colorMaterial); } record.colorMaterial = colorMaterial; record.colorMaterialFace = face; } }
public static void apply(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(); } }
private static void applyShininess(final float frontShininess, final float backShininess, final MaterialStateRecord record) { final GL gl = GLContext.getCurrentGL(); if (frontShininess == backShininess) { // consolidate to one call if (!record.isValid() || frontShininess != record.frontShininess || record.backShininess != backShininess) { gl.getGL2().glMaterialf(getGLMaterialFace(MaterialFace.FrontAndBack), GLLightingFunc.GL_SHININESS, frontShininess); record.backShininess = record.frontShininess = frontShininess; } } else { if (!record.isValid() || frontShininess != record.frontShininess) { gl.getGL2().glMaterialf(getGLMaterialFace(MaterialFace.Front), GLLightingFunc.GL_SHININESS, frontShininess); record.frontShininess = frontShininess; } if (!record.isValid() || backShininess != record.backShininess) { gl.getGL2().glMaterialf(getGLMaterialFace(MaterialFace.Back), GLLightingFunc.GL_SHININESS, backShininess); record.backShininess = backShininess; } } }