• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.jme3.texture;
2 
3 import java.util.List;
4 import java.util.logging.Level;
5 import java.util.logging.Logger;
6 
7 /**
8  * This class implements a Texture array
9  * warning, this feature is only supported on opengl 3.0 version.
10  * To check if a hardware supports TextureArray check :
11  * renderManager.getRenderer().getCaps().contains(Caps.TextureArray)
12  * @author phate666
13  */
14 public class TextureArray extends Texture {
15 
16     private WrapMode wrapS = WrapMode.EdgeClamp;
17     private WrapMode wrapT = WrapMode.EdgeClamp;
18 
19     /**
20      * Construct a TextureArray
21      * warning, this feature is only supported on opengl 3.0 version.
22      * To check if a hardware supports TextureArray check :
23      * renderManager.getRenderer().getCaps().contains(Caps.TextureArray)
24      */
TextureArray()25     public TextureArray() {
26         super();
27     }
28 
29     /**
30      * Construct a TextureArray from the given list of images
31      * warning, this feature is only supported on opengl 3.0 version.
32      * To check if a hardware supports TextureArray check :
33      * renderManager.getRenderer().getCaps().contains(Caps.TextureArray)
34      * @param images
35      */
TextureArray(List<Image> images)36     public TextureArray(List<Image> images) {
37         super();
38         int width = images.get(0).getWidth();
39         int height = images.get(0).getHeight();
40         Image arrayImage = new Image(images.get(0).getFormat(), width, height,
41                 null);
42 
43         for (Image img : images) {
44             if (img.getHeight() != height || img.getWidth() != width) {
45                 Logger.getLogger(TextureArray.class.getName()).log(
46                         Level.WARNING,
47                         "all images must have the same width/height");
48                 continue;
49             }
50             arrayImage.addData(img.getData(0));
51         }
52         setImage(arrayImage);
53     }
54 
55     @Override
createSimpleClone()56     public Texture createSimpleClone() {
57         TextureArray clone = new TextureArray();
58         createSimpleClone(clone);
59         return clone;
60     }
61 
62     @Override
createSimpleClone(Texture rVal)63     public Texture createSimpleClone(Texture rVal) {
64         rVal.setWrap(WrapAxis.S, wrapS);
65         rVal.setWrap(WrapAxis.T, wrapT);
66         return super.createSimpleClone(rVal);
67     }
68 
69     @Override
getType()70     public Type getType() {
71         return Type.TwoDimensionalArray;
72     }
73 
74     @Override
getWrap(WrapAxis axis)75     public WrapMode getWrap(WrapAxis axis) {
76         switch (axis) {
77             case S:
78                 return wrapS;
79             case T:
80                 return wrapT;
81             default:
82                 throw new IllegalArgumentException("invalid WrapAxis: " + axis);
83         }
84     }
85 
86     @Override
setWrap(WrapAxis axis, WrapMode mode)87     public void setWrap(WrapAxis axis, WrapMode mode) {
88         if (mode == null) {
89             throw new IllegalArgumentException("mode can not be null.");
90         } else if (axis == null) {
91             throw new IllegalArgumentException("axis can not be null.");
92         }
93         switch (axis) {
94             case S:
95                 this.wrapS = mode;
96                 break;
97             case T:
98                 this.wrapT = mode;
99                 break;
100             default:
101                 throw new IllegalArgumentException("Not applicable for 2D textures");
102         }
103     }
104 
105     @Override
setWrap(WrapMode mode)106     public void setWrap(WrapMode mode) {
107         if (mode == null) {
108             throw new IllegalArgumentException("mode can not be null.");
109         }
110         this.wrapS = mode;
111         this.wrapT = mode;
112     }
113 }