#include "OgreConvolvedCubeMapRenderTechnique.h" #include "OgreTechniqueGroup.h" #include "OgreReducedCubeMapRenderingRun.h" #include "OgreColorCubeMapRenderingRun.h" OgreConvolvedCubeMapRenderTechnique::OgreConvolvedCubeMapRenderTechnique(unsigned long startFrame, unsigned long cubeMapUpdateInterval, unsigned int cubeMapResolution, unsigned int reducedCubeMapResolution, unsigned char reducedTexID, bool useDistCalc, bool useFaceAngleCalc, float distTolerance, float angleTolerance, bool updateAllFace, Pass* pass, OgreRenderable* parentRenderable, OgreTechniqueGroup* parentTechniqueGroup) :OgreRenderTechnique( pass, parentRenderable, parentTechniqueGroup), ConvolvedCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, reducedCubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, parentRenderable, parentTechniqueGroup), RenderTechnique(parentRenderable, parentTechniqueGroup) { this->reducedTexID = reducedTexID; if(sharedRuns->getRun(ILLUMRUN_COLOR_CUBEMAP) == 0) sharedRuns->addRun(ILLUMRUN_COLOR_CUBEMAP, createColorCubeMapRun()); if(sharedRuns->getRun(ILLUMRUN_REDUCED_CUBEMAP) == 0) sharedRuns->addRun(ILLUMRUN_REDUCED_CUBEMAP, createReducedCubeMapRun()); colorCubeMapRunChanged(sharedRuns->getRun(ILLUMRUN_COLOR_CUBEMAP)); reducedCubeMapRunChanged(sharedRuns->getRun(ILLUMRUN_REDUCED_CUBEMAP)); } OgreConvolvedCubeMapRenderTechnique::~OgreConvolvedCubeMapRenderTechnique() { } void OgreConvolvedCubeMapRenderTechnique::update(unsigned long frameNum) { ConvolvedCubeMapRenderTechnique::update(frameNum); } void OgreConvolvedCubeMapRenderTechnique::reducedCubeMapRunChanged(RenderingRun* run) { OgreReducedCubeMapRenderingRun* cuberun =(OgreReducedCubeMapRenderingRun*) (run->asOgreRenderingRun()); String cubemapname = cuberun->getReducedCubeMapTextureName(); pass->getTextureUnitState(reducedTexID)->setTextureName(cubemapname); } void OgreConvolvedCubeMapRenderTechnique::colorCubeMapRunChanged(RenderingRun* run) { OgreColorCubeMapRenderingRun* cuberun =(OgreColorCubeMapRenderingRun*) (run->asOgreRenderingRun()); String cubemapname = cuberun->getColorCubeMapTextureName(); OgreReducedCubeMapRenderingRun* rr = (OgreReducedCubeMapRenderingRun*) sharedRuns->getRun(ILLUMRUN_REDUCED_CUBEMAP)->asOgreRenderingRun(); rr->colorCubeMapChanged(cubemapname); } RenderingRun* OgreConvolvedCubeMapRenderTechnique::createColorCubeMapRun() { return new OgreColorCubeMapRenderingRun( (OgreSharedRuns*) parentTechniqueGroup->getSharedRuns(), parentOgreRenderable->getName() + "_COLORCUBEMAP", startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace); } RenderingRun* OgreConvolvedCubeMapRenderTechnique::createReducedCubeMapRun() { return new OgreReducedCubeMapRenderingRun( (OgreSharedRuns*) parentTechniqueGroup->getSharedRuns(), parentOgreRenderable->getName() + "_COLORCUBEMAP_REDUCED", startFrame, cubeMapUpdateInterval, reducedCubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace); }