source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderTechniques/OgreSBBRenderTechnique.cpp @ 2379

Revision 2379, 3.1 KB checked in by szirmay, 17 years ago (diff)
Line 
1#include "OgreSBBRenderTechnique.h"
2#include "OgreTechniqueGroup.h"
3#include "OgreIlluminationManager.h"
4#include "OgreSceneCameraDepthRenderingRun.h"
5
6
7OgreSBBRenderTechnique::OgreSBBRenderTechnique( unsigned char depthTexID,
8                                                                                                Pass* pass,
9                                                                                                OgreRenderable* parentRenderable,
10                                                                                                OgreTechniqueGroup* parentTechniqueGroup)
11                                                        :RenderTechnique( parentRenderable, parentTechniqueGroup),
12                                                        OgreRenderTechnique(pass, parentRenderable, parentTechniqueGroup),
13                                                        SBBRenderTechnique(parentRenderable, parentTechniqueGroup)
14{
15        this->depthTexID = depthTexID;
16       
17        OgreIlluminationManager::getSingleton().createGlobalRun(ILLUMRUN_SCENE_CAMERA_DEPTH);   
18       
19        OgreSceneCameraDepthRenderingRun* run = (OgreSceneCameraDepthRenderingRun*)
20                OgreIlluminationManager::getSingleton().getGlobalRun(ILLUMRUN_SCENE_CAMERA_DEPTH)->asOgreRenderingRun();
21
22        Root::getSingleton().addFrameListener(this);
23        OgreIlluminationManager::getSingleton().getMainViewport()
24                                                                ->getTarget()->addListener(this);
25        OgreIlluminationManager::getSingleton().addUpdateListener(this);
26       
27        pass->getTextureUnitState(depthTexID)->setTextureName(run->getDepthTextureName());
28       
29}
30
31void OgreSBBRenderTechnique::preAllUpdates()
32{
33        lastVisibility = parentOgreRenderable->isVisible();
34        parentOgreRenderable->setVisible(false);
35}
36void  OgreSBBRenderTechnique::preRenderTargetUpdate (const RenderTargetEvent &evt)
37{
38        //parentOgreRenderable->setVisible(lastVisibility);     
39}
40void  OgreSBBRenderTechnique::postRenderTargetUpdate (const RenderTargetEvent &evt)
41{
42        //parentOgreRenderable->setVisible(false);
43}
44bool  OgreSBBRenderTechnique::frameEnded (const FrameEvent &evt)
45{
46       
47        return true;
48}
49void  OgreSBBRenderTechnique::postAllUpdates()
50{
51        parentOgreRenderable->setVisible(lastVisibility);       
52}
53
54OgreSBBRenderTechnique::~OgreSBBRenderTechnique()
55{
56
57}
58
59void OgreSBBRenderTechnique::update(unsigned long frameNum)
60{
61        OgreIlluminationManager::getSingleton().updateGlobalRun(ILLUMRUN_SCENE_CAMERA_DEPTH, frameNum);
62}
63
64namespace SBBParsers
65{
66///Technique parsers
67        void parseDepthTexID(String& params, RenderTechniqueFactory* factory)
68        {
69                OgreSBBRenderTechniqueFactory* f = (OgreSBBRenderTechniqueFactory*) factory;
70                f->depthTexID =  StringConverter::parseUnsignedInt(params);
71        }
72}
73
74OgreSBBRenderTechniqueFactory::OgreSBBRenderTechniqueFactory()
75{
76        typeName = "SphericalBillboard";
77       
78        using namespace SBBParsers;
79       
80        //register parsers
81        this->attributeParsers.insert(AttribParserList::value_type("texture_unit_id", (ILLUM_ATTRIBUTE_PARSER) parseDepthTexID));
82}
83
84OgreRenderTechnique* OgreSBBRenderTechniqueFactory::createInstance(
85                                                                                IllumTechniqueParams* params,
86                                                                                Pass* pass,
87                                                                                OgreRenderable* parentRenderable,
88                                                                                OgreTechniqueGroup* parentTechniqueGroup)
89{       
90        //reset parameters
91        depthTexID = 1;
92       
93        parseParams(params);
94
95        OgreSBBRenderTechnique* result = new OgreSBBRenderTechnique(
96                                                                                                depthTexID,
97                                                                                                pass,
98                                                                                                parentRenderable,
99                                                                                                parentTechniqueGroup);
100        return result;
101}
102
103
104
Note: See TracBrowser for help on using the repository browser.