#include "OgreColorCubeMapRenderTechnique.h" #include "OgreTechniqueGroup.h" #include "OgreCubeMapRenderingRun.h" OgreColorCubeMapRenderTechnique::OgreColorCubeMapRenderTechnique(unsigned long startFrame, unsigned long cubeMapUpdateInterval, unsigned int cubeMapResolution, unsigned char texID, bool useDistCalc, bool useFaceAngleCalc, float distTolerance, float angleTolerance, bool updateAllFace, bool renderSelf, bool renderEnvironment, String selfMaterial, String environmentMaterial, int layer, bool getMinMax, bool attachToTexUnit, String minVariableName, String maxVariableName, Pass* pass, OgreRenderable* parentRenderable, OgreTechniqueGroup* parentTechniqueGroup) :OgreCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, texID, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, selfMaterial, environmentMaterial, layer, getMinMax, attachToTexUnit, minVariableName, maxVariableName, pass, parentRenderable, parentTechniqueGroup), ColorCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup), CubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup), RenderTechnique(parentRenderable, parentTechniqueGroup) { switch(layer) { case 0: texturePostFix = "_COLORCUBEMAP"; break; case 1: texturePostFix = "_COLORCUBEMAP_L1"; break; case 2: texturePostFix = "_COLORCUBEMAP_L2"; break; case 3: texturePostFix = "_COLORCUBEMAP_L3"; break; case 4: texturePostFix = "_COLORCUBEMAP_L4"; break; case 5: texturePostFix = "_COLORCUBEMAP_L5"; break; case 6: texturePostFix = "_COLORCUBEMAP_L6"; break; } if(sharedRuns->getRun(cubemapLayer) == 0) sharedRuns->addRun(cubemapLayer, createCubeMapRun()); colorCubeMapRunChanged(sharedRuns->getRun(cubemapLayer)); } OgreColorCubeMapRenderTechnique::~OgreColorCubeMapRenderTechnique() { } void OgreColorCubeMapRenderTechnique::update(unsigned long frameNum) { ColorCubeMapRenderTechnique::update(frameNum); /* GpuProgramParametersSharedPtr fpParams = pass->getFragmentProgramParameters(); Vector3 center = ((OgreSharedRuns*) sharedRuns)->getRootPosition(); fpParams->setNamedConstant("lastCenter",center); pass->setFragmentProgramParameters(fpParams); */ } void OgreColorCubeMapRenderTechnique::colorCubeMapRunChanged(RenderingRun* run) { OgreCubeMapRenderTechnique::cubeMapRunChanged(run); /*OgreCubeMapRenderingRun* cuberun =(OgreCubeMapRenderingRun*) (run->asOgreRenderingRun()); String cubemapname = cuberun->getCubeMapTextureName(); pass->getTextureUnitState(texID)->setTextureName(cubemapname);*/ } void OgreColorCubeMapRenderTechnique::colorCubeMapRunUpdated(RenderingRun* run) { OgreCubeMapRenderTechnique::cubeMapRunUpdated(run); } ///Technique factory OgreColorCubeMapRenderTechniqueFactory::OgreColorCubeMapRenderTechniqueFactory() { typeName = "ColorCubeMap"; } OgreRenderTechnique* OgreColorCubeMapRenderTechniqueFactory::createInstance( IllumTechniqueParams* params, Pass* pass, OgreRenderable* parentRenderable, OgreTechniqueGroup* parentTechniqueGroup) { OgreCubeMapRenderTechniqueFactory::resetParams(); OgreCubeMapRenderTechniqueFactory::parseParams(params); parseParams(params); OgreColorCubeMapRenderTechnique* result = new OgreColorCubeMapRenderTechnique( startFrame, cubeMapUpdateInterval, cubeMapResolution, texID, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, selfMaterial, environmentMaterial, layer, getMinMax, attachToTexUnit, minVariableName, maxVariableName, pass, parentRenderable, parentTechniqueGroup); return result; }