159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.texture; 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.List; 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Level; 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.logging.Logger; 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This class implements a Texture array 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * warning, this feature is only supported on opengl 3.0 version. 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * To check if a hardware supports TextureArray check : 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * renderManager.getRenderer().getCaps().contains(Caps.TextureArray) 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author phate666 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class TextureArray extends Texture { 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private WrapMode wrapS = WrapMode.EdgeClamp; 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private WrapMode wrapT = WrapMode.EdgeClamp; 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Construct a TextureArray 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * warning, this feature is only supported on opengl 3.0 version. 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * To check if a hardware supports TextureArray check : 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * renderManager.getRenderer().getCaps().contains(Caps.TextureArray) 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public TextureArray() { 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(); 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Construct a TextureArray from the given list of images 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * warning, this feature is only supported on opengl 3.0 version. 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * To check if a hardware supports TextureArray check : 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * renderManager.getRenderer().getCaps().contains(Caps.TextureArray) 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param images 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public TextureArray(List<Image> images) { 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(); 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int width = images.get(0).getWidth(); 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int height = images.get(0).getHeight(); 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Image arrayImage = new Image(images.get(0).getFormat(), width, height, 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta null); 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (Image img : images) { 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (img.getHeight() != height || img.getWidth() != width) { 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Logger.getLogger(TextureArray.class.getName()).log( 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Level.WARNING, 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta "all images must have the same width/height"); 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta continue; 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta arrayImage.addData(img.getData(0)); 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setImage(arrayImage); 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Texture createSimpleClone() { 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TextureArray clone = new TextureArray(); 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta createSimpleClone(clone); 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return clone; 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Texture createSimpleClone(Texture rVal) { 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rVal.setWrap(WrapAxis.S, wrapS); 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rVal.setWrap(WrapAxis.T, wrapT); 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return super.createSimpleClone(rVal); 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Type getType() { 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return Type.TwoDimensionalArray; 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public WrapMode getWrap(WrapAxis axis) { 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (axis) { 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case S: 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return wrapS; 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case T: 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return wrapT; 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("invalid WrapAxis: " + axis); 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setWrap(WrapAxis axis, WrapMode mode) { 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (mode == null) { 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("mode can not be null."); 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else if (axis == null) { 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("axis can not be null."); 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (axis) { 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case S: 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.wrapS = mode; 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case T: 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.wrapT = mode; 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta break; 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("Not applicable for 2D textures"); 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setWrap(WrapMode mode) { 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (mode == null) { 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("mode can not be null."); 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.wrapS = mode; 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.wrapT = mode; 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta}