001: /*
002: * $RCSfile: BufferWrapper.java,v $
003: *
004: * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * - Redistribution of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * - Redistribution in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * Neither the name of Sun Microsystems, Inc. or the names of
019: * contributors may be used to endorse or promote products derived
020: * from this software without specific prior written permission.
021: *
022: * This software is provided "AS IS," without a warranty of any
023: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
024: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
025: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
026: * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
027: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
028: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
029: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
030: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
031: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
032: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
033: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
034: * POSSIBILITY OF SUCH DAMAGES.
035: *
036: * You acknowledge that this software is not designed, licensed or
037: * intended for use in the design, construction, operation or
038: * maintenance of any nuclear facility.
039: *
040: * $Revision: 1.4 $
041: * $Date: 2007/02/09 17:20:05 $
042: * $State: Exp $
043: */
044:
045: package com.sun.j3d.internal;
046:
047: import javax.media.j3d.J3DBuffer;
048: import java.nio.Buffer;
049:
050: /**
051: * NIO Buffers are new in Java 1.4 but we need to run on 1.3
052: * as well, so this class was created to hide the NIO classes
053: * from non-1.4 Java 3D users.
054: *
055: * <p>
056: * NOTE: We no longer need to support JDK 1.3 as of the Java 3D 1.3.2
057: * community source release on java.net. We should be able to get rid
058: * of this class.
059: */
060:
061: public abstract class BufferWrapper {
062:
063: /**
064: * Value returned from getBufferType(), this indicates
065: * that the BufferWrapper contains a null buffer.
066: */
067: public static final int TYPE_NULL = 0;
068:
069: /**
070: * Value returned from getBufferType(), this indicates
071: * that the BufferWrapper does not hold data of type
072: * byte, float, or double.
073: */
074: public static final int TYPE_UNKNOWN = 1;
075:
076: /**
077: * Value returned from getBufferType(), this indicates
078: * that the BufferWrapper contains a java.nio.ByteBuffer.
079: */
080: public static final int TYPE_BYTE = 2;
081:
082: /**
083: * Value returned from getBufferType(), this indicates
084: * that the BufferWrapper contains a java.nio.FloatBuffer.
085: */
086: public static final int TYPE_FLOAT = 3;
087:
088: /**
089: * Value returned from getBufferType(), this indicates
090: * that the BufferWrapper contains a java.nio.DoubleBuffer.
091: */
092: public static final int TYPE_DOUBLE = 4;
093:
094: /**
095: * Never used - this class is abstract.
096: */
097: public BufferWrapper() {
098: }
099:
100: /**
101: * Must be implemented by sublasses.
102: */
103: abstract Buffer getBuffer();
104:
105: /**
106: * @return Buffer as object of type Object.
107: */
108: public Object getBufferAsObject() {
109: return getBuffer();
110: }
111:
112: // Wrapper for all relevant Buffer methods.
113:
114: /**
115: * @return This buffer's capacity (set at initialization in
116: * allocateDirect() ).
117: * @see ByteBufferWrapper#allocateDirect
118: */
119: public int capacity() {
120: return getBuffer().capacity();
121: }
122:
123: /**
124: * @return This buffer's limit.
125: */
126: public int limit() {
127: return getBuffer().limit();
128: }
129:
130: /**
131: * @return This buffer's position.
132: */
133: public int position() {
134: return getBuffer().position();
135: }
136:
137: /**
138: * Sets this buffer's position.
139: * @return This buffer.
140: */
141: public BufferWrapper position(int newPosition) {
142: getBuffer().position(newPosition);
143: return this ;
144: }
145:
146: /**
147: * Resets this buffer's position to the previously marked
148: * position.
149: * @return This buffer.
150: */
151: public BufferWrapper rewind() {
152: getBuffer().rewind();
153: return this ;
154: }
155:
156: /**
157: * @return An integer indicating the type of data held in
158: * this buffer.
159: * @see #TYPE_NULL
160: * @see #TYPE_BYTE
161: * @see #TYPE_FLOAT
162: * @see #TYPE_DOUBLE
163: * @see #TYPE_UNKNOWN
164: */
165: public static int getBufferType(J3DBuffer b) {
166: int bufferType;
167: Buffer buffer = b.getBuffer();
168:
169: if (buffer == null) {
170: bufferType = TYPE_NULL;
171: } else if (buffer instanceof java.nio.ByteBuffer) {
172: bufferType = TYPE_BYTE;
173: } else if (buffer instanceof java.nio.FloatBuffer) {
174: bufferType = TYPE_FLOAT;
175: } else if (buffer instanceof java.nio.DoubleBuffer) {
176: bufferType = TYPE_DOUBLE;
177: } else {
178: bufferType = TYPE_UNKNOWN;
179: }
180: return bufferType;
181: }
182: }
|