[Python-ogre-commit] SF.net SVN: python-ogre:[760] trunk/python-ogre
Brought to you by:
andy_miller,
roman_yakovenko
From: <and...@us...> - 2008-10-19 12:06:40
|
Revision: 760 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=760&view=rev Author: andy_miller Date: 2008-10-19 12:06:32 +0000 (Sun, 19 Oct 2008) Log Message: ----------- Added unit test support to sampleframework Fixing demos due ot recent APi changes Modified Paths: -------------- trunk/python-ogre/demos/ogre/Demo_BSP.py trunk/python-ogre/demos/ogre/Demo_BspCollision.py trunk/python-ogre/demos/ogre/Demo_Lighting.py trunk/python-ogre/demos/ogre/Demo_Shadows.py trunk/python-ogre/packages_2.5/ogre/renderer/OGRE/sf_OIS.py Modified: trunk/python-ogre/demos/ogre/Demo_BSP.py =================================================================== --- trunk/python-ogre/demos/ogre/Demo_BSP.py 2008-10-16 08:44:11 UTC (rev 759) +++ trunk/python-ogre/demos/ogre/Demo_BSP.py 2008-10-19 12:06:32 UTC (rev 760) @@ -82,7 +82,7 @@ self.camera.pitch(ogre.Degree(90)) # Quake uses X/Y horizon, Z up self.camera.rotate(vp.orientation) # Don't yaw along variable axis, causes leaning - self.camera.setFixedYawAxis(True, ogre.Vector3.UNIT_Z) + self.camera.setFixedYawAxis(True, ogre.Vector3().UNIT_Z) ## Look at a nice place :) self.camera.lookAt(-150,40,30) Modified: trunk/python-ogre/demos/ogre/Demo_BspCollision.py =================================================================== --- trunk/python-ogre/demos/ogre/Demo_BspCollision.py 2008-10-16 08:44:11 UTC (rev 759) +++ trunk/python-ogre/demos/ogre/Demo_BspCollision.py 2008-10-19 12:06:32 UTC (rev 760) @@ -69,14 +69,19 @@ gBall.setPosition(self.camera.getPosition() + self.camera.getDirection() * self.camera.getNearClipDistance() * 2) gBall.setLinearVelocity(self.camera.getDirection() * 200) - gBall.setAngularVelocity(ogre.Vector3.ZERO) + gBall.setAngularVelocity(ogre.Vector3().ZERO) ## Move the targeter gRsq.setRay(self.camera.getRealCamera().getCameraToViewportRay(0.5, 0.5)) for queryResult in gRsq.execute(): gTargetNode.setPosition(gRsq.getRay().getPoint(queryResult.distance)) return ret - + + def _moveCamera(self): + self.camera.yaw(self.rotationX) + self.camera.pitch(self.rotationY) + self.camera.translate(self.translateVector) # for using OgreRefApp + class BspCollisionApplication (sf.Application): def __init__(self): "Init Render Application" @@ -133,7 +138,7 @@ self.camera.pitch(ogre.Degree(d=90)) ## Quake uses X/Y horizon, Z up self.camera.rotate(vp.orientation) ## Don't yaw along variable axis, causes leaning - self.camera.setFixedYawAxis(True, ogre.Vector3.UNIT_Z) + self.camera.setFixedYawAxis(True, ogre.Vector3().UNIT_Z) ## Look at the boxes self.camera.lookAt(-150,40,30) @@ -168,7 +173,7 @@ Pass = mat.getTechnique(0).getPass(0) tex = Pass.createTextureUnitState() tex.setColourOperationEx(ogre.LBX_SOURCE1, ogre.LBS_MANUAL, ogre.LBS_CURRENT, - ogre.ColourValue.Red) + ogre.ColourValue().Red) Pass.setLightingEnabled(False) Pass.setSceneBlending(ogre.SBT_ADD) Pass.setDepthWriteEnabled(False) Modified: trunk/python-ogre/demos/ogre/Demo_Lighting.py =================================================================== --- trunk/python-ogre/demos/ogre/Demo_Lighting.py 2008-10-16 08:44:11 UTC (rev 759) +++ trunk/python-ogre/demos/ogre/Demo_Lighting.py 2008-10-19 12:06:32 UTC (rev 760) @@ -91,7 +91,7 @@ #Add billboard bbs = sceneManager.createBillboardSet("bb", 1) - bbs.createBillboard(ogre.Vector3.ZERO, trail.getInitialColour(0)) + bbs.createBillboard(ogre.Vector3().ZERO, trail.getInitialColour(0)) bbs.MaterialName="Examples/Flare" animNode.attachObject(bbs) @@ -148,7 +148,7 @@ #Add billboard bbs1 = sceneManager.createBillboardSet("bb2", 1) - bbs1.createBillboard(ogre.Vector3.ZERO, trail.getInitialColour(1)) + bbs1.createBillboard(ogre.Vector3().ZERO, trail.getInitialColour(1)) bbs1.MaterialName="Examples/Flare" animNode.attachObject(bbs1) Modified: trunk/python-ogre/demos/ogre/Demo_Shadows.py =================================================================== --- trunk/python-ogre/demos/ogre/Demo_Shadows.py 2008-10-16 08:44:11 UTC (rev 759) +++ trunk/python-ogre/demos/ogre/Demo_Shadows.py 2008-10-19 12:06:32 UTC (rev 760) @@ -16,11 +16,17 @@ import ogre.renderer.OGRE as Ogre import ogre.gui.CEGUI as CEGUI import ogre.io.OIS as OIS -import ctypes +import ctypes,os import SampleFramework import exceptions, random +# Another fix for CEGUI to ensure we get a working parser.. +if os.name == 'nt': + CEGUI.System.setDefaultXMLParserName("ExpatParser") +else: + CEGUI.System.setDefaultXMLParserName("TinyXMLParser") + def convertOISButtonToCegui( buttonID): if buttonID ==0: return CEGUI.LeftButton @@ -192,7 +198,7 @@ self.mLastMousePositionSet=False self.mAvgFrameTime =0.1 self.mWriteToFile = False - self.mTranslateVector = Ogre.Vector3.ZERO + self.mTranslateVector = Ogre.Vector3().ZERO self.mQuit = False self.mSkipCount = 0 self.mUpdateFreq=10 @@ -284,7 +290,7 @@ self.mUpdateMovement = False self.mRotX = 0 self.mRotY = 0 - self.mTranslateVector = Ogre.Vector3.ZERO + self.mTranslateVector = Ogre.Vector3().ZERO if(self.mWriteToFile): self.mNumScreenShots +=1 @@ -359,12 +365,12 @@ self.mTranslateVector.x += e.moveDelta.d_x * self.mAvgFrameTime * MOVESPEED self.mTranslateVector.y += -e.moveDelta.d_y * self.mAvgFrameTime * MOVESPEED ##self.mTranslateVector.z = 0 - MouseCursor.getSingleton().setPosition( self.mLastMousePosition ) + CEGUI.MouseCursor.getSingleton().setPosition( self.mLastMousePosition ) self.mUpdateMovement = True else: if( self.mRMBDown and self.mLMBDown): self.mTranslateVector.z += (e.moveDelta.d_x + e.moveDelta.d_y) * self.mAvgFrameTime * MOVESPEED - MouseCursor.getSingleton().setPosition( self.mLastMousePosition ) + CEGUI.MouseCursor.getSingleton().setPosition( self.mLastMousePosition ) self.mUpdateMovement = True return True @@ -383,7 +389,7 @@ if self.mLastMousePositionSet: CEGUI.MouseCursor.getSingleton().setPosition( self.mLastMousePosition ) self.mLastMousePositionSet = False - self.root.releaseInput() + self.rootGuiPanel.releaseInput() return True @@ -402,7 +408,7 @@ if (not self.mLastMousePositionSet): self.mLastMousePosition = CEGUI.MouseCursor.getSingleton().getPosition() self.mLastMousePositionSet = True - self.root.captureInput() + self.rootGuiPanel.captureInput() return True @@ -433,7 +439,8 @@ ##-------------------------------------------------------------------------- def handleKeyDownEvent( self, e): - CheckMovementKeys( e.scancode , True) + print "Key Down", e + self.CheckMovementKeys( e.scancode , True) return True @@ -614,11 +621,11 @@ ## Floor plane (use POSM plane def) self.mPlane = Ogre.MovablePlane("mPlane") - self.mPlane.normal = Ogre.Vector3.UNIT_Y + self.mPlane.normal = Ogre.Vector3().UNIT_Y self.mPlane.d = 107 Ogre.MeshManager.getSingleton().createPlane("Myplane", Ogre.ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, self.mPlane, - 1500,1500,50,50,True,1,5,5,Ogre.Vector3.UNIT_Z) + 1500,1500,50,50,True,1,5,5,Ogre.Vector3().UNIT_Z) self.pPlaneEnt = self.sceneManager.createEntity( "plane", "Myplane" ) self.pPlaneEnt.setMaterialName(BASIC_ROCKWALL_MATERIAL) self.pPlaneEnt.setCastShadows=False @@ -654,6 +661,9 @@ ##/ Change basic shadow technique def changeShadowTechnique(self, newTech): + newTech = Ogre.ShadowTechnique( newTech ) + print "CHANGE SHADOW TECH", newTech + self.sceneManager.setShadowTechnique(newTech) @@ -674,11 +684,11 @@ if newTech == Ogre.SHADOWTYPE_STENCIL_ADDITIVE: ## Fixed light, dim - self.mSunLight.setCastShadows(True) + self.mSunLight.setCastShadows =True ## Point light, movable, reddish self.mLight.setType(Ogre.Light.LT_POINT) - self.mLight.setCastShadows(True) + self.mLight.setCastShadows=True self.mLight.setDiffuseColour(self.mMinLightColour) self.mLight.setSpecularColour(1, 1, 1) self.mLight.setAttenuation(8000,1,0.0005,0) @@ -689,24 +699,24 @@ self.mSunLight.setCastShadows=False ## Point light, movable, reddish - self.mLight.setType(Light.LT_POINT) - self.mLight.setCastShadows(True) + self.mLight.setType(Ogre.Light.LT_POINT) + self.mLight.setCastShadows=True self.mLight.setDiffuseColour(self.mMinLightColour) self.mLight.setSpecularColour(1, 1, 1) self.mLight.setAttenuation(8000,1,0.0005,0) elif newTech == Ogre.SHADOWTYPE_TEXTURE_MODULATIVE or newTech == Ogre.SHADOWTYPE_TEXTURE_ADDITIVE: ## Fixed light, dim - self.mSunLight.setCastShadows(True) + self.mSunLight.setCastShadows=True ## Change moving light to spotlight ## Point light, movable, reddish - self.mLight.setType(Light.LT_SPOTLIGHT) - self.mLight.setDirection(Ogre.Vector3.NEGATIVE_UNIT_Z) - self.mLight.setCastShadows(True) + self.mLight.setType(Ogre.Light.LT_SPOTLIGHT) + self.mLight.setDirection(Ogre.Vector3().NEGATIVE_UNIT_Z) + self.mLight.setCastShadows=True self.mLight.setDiffuseColour(self.mMinLightColour) self.mLight.setSpecularColour(1, 1, 1) self.mLight.setAttenuation(8000,1,0.0005,0) - self.mLight.setSpotlightRange(Degree(80),Degree(90)) + self.mLight.setSpotlightRange(Ogre.Degree(80),Ogre.Degree(90)) def setupGUI( self ): ## setup GUI system @@ -896,7 +906,8 @@ self.mGradientClampText = wmgr.getWindow("Shadows/DepthShadowTweakGroup/SlopeClampText") self.updateGUI(self.mCurrentShadowTechnique) - + self.resetMaterials() + def updateGUI(self, newTech): isTextureBased=True if newTech & Ogre.SHADOWDETAILTYPE_TEXTURE: @@ -945,17 +956,17 @@ radio = we.window if (radio.isSelected()): newTech = self.mCurrentShadowTechnique - if radio.getID == 1: + if radio.getID() == 1: ## stencil newTech = ((newTech & ~Ogre.SHADOWDETAILTYPE_TEXTURE) | Ogre.SHADOWDETAILTYPE_STENCIL) self.resetMaterials() - elif radio.getID == 2: + elif radio.getID() == 2: ## texture newTech = ((newTech & ~Ogre.SHADOWDETAILTYPE_STENCIL) | Ogre.SHADOWDETAILTYPE_TEXTURE) - elif radio.getID == 3: + elif radio.getID() == 3: ## additive newTech = ((newTech & ~Ogre.SHADOWDETAILTYPE_MODULATIVE) | Ogre.SHADOWDETAILTYPE_ADDITIVE) - elif radio.getID == 4: + elif radio.getID() == 4: ## modulative newTech = ((newTech & ~Ogre.SHADOWDETAILTYPE_ADDITIVE) | Ogre.SHADOWDETAILTYPE_MODULATIVE) @@ -963,35 +974,29 @@ return True def handleProjectionChanged( self, e): - winargs = e cbo = winargs.window - if (cbo.getSelectedItem()): proj = cbo.getSelectedItem().getID() if (proj != self.mCurrentProjection): ## AJM WARNING if proj == self.UNIFORM: - self.mCurrentShadowCameraSetup = Ogre.ShadowCameraSetupPtr(Ogre.DefaultShadowCameraSetup()) + self.mCurrentShadowCameraSetup = Ogre.DefaultShadowCameraSetup() #Ogre.ShadowCameraSetupPtr(Ogre.DefaultShadowCameraSetup()) elif proj == self.UNIFORM_FOCUSED: - self.focused = Ogre.FocusedShadowCameraSetup() - self.mCurrentShadowCameraSetup =\ - Ogre.ShadowCameraSetup(self.focused) + self.mCurrentShadowCameraSetup =Ogre.FocusedShadowCameraSetup() elif proj == self.LISPSM: self.mLiSPSMSetup = Ogre.LiSPSMShadowCameraSetup() ##self.mLiSPSMSetup.setUseAggressiveFocusRegion=False - self.mCurrentShadowCameraSetup = Ogre.ShadowCameraSetupPtr(self.mLiSPSMSetup) + self.mCurrentShadowCameraSetup = self.mLiSPSMSetup elif proj == self.PLANE_OPTIMAL: - self.mCurrentShadowCameraSetup =\ - Ogre.ShadowCameraSetupPtr(Ogre.PlaneOptimalShadowCameraSetup(self.mPlane)) - + self.mCurrentShadowCameraSetup = Ogre.PlaneOptimalShadowCameraSetup(self.mPlane) self.mCurrentProjection = proj self.sceneManager.setShadowCameraSetup(self.mCurrentShadowCameraSetup) self.updateTipForCombo(cbo) - if (not self.mCustomRockwallVparams.isNull() and not self.mCustomRockwallFparams.isNull()): +# if (not self.mCustomRockwallVparams.isNull() and not self.mCustomRockwallFparams.isNull()): + if (self.mCustomRockwallVparams and self.mCustomRockwallFparams): ## set self.setDefaultDepthShadowParams() - return True @@ -1004,11 +1009,11 @@ self.mCustomRockwallFparams.setNamedConstant("gradientClamp", self.mGradientClamp.getScrollPosition()) - self.mCustoself.mAtheneFparams.setNamedConstant("fixedDepthBias", + self.mCustomAtheneFparams.setNamedConstant("fixedDepthBias", self.mFixedBias.getScrollPosition()) - self.mCustoself.mAtheneFparams.setNamedConstant("gradientScaleBias", + self.mCustomAtheneFparams.setNamedConstant("gradientScaleBias", self.mGradientBias.getScrollPosition()) - self.mCustoself.mAtheneFparams.setNamedConstant("gradientClamp", + self.mCustomAtheneFparams.setNamedConstant("gradientClamp", self.mGradientClamp.getScrollPosition()) @@ -1031,7 +1036,7 @@ self.updateDepthShadowParams() def handleParamsChanged( self,e): - if ( notself.mCustomRockwallVparams.isNull() and not self.mCustomRockwallFparams.isNull()): + if self.mCustomRockwallVparams and self.mCustomRockwallFparams : self.updateDepthShadowParams() return True @@ -1051,10 +1056,10 @@ self.mAthene.setMaterialName(BASIC_ATHENE_MATERIAL) for i in self.pColumns: i.setMaterialName(BASIC_ROCKWALL_MATERIAL) - self.mCustomRockwallVparams.setNull() - self.mCustomRockwallFparams.setNull() - self.mCustoself.mAtheneVparams.setNull() - self.mCustoself.mAtheneFparams.setNull() + self.mCustomRockwallVparams = None + self.mCustomRockwallFparams = None + self.mCustomAtheneVparams = None + self.mCustomAtheneFparams = None def handleMaterialChanged( self, e): @@ -1065,7 +1070,7 @@ mat = cbo.getSelectedItem().getID() if (mat != self.mCurrentMaterial): if mat == self.MAT_STANDARD: - self.sceneManager.setShadowTexturePixelFormat(Ogre.PF_L8) + self.sceneManager.setShadowTexturePixelFormat(Ogre.PixelFormat.PF_L8) self.sceneManager.setShadowTextureCasterMaterial(Ogre.StringUtil.BLANK) self.sceneManager.setShadowTextureReceiverMaterial(Ogre.StringUtil.BLANK) self.sceneManager.setShadowTextureSelfShadow=False @@ -1093,9 +1098,9 @@ self.mCustomRockwallVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() self.mCustomRockwallFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() themat = Ogre.MaterialManager.getSingleton().getByName(CUSTOM_ATHENE_MATERIAL) - self.mCustoself.mAtheneVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() - self.mCustoself.mAtheneFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() - self.mDepthShadowTweak.setVisible(True) + self.mCustomAtheneVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() + self.mCustomAtheneFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() + self.mDepthShadowTweak.setVisible = True ## set the current params self.setDefaultDepthShadowParams() elif mat == self.MAT_DEPTH_FLOAT_PCF: @@ -1120,9 +1125,9 @@ self.mCustomRockwallVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() self.mCustomRockwallFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() themat = Ogre.MaterialManager.getSingleton().getByName(CUSTOM_ATHENE_MATERIAL + "/PCF") - self.mCustoself.mAtheneVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() - self.mCustoself.mAtheneFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() - self.mDepthShadowTweak.setVisible(True) + self.mCustomAtheneVparams = themat.getTechnique(0).getPass(1).getShadowReceiverVertexProgramParameters() + self.mCustomAtheneFparams = themat.getTechnique(0).getPass(1).getShadowReceiverFragmentProgramParameters() + self.mDepthShadowTweak.setVisible =True ## set the current params self.setDefaultDepthShadowParams() Modified: trunk/python-ogre/packages_2.5/ogre/renderer/OGRE/sf_OIS.py =================================================================== --- trunk/python-ogre/packages_2.5/ogre/renderer/OGRE/sf_OIS.py 2008-10-16 08:44:11 UTC (rev 759) +++ trunk/python-ogre/packages_2.5/ogre/renderer/OGRE/sf_OIS.py 2008-10-19 12:06:32 UTC (rev 760) @@ -13,6 +13,9 @@ # # 29 July 2008: Ensured that resources.cfg and plugins.cfg can exist in the parent directory # +import sys +import os +import os.path import ogre.renderer.OGRE as ogre import ogre.io.OIS as OIS @@ -20,9 +23,6 @@ def getPluginPath(): """Return the absolute path to a valid plugins.cfg file.""" - import sys - import os - import os.path paths = [os.path.join(os.getcwd(), 'plugins.cfg'), os.path.join(os.getcwd(), '..','plugins.cfg'), @@ -38,7 +38,16 @@ "** Warning: Please check your ogre installation and copy a\n" "** Warning: working plugins.cfg file to the current directory.\n\n") raise ogre.Exception(0, "can't locate the 'plugins.cfg' file", "") - + +def isUnitTest(): + """Looks for a magic file to determine if we want to do a unittest""" + paths = [os.path.join(os.getcwd(), 'unittest.now'), + os.path.join(os.getcwd(), '..','unittest.now')] + for path in paths: + if os.path.exists(path): + return True + return False + class Application(object): "This class is the base for an Ogre application." debugText="" @@ -50,6 +59,7 @@ self.renderWindow = None self.sceneManager = None self.world = None + self.unittest = isUnitTest() def __del__(self): "Clear variables, this should not actually be needed." @@ -147,7 +157,10 @@ def _configure(self): """This shows the config dialog and creates the renderWindow.""" - carryOn = self.root.showConfigDialog() + if not self.unittest: # we show this if not doing a unittest + carryOn = self.root.showConfigDialog() + else: + carryOn = self.root.restoreConfig() if carryOn: self.renderWindow = self.root.initialise(True, "OGRE Render Window") return carryOn @@ -185,6 +198,7 @@ """Creates the FrameListener.""" #,self.frameListener, self.frameListener.Mouse self.frameListener = FrameListener(self.renderWindow, self.camera) + self.frameListener.unittest = self.unittest self.frameListener.showDebugOverlay(True) self.root.addFrameListener(self.frameListener) @@ -230,6 +244,10 @@ self.bufferedJoy = bufferedJoy self.shouldQuit = False # set to True to exit.. self.MenuMode = False # lets understand a simple menu function + self.unittest = isUnitTest() + self.unittest_duration = 5.0 # seconds before screen shot a exit + self.unittest_screenshot = sys.modules['__main__'].__file__.split('.')[0] # file name for unittest screenshot + ## we can tell if we are using OgreRefapp based upon the camera class if self.camera.__class__ == ogre.Camera: @@ -320,6 +338,11 @@ def frameRenderingQueued ( self, evt ): if(self.renderWindow.isClosed() or self.shouldQuit ): return False + if self.unittest: + self.unittest_duration -= evt.timeSinceLastFrame + if self.unittest_duration < 0: + self.renderWindow.writeContentsToTimestampedFile(self.unittest_screenshot, '.jpg') + return False ##Need to capture/update each device - this will also trigger any listeners self.Keyboard.capture() self.Mouse.capture() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |