#include "OgreSceneCameraDepthRenderingRun.h" OgreSceneCameraDepthRenderingRun::OgreSceneCameraDepthRenderingRun(OgreSharedRuns* sharedRuns, String name, Viewport* playerView ) :SceneCameraDepthRenderingRun() , OgreRenderingRun(1, 1) , RenderingRun(1, 1) { this->sharedRuns = sharedRuns; this->name = name; this->playerView = playerView; createDepthMap(); } void OgreSceneCameraDepthRenderingRun::createDepthMap() { int width = playerView->getActualWidth(); int height = playerView->getActualHeight(); TexturePtr texPtr = Ogre::TextureManager::getSingleton().createManual(name, "default", TEX_TYPE_2D, width, height, 0, 0, PF_FLOAT16_RGBA, TU_RENDERTARGET); depthTexture = texPtr.getPointer(); playerCamera = playerView->getCamera(); //add viewport to rendertarget HardwarePixelBuffer* hpb = (depthTexture->getBuffer()).getPointer(); RenderTarget* rt = hpb->getRenderTarget(); Viewport* v = rt->addViewport(playerCamera); v->setOverlaysEnabled(false); rt->setAutoUpdated(false); } void OgreSceneCameraDepthRenderingRun::updateFrame(unsigned long frameNum) { setMaterialForVisibles(String("GameTools/SceneCameraDepthShader"), playerCamera, false, true); RenderTarget* rt = depthTexture->getBuffer().getPointer()->getRenderTarget(); float farPlane = rt->getViewport(0)->getCamera()->getFarClipDistance(); //ColourValue backColor(1,1,1,1); ColourValue backColor(0,0,0,0); //ColourValue backColor(farPlane,farPlane,farPlane,1); rt->getViewport(0)->setBackgroundColour(backColor); sharedRuns->getRoot()->hide(); rt->update(); //rt->writeContentsToFile("cameraDepth.dds"); restoreMaterials(); sharedRuns->getRoot()->restoreVisibility(); }