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

📄 renderer.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				((Integer)m[nmesg].args[3]).intValue());			break;		    case GraphicsContext3D.INSERT_SOUND:			canvas.graphicsContext3D.doInsertSound(				(Sound)m[nmesg].args[2],				((Integer)m[nmesg].args[3]).intValue());			break;		    case GraphicsContext3D.REMOVE_SOUND:			canvas.graphicsContext3D.doRemoveSound(				((Integer)m[nmesg].args[2]).intValue());			break;		    case GraphicsContext3D.ADD_SOUND:			canvas.graphicsContext3D.doAddSound(				(Sound)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_AURAL_ATTRIBUTES:			canvas.graphicsContext3D.doSetAuralAttributes(				(AuralAttributes)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_BUFFER_OVERRIDE:			canvas.graphicsContext3D.doSetBufferOverride(			    ((Boolean)m[nmesg].args[2]).booleanValue());			break;		    case GraphicsContext3D.SET_FRONT_BUFFER_RENDERING:			canvas.graphicsContext3D.doSetFrontBufferRendering(			    ((Boolean)m[nmesg].args[2]).booleanValue());			break;		    case GraphicsContext3D.SET_STEREO_MODE:			canvas.graphicsContext3D.doSetStereoMode(				((Integer)m[nmesg].args[2]).intValue());			break;		    case GraphicsContext3D.FLUSH:			canvas.graphicsContext3D.doFlush(				((Boolean)m[nmesg].args[2]).booleanValue());			break;		    case GraphicsContext3D.FLUSH2D:			canvas.graphics2D.doFlush();			break;		    case GraphicsContext3D.DRAWANDFLUSH2D:			Object ar[] = m[nmesg].args;			canvas.graphics2D.doDrawAndFlushImage(					      (BufferedImage) ar[2], 					      ((Point) ar[3]).x,					      ((Point) ar[3]).y,					      (ImageObserver) ar[4]);			break;		    case GraphicsContext3D.DISPOSE2D:			canvas.graphics2D.doDispose();			break;		    case GraphicsContext3D.SET_MODELCLIP:			canvas.graphicsContext3D.doSetModelClip(				(ModelClip)m[nmesg].args[2]);			break;                    default:                        break;                    }		    if (canvas.ctx != null) {			canvas.endScene();		    }                  } catch (RuntimeException ex) {                    ex.printStackTrace();                    // Issue 260 : indicate fatal error and notify error listeners                    canvas.setFatalError();                    RenderingError err =                            new RenderingError(RenderingError.CONTEXT_CREATION_ERROR,                                J3dI18N.getString("Renderer6"));                    err.setCanvas3D(canvas);                    err.setGraphicsDevice(canvas.graphicsConfiguration.getDevice());                    notifyErrorListeners(err);                  }		    m[nmesg++].decRefcount();		} else { // retained mode rendering                    long startRenderTime = 0L;                    if (MasterControl.isStatsLoggable(Level.INFO)) {                        // Instrumentation of Java 3D renderer                        startRenderTime = System.nanoTime();                    }                    m[nmesg++].decRefcount();                                        if (canvas.isFatalError()) {                        continue;                    }		    ImageComponent2DRetained offBufRetained = null;		    		    if (renderType == J3dMessage.RENDER_OFFSCREEN) {                        // Issue 131: set offScreenRendering flag here, since it                        // otherwise won't be set for auto-off-screen rendering                        // (which doesn't use renderOffScreenBuffer)                        canvas.offScreenRendering = true;                        if (canvas.drawable == null || !canvas.active) {                            canvas.offScreenRendering = false;                            continue;			} else {			    offBufRetained = (ImageComponent2DRetained)				canvas.offScreenBuffer.retained;			                                if (offBufRetained.isByReference()) {                                offBufRetained.geomLock.getLock();                            }                                                        offBufRetained.evaluateExtensions(canvas);			    			}                                            } else if (!canvas.active) {			continue;		    }                    // Issue 78 - need to get the drawingSurface info every                    // frame; this is necessary since the HDC (window ID)                    // on Windows can become invalidated without our                    // being notified!                    if (!canvas.offScreen) {                        canvas.drawingSurfaceObject.getDrawingSurfaceObjectInfo();                    }		    renderBin = canvas.view.renderBin;	            // setup rendering context 	            // We need to catch NullPointerException when the dsi  	            // gets yanked from us during a remove.                    if (canvas.useSharedCtx) {                        if (sharedCtx == null) {                            sharedCtxDisplay = canvas.screen.display;                            sharedCtxDrawable = canvas.drawable;			    // Always lock for context create			    if (!canvas.drawingSurfaceObject.renderLock()) {				if ((offBufRetained != null) &&				    offBufRetained.isByReference()) {				    offBufRetained.geomLock.unLock();				}                                canvas.offScreenRendering = false;				break doneRender;			    }			    synchronized (VirtualUniverse.mc.contextCreationLock) {                                sharedCtx = null;				try {                                     sharedCtx = canvas.createNewContext(null, true);                                } catch (RuntimeException ex) {                                    ex.printStackTrace();                                }				if (sharedCtx == null) {				    canvas.drawingSurfaceObject.unLock();				    if ((offBufRetained != null) &&					offBufRetained.isByReference()) {					offBufRetained.geomLock.unLock();				    }                                    canvas.offScreenRendering = false;                                    // Issue 260 : indicate fatal error and notify error listeners                                    canvas.setFatalError();                                    RenderingError err =                                            new RenderingError(RenderingError.CONTEXT_CREATION_ERROR,                                                J3dI18N.getString("Renderer7"));                                    err.setCanvas3D(canvas);                                    err.setGraphicsDevice(canvas.graphicsConfiguration.getDevice());                                    notifyErrorListeners(err);				    break doneRender;				}				sharedCtxTimeStamp = 				    VirtualUniverse.mc.getContextTimeStamp();				needToRebuildDisplayList = true;			    }			    canvas.drawingSurfaceObject.unLock();                       }                    }            	    if (canvas.ctx == null) {			// Always lock for context create						if (!canvas.drawingSurfaceObject.renderLock()) {			    if ((offBufRetained != null) &&				offBufRetained.isByReference()) {				offBufRetained.geomLock.unLock();			    }                            canvas.offScreenRendering = false;			    break doneRender;			}			synchronized (VirtualUniverse.mc.contextCreationLock) {                            canvas.ctx = null;			    try {                                canvas.ctx = canvas.createNewContext(sharedCtx, false);                            } catch (RuntimeException ex) {                                ex.printStackTrace();                            }                            if (canvas.ctx == null) {				canvas.drawingSurfaceObject.unLock();			    				if ((offBufRetained != null) &&				    offBufRetained.isByReference()) {				    offBufRetained.geomLock.unLock();				}                                canvas.offScreenRendering = false;                                // Issue 260 : indicate fatal error and notify error listeners                                canvas.setFatalError();                                RenderingError err =                                        new RenderingError(RenderingError.CONTEXT_CREATION_ERROR,                                            J3dI18N.getString("Renderer7"));                                err.setCanvas3D(canvas);                                err.setGraphicsDevice(canvas.graphicsConfiguration.getDevice());                                notifyErrorListeners(err);                                break doneRender;			    }			    if (canvas.graphics2D != null) {				canvas.graphics2D.init();			    }			    canvas.ctxTimeStamp = 				    VirtualUniverse.mc.getContextTimeStamp();			    listOfCtxs.add(canvas.ctx);			    listOfCanvases.add(canvas);			    if (renderBin.nodeComponentList.size() > 0) {				for (i = 0; i < renderBin.nodeComponentList.size(); i++) {				    NodeComponentRetained nc = (NodeComponentRetained)renderBin.nodeComponentList.get(i);                                    if(nc instanceof ImageComponentRetained) {                                            ((ImageComponentRetained)nc).evaluateExtensions(canvas);                                    }				}                            }                            // enable separate specular color			    canvas.enableSeparateSpecularColor();			}                        // create the cache texture state in canvas                        // for state download checking purpose                        if (canvas.texUnitState == null) {                            canvas.createTexUnitState();                        }                        canvas.resetImmediateRendering(Canvas3D.NOCHANGE);                        canvas.drawingSurfaceObject.contextValidated();                        if (!canvas.useSharedCtx) {                            canvas.needToRebuildDisplayList = true;                        }			canvas.drawingSurfaceObject.unLock();			                	    } else {			if (canvas.isRunning) {                    	    canvas.makeCtxCurrent();			}            	    }	            if (renderBin != null) {			if ((VirtualUniverse.mc.doDsiRenderLock) &&			    (!canvas.drawingSurfaceObject.renderLock())) {			    if ((offBufRetained != null) &&				offBufRetained.isByReference()) {				offBufRetained.geomLock.unLock();			    }                            canvas.offScreenRendering = false;			    break doneRender;			}			if (needToResendTextureDown) {			    VirtualUniverse.mc.resendTexTimestamp++;			    needToResendTextureDown = false;			}		        // handle free resource			if (canvas.useSharedCtx) {			    freeResourcesInFreeList(canvas);			} else {			    canvas.freeResourcesInFreeList(canvas.ctx);			}			if (VirtualUniverse.mc.doDsiRenderLock) {			    canvas.drawingSurfaceObject.unLock();			}                        // Issue 109 : removed copyOfCvCache now that we have                        // a separate canvasViewCache for computing view frustum                        CanvasViewCache cvCache = canvas.canvasViewCache;			// Deadlock if we include updateViewCache in			// drawingSurfaceObject sync.			canvas.updateViewCache(false, null, null,					       renderBin.geometryBackground != null);			if ((VirtualUniverse.mc.doDsiRenderLock) &&			    (!canvas.drawingSurfaceObject.renderLock())) {			    if ((offBufRetained != null) &&				offBufRetained.isByReference()) {				offBufRetained.geomLock.unLock();			    }                            canvas.offScreenRendering = false;			    break doneRender;			}								                        // setup viewport                        canvas.setViewport(canvas.ctx, 0, 0,                           cvCache.getCanvasWidth(),                           cvCache.getCanvasHeight());                        // rebuild the display list of all dirty renderMolecules.                        if (canvas.useSharedCtx) {			    if (needToRebuildDisplayList) {				renderBin.updateAllRenderMolecule(							this, canvas);				needToRebuildDisplayList = false;			    }			    if (dirtyDisplayList) {                                renderBin.updateDirtyDisplayLists(canvas,					dirtyRenderMoleculeList,					dirtyDlistPerRinfoList,					dirtyRenderAtomList,true);				dirtyDisplayList = false;			    }			    // for shared context, download textures upfront			    // to minimize the context switching overhead			    int sz = textureReloadList.size();			    if (sz > 0) {				for (j = sz-1; j>=0; j--) {				    ((TextureRetained)textureReloadList.get(j)).					reloadTextureSharedContext(canvas);				}				textureReloadList.clear();			    }				                        } else {                            // update each canvas			    if (canvas.needToRebuildDisplayList) {				renderBin.updateAllRenderMolecule(canvas);				canvas.needToRebuildDisplayList = false;

⌨️ 快捷键说明

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