159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2010 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.texture; 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.*; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.renderer.Renderer; 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.util.NativeObject; 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException; 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.nio.ByteBuffer; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.ArrayList; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.Arrays; 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.List; 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>Image</code> defines a data format for a graphical image. The image 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * is defined by a format, a height and width, and the image data. The width and 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * height must be greater than 0. The data is contained in a byte buffer, and 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * should be packed before creation of the image object. 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Mark Powell 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Joshua Slack 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @version $Id: Image.java 4131 2009-03-19 20:15:28Z blaine.dev $ 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class Image extends NativeObject implements Savable /*, Cloneable*/ { 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public enum Format { 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit alpha 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Alpha8(8), 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit alpha 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Alpha16(16), 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit grayscale/luminance. 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance8(8), 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit grayscale/luminance. 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance16(16), 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * half-precision floating-point grayscale/luminance. 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance16F(16,true), 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * single-precision floating-point grayscale/luminance. 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance32F(32,true), 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit luminance/grayscale and 8-bit alpha. 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance8Alpha8(16), 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit luminance/grayscale and 16-bit alpha. 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance16Alpha16(32), 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * half-precision floating-point grayscale/luminance and alpha. 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Luminance16FAlpha16F(32,true), 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Intensity8(8), 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Intensity16(16), 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit blue, green, and red. 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta BGR8(24), // BGR and ABGR formats are often used on windows systems 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit red, green, and blue. 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB8(24), 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 10-bit red, green, and blue. 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB10(30), 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit red, green, and blue. 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB16(48), 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5-bit red, 6-bit green, and 5-bit blue. 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB565(16), 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 4-bit alpha, red, green, and blue. Used on Android only. 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ARGB4444(16), 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5-bit red, green, and blue with 1-bit alpha. 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB5A1(16), 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit red, green, blue, and alpha. 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGBA8(32), 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 8-bit alpha, blue, green, and red. 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ABGR8(32), 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit red, green, blue and alpha 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGBA16(64), 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * S3TC compression DXT1. 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Called BC1 in DirectX10. 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta DXT1(4,false,true, false), 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * S3TC compression DXT1 with 1-bit alpha. 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta DXT1A(4,false,true, false), 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * S3TC compression DXT3 with 4-bit alpha. 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Called BC2 in DirectX10. 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta DXT3(8,false,true, false), 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * S3TC compression DXT5 with interpolated 8-bit alpha. 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Called BC3 in DirectX10. 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta DXT5(8,false,true, false), 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Luminance-Alpha Texture Compression. 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Called BC5 in DirectX10. 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta LATC(8, false, true, false), 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Arbitrary depth format. The precision is chosen by the video 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * hardware. 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Depth(0,true,false,false), 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16-bit depth. 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Depth16(16,true,false,false), 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 24-bit depth. 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Depth24(24,true,false,false), 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 32-bit depth. 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Depth32(32,true,false,false), 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * single-precision floating point depth. 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Depth32F(32,true,false,true), 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Texture data is stored as {@link Format#RGB16F} in system memory, 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * but will be converted to {@link Format#RGB111110F} when sent 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to the video hardware. 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB16F_to_RGB111110F(48,true), 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * unsigned floating-point red, green and blue that uses 32 bits. 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB111110F(32,true), 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Texture data is stored as {@link Format#RGB16F} in system memory, 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * but will be converted to {@link Format#RGB9E5} when sent 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to the video hardware. 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB16F_to_RGB9E5(48,true), 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 9-bit red, green and blue with 5-bit exponent. 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB9E5(32,true), 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * half-precision floating point red, green, and blue. 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB16F(48,true), 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * half-precision floating point red, green, blue, and alpha. 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGBA16F(64,true), 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * single-precision floating point red, green, and blue. 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGB32F(96,true), 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * single-precision floating point red, green, blue and alpha. 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RGBA32F(128,true), 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Luminance/grayscale texture compression. 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Called BC4 in DirectX10. 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta LTC(4, false, true, false); 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private int bpp; 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private boolean isDepth; 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private boolean isCompressed; 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private boolean isFloatingPoint; 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Format(int bpp){ 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.bpp = bpp; 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Format(int bpp, boolean isFP){ 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(bpp); 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.isFloatingPoint = isFP; 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Format(int bpp, boolean isDepth, boolean isCompressed, boolean isFP){ 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(bpp, isFP); 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.isDepth = isDepth; 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.isCompressed = isCompressed; 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return bits per pixel. 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getBitsPerPixel(){ 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return bpp; 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if this format is a depth format, false otherwise. 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isDepthFormat(){ 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return isDepth; 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if this is a compressed image format, false if 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * uncompressed. 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isCompressed() { 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return isCompressed; 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if this image format is in floating point, 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * false if it is an integer format. 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean isFloatingPont(){ 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return isFloatingPoint; 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // image attributes 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected Format format; 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected int width, height, depth; 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected int[] mipMapSizes; 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected ArrayList<ByteBuffer> data; 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected transient Object efficientData; 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected int multiSamples = 1; 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// protected int mipOffset = 0; 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void resetObject() { 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.id = -1; 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void deleteObject(Object rendererObject) { 32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ((Renderer)rendererObject).deleteImage(this); 33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public NativeObject createDestructableClone() { 33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new Image(id); 33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return A shallow clone of this image. The data is not cloned. 33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image clone(){ 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Image clone = (Image) super.clone(); 34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta clone.mipMapSizes = mipMapSizes != null ? mipMapSizes.clone() : null; 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta clone.data = data != null ? new ArrayList<ByteBuffer>(data) : null; 34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta clone.setUpdateNeeded(); 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return clone; 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>Image</code> object. All values 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * are undefined. 35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image() { 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(Image.class); 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta data = new ArrayList<ByteBuffer>(1); 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected Image(int id){ 35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta super(Image.class, id); 36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>Image</code> object. The 36459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * attributes of the image are defined during construction. 36559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 36659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param format 36759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data format of the image. 36859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param width 36959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the width of the image. 37059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param height 37159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the height of the image. 37259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 37359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image data. 37459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param mipMapSizes 37559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the array of mipmap sizes, or null for no mipmaps. 37659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 37759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image(Format format, int width, int height, int depth, ArrayList<ByteBuffer> data, 37859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int[] mipMapSizes) { 37959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 38059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(); 38159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 38259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (mipMapSizes != null && mipMapSizes.length <= 1) { 38359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta mipMapSizes = null; 38459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 38559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 38659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setFormat(format); 38759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.width = width; 38859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.height = height; 38959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data = data; 39059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.depth = depth; 39159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.mipMapSizes = mipMapSizes; 39259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 39359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 39459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 39559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>Image</code> object. The 39659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * attributes of the image are defined during construction. 39759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 39859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param format 39959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data format of the image. 40059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param width 40159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the width of the image. 40259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param height 40359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the height of the image. 40459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 40559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image data. 40659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param mipMapSizes 40759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the array of mipmap sizes, or null for no mipmaps. 40859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 40959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image(Format format, int width, int height, ByteBuffer data, 41059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int[] mipMapSizes) { 41159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(); 41359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (mipMapSizes != null && mipMapSizes.length <= 1) { 41559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta mipMapSizes = null; 41659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 41759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setFormat(format); 41959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.width = width; 42059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.height = height; 42159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (data != null){ 42259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data = new ArrayList<ByteBuffer>(1); 42359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data.add(data); 42459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 42559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.mipMapSizes = mipMapSizes; 42659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 42759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 42859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 42959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>Image</code> object. The 43059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * attributes of the image are defined during construction. 43159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 43259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param format 43359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data format of the image. 43459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param width 43559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the width of the image. 43659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param height 43759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the height of the image. 43859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 43959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image data. 44059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 44159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image(Format format, int width, int height, int depth, ArrayList<ByteBuffer> data) { 44259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(format, width, height, depth, data, null); 44359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 44559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 44659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>Image</code> object. The 44759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * attributes of the image are defined during construction. 44859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 44959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param format 45059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data format of the image. 45159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param width 45259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the width of the image. 45359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param height 45459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the height of the image. 45559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 45659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image data. 45759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 45859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Image(Format format, int width, int height, ByteBuffer data) { 45959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this(format, width, height, data, null); 46059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 46159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 46259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 46359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The number of samples (for multisampled textures). 46459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Image#setMultiSamples(int) 46559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 46659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getMultiSamples() { 46759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return multiSamples; 46859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 46959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 47059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 47159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param multiSamples Set the number of samples to use for this image, 47259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * setting this to a value higher than 1 turns this image/texture 47359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * into a multisample texture (on OpenGL3.1 and higher). 47459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 47559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setMultiSamples(int multiSamples) { 47659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (multiSamples <= 0) 47759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("multiSamples must be > 0"); 47859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 47959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (getData(0) != null) 48059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("Cannot upload data as multisample texture"); 48159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 48259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (hasMipmaps()) 48359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("Multisample textures do not support mipmaps"); 48459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 48559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.multiSamples = multiSamples; 48659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 48759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 48859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 48959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setData</code> sets the data that makes up the image. This data 49059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * is packed into an array of <code>ByteBuffer</code> objects. 49159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 49259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 49359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data that contains the image information. 49459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 49559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setData(ArrayList<ByteBuffer> data) { 49659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data = data; 49759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 49859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 49959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 50059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 50159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setData</code> sets the data that makes up the image. This data 50259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * is packed into a single <code>ByteBuffer</code>. 50359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 50459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param data 50559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the data that contains the image information. 50659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 50759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setData(ByteBuffer data) { 50859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data = new ArrayList<ByteBuffer>(1); 50959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data.add(data); 51059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 51159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 51259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 51359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void addData(ByteBuffer data) { 51459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.data == null) 51559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data = new ArrayList<ByteBuffer>(1); 51659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data.add(data); 51759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 51859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 51959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 52059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setData(int index, ByteBuffer data) { 52159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (index >= 0) { 52259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta while (this.data.size() <= index) { 52359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data.add(null); 52459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 52559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.data.set(index, data); 52659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 52759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else { 52859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new IllegalArgumentException("index must be greater than or equal to 0."); 52959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 53059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 53159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 53259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 53359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Set the efficient data representation of this image. 53459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 53559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Some system implementations are more efficient at operating 53659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * on data other than ByteBuffers, in that case, this method can be used. 53759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 53859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param efficientData 53959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 54059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setEfficentData(Object efficientData){ 54159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.efficientData = efficientData; 54259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 54359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 54459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 54559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 54659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The efficient data representation of this image. 54759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Image#setEfficentData(java.lang.Object) 54859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 54959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Object getEfficentData(){ 55059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return efficientData; 55159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 55259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 55359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 55459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the mipmap sizes stored in this image's data buffer. Mipmaps are 55559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * stored sequentially, and the first mipmap is the main image data. To 55659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * specify no mipmaps, pass null and this will automatically be expanded 55759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * into a single mipmap of the full 55859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 55959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param mipMapSizes 56059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the mipmap sizes array, or null for a single image map. 56159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 56259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setMipMapSizes(int[] mipMapSizes) { 56359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (mipMapSizes != null && mipMapSizes.length <= 1) 56459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta mipMapSizes = null; 56559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 56659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.mipMapSizes = mipMapSizes; 56759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 56859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 56959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 57059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 57159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setHeight</code> sets the height value of the image. It is 57259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * typically a good idea to try to keep this as a multiple of 2. 57359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 57459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param height 57559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the height of the image. 57659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 57759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setHeight(int height) { 57859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.height = height; 57959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 58059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 58159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 58259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 58359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setDepth</code> sets the depth value of the image. It is 58459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * typically a good idea to try to keep this as a multiple of 2. This is 58559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * used for 3d images. 58659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 58759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param depth 58859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the depth of the image. 58959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 59059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setDepth(int depth) { 59159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.depth = depth; 59259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 59359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 59459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 59559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 59659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setWidth</code> sets the width value of the image. It is 59759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * typically a good idea to try to keep this as a multiple of 2. 59859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 59959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param width 60059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the width of the image. 60159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 60259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setWidth(int width) { 60359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.width = width; 60459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 60559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 60659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 60759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 60859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>setFormat</code> sets the image format for this image. 60959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 61059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param format 61159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the image format. 61259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @throws NullPointerException 61359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * if format is null 61459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Format 61559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 61659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setFormat(Format format) { 61759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (format == null) { 61859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new NullPointerException("format may not be null."); 61959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 62059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 62159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.format = format; 62259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta setUpdateNeeded(); 62359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 62459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 62559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 62659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getFormat</code> returns the image format for this image. 62759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 62859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the image format. 62959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see Format 63059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 63159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Format getFormat() { 63259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return format; 63359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 63459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 63559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 63659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getWidth</code> returns the width of this image. 63759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 63859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the width of this image. 63959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 64059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getWidth() { 64159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return width; 64259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 64359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 64459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 64559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getHeight</code> returns the height of this image. 64659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 64759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the height of this image. 64859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 64959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getHeight() { 65059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return height; 65159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 65259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 65359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 65459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getDepth</code> returns the depth of this image (for 3d images). 65559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 65659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the depth of this image. 65759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 65859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getDepth() { 65959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return depth; 66059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 66159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 66259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 66359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getData</code> returns the data for this image. If the data is 66459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * undefined, null will be returned. 66559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 66659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the data for this image. 66759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 66859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public List<ByteBuffer> getData() { 66959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return data; 67059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 67159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 67259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 67359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getData</code> returns the data for this image. If the data is 67459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * undefined, null will be returned. 67559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 67659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the data for this image. 67759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 67859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ByteBuffer getData(int index) { 67959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (data.size() > index) 68059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return data.get(index); 68159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta else 68259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return null; 68359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 68459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 68559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 68659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns whether the image data contains mipmaps. 68759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 68859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if the image data contains mipmaps, false if not. 68959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 69059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean hasMipmaps() { 69159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return mipMapSizes != null; 69259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 69359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 69459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 69559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the mipmap sizes for this image. 69659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 69759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the mipmap sizes for this image. 69859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 69959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int[] getMipMapSizes() { 70059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return mipMapSizes; 70159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 70259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 70359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 70459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String toString(){ 70559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta StringBuilder sb = new StringBuilder(); 70659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append(getClass().getSimpleName()); 70759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append("[size=").append(width).append("x").append(height); 70859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 70959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (depth > 1) 71059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append("x").append(depth); 71159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 71259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append(", format=").append(format.name()); 71359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 71459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (hasMipmaps()) 71559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append(", mips"); 71659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 71759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (getId() >= 0) 71859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append(", id=").append(id); 71959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 72059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sb.append("]"); 72159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 72259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return sb.toString(); 72359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 72459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 72559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 72659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean equals(Object other) { 72759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (other == this) { 72859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 72959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 73059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (!(other instanceof Image)) { 73159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 73259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 73359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Image that = (Image) other; 73459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getFormat() != that.getFormat()) 73559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 73659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getWidth() != that.getWidth()) 73759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 73859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getHeight() != that.getHeight()) 73959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 74059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getData() != null && !this.getData().equals(that.getData())) 74159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 74259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getData() == null && that.getData() != null) 74359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 74459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getMipMapSizes() != null 74559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta && !Arrays.equals(this.getMipMapSizes(), that.getMipMapSizes())) 74659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 74759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getMipMapSizes() == null && that.getMipMapSizes() != null) 74859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 74959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this.getMultiSamples() != that.getMultiSamples()) 75059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 75159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 75259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 75359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 75459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 75559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 75659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int hashCode() { 75759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int hash = 7; 75859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + (this.format != null ? this.format.hashCode() : 0); 75959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + this.width; 76059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + this.height; 76159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + this.depth; 76259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + Arrays.hashCode(this.mipMapSizes); 76359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + (this.data != null ? this.data.hashCode() : 0); 76459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash = 97 * hash + this.multiSamples; 76559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return hash; 76659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 76759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 76859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void write(JmeExporter e) throws IOException { 76959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OutputCapsule capsule = e.getCapsule(this); 77059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(format, "format", Format.RGBA8); 77159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(width, "width", 0); 77259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(height, "height", 0); 77359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(depth, "depth", 0); 77459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(mipMapSizes, "mipMapSizes", null); 77559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(multiSamples, "multiSamples", 1); 77659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.writeByteBufferArrayList(data, "data", null); 77759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 77859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 77959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void read(JmeImporter e) throws IOException { 78059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputCapsule capsule = e.getCapsule(this); 78159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta format = capsule.readEnum("format", Format.class, Format.RGBA8); 78259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta width = capsule.readInt("width", 0); 78359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta height = capsule.readInt("height", 0); 78459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta depth = capsule.readInt("depth", 0); 78559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta mipMapSizes = capsule.readIntArray("mipMapSizes", null); 78659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta multiSamples = capsule.readInt("multiSamples", 1); 78759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta data = (ArrayList<ByteBuffer>) capsule.readByteBufferArrayList("data", null); 78859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 78959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 79059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 791