package shapes; import java.util.ArrayList; import javax.media.opengl.GL; import processing.core.PApplet; import mekstension.Mekstension; public class ShapeRenderer { Mekstension p; public nvArray GLblendL = new nvArray(); public nvArray GLblendR = new nvArray(); private boolean blnDisableZTest = true; public boolean enableBlend = false; /** * Constructor * @param p_ {@link Mekstension} parent, extended from {@link PApplet} * @see PApplet */ public ShapeRenderer(Mekstension p_) { p = p_; GLblendL.add("GL_ONE",GL.GL_ONE); GLblendL.add("GL_SRC_COLOR",GL.GL_SRC_COLOR); GLblendL.add("GL_ONE_MINUS_SRC_COLOR",GL.GL_ONE_MINUS_SRC_COLOR); GLblendL.add("GL_DST_COLOR",GL.GL_DST_COLOR); GLblendL.add("GL_ONE_MINUS_DST_COLOR",GL.GL_ONE_MINUS_DST_COLOR); GLblendL.add("GL_SRC_ALPHA",GL.GL_SRC_ALPHA); GLblendL.add("GL_ONE_MINUS_SRC_ALPHA",GL.GL_ONE_MINUS_SRC_ALPHA); GLblendL.add("GL_DST_ALPHA",GL.GL_DST_ALPHA); GLblendL.add("GL_ONE_MINUS_DST_ALPHA",GL.GL_ONE_MINUS_DST_ALPHA); GLblendL.add("GL_SRC_ALPHA_SATURATE",GL.GL_SRC_ALPHA_SATURATE); GLblendL.add("GL_CONSTANT_COLOR",GL.GL_CONSTANT_COLOR ); GLblendL.add("GL_ONE_MINUS_CONSTANT_COLOR",GL.GL_ONE_MINUS_CONSTANT_COLOR); GLblendL.add("GL_CONSTANT_ALPHA",GL.GL_CONSTANT_ALPHA ); GLblendL.add("GL_ONE_MINUS_CONSTANT_ALPHA",GL.GL_ONE_MINUS_CONSTANT_ALPHA); GLblendL.add("GL_ZERO",GL.GL_ZERO); GLblendR.add("GL_ONE",GL.GL_ONE); GLblendR.add("GL_SRC_COLOR",GL.GL_SRC_COLOR); GLblendR.add("GL_ONE_MINUS_SRC_COLOR",GL.GL_ONE_MINUS_SRC_COLOR); GLblendR.add("GL_DST_COLOR",GL.GL_DST_COLOR); GLblendR.add("GL_ONE_MINUS_DST_COLOR",GL.GL_ONE_MINUS_DST_COLOR); GLblendR.add("GL_SRC_ALPHA",GL.GL_SRC_ALPHA); GLblendR.add("GL_ONE_MINUS_SRC_ALPHA",GL.GL_ONE_MINUS_SRC_ALPHA); GLblendR.add("GL_DST_ALPHA",GL.GL_DST_ALPHA); GLblendR.add("GL_ONE_MINUS_DST_ALPHA",GL.GL_ONE_MINUS_DST_ALPHA); GLblendR.add("GL_CONSTANT_COLOR",GL.GL_CONSTANT_COLOR ); GLblendR.add("GL_ONE_MINUS_CONSTANT_COLOR",GL.GL_ONE_MINUS_CONSTANT_COLOR); GLblendR.add("GL_CONSTANT_ALPHA",GL.GL_CONSTANT_ALPHA ); GLblendR.add("GL_ONE_MINUS_CONSTANT_ALPHA",GL.GL_ONE_MINUS_CONSTANT_ALPHA); GLblendR.add("GL_ZERO",GL.GL_ZERO); } /** * draw loop */ public void draw(ShapeList shapelist) { if ( enableBlend ) { if( blnDisableZTest ) p.gl.glDisable(GL.GL_DEPTH_TEST); p.gl.glEnable(GL.GL_BLEND); p.gl.glBlendFunc( GLblendL.getCurrent(), GLblendR.getCurrent() ); } for(int i = 0; i < shapelist.size(); i++) { shapelist.get(i).update(); shapelist.get(i).draw(); } if( enableBlend ) { p.gl.glBlendFunc( GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA ); } } public void nextBlendModeR() { GLblendR.next(); } public void nextBlendModeL() { GLblendL.next(); } public void toggleDepthTest() { blnDisableZTest = blnDisableZTest ? false : true; } public void toggleBlend() { enableBlend = enableBlend ? false : true; } /** * name/value pair array * @author Ira Greenberg */ public class nvArray { ArrayList name = new ArrayList (); ArrayList val = new ArrayList (); int length; int pos; nvArray() { length = 0; pos = 0; } void add(String l_name, int l_val) { length++; name.add( l_name ); val.add( new Integer(l_val) ); } void next() { pos = (pos+1 == length)? 0 : pos+1; } void prev() { pos = (pos-1 <0)? length-1 : pos-1; } public int getCurrent() { return ( (Integer) val.get( pos ) ).intValue(); } public String getCurrentName() { return( (String) name.get( pos ) ); } } }