summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2006-01-06 22:03:42 +0000
committerKenneth Russel <[email protected]>2006-01-06 22:03:42 +0000
commit3d64d2ec821ef87d049e713d09922c594d2179cb (patch)
treeb9f2c17225346fbb79f7607a95328f2a2a884abe /src
parentecf045ea61a72bb36e2e44884df6632e60180f30 (diff)
Deleted old copies of image readers from demos.util now that they have
moved to com.sun.opengl.utils and updated demos git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/trunk@160 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4
Diffstat (limited to 'src')
-rw-r--r--src/demos/util/DDSReader.java413
-rw-r--r--src/demos/util/DxTex.java2
-rw-r--r--src/demos/util/LEDataInputStream.java223
-rw-r--r--src/demos/util/SGIImage.java335
-rw-r--r--src/demos/util/TGAImage.java320
5 files changed, 2 insertions, 1291 deletions
diff --git a/src/demos/util/DDSReader.java b/src/demos/util/DDSReader.java
deleted file mode 100644
index ee3fc8c..0000000
--- a/src/demos/util/DDSReader.java
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package demos.util;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-
-/** A reader for DirectDraw Surface (.dds) files, which are used to
- describe textures. These files can contain multiple mipmap levels
- in one file. This reader is currently minimal and does not support
- all of the possible file formats. */
-
-public class DDSReader {
-
- /** Simple class describing images and data; does not encapsulate
- image format information. User is responsible for transmitting
- that information in another way. */
-
- public static class ImageInfo {
- private ByteBuffer data;
- private int width;
- private int height;
-
- public ImageInfo(ByteBuffer data, int width, int height) {
- this.data = data; this.width = width; this.height = height;
- }
- public int getWidth() { return width; }
- public int getHeight() { return height; }
- public ByteBuffer getData() { return data; }
- }
-
- private FileInputStream fis;
- private FileChannel chan;
- private ByteBuffer buf;
- private Header header;
-
- // FourCC codes (compression formats)
- public static final int DXT1 = 0x31545844;
- public static final int DXT2 = 0x32545844;
- public static final int DXT3 = 0x33545844;
- public static final int DXT4 = 0x34545844;
- public static final int DXT5 = 0x35545844;
-
- //
- // Selected bits in header flags
- //
-
- public static final int DDSD_CAPS = 0x00000001; // Capacities are valid
- public static final int DDSD_HEIGHT = 0x00000002; // Height is valid
- public static final int DDSD_WIDTH = 0x00000004; // Width is valid
- public static final int DDSD_PITCH = 0x00000008; // Pitch is valid
- public static final int DDSD_BACKBUFFERCOUNT = 0x00000020; // Back buffer count is valid
- public static final int DDSD_ZBUFFERBITDEPTH = 0x00000040; // Z-buffer bit depth is valid (shouldn't be used in DDSURFACEDESC2)
- public static final int DDSD_ALPHABITDEPTH = 0x00000080; // Alpha bit depth is valid
- public static final int DDSD_LPSURFACE = 0x00000800; // lpSurface is valid
- public static final int DDSD_PIXELFORMAT = 0x00001000; // ddpfPixelFormat is valid
- public static final int DDSD_MIPMAPCOUNT = 0x00020000; // Mip map count is valid
- public static final int DDSD_LINEARSIZE = 0x00080000; // dwLinearSize is valid
- public static final int DDSD_DEPTH = 0x00800000; // dwDepth is valid
-
- public static final int DDPF_ALPHAPIXELS = 0x00000001; // Alpha channel is present
- public static final int DDPF_ALPHA = 0x00000002; // Only contains alpha information
- public static final int DDPF_RGB = 0x00000040; // RGB data is present
-
- // Selected bits in DDS capabilities flags
- public static final int DDSCAPS_TEXTURE = 0x00001000; // Can be used as a texture
- public static final int DDSCAPS_MIPMAP = 0x00400000; // Is one level of a mip-map
-
- // Known pixel formats
- public static final int D3DFMT_UNKNOWN = 0;
- public static final int D3DFMT_R8G8B8 = 20;
- public static final int D3DFMT_A8R8G8B8 = 21;
- public static final int D3DFMT_X8R8G8B8 = 22;
-
- public void loadFile(String filename) throws IOException {
- File file = new File(filename);
- fis = new FileInputStream(filename);
- chan = fis.getChannel();
- buf = chan.map(FileChannel.MapMode.READ_ONLY,
- 0, (int) file.length());
- buf.order(ByteOrder.LITTLE_ENDIAN);
- header = new Header();
- header.read(buf);
- }
-
- public void close() {
- try {
- chan.close();
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /** Test for presence/absence of surface description flags (DDSD_*) */
- public boolean isSurfaceDescFlagSet(int flag) {
- return ((header.flags & flag) != 0);
- }
-
- /** Test for presence/absence of pixel format flags (DDPF_*) */
- public boolean isPixelFormatFlagSet(int flag) {
- return ((header.pfFlags & flag) != 0);
- }
-
- /** Gets the pixel format of this texture (D3DFMT_*) based on some
- heuristics. Returns D3DFMT_UNKNOWN if could not recognize the
- pixel format. */
- public int getPixelFormat() {
- if (isPixelFormatFlagSet(DDPF_RGB)) {
- if (isPixelFormatFlagSet(DDPF_ALPHAPIXELS)) {
- if (getDepth() == 32 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF &&
- header.pfABitMask == 0xFF000000) {
- return D3DFMT_A8R8G8B8;
- }
- } else {
- if (getDepth() == 24 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF) {
- return D3DFMT_R8G8B8;
- } else if (getDepth() == 32 &&
- header.pfRBitMask == 0x00FF0000 &&
- header.pfGBitMask == 0x0000FF00 &&
- header.pfBBitMask == 0x000000FF) {
- return D3DFMT_X8R8G8B8;
- }
- }
- }
-
- return D3DFMT_UNKNOWN;
- }
-
- /** Indicates whether this texture is compressed. */
- public boolean isCompressed() {
- return (getCompressionFormat() != 0);
- }
-
- /** If this surface is compressed, returns the kind of compression
- used (DXT1..DXT5). */
- public int getCompressionFormat() {
- return header.pfFourCC;
- }
-
- /** Width of the texture (or the top-most mipmap if mipmaps are
- present) */
- public int getWidth() {
- return header.width;
- }
-
- /** Height of the texture (or the top-most mipmap if mipmaps are
- present) */
- public int getHeight() {
- return header.height;
- }
-
- /** Total number of bits per pixel. Only valid if DDPF_RGB is
- present. For A8R8G8B8, would be 32. */
- public int getDepth() {
- return header.pfRGBBitCount;
- }
-
- /** Number of mip maps in the texture */
- public int getNumMipMaps() {
- if (!isSurfaceDescFlagSet(DDSD_MIPMAPCOUNT)) {
- return 0;
- }
- return header.mipMapCountOrAux;
- }
-
- /** Gets the <i>i</i>th mipmap data (0..getNumMipMaps() - 1) */
- public ImageInfo getMipMap(int map) {
- if (isCompressed()) {
- throw new RuntimeException("Sorry, compressed textures not supported yet");
- }
- // Figure out how far to seek
- int seek = 4 + header.size;
- for (int i = 0; i < map; i++) {
- seek += mipMapSizeInBytes(i);
- }
- buf.limit(seek + mipMapSizeInBytes(map));
- buf.position(seek);
- ByteBuffer next = buf.slice();
- buf.position(0);
- buf.limit(buf.capacity());
- return new ImageInfo(next, mipMapWidth(map), mipMapHeight(map));
- }
-
- /** Returns an array of ImageInfos corresponding to all mipmap
- levels of this DDS file. */
- public ImageInfo[] getAllMipMaps() {
- int numLevels = getNumMipMaps();
- if (numLevels == 0) {
- numLevels = 1;
- }
- ImageInfo[] result = new ImageInfo[numLevels];
- for (int i = 0; i < numLevels; i++) {
- result[i] = getMipMap(i);
- }
- return result;
- }
-
- public void debugPrint() {
- PrintStream tty = System.err;
- tty.println("Compressed texture: " + isCompressed());
- if (isCompressed()) {
- int fmt = getCompressionFormat();
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < 4; i++) {
- char c = (char) (fmt & 0xFF);
- buf.append(c);
- fmt = fmt >> 8;
- }
- tty.println("Compression format: 0x" + Integer.toHexString(getCompressionFormat()) + " (" + buf + ")");
- }
- tty.println("SurfaceDesc flags:");
- boolean recognizedAny = false;
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_CAPS, "DDSD_CAPS");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_HEIGHT, "DDSD_HEIGHT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_WIDTH, "DDSD_WIDTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_PITCH, "DDSD_PITCH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_BACKBUFFERCOUNT, "DDSD_BACKBUFFERCOUNT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_ZBUFFERBITDEPTH, "DDSD_ZBUFFERBITDEPTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_ALPHABITDEPTH, "DDSD_ALPHABITDEPTH");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_LPSURFACE, "DDSD_LPSURFACE");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_PIXELFORMAT, "DDSD_PIXELFORMAT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_MIPMAPCOUNT, "DDSD_MIPMAPCOUNT");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_LINEARSIZE, "DDSD_LINEARSIZE");
- recognizedAny |= printIfRecognized(tty, header.flags, DDSD_DEPTH, "DDSD_DEPTH");
- if (!recognizedAny) {
- tty.println("(none)");
- }
- tty.println("Raw SurfaceDesc flags: 0x" + Integer.toHexString(header.flags));
- tty.println("Pixel format flags:");
- recognizedAny = false;
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_RGB, "DDPF_RGB");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ALPHA, "DDPF_ALPHA");
- recognizedAny |= printIfRecognized(tty, header.pfFlags, DDPF_ALPHAPIXELS, "DDPF_ALPHAPIXELS");
- if (!recognizedAny) {
- tty.println("(none)");
- }
- tty.println("Raw pixel format flags: 0x" + Integer.toHexString(header.pfFlags));
- tty.println("Depth: " + getDepth());
- tty.println("Number of mip maps: " + getNumMipMaps());
- int fmt = getPixelFormat();
- tty.print("Pixel format: ");
- switch (fmt) {
- case D3DFMT_R8G8B8: tty.println("D3DFMT_R8G8B8"); break;
- case D3DFMT_A8R8G8B8: tty.println("D3DFMT_A8R8G8B8"); break;
- case D3DFMT_X8R8G8B8: tty.println("D3DFMT_X8R8G8B8"); break;
- case D3DFMT_UNKNOWN: tty.println("D3DFMT_UNKNOWN"); break;
- default: tty.println("(unknown pixel format " + fmt + ")"); break;
- }
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private static final int MAGIC = 0x20534444;
-
- static class Header {
- int size; // size of the DDSURFACEDESC structure
- int flags; // determines what fields are valid
- int height; // height of surface to be created
- int width; // width of input surface
- int pitchOrLinearSize;
- int backBufferCountOrDepth;
- int mipMapCountOrAux; // number of mip-map levels requested (in this context)
- int alphaBitDepth; // depth of alpha buffer requested
- int reserved1; // reserved
- int surface; // pointer to the associated surface memory
- // NOTE: following two entries are from DDCOLORKEY data structure
- // Are overlaid with color for empty cubemap faces (unused in this reader)
- int colorSpaceLowValue;
- int colorSpaceHighValue;
- int destBltColorSpaceLowValue;
- int destBltColorSpaceHighValue;
- int srcOverlayColorSpaceLowValue;
- int srcOverlayColorSpaceHighValue;
- int srcBltColorSpaceLowValue;
- int srcBltColorSpaceHighValue;
- // NOTE: following entries are from DDPIXELFORMAT data structure
- // Are overlaid with flexible vertex format description of vertex
- // buffers (unused in this reader)
- int pfSize; // size of DDPIXELFORMAT structure
- int pfFlags; // pixel format flags
- int pfFourCC; // (FOURCC code)
- // Following five entries have multiple interpretations, not just
- // RGBA (but that's all we support right now)
- int pfRGBBitCount; // how many bits per pixel
- int pfRBitMask; // mask for red bits
- int pfGBitMask; // mask for green bits
- int pfBBitMask; // mask for blue bits
- int pfABitMask; // mask for alpha channel
- int ddsCaps1; // Texture and mip-map flags
- int ddsCaps2; // Advanced capabilities, not yet used
- int ddsCapsReserved1;
- int ddsCapsReserved2;
- int textureStage; // stage in multitexture cascade
-
- void read(ByteBuffer buf) throws IOException {
- int magic = buf.getInt();
- if (magic != MAGIC) {
- throw new IOException("Incorrect magic number 0x" +
- Integer.toHexString(magic) +
- " (expected " + MAGIC + ")");
- }
-
- size = buf.getInt();
- flags = buf.getInt();
- height = buf.getInt();
- width = buf.getInt();
- pitchOrLinearSize = buf.getInt();
- backBufferCountOrDepth = buf.getInt();
- mipMapCountOrAux = buf.getInt();
- alphaBitDepth = buf.getInt();
- reserved1 = buf.getInt();
- surface = buf.getInt();
- colorSpaceLowValue = buf.getInt();
- colorSpaceHighValue = buf.getInt();
- destBltColorSpaceLowValue = buf.getInt();
- destBltColorSpaceHighValue = buf.getInt();
- srcOverlayColorSpaceLowValue = buf.getInt();
- srcOverlayColorSpaceHighValue = buf.getInt();
- srcBltColorSpaceLowValue = buf.getInt();
- srcBltColorSpaceHighValue = buf.getInt();
- pfSize = buf.getInt();
- pfFlags = buf.getInt();
- pfFourCC = buf.getInt();
- pfRGBBitCount = buf.getInt();
- pfRBitMask = buf.getInt();
- pfGBitMask = buf.getInt();
- pfBBitMask = buf.getInt();
- pfABitMask = buf.getInt();
- ddsCaps1 = buf.getInt();
- ddsCaps2 = buf.getInt();
- ddsCapsReserved1 = buf.getInt();
- ddsCapsReserved2 = buf.getInt();
- textureStage = buf.getInt();
- }
- }
-
- private int mipMapWidth(int map) {
- int width = getWidth();
- for (int i = 0; i < map; i++) {
- width >>= 1;
- }
- return width;
- }
-
- private int mipMapHeight(int map) {
- int height = getHeight();
- for (int i = 0; i < map; i++) {
- height >>= 1;
- }
- return height;
- }
-
- private int mipMapSizeInBytes(int map) {
- int width = mipMapWidth(map);
- int height = mipMapHeight(map);
- return width * height * (getDepth() / 8);
- }
-
- private boolean printIfRecognized(PrintStream tty, int flags, int flag, String what) {
- if ((flags & flag) != 0) {
- tty.println(what);
- return true;
- }
- return false;
- }
-}
diff --git a/src/demos/util/DxTex.java b/src/demos/util/DxTex.java
index 0948163..aecfe99 100644
--- a/src/demos/util/DxTex.java
+++ b/src/demos/util/DxTex.java
@@ -47,6 +47,8 @@ import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
+import com.sun.opengl.utils.*;
+
/** Simplified clone of DxTex tool from the DirectX SDK, written in
Java using the DDSReader; tests fetching of texture data */
diff --git a/src/demos/util/LEDataInputStream.java b/src/demos/util/LEDataInputStream.java
deleted file mode 100644
index f2b2ba9..0000000
--- a/src/demos/util/LEDataInputStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package demos.util;
-
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.FilterInputStream;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-
-/**
- * Little Endian Data Input Stream.
- *
- * This class implements an input stream filter to allow reading
- * of java native datatypes from an input stream which has those
- * native datatypes stored in a little endian byte order.<p>
- *
- * This is the sister class of the DataInputStream which allows
- * for reading of java native datatypes from an input stream with
- * the datatypes stored in big endian byte order.<p>
- *
- * This class implements the minimum required and calls DataInputStream
- * for some of the required methods for DataInput.<p>
- *
- * Not all methods are implemented due to lack of immediatte requirement
- * for that functionality. It is not clear if it is ever going to be
- * functionally required to be able to read UTF data in a LittleEndianManner<p>
- *
- * @author Robin Luiten
- * @version 1.1 15/Dec/1997
- */
-public class LEDataInputStream extends FilterInputStream implements DataInput
-{
- /**
- * To reuse some of the non endian dependent methods from
- * DataInputStreams methods.
- */
- DataInputStream dataIn;
-
- public LEDataInputStream(InputStream in)
- {
- super(in);
- dataIn = new DataInputStream(in);
- }
-
- public void close() throws IOException
- {
- dataIn.close(); // better close as we create it.
- // this will close underlying as well.
- }
-
- public synchronized final int read(byte b[]) throws IOException
- {
- return dataIn.read(b, 0, b.length);
- }
-
- public synchronized final int read(byte b[], int off, int len) throws IOException
- {
- int rl = dataIn.read(b, off, len);
- return rl;
- }
-
- public final void readFully(byte b[]) throws IOException
- {
- dataIn.readFully(b, 0, b.length);
- }
-
- public final void readFully(byte b[], int off, int len) throws IOException
- {
- dataIn.readFully(b, off, len);
- }
-
- public final int skipBytes(int n) throws IOException
- {
- return dataIn.skipBytes(n);
- }
-
- public final boolean readBoolean() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return (ch != 0);
- }
-
- public final byte readByte() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return (byte)(ch);
- }
-
- public final int readUnsignedByte() throws IOException
- {
- int ch = dataIn.read();
- if (ch < 0)
- throw new EOFException();
- return ch;
- }
-
- public final short readShort() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (short)((ch1 << 0) + (ch2 << 8));
- }
-
- public final int readUnsignedShort() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (ch1 << 0) + (ch2 << 8);
- }
-
- public final char readChar() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- if ((ch1 | ch2) < 0)
- throw new EOFException();
- return (char)((ch1 << 0) + (ch2 << 8));
- }
-
- public final int readInt() throws IOException
- {
- int ch1 = dataIn.read();
- int ch2 = dataIn.read();
- int ch3 = dataIn.read();
- int ch4 = dataIn.read();
- if ((ch1 | ch2 | ch3 | ch4) < 0)
- throw new EOFException();
- return ((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24));
- }
-
- public final long readLong() throws IOException
- {
- int i1 = readInt();
- int i2 = readInt();
- return ((long)(i1) & 0xFFFFFFFFL) + (i2 << 32);
- }
-
- public final float readFloat() throws IOException
- {
- return Float.intBitsToFloat(readInt());
- }
-
- public final double readDouble() throws IOException
- {
- return Double.longBitsToDouble(readLong());
- }
-
- /**
- * dont call this it is not implemented.
- * @return empty new string
- **/
- public final String readLine() throws IOException
- {
- return new String();
- }
-
- /**
- * dont call this it is not implemented
- * @return empty new string
- **/
- public final String readUTF() throws IOException
- {
- return new String();
- }
-
- /**
- * dont call this it is not implemented
- * @return empty new string
- **/
- public final static String readUTF(DataInput in) throws IOException
- {
- return new String();
- }
-}
-
diff --git a/src/demos/util/SGIImage.java b/src/demos/util/SGIImage.java
deleted file mode 100644
index 7d4468e..0000000
--- a/src/demos/util/SGIImage.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Portions copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- */
-
-package demos.util;
-
-import java.io.*;
-import javax.media.opengl.*;
-import com.sun.opengl.utils.*;
-
-// Test harness
-import java.awt.image.*;
-import javax.swing.*;
-
-/** <p> Reads SGI RGB/RGBA images. </p>
-
- <p> Written from <a href =
- "http://astronomy.swin.edu.au/~pbourke/dataformats/sgirgb/">Paul
- Bourke's adaptation</a> of the <a href =
- "http://astronomy.swin.edu.au/~pbourke/dataformats/sgirgb/sgiversion.html">SGI
- specification</a>. </p>
-*/
-
-public class SGIImage {
- private Header header;
- private int format;
- private byte[] data;
- // Used for decoding RLE-compressed images
- private int[] rowStart;
- private int[] rowSize;
- private int rleEnd;
- private byte[] tmpData;
- private byte[] tmpRead;
-
- static class Header {
- short magic; // IRIS image file magic number
- // This should be decimal 474
- byte storage; // Storage format
- // 0 for uncompressed
- // 1 for RLE compression
- byte bpc; // Number of bytes per pixel channel
- // Legally 1 or 2
- short dimension; // Number of dimensions
- // Legally 1, 2, or 3
- // 1 means a single row, XSIZE long
- // 2 means a single 2D image
- // 3 means multiple 2D images
- short xsize; // X size in pixels
- short ysize; // Y size in pixels
- short zsize; // Number of channels
- // 1 indicates greyscale
- // 3 indicates RGB
- // 4 indicates RGB and Alpha
- int pixmin; // Minimum pixel value
- // This is the lowest pixel value in the image
- int pixmax; // Maximum pixel value
- // This is the highest pixel value in the image
- int dummy; // Ignored
- // Normally set to 0
- String imagename; // Image name; 80 bytes long
- // Must be null terminated, therefore at most 79 bytes
- int colormap; // Colormap ID
- // 0 - normal mode
- // 1 - dithered, 3 mits for red and green, 2 for blue, obsolete
- // 2 - index colour, obsolete
- // 3 - not an image but a colourmap
- // 404 bytes char DUMMY Ignored
- // Should be set to 0, makes the header 512 bytes.
-
- Header(DataInputStream in) throws IOException {
- magic = in.readShort();
- storage = in.readByte();
- bpc = in.readByte();
- dimension = in.readShort();
- xsize = in.readShort();
- ysize = in.readShort();
- zsize = in.readShort();
- pixmin = in.readInt();
- pixmax = in.readInt();
- dummy = in.readInt();
- byte[] tmpname = new byte[80];
- in.read(tmpname);
- int numChars = 0;
- while (tmpname[numChars++] != 0);
- imagename = new String(tmpname, 0, numChars);
- colormap = in.readInt();
- byte[] tmp = new byte[404];
- in.read(tmp);
- }
-
- public String toString() {
- return ("magic: " + magic +
- " storage: " + (int) storage +
- " bpc: " + (int) bpc +
- " dimension: " + dimension +
- " xsize: " + xsize +
- " ysize: " + ysize +
- " zsize: " + zsize +
- " pixmin: " + pixmin +
- " pixmax: " + pixmax +
- " imagename: " + imagename +
- " colormap: " + colormap);
- }
- }
-
- private SGIImage(Header header) {
- this.header = header;
- }
-
- /** Reads an SGI image from the specified file. */
- public static SGIImage read(String filename) throws IOException {
- return read(new FileInputStream(filename));
- }
-
- /** Reads an SGI image from the specified InputStream. */
- public static SGIImage read(InputStream in) throws IOException {
- DataInputStream dIn = new DataInputStream(new BufferedInputStream(in));
-
- Header header = new Header(dIn);
- SGIImage res = new SGIImage(header);
- res.decodeImage(dIn);
- return res;
- }
-
- /** Returns the width of the image. */
- public int getWidth() {
- return header.xsize;
- }
-
- /** Returns the height of the image. */
- public int getHeight() {
- return header.ysize;
- }
-
- /** Returns the OpenGL format for this texture; e.g. GL.GL_BGR or GL.GL_BGRA. */
- public int getFormat() {
- return format;
- }
-
- /** Returns the raw data for this texture in the correct
- (bottom-to-top) order for calls to glTexImage2D. */
- public byte[] getData() { return data; }
-
- public String toString() {
- return header.toString();
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private void decodeImage(DataInputStream in) throws IOException {
- if (header.storage == 1) {
- // Read RLE compression data; row starts and sizes
- int x = header.ysize * header.zsize;
- rowStart = new int[x];
- rowSize = new int[x];
- rleEnd = 4 * 2 * x + 512;
- for (int i = 0; i < x; i++) {
- rowStart[i] = in.readInt();
- }
- for (int i = 0; i < x; i++) {
- rowSize[i] = in.readInt();
- }
- tmpRead = new byte[header.xsize * 256];
- }
- tmpData = readAll(in);
-
- int xsize = header.xsize;
- int ysize = header.ysize;
- int zsize = header.zsize;
- int lptr = 0;
-
- data = new byte[xsize * ysize * 4];
- byte[] rbuf = new byte[xsize];
- byte[] gbuf = new byte[xsize];
- byte[] bbuf = new byte[xsize];
- byte[] abuf = new byte[xsize];
- for (int y = 0; y < ysize; y++) {
- if (zsize >= 4) {
- getRow(rbuf, y, 0);
- getRow(gbuf, y, 1);
- getRow(bbuf, y, 2);
- getRow(abuf, y, 3);
- rgbatorgba(rbuf, gbuf, bbuf, abuf, data, lptr);
- } else if (zsize == 3) {
- getRow(rbuf, y, 0);
- getRow(gbuf, y, 1);
- getRow(bbuf, y, 2);
- rgbtorgba(rbuf, gbuf, bbuf, data, lptr);
- } else if (zsize == 2) {
- getRow(rbuf, y, 0);
- getRow(abuf, y, 1);
- latorgba(rbuf, abuf, data, lptr);
- } else {
- getRow(rbuf, y, 0);
- bwtorgba(rbuf, data, lptr);
- }
- lptr += 4 * xsize;
- }
- rowStart = null;
- rowSize = null;
- tmpData = null;
- tmpRead = null;
- format = GL.GL_BGRA;
- }
-
- private void getRow(byte[] buf, int y, int z) {
- if (header.storage == 1) {
- int offs = rowStart[y + z * header.ysize] - rleEnd;
- System.arraycopy(tmpData, offs, tmpRead, 0, rowSize[y + z * header.ysize]);
- int iPtr = 0;
- int oPtr = 0;
- for (;;) {
- byte pixel = tmpRead[iPtr++];
- int count = (int) (pixel & 0x7F);
- if (count == 0) {
- return;
- }
- if ((pixel & 0x80) != 0) {
- while ((count--) > 0) {
- buf[oPtr++] = tmpRead[iPtr++];
- }
- } else {
- pixel = tmpRead[iPtr++];
- while ((count--) > 0) {
- buf[oPtr++] = pixel;
- }
- }
- }
- } else {
- int offs = (y * header.xsize) + (z * header.xsize * header.ysize);
- System.arraycopy(tmpData, offs, buf, 0, header.xsize);
- }
- }
-
- private void bwtorgba(byte[] b, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = b[i];
- dest[4 * i + lptr + 1] = b[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = (byte) 0xFF;
- }
- }
-
- private void latorgba(byte[] b, byte[] a, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = b[i];
- dest[4 * i + lptr + 1] = b[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = a[i];
- }
- }
-
- private void rgbtorgba(byte[] r, byte[] g, byte[] b, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = r[i];
- dest[4 * i + lptr + 1] = g[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = (byte) 0xFF;
- }
- }
-
- private void rgbatorgba(byte[] r, byte[] g, byte[] b, byte[] a, byte[] dest, int lptr) {
- for (int i = 0; i < b.length; i++) {
- dest[4 * i + lptr + 0] = r[i];
- dest[4 * i + lptr + 1] = g[i];
- dest[4 * i + lptr + 2] = b[i];
- dest[4 * i + lptr + 3] = a[i];
- }
- }
-
- private byte[] readAll(DataInputStream in) throws IOException {
- byte[] dest = new byte[16384];
- int pos = 0;
- int numRead = 0;
-
- boolean done = false;
-
- do {
- numRead = in.read(dest, pos, dest.length - pos);
- if (pos == dest.length) {
- // Resize destination buffer
- byte[] newDest = new byte[2 * dest.length];
- System.arraycopy(dest, 0, newDest, 0, pos);
- dest = newDest;
- }
- if (numRead > 0) {
- pos += numRead;
- }
-
- done = ((numRead == -1) || (in.available() == 0));
- } while (!done);
-
- // Trim destination buffer
- if (pos != dest.length) {
- byte[] finalDest = new byte[pos];
- System.arraycopy(dest, 0, finalDest, 0, pos);
- dest = finalDest;
- }
-
- return dest;
- }
-
- public static void main(String[] args) {
- for (int i = 0; i < args.length; i++) {
- try {
- System.out.println(args[i] + ":");
- SGIImage image = SGIImage.read(args[i]);
- System.out.println(image);
- BufferedImage img = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
- WritableRaster raster = img.getRaster();
- DataBufferByte db = (DataBufferByte) raster.getDataBuffer();
- byte[] src = image.getData();
- byte[] dest = db.getData();
- for (int j = 0; j < src.length; j += 4) {
- dest[j + 0] = src[j + 3];
- dest[j + 1] = src[j + 2];
- dest[j + 2] = src[j + 1];
- dest[j + 3] = src[j + 0];
- }
- // System.arraycopy(src, 0, dest, 0, src.length);
- ImageIcon icon = new ImageIcon(img);
- JLabel label = new JLabel();
- label.setIcon(icon);
- JFrame frame = new JFrame(args[i]);
- frame.getContentPane().add(label);
- frame.pack();
- frame.show();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-}
diff --git a/src/demos/util/TGAImage.java b/src/demos/util/TGAImage.java
deleted file mode 100644
index a99f4f3..0000000
--- a/src/demos/util/TGAImage.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package demos.util;
-
-import java.io.*;
-import javax.media.opengl.*;
-import com.sun.opengl.utils.*;
-
-/**
- * Targa image reader adapted from sources of the <a href =
- * "http://java.sun.com/products/jimi/">Jimi</a> image I/O class library.
- *
- * <P>
- *
- * Image decoder for image data stored in TGA file format.
- * Currently only the original TGA file format is supported. This is
- * because the new TGA format has data at the end of the file, getting
- * to the end of a file in an InputStream orient environment presents
- * several difficulties which are avoided at the moment.
- *
- * <P>
- *
- * This is a simple decoder and is only setup to load a single image
- * from the input stream
- *
- * <P>
- *
- * @author Robin Luiten
- * @author Kenneth Russell
- * @version $Revision: 1.3 $
- */
-
-public class TGAImage {
- private Header header;
- private int format;
- private byte[] data;
-
- private TGAImage(Header header) {
- this.header = header;
- }
-
- /**
- * This class reads in all of the TGA image header in addition it also
- * reads in the imageID field as it is convenient to handle that here.
- *
- * @author Robin Luiten
- * @version 1.1
- */
- public static class Header {
- /** Set of possible file format TGA types */
- public final static int TYPE_NEW = 0;
- public final static int TYPE_OLD = 1;
- public final static int TYPE_UNK = 2; // cant rewind stream so unknown for now.
-
- /** Set of possible image types in TGA file */
- public final static int NO_IMAGE = 0; // no image data
- public final static int UCOLORMAPPED = 1; // uncompressed color mapped image
- public final static int UTRUECOLOR = 2; // uncompressed true color image
- public final static int UBLACKWHITE = 3; // uncompressed black and white image
- public final static int COLORMAPPED = 9; // compressed color mapped image
- public final static int TRUECOLOR = 10; // compressed true color image
- public final static int BLACKWHITE = 11; // compressed black and white image
-
- /** Field image descriptor bitfield values definitions */
- public final static int ID_ATTRIBPERPIXEL = 0xF;
- public final static int ID_LEFTTORIGHT = 0x10;
- public final static int ID_TOPTOBOTTOM = 0x20;
- public final static int ID_INTERLEAVE = 0xC0;
-
- /** Field image descriptor / interleave values */
- public final static int I_NOTINTERLEAVED = 0;
- public final static int I_TWOWAY = 1;
- public final static int I_FOURWAY = 2;
-
- /** Type of this TGA file format */
- private int tgaType;
-
- /** initial TGA image data fields */
- private int idLength; // byte value
- private int colorMapType; // byte value
- private int imageType; // byte value
-
- /** TGA image colour map fields */
- private int firstEntryIndex;
- private int colorMapLength;
- private byte colorMapEntrySize;
-
- /** TGA image specification fields */
- private int xOrigin;
- private int yOrigin;
- private int width;
- private int height;
- private byte pixelDepth;
- private byte imageDescriptor;
-
- /** bitfields in imageDescriptor */
- private byte attribPerPixel; // how many attribute bits per pixel
- private boolean leftToRight; // order of data on scan line
- private boolean topToBottom; // order scan lines stored
- private byte interleave; // how rows are stored in image data
-
- private byte[] imageIDbuf;
- private String imageID;
-
- public Header(LEDataInputStream in) throws IOException {
- int ret;
-
- tgaType = TYPE_OLD; // dont try and get footer.
-
- // initial header fields
- idLength = in.readUnsignedByte();
- colorMapType = in.readUnsignedByte();
- imageType = in.readUnsignedByte();
-
- // color map header fields
- firstEntryIndex = in.readUnsignedShort();
- colorMapLength = in.readUnsignedShort();
- colorMapEntrySize = in.readByte();
-
- // TGA image specification fields
- xOrigin = in.readUnsignedShort();
- yOrigin = in.readUnsignedShort();
- width = in.readUnsignedShort();
- height = in.readUnsignedShort();
- pixelDepth = in.readByte();
- imageDescriptor = in.readByte();
-
- attribPerPixel = (byte)(imageDescriptor & ID_ATTRIBPERPIXEL);
- leftToRight = (imageDescriptor & ID_LEFTTORIGHT) != 0; // not used ?
- topToBottom = (imageDescriptor & ID_TOPTOBOTTOM) != 0;
- interleave = (byte)((imageDescriptor & ID_INTERLEAVE) >> 6);
-
- if (idLength > 0) {
- imageIDbuf = new byte[idLength];
- in.read(imageIDbuf, 0, idLength);
- imageID = new String(imageIDbuf, "US-ASCII");
- }
- }
-
- public int tgaType() { return tgaType; }
-
- /** initial TGA image data fields */
- public int idLength() { return idLength; }
- public int colorMapType() { return colorMapType; }
- public int imageType() { return imageType; }
-
- /** TGA image colour map fields */
- public int firstEntryIndex() { return firstEntryIndex; }
- public int colorMapLength() { return colorMapLength; }
- public byte colorMapEntrySize() { return colorMapEntrySize; }
-
- /** TGA image specification fields */
- public int xOrigin() { return xOrigin; }
- public int yOrigin() { return yOrigin; }
- public int width() { return width; }
- public int height() { return height; }
- public byte pixelDepth() { return pixelDepth; }
- public byte imageDescriptor() { return imageDescriptor; }
-
- /** bitfields in imageDescriptor */
- public byte attribPerPixel() { return attribPerPixel; }
- public boolean leftToRight() { return leftToRight; }
- public boolean topToBottom() { return topToBottom; }
- public byte interleave() { return interleave; }
-
- public byte[] imageIDbuf() { return imageIDbuf; }
- public String imageID() { return imageID; }
-
- public String toString() {
- return "TGA Header " +
- " id length: " + idLength +
- " color map type: "+ colorMapType +
- " image type: "+ imageType +
- " first entry index: " + firstEntryIndex +
- " color map length: " + colorMapLength +
- " color map entry size: " + colorMapEntrySize +
- " x Origin: " + xOrigin +
- " y Origin: " + yOrigin +
- " width: "+ width +
- " height: "+ height +
- " pixel depth: "+ pixelDepth +
- " image descriptor: "+ imageDescriptor +
- (imageIDbuf == null ? "" : (" ID String: " + imageID));
- }
- }
-
-
- /**
- * Identifies the image type of the tga image data and loads
- * it into the JimiImage structure. This was taken from the
- * prototype and modified for the new Jimi structure
- */
- private void decodeImage(LEDataInputStream dIn) throws IOException {
- switch (header.imageType()) {
- case Header.UCOLORMAPPED:
- throw new IOException("TGADecoder Uncompressed Colormapped images not supported");
-
- case Header.UTRUECOLOR: // pixelDepth 15, 16, 24 and 32
- switch (header.pixelDepth) {
- case 16:
- throw new IOException("TGADecoder Compressed 16-bit True Color images not supported");
-
- case 24:
- case 32:
- decodeRGBImageU24_32(dIn);
- break;
- }
- break;
-
- case Header.UBLACKWHITE:
- throw new IOException("TGADecoder Uncompressed Grayscale images not supported");
-
- case Header.COLORMAPPED:
- throw new IOException("TGADecoder Compressed Colormapped images not supported");
-
- case Header.TRUECOLOR:
- throw new IOException("TGADecoder Compressed True Color images not supported");
-
- case Header.BLACKWHITE:
- throw new IOException("TGADecoder Compressed Grayscale images not supported");
- }
- }
-
- /**
- * This assumes that the body is for a 24 bit or 32 bit for a
- * RGB or ARGB image respectively.
- */
- private void decodeRGBImageU24_32(LEDataInputStream dIn) throws IOException {
- int i; // row index
- int j; // column index
- int y; // output row index
- int raw; // index through the raw input buffer
- int rawWidth = header.width() * (header.pixelDepth() / 8);
- byte[] rawBuf = new byte[rawWidth];
- data = new byte[rawWidth * header.height()];
-
- if (header.pixelDepth() == 24) {
- format = GL.GL_BGR;
- } else {
- assert header.pixelDepth() == 32;
- format = GL.GL_BGRA;
- }
-
- for (i = 0; i < header.height(); ++i) {
- dIn.readFully(rawBuf, 0, rawWidth);
-
- if (header.topToBottom)
- y = header.height - i - 1; // range 0 to (header.height - 1)
- else
- y = i;
-
- System.arraycopy(rawBuf, 0, data, y * rawWidth, rawBuf.length);
- }
- }
-
- /** Returns the width of the image. */
- public int getWidth() { return header.width(); }
-
- /** Returns the height of the image. */
- public int getHeight() { return header.height(); }
-
- /** Returns the OpenGL format for this texture; e.g. GL.GL_BGR or GL.GL_BGRA. */
- public int getGLFormat() { return format; }
-
- /** Returns the raw data for this texture in the correct
- (bottom-to-top) order for calls to glTexImage2D. */
- public byte[] getData() { return data; }
-
- /** Reads a Targa image from the specified file. */
- public static TGAImage read(String filename) throws IOException {
- return read(new FileInputStream(filename));
- }
-
- /** Reads a Targa image from the specified InputStream. */
- public static TGAImage read(InputStream in) throws IOException {
- LEDataInputStream dIn = new LEDataInputStream(new BufferedInputStream(in));
-
- Header header = new Header(dIn);
- TGAImage res = new TGAImage(header);
- res.decodeImage(dIn);
- return res;
- }
-}