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

📄 indexedgeometryarrayretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	    	    if ((vertexFormat & GeometryArray.BY_REFERENCE) == 0) {                float[] vdata;		//	    System.err.println("by-copy");		synchronized (this) {		    cdirty = dirtyFlag;		    if (updateAlpha && !ignoreVertexColors) {			// update the alpha values			retVal = updateAlphaInVertexData(cv, cv.screen.screen, alpha);			useAlpha = (retVal[0] == Boolean.TRUE);			vdata = (float[])retVal[1];			// D3D only			if (alpha != lastScreenAlpha) {			    // handle multiple screen case			    lastScreenAlpha = alpha;			    cdirty |= COLOR_CHANGED;			}		    } else {			vdata = vertexData;			// if transparency switch between on/off			if (lastScreenAlpha != -1) {			    lastScreenAlpha = -1;			    cdirty |= COLOR_CHANGED;			}		    }		    // geomLock is get in MasterControl when		    // RenderBin render the geometry. So it is safe		    // just to set the dirty flag here		    dirtyFlag = 0;		}                Pipeline.getPipeline().buildIndexedGeometry(cv.ctx,                        this, geoType, isNonUniformScale,                        updateAlpha, alpha, ignoreVertexColors,                        initialIndexIndex,                        validIndexCount,                        maxCoordIndex + 1,                        vertexFormat,                        vertexAttrCount, vertexAttrSizes,                        texCoordSetCount, texCoordSetMap,                        (texCoordSetMap == null) ? 0 : texCoordSetMap.length,                        texCoordSetMapOffset,                        (xform == null) ? null : xform.mat,                        (nxform == null) ? null : nxform.mat,                        vdata, indexCoord);	    }            // XXXX: Note that there is no "else" clause here, and no            // buildIndexedGeometryForByRef() method.            // We would need to create one if we ever wanted to support by-ref            // indexed geometry in display lists. Better yet, we could fix            // canBeInDisplayList so that unindexified by-ref geometry could            // go into a display list.	}    }        void mergeGeometryArrays(ArrayList list) {	int numMerge = list.size();	int[] texCoord = null;	indexCount = 0;	for (int i=0; i < numMerge; i++) {	    IndexedGeometryArrayRetained geo= (IndexedGeometryArrayRetained)list.get(i);	    indexCount += geo.validIndexCount;	}	validIndexCount = indexCount;	initialIndexIndex = 0;	compileIndexCount = new int[numMerge];	compileIndexOffset = new int[numMerge];	indexCoord = new int[indexCount];        boolean notUCIO = (vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0;        if (notUCIO) {            if ((vertexFormat  & GeometryArray.COLOR) != 0)                indexColor = new int[indexCount];            if ((vertexFormat  &  GeometryArray.NORMALS) != 0)                indexNormal = new int[indexCount];            // We only merge if the texCoordSetCount is 1 and there are no            // vertex attrs            if ((vertexFormat  &  GeometryArray.TEXTURE_COORDINATE) != 0) {                indexTexCoord = new int[1][];                indexTexCoord[0] = new int[indexCount];                texCoord = indexTexCoord[0];            }        }	int curDataOffset = 0;	int curIndexOffset = 0;	for (int i = 0; i < numMerge; i++) {	    IndexedGeometryArrayRetained geo= (IndexedGeometryArrayRetained)list.get(i);	    int curIndexCount = geo.validIndexCount;	    compileIndexCount[i] = curIndexCount;	    // Copy all the indices	    for (int j = 0; j < curIndexCount; j++) {		indexCoord[j+curIndexOffset] = geo.indexCoord[j+geo.initialIndexIndex]+curDataOffset;                if (notUCIO) {	            if ((vertexFormat  & GeometryArray.COLOR) != 0) 	                indexColor[j+curIndexOffset] = geo.indexColor[j+geo.initialIndexIndex]+curDataOffset;	            if ((vertexFormat  &  GeometryArray.NORMALS) != 0) 	                indexNormal[j+curIndexOffset] = geo.indexNormal[j+geo.initialIndexIndex]+curDataOffset;	            if ((vertexFormat  &  GeometryArray.TEXTURE_COORDINATE) != 0) 	                texCoord[j+curIndexOffset] = geo.indexTexCoord[0][j+geo.initialIndexIndex]+curDataOffset;                }	    }	    maxCoordIndex = geo.maxCoordIndex +curDataOffset;	    compileIndexOffset[i] = curIndexOffset;	    curDataOffset += geo.vertexCount;	    curIndexOffset += curIndexCount;	}	// reset the max Values	// call the super to merge the vertex data	super.mergeGeometryArrays(list);	    }    boolean isWriteStatic() {        if (!super.isWriteStatic() ||                source.getCapability(IndexedGeometryArray.ALLOW_COORDINATE_INDEX_WRITE ) ||                source.getCapability(IndexedGeometryArray.ALLOW_COLOR_INDEX_WRITE) ||                source.getCapability(IndexedGeometryArray.ALLOW_NORMAL_INDEX_WRITE) ||                source.getCapability(IndexedGeometryArray.ALLOW_VERTEX_ATTR_INDEX_WRITE) ||                source.getCapability(IndexedGeometryArray.ALLOW_TEXCOORD_INDEX_WRITE)) {            return false;        }	return true;    }        /**     * Gets current number of indices     * @return indexCount     */    int getIndexCount(int id){	return compileIndexCount[id];    }    int computeMaxIndex(int initial, int count, int[] indices) {	int maxIndex = 0;        if (indices != null) {            for (int i = initial; i < (initial+count); i++) {                if (indices[i] > maxIndex) {                    maxIndex = indices[i];                }            }        }	return maxIndex;	    }    //NVaidya    // same as computeMaxIndex method but checks for index < 0    int computeMaxIndexWithCheck(int initial, int count, int[] indices) {	int maxIndex = 0;	for (int i = initial; i < (initial+count); i++) {		// Throw an exception, since index is negative        if (indices[i] < 0)		throw new ArrayIndexOutOfBoundsException(J3dI18N.getString("IndexedGeometryArray27"));	    if (indices[i] > maxIndex) {		maxIndex = indices[i];	    }	}	return maxIndex;	    }    void setValidIndexCount(int validIndexCount) {	if (validIndexCount < 0) {	    throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray21"));	}	if ((initialIndexIndex + validIndexCount) > indexCount) {	    throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray22"));	}        if ((vertexFormat & GeometryArray.BY_REFERENCE_INDICES) != 0) {            if (indexCoord != null && indexCoord.length < initialIndexIndex + validIndexCount) {                throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray33"));            }        }	int newCoordMax =0;	int newColorIndex=0;	int newNormalIndex=0;	int[] newTexCoordIndex = null;        int[] newVertexAttrIndex = null;	newCoordMax = computeMaxIndex(initialIndexIndex, validIndexCount,indexCoord );	doErrorCheck(newCoordMax);	if ((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) {	    if ((vertexFormat & GeometryArray.COLOR) != 0) {		newColorIndex = computeMaxIndex(initialIndexIndex, validIndexCount, indexColor);		doColorCheck(newColorIndex);	    }	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		newTexCoordIndex = new int[texCoordSetCount];		for (int i = 0; i < texCoordSetCount; i++) {		   newTexCoordIndex[i] =  computeMaxIndex(initialIndexIndex,validIndexCount,								  indexTexCoord[i]);		   doTexCoordCheck(newTexCoordIndex[i], i);		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		newVertexAttrIndex = new int[vertexAttrCount];		for (int i = 0; i < vertexAttrCount; i++) {		   newVertexAttrIndex[i] = computeMaxIndex(initialIndexIndex,                                                           validIndexCount,                                                           indexVertexAttr[i]);		   doVertexAttrCheck(newVertexAttrIndex[i], i);		}	    }	    if ((vertexFormat & GeometryArray.NORMALS) != 0) {		newNormalIndex = computeMaxIndex(initialIndexIndex, validIndexCount, indexNormal);		doNormalCheck(newNormalIndex);	    }	}	geomLock.getLock();	this.validIndexCount = validIndexCount;	maxCoordIndex = newCoordMax;	if ((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) {	    maxColorIndex = newColorIndex;	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		for (int i = 0; i < texCoordSetCount; i++) {		    maxTexCoordIndices[i] = newTexCoordIndex[i];		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		for (int i = 0; i < vertexAttrCount; i++) {		    maxVertexAttrIndices[i] = newVertexAttrIndex[i];		}	    }	    maxNormalIndex = newNormalIndex;	}	else {	    maxColorIndex = maxCoordIndex;	    maxNormalIndex = maxCoordIndex;	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		for (int i = 0; i < texCoordSetCount; i++) {		    maxTexCoordIndices[i] = maxCoordIndex;		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		for (int i = 0; i < vertexAttrCount; i++) {		    maxVertexAttrIndices[i] = maxCoordIndex;		}	    }	}	geomLock.unLock();	// bbox is computed for the entries list.	// so, send as false	if (!inUpdater && source != null && source.isLive()) {	    sendDataChangedMessage(true);	}        }    void setInitialIndexIndex(int initialIndexIndex) {	if ((initialIndexIndex + validIndexCount) > indexCount) {	    throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray22"));	}        if ((vertexFormat & GeometryArray.BY_REFERENCE_INDICES) != 0) {            if (indexCoord != null && indexCoord.length < initialIndexIndex + validIndexCount) {                throw new IllegalArgumentException(J3dI18N.getString("IndexedGeometryArray33"));            }        }	int newCoordMax =0;	int newColorIndex=0;	int newNormalIndex=0;	int[] newTexCoordIndex = null;        int[] newVertexAttrIndex = null;        	newCoordMax = computeMaxIndex(initialIndexIndex, validIndexCount, indexCoord);	doErrorCheck(newCoordMax);	if ((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) {	    if ((vertexFormat & GeometryArray.COLOR) != 0) {		newColorIndex = computeMaxIndex(initialIndexIndex, validIndexCount, indexColor);		doColorCheck(newColorIndex);	    }	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		newTexCoordIndex = new int[texCoordSetCount];		for (int i = 0; i < texCoordSetCount; i++) {		   newTexCoordIndex[i] =  computeMaxIndex(initialIndexIndex,validIndexCount,							  indexTexCoord[i]);		   doTexCoordCheck(newTexCoordIndex[i], i);		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		newVertexAttrIndex = new int[vertexAttrCount];		for (int i = 0; i < vertexAttrCount; i++) {		   newVertexAttrIndex[i] = computeMaxIndex(initialIndexIndex,                                                           validIndexCount,                                                           indexVertexAttr[i]);		   doVertexAttrCheck(newVertexAttrIndex[i], i);		}	    }	    if ((vertexFormat & GeometryArray.NORMALS) != 0) {		newNormalIndex = computeMaxIndex(initialIndexIndex, validIndexCount, indexNormal);		doNormalCheck(newNormalIndex);	    }	}	     	geomLock.getLock();	dirtyFlag |= INDEX_CHANGED;	this.initialIndexIndex = initialIndexIndex;	maxCoordIndex = newCoordMax;	if ((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) {	    maxColorIndex = newColorIndex;	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		for (int i = 0; i < texCoordSetCount; i++) {		    maxTexCoordIndices[i] = newTexCoordIndex[i];		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		for (int i = 0; i < vertexAttrCount; i++) {		    maxVertexAttrIndices[i] = newVertexAttrIndex[i];		}	    }	    maxNormalIndex = newNormalIndex;	}	else {	    maxColorIndex = maxCoordIndex;	    maxNormalIndex = maxCoordIndex;	    if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		for (int i = 0; i < texCoordSetCount; i++) {		    maxTexCoordIndices[i] = maxCoordIndex;		}	    }	    if ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {		for (int i = 0; i < vertexAttrCount; i++) {		    maxVertexAttrIndices[i] = maxCoordIndex;		}	    }	}	geomLock.unLock();	// bbox is computed for the entries list.	// so, send as false	if (!inUpdater && source != null && source.isLive()) {	    sendDataChangedMessage(true);	}    }    int getInitialIndexIndex() {	return initialIndexIndex;    }        int getValidIndexCount() {	return validIndexCount;    }    void handleFrequencyChange(int bit) {	if ((bit == IndexedGeometryArray.ALLOW_COORDINATE_INDEX_WRITE) ||	    (((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) &&	     ((vertexFormat & GeometryArray.COLOR) != 0) &&	     bit == IndexedGeometryArray.ALLOW_COLOR_INDEX_WRITE) ||	    (((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) &&	     ((vertexFormat & GeometryArray.NORMALS) != 0) &&	     bit == IndexedGeometryArray.ALLOW_NORMAL_INDEX_WRITE) ||            (((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0)&&             ((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0)&&             bit == IndexedGeometryArray.ALLOW_VERTEX_ATTR_INDEX_WRITE) ||	    (((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0)&&	     ((vertexFormat & GeometryArray.TEXTURE_COORDINATE) != 0)&&	     bit == IndexedGeometryArray.ALLOW_TEXCOORD_INDEX_WRITE)) {            setFrequencyChangeMask(bit, 0x1);	}	else {	    super.handleFrequencyChange(bit);	}    }}

⌨️ 快捷键说明

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