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

📄 renderer.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	    if (mtype == MasterControl.REMOVEALLCTXS_CLEANUP) {		 // from MasterControl when View is last views		 removeAllCtxs();	    } else if (mtype == MasterControl.FREECONTEXT_CLEANUP) {		// from MasterControl freeContext(View v)		cv = (Canvas3D) args[1];		removeCtx(cv, cv.screen.display, cv.drawable, cv.ctx,			  true, true, false);	    } else if (mtype == MasterControl.RESETCANVAS_CLEANUP) {		// from MasterControl RESET_CANVAS postRequest		cv = (Canvas3D) args[1];		if (cv.ctx != null) {		    cv.makeCtxCurrent();		}		cv.freeContextResources(cv.screen.renderer, true, cv.ctx);	    } else if (mtype == MasterControl.REMOVECTX_CLEANUP) { 		// from Canvas3D removeCtx() postRequest		Object[] obj = (Object []) args[1];		Canvas3D c = (Canvas3D) obj[0]; 		removeCtx(c,			  ((Long) obj[1]).longValue(),			  (Drawable) obj[2],			  (Context) obj[3], 			  false, !c.offScreen, 			  false);			    } 	    return;	} else { // RENDER || REQUESTRENDER            int renderType;	    nmesg = 0;	    int totalMessages = 0;            if (opArg == RENDER) {                m = renderMessage;		m[0] = new J3dMessage();                // Issue 131: Set appropriate message type                if (((Canvas3D)args[1]).offScreen) {                    m[0].type = J3dMessage.RENDER_OFFSCREEN;                }                else {                    m[0].type = J3dMessage.RENDER_RETAINED;                }		m[0].incRefcount();                m[0].args[0] = args[1];		totalMessages = 1;            } else { // REQUESTRENDER		m = rendererStructure.getMessages();		totalMessages = rendererStructure.getNumMessage();		if (totalMessages <= 0) {		    return;		}	    }	    doneRender: while (nmesg < totalMessages) {		firstArg = m[nmesg].args[0];		if (firstArg == null) {		    Object secondArg =  m[nmesg].args[1];		    if (secondArg instanceof Canvas3D) {			// message from Canvas3Ds to destroy Context			Integer reqType = (Integer) m[nmesg].args[2];			Canvas3D c = (Canvas3D) secondArg;			if (reqType == MasterControl.SET_GRAPHICSCONFIG_FEATURES) {                          try {			    if (c.offScreen) {				// offScreen canvas neither supports				// double buffering nor  stereo				c.doubleBufferAvailable = false;				c.stereoAvailable = false;			    } else {				c.doubleBufferAvailable = c.hasDoubleBuffer();				c.stereoAvailable = c.hasStereo();			    }			    // Setup stencil related variables.                            c.actualStencilSize = c.getStencilSize();                            boolean userOwnsStencil = c.requestedStencilSize > 0;                                                        c.userStencilAvailable =                                     (userOwnsStencil && (c.actualStencilSize > 0));                            c.systemStencilAvailable =                                    (!userOwnsStencil && (c.actualStencilSize > 0));                            c.sceneAntialiasingMultiSamplesAvailable =				c.hasSceneAntialiasingMultisample();			    if (c.sceneAntialiasingMultiSamplesAvailable) {				c.sceneAntialiasingAvailable = true;			    } else {				c.sceneAntialiasingAvailable = 				    c.hasSceneAntialiasingAccum();			    }                          } catch (RuntimeException ex) {                              ex.printStackTrace();                              // Issue 260 : indicate fatal error and notify error listeners                              c.setFatalError();                              RenderingError err =                                      new RenderingError(RenderingError.GRAPHICS_CONFIG_ERROR,                                          J3dI18N.getString("Renderer1"));                              err.setCanvas3D(c);                              err.setGraphicsDevice(c.graphicsConfiguration.getDevice());                              notifyErrorListeners(err);                          }			    GraphicsConfigTemplate3D.runMonitor(J3dThread.NOTIFY);			} else if (reqType == MasterControl.SET_QUERYPROPERTIES){                            try {                                c.createQueryContext();                            } catch (RuntimeException ex) {                                ex.printStackTrace();                                // Issue 260 : indicate fatal error and notify error listeners                                c.setFatalError();                                RenderingError err =                                        new RenderingError(RenderingError.CONTEXT_CREATION_ERROR,                                            J3dI18N.getString("Renderer2"));                                err.setCanvas3D(c);                                err.setGraphicsDevice(c.graphicsConfiguration.getDevice());                                notifyErrorListeners(err);                            }			    // currentCtx change after we create a new context			    GraphicsConfigTemplate3D.runMonitor(J3dThread.NOTIFY);			    currentCtx = null;                            currentDrawable = null;			} 		    } else if (secondArg instanceof Integer) {                        // Issue 121 - This was formerly used as a message from                        // the now-nonexistant TextureRetained finalize() method			// to free the texture id                        throw new AssertionError();		    } else if (secondArg instanceof GeometryArrayRetained) {			// message from GeometryArrayRetained			// clearLive() to free D3D array			((GeometryArrayRetained) secondArg).freeD3DArray(false);		    } else if (secondArg instanceof GraphicsConfigTemplate3D) {			GraphicsConfigTemplate3D gct =			    (GraphicsConfigTemplate3D) secondArg;			Integer reqType = (Integer) m[nmesg].args[2];                        if (reqType == MasterControl.GETBESTCONFIG) {                            GraphicsConfiguration gcfg = null;                            GraphicsConfiguration [] gcList = (GraphicsConfiguration []) gct.testCfg;                            try {                                gcfg = Pipeline.getPipeline().getBestConfiguration(gct, gcList);                            } catch (NullPointerException npe) {                                npe.printStackTrace();                            } catch (RuntimeException ex) {                                ex.printStackTrace();                                // Issue 260 : notify error listeners                                RenderingError err =                                        new RenderingError(RenderingError.GRAPHICS_CONFIG_ERROR,                                            J3dI18N.getString("Renderer3"));                                err.setGraphicsDevice(gcList[0].getDevice());                                notifyErrorListeners(err);                            }                            gct.testCfg = gcfg;			} else if (reqType == MasterControl.ISCONFIGSUPPORT) {                            boolean rval = false;                            GraphicsConfiguration gc = (GraphicsConfiguration) gct.testCfg;                            try {                                if (Pipeline.getPipeline().isGraphicsConfigSupported(gct, gc)) {                                    rval = true;                                }                            } catch (NullPointerException npe) {                                npe.printStackTrace();                            } catch (RuntimeException ex) {                                ex.printStackTrace();                                // Issue 260 : notify error listeners                                RenderingError err =                                        new RenderingError(RenderingError.GRAPHICS_CONFIG_ERROR,                                            J3dI18N.getString("Renderer4"));                                err.setGraphicsDevice(gc.getDevice());                                notifyErrorListeners(err);                            }                            gct.testCfg = Boolean.valueOf(rval);			}			gct.runMonitor(J3dThread.NOTIFY);		    }		    m[nmesg++].decRefcount();		    continue;		}                canvas = (Canvas3D) firstArg;                renderType = m[nmesg].type;		if (renderType == J3dMessage.CREATE_OFFSCREENBUFFER) {		    // Fix for issue 18.		    // Fix for issue 20.                    canvas.drawable = null;                    try {                        // Issue 396. Pass in a null ctx for 2 reasons :                         //   1) We should not use ctx field directly without buffering in a msg.                        //   2) canvas.ctx should be null.                        canvas.drawable =                                canvas.createOffScreenBuffer(null,                                    canvas.screen.display,                                    canvas.fbConfig,                                    canvas.offScreenCanvasSize.width,                                    canvas.offScreenCanvasSize.height);                    } catch (RuntimeException ex) {                        ex.printStackTrace();                    }                    if (canvas.drawable == null) {                        // Issue 260 : indicate fatal error and notify error listeners                        canvas.setFatalError();                        RenderingError err =                                new RenderingError(RenderingError.OFF_SCREEN_BUFFER_ERROR,                                    J3dI18N.getString("Renderer5"));                        err.setCanvas3D(canvas);                        err.setGraphicsDevice(canvas.graphicsConfiguration.getDevice());                        notifyErrorListeners(err);                    }		    canvas.offScreenBufferPending = false;		    m[nmesg++].decRefcount();		    continue;		}                 else if (renderType == J3dMessage.DESTROY_CTX_AND_OFFSCREENBUFFER) {                    Object[] obj = m[nmesg].args;		    // Fix for issue 175: destroy ctx & off-screen buffer                    // Fix for issue 340: get display, drawable & ctx from msg                    removeCtx(canvas,                            ((Long) obj[1]).longValue(),                            (Drawable) obj[2],                            (Context) obj[3],                            false, !canvas.offScreen, true);		    canvas.offScreenBufferPending = false;		    m[nmesg++].decRefcount();		    continue;		} else if (renderType == J3dMessage.ALLOCATE_CANVASID) {                    canvas.allocateCanvasId();                } else if (renderType == J3dMessage.FREE_CANVASID) {                    canvas.freeCanvasId();                }                if ((canvas.view == null) || !canvas.firstPaintCalled) {                    // This happen when the canvas just remove from the View                    if (renderType == J3dMessage.RENDER_OFFSCREEN) {                        canvas.offScreenRendering = false;		    }		    m[nmesg++].decRefcount();                    continue;                }		if (!canvas.validCanvas &&                     (renderType != J3dMessage.RENDER_OFFSCREEN)) {		    m[nmesg++].decRefcount();		    continue;		}		if (renderType == J3dMessage.RESIZE_CANVAS) {		    canvas.d3dResize();		    // render the image again after resize		    VirtualUniverse.mc.sendRunMessage(canvas.view, J3dThread.RENDER_THREAD);		    m[nmesg++].decRefcount();		} else if (renderType == J3dMessage.TOGGLE_CANVAS) {		    canvas.d3dToggle();		    VirtualUniverse.mc.sendRunMessage(canvas.view, J3dThread.RENDER_THREAD);		    m[nmesg++].decRefcount();		} else if (renderType == J3dMessage.RENDER_IMMEDIATE) {                    int command = ((Integer)m[nmesg].args[1]).intValue();		    //System.err.println("command= " + command);		    if (needToResendTextureDown) {			VirtualUniverse.mc.resendTexTimestamp++;			needToResendTextureDown = false;		    }                    if (canvas.isFatalError()) {                        continue;                    }                  try {		    if (canvas.ctx != null) {			// ctx may not construct until doClear();			canvas.beginScene();		    }                    switch (command) {                    case GraphicsContext3D.CLEAR:                        canvas.graphicsContext3D.doClear();                        break;                    case GraphicsContext3D.DRAW:                        canvas.graphicsContext3D.doDraw(				(Geometry)m[nmesg].args[2]);                        break;                    case GraphicsContext3D.SWAP:                        canvas.doSwap();                        break;                    case GraphicsContext3D.READ_RASTER:                        canvas.graphicsContext3D.doReadRaster(				(Raster)m[nmesg].args[2]);                        break;		    case GraphicsContext3D.SET_APPEARANCE:			canvas.graphicsContext3D.doSetAppearance(				(Appearance)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_BACKGROUND:			canvas.graphicsContext3D.doSetBackground(				(Background)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_FOG:			canvas.graphicsContext3D.doSetFog(				(Fog)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_LIGHT:			canvas.graphicsContext3D.doSetLight(				(Light)m[nmesg].args[2],				((Integer)m[nmesg].args[3]).intValue());			break;		    case GraphicsContext3D.INSERT_LIGHT:			canvas.graphicsContext3D.doInsertLight(				(Light)m[nmesg].args[2],				((Integer)m[nmesg].args[3]).intValue());			break;		    case GraphicsContext3D.REMOVE_LIGHT:			canvas.graphicsContext3D.doRemoveLight(				((Integer)m[nmesg].args[2]).intValue());			break;		    case GraphicsContext3D.ADD_LIGHT:			canvas.graphicsContext3D.doAddLight(				(Light)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_HI_RES:			canvas.graphicsContext3D.doSetHiRes(				(HiResCoord)m[nmesg].args[2]);			break;		    case GraphicsContext3D.SET_MODEL_TRANSFORM:			t3d = (Transform3D)m[nmesg].args[2]; 			canvas.graphicsContext3D.doSetModelTransform(t3d);			break;		    case GraphicsContext3D.MULTIPLY_MODEL_TRANSFORM:                        t3d = (Transform3D)m[nmesg].args[2];                        canvas.graphicsContext3D.doMultiplyModelTransform(t3d);                        break;		    case GraphicsContext3D.SET_SOUND:			canvas.graphicsContext3D.doSetSound(				(Sound)m[nmesg].args[2],

⌨️ 快捷键说明

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