summaryrefslogtreecommitdiffstats
path: root/src/net/java/joglutils/msg/nodes/Texture2.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/joglutils/msg/nodes/Texture2.java')
-rw-r--r--src/net/java/joglutils/msg/nodes/Texture2.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/net/java/joglutils/msg/nodes/Texture2.java b/src/net/java/joglutils/msg/nodes/Texture2.java
new file mode 100644
index 0000000..441c2f5
--- /dev/null
+++ b/src/net/java/joglutils/msg/nodes/Texture2.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2007 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.
+ *
+ */
+
+package net.java.joglutils.msg.nodes;
+
+import java.awt.image.*;
+import java.io.*;
+import java.net.*;
+
+import javax.media.opengl.*;
+import com.sun.opengl.util.texture.*;
+
+import net.java.joglutils.msg.actions.*;
+
+/** Represents a two-dimensional texture. */
+
+public class Texture2 extends Node {
+ private TextureData data;
+ private Texture texture;
+ private int texEnvMode = MODULATE;
+ private boolean dirty;
+
+ /** Represents the OpenGL MODULATE texture environment mode. */
+ public static final int MODULATE = 1;
+ /** Represents the OpenGL DECAL texture environment mode. */
+ public static final int DECAL = 2;
+ /** Represents the OpenGL BLEND texture environment mode. */
+ public static final int BLEND = 3;
+ /** Represents the OpenGL REPLACE texture environment mode. */
+ public static final int REPLACE = 4;
+
+ /** Initializes this texture from the given file. No OpenGL work is
+ done during this call; it is done lazily when the Texture is
+ fetched. */
+ public void setTexture(File file, boolean mipmap, String fileSuffix) throws IOException {
+ data = TextureIO.newTextureData(file, mipmap, fileSuffix);
+ dirty = true;
+ }
+
+ /** Initializes this texture from the given InputStream. No OpenGL
+ work is done during this call; it is done lazily when the
+ Texture is fetched. */
+ public void setTexture(InputStream stream, boolean mipmap, String fileSuffix) throws IOException {
+ data = TextureIO.newTextureData(stream, mipmap, fileSuffix);
+ dirty = true;
+ }
+
+ /** Initializes this texture from the given URL. No OpenGL work is
+ done during this call; it is done lazily when the Texture is
+ fetched. */
+ public void setTexture(URL url, boolean mipmap, String fileSuffix) throws IOException {
+ data = TextureIO.newTextureData(url, mipmap, fileSuffix);
+ dirty = true;
+ }
+
+ /** Initializes this texture from the given BufferedImage. No OpenGL
+ work is done during this call; it is done lazily when the
+ Texture is fetched. */
+ public void setTexture(BufferedImage image, boolean mipmap) {
+ data = TextureIO.newTextureData(image, mipmap);
+ dirty = true;
+ }
+
+ /** Initializes this texture from the given TextureData. No OpenGL
+ work is done during this call; it is done lazily when the
+ Texture is fetched. */
+ public void setTexture(TextureData data) {
+ this.data = data;
+ dirty = true;
+ }
+
+ /** Fetches the Texture object associated with this Texture2 node.
+ An OpenGL context must be current at the time this method is
+ called or a GLException will be thrown. */
+ public Texture getTexture() throws GLException {
+ if (dirty) {
+ if (texture != null) {
+ texture.dispose();
+ texture = null;
+ }
+ texture = TextureIO.newTexture(data);
+ data = null;
+ dirty = false;
+ }
+ return texture;
+ }
+
+ /** Sets the texture environment mode. Default is MODULATE. */
+ public void setTexEnvMode(int mode) {
+ if (mode < MODULATE || mode > REPLACE) {
+ throw new IllegalArgumentException("Illegal texture environment mode");
+ }
+ this.texEnvMode = mode;
+ }
+
+ /** Returns the texture environment mode: one of MODULATE, DECAL,
+ BLEND, or REPLACE. */
+ public int getTexEnvMode() {
+ return texEnvMode;
+ }
+
+ public void doAction(Action action) {
+ action.visit(this);
+ }
+}