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

📄 textureretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	        curh = tmph;	    }	    int startw = curw;	    int imageXOffset = image.tilew - curw;	    int imageYOffset = image.tileh - curh;	    for (int m = 0; m < image.numYTiles; m++) {	        xoffset = 0;	        tmpw = width;	        curw = startw;	        imageXOffset = image.tilew - curw;	        for (int n = 0; n < image.numXTiles; n++) {		    java.awt.image.Raster ras;		    ras = ((RenderedImage)image.getRefImage(0)).getTile(n,m);		    byte[] data =  ((DataBufferByte)ras.getDataBuffer()).getData();                    updateTextureSubImage(cv, face,                            level, xoffset, yoffset, format,                            image.getImageFormatTypeIntValue(false),                            imageXOffset, imageYOffset,                            image.tilew,                            curw, curh,                            ImageComponentRetained.IMAGE_DATA_TYPE_BYTE_ARRAY,                            (Object) data);	  	    xoffset += curw;	  	    imageXOffset = 0;		    tmpw -= curw;		    if (tmpw < image.tilew) 		        curw = tmpw;		    else		        curw = image.tilew;	        }	        yoffset += curh;	        imageYOffset = 0;	        tmph -= curh;	        if (tmph < image.tileh)		    curh = tmph;	        else		    curh = image.tileh;	    }        }    }    /**     * update a subregion of the texture image     * This method needs to take care of RenderedImage as well as     * BufferedImage     */    void reloadTextureSubImage(Canvas3D cv, int face, int level, 				ImageComponentUpdateInfo info,				ImageComponentRetained image) {	int x = info.x,	    y = info.y,	    width = info.width,	    height = info.height;                //The x and y here specifies the subregion of the imageData of        //the associated RenderedImage.	//System.err.println("\nupdateTextureSubImage: x= " + x + " y= " + y +	//			" width= " + width + " height= " + height +	//			" format= " + format);        ImageComponentRetained.ImageData imageData = image.getImageData(isUseAsRaster());        if(imageData != null) {            int xoffset = x;            int yoffset = y;                        // TODO Check this logic : If !yUp adjust yoffset            if (!image.yUp) {                yoffset = image.height - yoffset - height;            }                        updateTextureSubImage(cv, face, level,                    xoffset, yoffset,                    format, image.getImageFormatTypeIntValue(false),                    xoffset, yoffset,                    image.width, width, height,                    image.getImageDataTypeIntValue(),                    imageData.get());                    } else {            assert false;                        // TODO : Dead code - need to clean up for 1.6	    // System.err.println("RenderedImage subImage update");	    // determine the first tile of the image            float mt;	    int minTileX, minTileY;	    int rx = x;	    int ry = y;	            mt = (float)(rx) / (float)image.tilew;            if (mt < 0) {                minTileX = (int)(mt - 1);            } else {                minTileX = (int)mt;            }            mt = (float)(ry) / (float)image.tileh;            if (mt < 0) {                minTileY = (int)(mt - 1);            } else {                minTileY = (int)mt;            }	    // determine the pixel offset of the upper-left corner of the	    // first tile	    int startXTile = minTileX * image.tilew;	    int startYTile = minTileY * image.tilew;            // image dimension in the first tile            int curw = (startXTile + image.tilew - rx);            int curh = (startYTile + image.tileh - ry);            // check if the to-be-copied region is less than the tile image            // if so, update the to-be-copied dimension of this tile            if (curw > width) {                curw = width;            }            if (curh > height) {                curh = height;            }            // save the to-be-copied width of the left most tile            int startw = curw;            // temporary variable for dimension of the to-be-copied region            int tmpw = width;            int tmph = height;            // offset of the first pixel of the tile to be copied; offset is            // relative to the upper left corner of the title            int imgX = rx - startXTile;            int imgY = ry - startYTile;            // determine the number of tiles in each direction that the            // image spans            int numXTiles = (width + imgX) / image.tilew;            int numYTiles = (height + imgY) / image.tileh;            if (((float)(width + imgX ) % (float)image.tilew) > 0) {                numXTiles += 1;            }            if (((float)(height + imgY ) % (float)image.tileh) > 0) {                numYTiles += 1;            }	    java.awt.image.Raster ras;	    int textureX = x; 	// x offset in the texture 	    int textureY = y; 	// y offset in the texture 	    for (int yTile = minTileY; yTile < minTileY + numYTiles;			yTile++) {				tmpw = width;		curw = startw;		imgX = rx - startXTile;				for (int xTile = minTileX; xTile < minTileX + numXTiles;			xTile++) {		    ras = ((RenderedImage)image.getRefImage(0)).getTile(xTile, yTile);		    byte[] data = ((DataBufferByte)ras.getDataBuffer()).getData();                    updateTextureSubImage(cv, face, level,                            textureX, textureY,                            format, image.getImageFormatTypeIntValue(false),                            imgX, imgY,                            image.tilew, curw, curh,                             ImageComponentRetained.IMAGE_DATA_TYPE_BYTE_ARRAY,                            (Object)data);                    // move to the next tile in x direction		    textureX += curw;		    imgX = 0;                    // determine the width of copy region of the next tile		    tmpw -= curw;		    if (tmpw < image.tilew) {			curw = tmpw;		    } else {			curw = image.tilew;		    }		   	}                // move to the next set of tiles in y direction		textureY += curh;                imgY = 0;                // determine the height of copy region for the next set                // of tiles                tmph -= curh;                if (tmph < image.tileh) {                    curh = tmph;                } else {                    curh = image.tileh;                }	    }	}    }    // reload texture mipmap    void reloadTexture(Canvas3D cv) {	int blevel, mlevel;	//System.err.println("reloadTexture: baseLevel= " + baseLevel +	//			" maximumLevel= " + maximumLevel);	if ((cv.textureExtendedFeatures & Canvas3D.TEXTURE_LOD_RANGE) == 0 ) {	    blevel = 0;	    mlevel = maxLevels - 1;        } else {	    blevel = baseLevel;	    mlevel = maximumLevel;	}	if (blevel != 0) {	    // level 0 is not the base level, hence, need            // to load level 0 explicitly with a null pointer in order 	    // for mipmapping to be active. 	    updateTextureDimensions(cv);	}	for (int j = 0; j < numFaces; j++) {	    for (int i = blevel; i <= mlevel; i++) {		// it is possible to have null pointer if only a subset                // of mipmap levels is defined but the canvas does not 		// support lod_range extension                ImageComponentRetained image = images[j][i];		if (image != null) {                    // Issue 366: call evaluateExtensions, since it may not                    // have been called yet in all cases                    image.evaluateExtensions(cv);		    reloadTextureImage(cv, j, i, image, maxLevels);		}	    }        }    }    // update texture mipmap based on the imageUpdateInfo    void updateTexture(Canvas3D cv, int resourceBit) {	//System.err.println("updateTexture\n");	ImageComponentUpdateInfo info;	for (int k = 0; k < numFaces; k++) { 	    for (int i = baseLevel; i <= maximumLevel; i++) {		if (imageUpdateInfo[k][i] != null) {		    for (int j = 0; j < imageUpdateInfo[k][i].size(); j++) {			info = (ImageComponentUpdateInfo)					imageUpdateInfo[k][i].get(j);	    	        synchronized(resourceLock) {			    // if this info is updated, move on to the next one			    if ((info.updateMask & resourceBit) == 0)			        continue;			    // check if all canvases have processed this update			    info.updateMask &= ~resourceBit;			    // all the current resources have updated this			    // info, so this info can be removed from the			    // update list			    if ((info.updateMask & resourceCreationMask) 					== 0) {				info.updateMask = 0; // mark this update as						     // done			 	// mark the prune flag so as to prune the				// update list next time when the update 				// list is to be modified.				// Don't want to clean up the list at 				// rendering time because (1) MT issue,				// other renderer could be processing				// the update list now;				// (2) takes up rendering time.				if (imageUpdatePruneMask == null) {				    imageUpdatePruneMask = new int[numFaces];				}				imageUpdatePruneMask[k] = 1 << i;			    }			}			if (info.entireImage == true) {			    reloadTextureImage(cv, k, i, 						images[k][i], maxLevels);			} else {			    reloadTextureSubImage(cv, k, i, info, images[k][i]);			}		    }		}	    }	}    }    /**     * reloadTextureSharedContext is called to reload texture     * on a shared context. It is invoked from the Renderer     * before traversing the RenderBin. The idea is to reload     * all necessary textures up front for all shared contexts     * in order to minimize the context switching overhead.     */    void reloadTextureSharedContext(Canvas3D cv) {	// if texture is not enabled, don't bother downloading the	// the texture state	if (!isEnabled(cv)) {	    return;	}	bindTexture(cv);        	// reload all levels of texture image	// update texture parameters such as boundary modes, filtering	updateTextureFields(cv);	// update texture Lod parameters	updateTextureLOD(cv);	// update all texture images	reloadTexture(cv);        synchronized(resourceLock) {	    resourceCreationMask |= cv.screen.renderer.rendererBit;	    resourceUpdatedMask |= cv.screen.renderer.rendererBit;	    resourceLodUpdatedMask |= cv.screen.renderer.rendererBit;	    resourceInReloadList &= ~cv.screen.renderer.rendererBit;	}    }	    /**     * updateNative is called while traversing the RenderBin to      * update the texture state     */    void updateNative(Canvas3D cv) {	boolean reloadTexture = false; // true - reload all levels of texture	boolean updateTexture = false; // true - update a portion of texture	boolean updateTextureLod = false; // true - update texture Lod info        //System.err.println("Texture/updateNative: " + this + "object= " + objectId + " enable= " + enable);	bindTexture(cv);        	// if texture is not enabled, don't bother downloading the	// the texture state	if (!isEnabled(cv)) {	    return;	}        if (cv.useSharedCtx && cv.screen.renderer.sharedCtx != null) {            if ((resourceCreationMask & cv.screen.renderer.rendererBit) == 0) {		reloadTexture = true;	    } else {	        if (((resourceUpdatedMask & 		      cv.screen.renderer.rendererBit) == 0) && 		    (imageUpdateInfo != null)) {		    updateTexture = true;		}		if ((resourceLodUpdatedMask &				cv.screen.renderer.rendererBit) == 0) {		    updateTextureLod = true;		}	    }	    if (reloadTexture || updateTexture || updateTextureLod) {		cv.makeCtxCurrent(cv.screen.renderer.sharedCtx);	        bindTexture(cv);	    }	} else {            if ((resourceCreationMask & cv.canvasBit) == 0) {		reloadTexture = true;	    } else {	  	if (((resourceUpdatedMask & cv.canvasBit) == 0) && 			(imageUpdateInfo != null)) {		    updateTexture = true;		}		if ((resourceLodUpdatedMask & cv.canvasBit) == 0) {		    updateTextureLod = true;		}	    }	}		if (VirtualUniverse.mc.isD3D()) {	    if (texTimestamp != VirtualUniverse.mc.resendTexTimestamp) {		texTimestamp = VirtualUniverse.mc.resendTexTimestamp;		reloadTexture = true;	    }	    if (!reloadTexture) {		// D3D didn't store texture properties during Texture binding		updateTextureFields(cv);	    }	}//System.err.println("......... reloadTexture= " + reloadTexture +//		 " updateTexture= " + updateTexture + //		 " updateTextureLod= " + updateTextureLod);//System.err.println("......... resourceCreationMask= " + resourceCreationMask +//		   " resourceUpdatedMask= " + resourceUpdatedMask); 

⌨️ 快捷键说明

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