⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shaderattributearrayretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $RCSfile: ShaderAttributeArrayRetained.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.7 $ * $Date: 2007/04/12 17:34:06 $ * $State: Exp $ */package javax.media.j3d;import javax.vecmath.*;/** * The ShaderAttributeArray object encapsulates a uniform shader * attribute whose value is specified explicitly. */class ShaderAttributeArrayRetained extends ShaderAttributeObjectRetained {    ShaderAttributeArrayRetained() {    }    void initValue(int index, Object value) {	/*	System.err.println("ShaderAttributeObjectRetained : attrName = " + attrName +			   ", index = " + index + ", value = " + value +			   ", value.class = " + value.getClass());	*/	((ArrayWrapper)attrWrapper).set(index, value);    }        /**     * Sets the specified array element of the value of this shader     * attribute to the specified value.     * A copy of the object is stored.     *     * @param value the new value of the shader attribute     *     * @exception NullPointerException if value is null     *     * @exception ClassCastException if value is not an instance of     * the same base class as the individual elements of the array object     * used to construct this shader attribute object.     *     * @exception CapabilityNotSetException if appropriate capability is      * not set and this object is part of live or compiled scene graph     */    void setValue(int index, Object value) {	initValue(index, value);	// We should only need to update the array instead of replacing it.	// Until this become a really bottleneck, it will just be a convenience 	// method for end user. 	// An efficient approach is to 	// (1) Create a new ShaderAttributeValue object for the "value" object 	// and pass it to sendMessage(), (2) Create a new sendMessage that take in	// a third arguement, ie. index.	setValue(attrWrapper.getRef());    }    /**     * Returns the number of elements in the value array.     *     * @return the number of elements in the value array     *     * @exception CapabilityNotSetException if appropriate capability is      * not set and this object is part of live or compiled scene graph     */    int length() {	return ((ArrayWrapper)attrWrapper).length();    }    // Helper methods ...    synchronized void createMirrorObject() {	// System.err.println("ShaderAttributeArrayRetained : createMirrorObject");        // This method should only call by setLive().	if (mirror == null) {            ShaderAttributeArrayRetained mirrorSAA = new ShaderAttributeArrayRetained();	    mirrorSAA.createObjectData(getValue());	    mirror = mirrorSAA;	    mirror.source = source;	    	}	initMirrorObject();    }    /**     * Computes the base class from the specified object. A     * ClassCastException is thrown if the object is not an array of     * one of the allowed classes.     */    int computeClassType(Object value) {	Class objClass = value.getClass();	if (!objClass.isArray()) {	    throw new ClassCastException(objClass + " -- must be array class");	}	for (int i = 0; i < classTable.length; i++) {	    if (classTableArr[i].isInstance(value)) {		return i;	    }	}	throw new ClassCastException(objClass + " -- unrecognized class");    }    /**     * Returns the base class represented by the specified class type.     */    Class getBaseClass(int classType) {	return classTableArr[classType];    }    /**     * Creates an attribute wrapper object of the specified class     * type, and stores the specified array of objects.     */    AttrWrapper createAttrWrapper(Object value, int classType) {	ArrayWrapper attrWrapper = null;	switch (classType) {	case TYPE_INTEGER:	    attrWrapper = new IntegerArrayWrapper();	    break;	case TYPE_FLOAT:	    attrWrapper = new FloatArrayWrapper();	    break;//	case TYPE_DOUBLE://	    attrWrapper = new DoubleArrayWrapper();//	    break;	case TYPE_TUPLE2I:	    attrWrapper = new Tuple2iArrayWrapper();	    break;	case TYPE_TUPLE2F:	    attrWrapper = new Tuple2fArrayWrapper();	    break;//	case TYPE_TUPLE2D://	    attrWrapper = new Tuple2dArrayWrapper();//	    break;	case TYPE_TUPLE3I:	    attrWrapper = new Tuple3iArrayWrapper();	    break;	case TYPE_TUPLE3F:	    attrWrapper = new Tuple3fArrayWrapper();	    break;//	case TYPE_TUPLE3D://	    attrWrapper = new Tuple3dArrayWrapper();//	    break;	case TYPE_TUPLE4I:	    attrWrapper = new Tuple4iArrayWrapper();	    break;	case TYPE_TUPLE4F:	    attrWrapper = new Tuple4fArrayWrapper();	    break;//	case TYPE_TUPLE4D://	    attrWrapper = new Tuple4dArrayWrapper();//	    break;	case TYPE_MATRIX3F:	    attrWrapper = new Matrix3fArrayWrapper();	    break;//	case TYPE_MATRIX3D://	    attrWrapper = new Matrix3dArrayWrapper();//	    break;	case TYPE_MATRIX4F:	    attrWrapper = new Matrix4fArrayWrapper();	    break;//	case TYPE_MATRIX4D://	    attrWrapper = new Matrix4dArrayWrapper();//	    break;	default:	    // Should never get here	    assert false;	    return null;	}	attrWrapper.set(value);	return attrWrapper;    }    //    // The following wrapper classes are used to store a copy of the    // user-specified shader attribute value. There is a wrapper class    // for each supported base class.    //    // Base wrapper class for array attribute types    static abstract class ArrayWrapper extends AttrWrapper {	int length = 0;	/**	 * Returns the length of the array	 */	int length() {	    return length;	}	/**	 * Sets the specified array element of the value of this	 * shader attribute to the specified value.	 */	abstract void set(int index, Object value);    }    // Wrapper class for Integer    static class IntegerArrayWrapper extends ArrayWrapper {	private int[] value = new int[0];	void set(Object value) {	    Integer[] arr = (Integer[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new int[this.length];	    }	    for (int i = 0; i < this.length; i++) {		this.value[i] = arr[i].intValue();	    }	}	void set(int index, Object value) {	    this.value[index] = ((Integer)value).intValue();	}	Object get() {	    Integer[] arr = new Integer[this.length];	    for (int i = 0; i < this.length; i++) {		arr[i] = new Integer(this.value[i]);	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    // Wrapper class for Float    static class FloatArrayWrapper extends ArrayWrapper {	private float[] value = new float[0];	void set(Object value) {	    Float[] arr = (Float[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new float[this.length];	    }	    for (int i = 0; i < this.length; i++) {		this.value[i] = arr[i].floatValue();	    }	}	void set(int index, Object value) {	    this.value[index] = ((Float)value).floatValue();	}	Object get() {	    Float[] arr = new Float[this.length];	    for (int i = 0; i < this.length; i++) {		arr[i] = new Float(this.value[i]);	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    /*    // Wrapper class for Double    static class DoubleArrayWrapper extends ArrayWrapper {	private double[] value = new double[0];	void set(Object value) {	    Double[] arr = (Double[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new double[this.length];	    }	    for (int i = 0; i < this.length; i++) {		this.value[i] = arr[i].doubleValue();	    }	}	void set(int index, Object value) {	    this.value[index] = ((Double)value).doubleValue();	}	Object get() {	    Double[] arr = new Double[this.length];	    for (int i = 0; i < this.length; i++) {		arr[i] = new Double(this.value[i]);	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    */    // Wrapper class for Tuple2i    static class Tuple2iArrayWrapper extends ArrayWrapper {	private int[] value = new int[0];	void set(Object value) {	    Tuple2i[] arr = (Tuple2i[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new int[this.length*2];	    }	    for (int i = 0; i < this.length; i++) {		int j = i * 2;		this.value[j+0] = arr[i].x;		this.value[j+1] = arr[i].y;	    }	}	void set(int index, Object value) {	    int j = index * 2;	    this.value[j+0] = ((Tuple2i)value).x;	    this.value[j+1] = ((Tuple2i)value).y;	}	Object get() {	    Tuple2i[] arr = new Tuple2i[this.length];	    for (int i = 0; i < this.length; i++) {		int j = i * 2;                arr[i] = new Point2i();		arr[i].x = this.value[j+0];		arr[i].y = this.value[j+1];	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    // Wrapper class for Tuple2f    static class Tuple2fArrayWrapper extends ArrayWrapper {	private float[] value = new float[0];	void set(Object value) {	    Tuple2f[] arr = (Tuple2f[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new float[this.length*2];	    }	    for (int i = 0; i < this.length; i++) {		int j = i * 2;		this.value[j+0] = arr[i].x;		this.value[j+1] = arr[i].y;	    }	}	void set(int index, Object value) {	    int j = index * 2;	    this.value[j+0] = ((Tuple2f)value).x;	    this.value[j+1] = ((Tuple2f)value).y;	}	Object get() {	    Tuple2f[] arr = new Tuple2f[this.length];	    for (int i = 0; i < this.length; i++) {		int j = i * 2;                arr[i] = new Point2f();		arr[i].x = this.value[j+0];		arr[i].y = this.value[j+1];	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    /*    // Wrapper class for Tuple2d    static class Tuple2dArrayWrapper extends ArrayWrapper {	private double[] value = new double[0];	void set(Object value) {	    Tuple2d[] arr = (Tuple2d[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new double[this.length*2];	    }	    for (int i = 0; i < this.length; i++) {		int j = i * 2;		this.value[j+0] = arr[i].x;		this.value[j+1] = arr[i].y;	    }	}	void set(int index, Object value) {	    int j = index * 2;	    this.value[j+0] = ((Tuple2d)value).x;	    this.value[j+1] = ((Tuple2d)value).y;	}	Object get() {	    Tuple2d[] arr = new Tuple2d[this.length];	    for (int i = 0; i < this.length; i++) {		int j = i * 2;                arr[i] = new Point2d();		arr[i].x = this.value[j+0];		arr[i].y = this.value[j+1];	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    */    // Wrapper class for Tuple3i    static class Tuple3iArrayWrapper extends ArrayWrapper {	private int[] value = new int[0];	void set(Object value) {	    Tuple3i[] arr = (Tuple3i[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new int[this.length*3];	    }	    for (int i = 0; i < this.length; i++) {		int j = i * 3;		this.value[j+0] = arr[i].x;		this.value[j+1] = arr[i].y;		this.value[j+2] = arr[i].z;	    }	}	void set(int index, Object value) {	    int j = index * 3;	    this.value[j+0] = ((Tuple3i)value).x;	    this.value[j+1] = ((Tuple3i)value).y;	    this.value[j+2] = ((Tuple3i)value).z;	}	Object get() {	    Tuple3i[] arr = new Tuple3i[this.length];	    for (int i = 0; i < this.length; i++) {		int j = i * 3;                arr[i] = new Point3i();		arr[i].x = this.value[j+0];		arr[i].y = this.value[j+1];		arr[i].z = this.value[j+2];	    }	    return arr;	}	Object getRef() {	    return this.value;	}    }    // Wrapper class for Tuple3f    static class Tuple3fArrayWrapper extends ArrayWrapper {	private float[] value = new float[0];	void set(Object value) {	    Tuple3f[] arr = (Tuple3f[])value;	    if (this.length != arr.length) {		this.length = arr.length;		this.value = new float[this.length*3];	    }	    for (int i = 0; i < this.length; i++) {		int j = i * 3;		this.value[j+0] = arr[i].x;		this.value[j+1] = arr[i].y;		this.value[j+2] = arr[i].z;	    }	}	void set(int index, Object value) {	    int j = index * 3;	    this.value[j+0] = ((Tuple3f)value).x;	    this.value[j+1] = ((Tuple3f)value).y;	    this.value[j+2] = ((Tuple3f)value).z;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -