// author: Barnabas Aszodi (BME-IIT) #include "Ogre.h" #include "OgreEffectWrapper.h" #include "ManagedOgreRenderTexturePass.h" #include "PreComputingRun.h" #include "CAURenderColorDistanceCubeMapPass.h" #include "CAURenderUVCubeMapPass.h" #include "CAURenderPhotonUVMapPass.h" #include "CAURenderUmbraPass.h" #include "CAURenderPhotonHitMapPass.h" #include "CAURenderRefractObjectMapPass.h" #include "CausticMapRun.h" CausticMapRun::CausticMapRun( Entity* entity, unsigned int width, unsigned int height) { Root* mRoot = Root::getSingletonPtr(); OgreAssert(mRoot!=NULL," NULL pointer found "); this->entity = entity; // CubeMap this->cAURenderColorDistanceCubeMapPass = new CAURenderColorDistanceCubeMapPass( mRoot,"CubeMapColorDistanceTexture",512,512,TEX_TYPE_CUBE_MAP,PF_FLOAT32_RGBA ); // CubeMap this->cAURenderUVCubeMapPass = new CAURenderUVCubeMapPass( mRoot,"CubeMapUVTexture",512,512,TEX_TYPE_CUBE_MAP,PF_FLOAT32_RGBA ); this->cAURenderPhotonUVMapPass = new CAURenderPhotonUVMapPass(mRoot,"PhotonUVMapTexture",512,512,TEX_TYPE_2D,PF_FLOAT32_RGBA); // Uses the other Pass created texture cAURenderPhotonUVMapPass->changeTexture(cAURenderUVCubeMapPass->getRenderTextureName(),0); this->cAURenderUmbraPass = new CAURenderUmbraPass(mRoot,"CubeMapLastTexture",512,512,TEX_TYPE_2D,PF_FLOAT32_RGBA); // Use the same texture (CubeMapLastTexture) this->cAURenderPhotonHitMapPass = new CAURenderPhotonHitMapPass(mRoot); // Use the same texture (CubeMapLastTexture) this->cAURenderRefractObjectMapPass = new CAURenderRefractObjectMapPass(mRoot); //g_pCubeMapTexture = TextureManager::getSingleton().load( cubeMapTexturePath,"Caustics"); //g_pPowerOfSnipetTexelTexture = TextureManager::getSingleton().load( cubeMapTexturePath,"Caustics"); //this->cAURenderPhotonHitMapPass->addRenderTarget(renderCubeMapLastPass->getRenderTexture()); //this->CubeMapLastPass=new CubeMapLastPass(CubeMapLastTextureNames,mRoot,"NO_RENDER_TARGET",1,1); //TexturePtr fileTexture=TextureManager::getSingleton().load(); //cAURenderPhotonUVMapPass->changeTexture(fileTexture->getName(),1); } void CausticMapRun::update() { cAURenderPhotonUVMapPass->update(); cAURenderUmbraPass->update(); cAURenderPhotonHitMapPass->update(); cAURenderRefractObjectMapPass->update(); } void CausticMapRun::init() { // Run just once for( int i = 0; i< 6; i++ ) { cAURenderColorDistanceCubeMapPass->clearRenderTargets(); cAURenderColorDistanceCubeMapPass->addRenderTarget(cAURenderColorDistanceCubeMapPass->getRenderTexture(),(CubeMapFaces)i); cAURenderColorDistanceCubeMapPass->update(); cAURenderUVCubeMapPass->clearRenderTargets(); cAURenderUVCubeMapPass->addRenderTarget(cAURenderUVCubeMapPass->getRenderTexture(),(CubeMapFaces)i); cAURenderUVCubeMapPass->update(); } } const String& CausticMapRun::getResultTextureName() { return cAURenderPhotonHitMapPass->getMaterialName(); } CausticMapRun::~CausticMapRun() { SAFE_DELETE(cAURenderColorDistanceCubeMapPass); SAFE_DELETE(cAURenderUVCubeMapPass); SAFE_DELETE(cAURenderPhotonUVMapPass); SAFE_DELETE(cAURenderUmbraPass); SAFE_DELETE(cAURenderPhotonHitMapPass); SAFE_DELETE(cAURenderRefractObjectMapPass); }