source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreSceneCameraDepthRenderingRun.cpp @ 2379

Revision 2379, 3.0 KB checked in by szirmay, 17 years ago (diff)
Line 
1#include "OgreSceneCameraDepthRenderingRun.h"
2#include "OgreTechniqueGroup.h"
3
4
5OgreSceneCameraDepthRenderingRun::OgreSceneCameraDepthRenderingRun(OgreSharedRuns* sharedRuns,
6                                                                                                                                        String name,
7                                                                                                                                                Viewport* playerView
8                                                                                                                   )
9                                                                                                                   :SceneCameraDepthRenderingRun()
10                                                                                                                   , OgreRenderingRun(1, 1)
11                                                                                                                   , RenderingRun(1, 1)
12{
13        this->sharedRuns = sharedRuns;
14        this->name = name;
15        this->playerView = playerView;
16       
17        createDepthMap();       
18}
19
20void OgreSceneCameraDepthRenderingRun::createDepthMap()
21{
22        int width = playerView->getActualWidth();
23        int height = playerView->getActualHeight();
24        TexturePtr texPtr = Ogre::TextureManager::getSingleton().createManual(name,
25                                                                                                                                                "default",
26                                                                                                                                                TEX_TYPE_2D,
27                                                                                                                                                width,
28                                                                                                                                                height,
29                                                                                                                                                0,
30                                                                                                                                                0,
31                                                                                                                                                PF_FLOAT16_RGBA,
32                                                                                                                                                TU_RENDERTARGET);
33         depthTexture = texPtr.getPointer();
34         playerCamera = playerView->getCamera();
35         //add viewport to rendertarget
36         HardwarePixelBuffer* hpb = (depthTexture->getBuffer()).getPointer();
37         RenderTarget* rt = hpb->getRenderTarget();
38         Viewport* v = rt->addViewport(playerCamera);
39         v->setOverlaysEnabled(false);
40         rt->setAutoUpdated(false);
41}
42
43bool  OgreSceneCameraDepthRenderingRun::renderableQueued (Renderable *rend, uint8 groupID, ushort priority, Technique **ppTech)
44{
45        if((*ppTech)->isTransparent())
46                return false;
47
48        OgreTechniqueGroup* TG = (OgreTechniqueGroup*) rend->getRenderTechniqueGroup();
49        if(TG)
50        {
51                String materialToSet = String("GTP/Basic/CameraDepth");
52                String triggeredMaterial = TG->getMaterialNameForTrigger("ILLUM_TRIGGER_CAMERADEPTH");
53                if(triggeredMaterial != "")//a trigger is associated
54                        materialToSet = triggeredMaterial;
55                Technique* techn = ((Material*)MaterialManager::getSingleton().getByName(       materialToSet ).getPointer())->getTechnique(0);
56                *ppTech = techn;       
57        }
58        return true;
59}
60
61void OgreSceneCameraDepthRenderingRun::updateFrame(unsigned long frameNum)
62{
63       
64        //setMaterialForVisibles(String("GTP/Basic/CameraDepth"), playerCamera, false, true, "ILLUM_TRIGGER_CAMERADEPTH");
65        RenderQueue* rq = Root::getSingleton()._getCurrentSceneManager()->getRenderQueue();             
66        rq->setRenderableListener(this);
67
68        RenderTarget* rt = depthTexture->getBuffer().getPointer()->getRenderTarget();
69
70        float farPlane = rt->getViewport(0)->getCamera()->getFarClipDistance();
71        //ColourValue backColor(1,1,1,1);
72        ColourValue backColor(0,0,0,0);
73        //ColourValue backColor(farPlane,farPlane,farPlane,1);
74        rt->getViewport(0)->setBackgroundColour(backColor);
75       
76       
77        sharedRuns->getRoot()->hide();
78
79        rt->update();   
80
81        //rt->writeContentsToFile("cameraDepth.bmp");
82       
83        //restoreMaterials();
84
85        sharedRuns->getRoot()->restoreVisibility();
86        rq->setRenderableListener(0);
87}
88
89void OgreSceneCameraDepthRenderingRun::freeAllResources()
90{
91        this->depthTexture = 0;
92        TextureManager::getSingleton().remove(name);   
93}
Note: See TracBrowser for help on using the repository browser.