Ignore:
Timestamp:
06/26/06 09:52:08 (18 years ago)
Author:
szirmay
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreIlluminationManager.cpp

    r949 r1055  
    7979        visitor = new VisibleFinderVisitor(&visibleObjects); 
    8080        maxRad = 400; 
     81         
     82        for(int i = 0; i < RUN_TYPE_COUNT; i++) 
     83        { 
     84                maxRads[(RenderingRunType)i] = (float) maxRad; 
     85        } 
    8186 
    8287        //register rendertechnique factories 
     
    95100        OgreSBBRenderTechniqueFactory* sbb = new OgreSBBRenderTechniqueFactory(); 
    96101                addRenderTechniqueFactory(sbb); 
     102        OgreFireRenderTechniqueFactory* fire = new OgreFireRenderTechniqueFactory(); 
     103                addRenderTechniqueFactory(fire); 
    97104} 
    98105 
     
    160167void OgreIlluminationManager::initTechniques(Entity* e) 
    161168{ 
     169        if( e->getParentSceneNode() == 0 )//Entity not attached 
     170                return; 
     171 
    162172        OgreSharedRuns* sharedruns = 0; 
    163173         
     
    215225} 
    216226 
     227 
     228void OgreIlluminationManager::initTechniques(BillboardSet* bbs, ParticleSystem* sys) 
     229{ 
     230        if( bbs->getParentSceneNode() == 0 )//billboardset not attached 
     231                return; 
     232 
     233        OgreSharedRuns* sharedruns = 0;  
     234 
     235        Material* mat = bbs->getMaterial().getPointer(); 
     236         
     237        OgreRenderable* rend = 0;        
     238        OgreTechniqueGroup* group = 0; 
     239 
     240        for(unsigned int t = 0 ; t < mat->getNumTechniques() ; t++) 
     241        { 
     242                Technique* tech = mat->getTechnique(t); 
     243 
     244                for(unsigned int p = 0; p< tech->getNumPasses(); p++) 
     245                { 
     246                        Pass* pass = tech->getPass(p); 
     247 
     248                        std::vector<IllumTechniqueParams*>& techniques = pass->getIllumTechniques(); 
     249                        std::vector<IllumTechniqueParams*>::iterator i = techniques.begin();  
     250                        std::vector<IllumTechniqueParams*>::iterator iend = techniques.end(); 
     251                         
     252                        while( i != iend) 
     253                        { 
     254                                IllumTechniqueParams* params = *i; 
     255                                 
     256                                if(rend == 0) 
     257                                { 
     258                                        rend = new OgreRenderable(bbs, sys); 
     259                                        group = new OgreTechniqueGroup(); 
     260                                        bbs->setRenderTechniqueGroup(group);                                                     
     261                                         
     262                                        if( sharedruns == 0) 
     263                                        {                                                                        
     264                                                sharedruns  = new OgreSharedRuns(); 
     265                                                addSharedRuns(sharedruns); 
     266                                        } 
     267 
     268                                        group->addSharedRun(sharedruns); 
     269                                        sharedruns->addRenderable(rend); 
     270                                        sharedruns->updateBounds(); 
     271                                } 
     272                                 
     273                                createTechnique(params, pass, rend, sharedruns);  
     274 
     275                                i++; 
     276                        } 
     277                } 
     278        } 
     279                         
     280} 
     281 
    217282void OgreIlluminationManager::initTechniques() 
    218283{ 
     
    225290                        MovableObject* o = it.getNext(); 
    226291                        Entity* e = (Entity*) o; 
    227  
    228                 /*      OgreSharedRuns* sharedruns = 0; 
    229                          
    230                         for(unsigned int s = 0; s < e->getNumSubEntities(); s++) 
    231                         { 
    232                                 SubEntity* sube = e->getSubEntity(s); 
    233  
    234                                 Material* mat = sube->getMaterial().getPointer(); 
    235                                  
    236                                 OgreRenderable* rend = 0;        
    237                                 OgreTechniqueGroup* group = 0; 
    238                          
    239                                 for(unsigned int t = 0 ; t < mat->getNumTechniques() ; t++) 
    240                                 { 
    241                                         Technique* tech = mat->getTechnique(t); 
    242  
    243                                         for(unsigned int p = 0; p< tech->getNumPasses(); p++) 
    244                                         { 
    245                                                 Pass* pass = tech->getPass(p); 
    246  
    247                                                 std::vector<IllumTechniqueParams*>& techniques = pass->getIllumTechniques(); 
    248                                                 std::vector<IllumTechniqueParams*>::iterator i = techniques.begin();  
    249                                                 std::vector<IllumTechniqueParams*>::iterator iend = techniques.end(); 
    250                                                  
    251                                                 while( i != iend) 
    252                                                 { 
    253                                                         IllumTechniqueParams* params = *i; 
    254                                                          
    255                                                         if(rend == 0) 
    256                                                         { 
    257                                                                 rend = new OgreRenderable(e, s); 
    258                                                                 group = new OgreTechniqueGroup(); 
    259                                                                 sube->setRenderTechniqueGroup(group);                                                    
    260                                                                  
    261                                                                 if( sharedruns == 0) 
    262                                                                 {                                                                        
    263                                                                         sharedruns  = new OgreSharedRuns(); 
    264                                                                         addSharedRuns(sharedruns); 
    265                                                                 } 
    266  
    267                                                                 group->addSharedRun(sharedruns); 
    268                                                                 sharedruns->addRenderable(rend); 
    269                                                                 sharedruns->updateBounds(); 
    270                                                         } 
    271                                                          
    272                                                         createTechnique(params, pass, rend, sharedruns);  
    273  
    274                                                         i++; 
    275                                                 } 
    276                                         } 
    277                                 } 
    278                         } 
    279  
    280                 */ 
     292                 
    281293                        initTechniques(e); 
    282294                } 
     
    290302                        MovableObject* o = it.getNext(); 
    291303                        ParticleSystem* psys = (ParticleSystem*) o; 
    292  
    293                         BillboardSet* bbset = findRenderableInParticleSystem(psys); 
    294                          
    295                         OgreTechniqueGroup* group = 0;                   
    296                         OgreSharedRuns* sharedruns = 0; 
    297                         OgreRenderable* rend = 0;        
    298                                                  
    299                         String matName = psys->getMaterialName(); 
    300                         Material* mat = (Material*) MaterialManager::getSingleton().getByName(matName).getPointer(); 
    301  
    302                         for(unsigned int t = 0 ; t < mat->getNumTechniques() ; t++) 
     304                         
     305                        try 
    303306                        { 
    304                                 Technique* tech = mat->getTechnique(t); 
    305  
    306                                 for(unsigned int p = 0; p< tech->getNumPasses(); p++) 
    307                                 { 
    308                                         Pass* pass = tech->getPass(p); 
    309  
    310                                         std::vector<IllumTechniqueParams*>& techniques = pass->getIllumTechniques(); 
    311                                         std::vector<IllumTechniqueParams*>::iterator i = techniques.begin();  
    312                                         std::vector<IllumTechniqueParams*>::iterator iend = techniques.end(); 
    313  
    314                                          
    315                                         while( i != iend) 
    316                                         { 
    317                                                 IllumTechniqueParams* params = *i; 
    318                                                  
    319                                                 if(rend == 0) 
    320                                                 { 
    321                                                         rend = new OgreRenderable(bbset); 
    322                                                         group = new OgreTechniqueGroup(); 
    323                                                         bbset->setRenderTechniqueGroup(group);                                                   
    324                                                          
    325                                                         if( sharedruns == 0) 
    326                                                         {                                                                        
    327                                                                 sharedruns  = new OgreSharedRuns(); 
    328                                                                 addSharedRuns(sharedruns); 
    329                                                         } 
    330  
    331                                                         group->addSharedRun(sharedruns); 
    332                                                         sharedruns->addRenderable(rend); 
    333                                                         sharedruns->updateBounds(); 
    334                                                 } 
    335  
    336                                                 createTechnique(params, pass, rend, sharedruns);  
    337  
    338                                                 i++; 
    339                                         } 
    340                                 } 
     307                         BillboardSet* bbset = findRenderableInParticleSystem(psys); 
     308                         bbset->setMaterialName(psys->getMaterialName()); 
     309                         initTechniques(bbset, psys); 
    341310                        } 
    342                          
    343  
     311                        catch( ... ) 
     312                        { 
     313                                //unsupported particle renderer, skip init 
     314                        } 
    344315                } 
    345316        } 
     
    371342                } 
    372343 
     344                it++; 
     345        } 
     346} 
     347void OgreIlluminationManager::preAllUpdates() 
     348{ 
     349        std::vector<UpdateListener*>::iterator it = updateListeners.begin(); 
     350        std::vector<UpdateListener*>::iterator itend = updateListeners.end(); 
     351 
     352        while(it != itend) 
     353        { 
     354                UpdateListener* l = *it; 
     355                l->preAllUpdates(); 
     356                it++; 
     357        } 
     358} 
     359 
     360void OgreIlluminationManager::postAllUpdates() 
     361{ 
     362        std::vector<UpdateListener*>::iterator it = updateListeners.begin(); 
     363        std::vector<UpdateListener*>::iterator itend = updateListeners.end(); 
     364 
     365        while(it != itend) 
     366        { 
     367                UpdateListener* l = *it; 
     368                l->postAllUpdates(); 
    373369                it++; 
    374370        } 
     
    406402                std::vector<const Renderable*>::iterator iter = visibleObjects.begin(); 
    407403                const std::vector<const Renderable*>::iterator iend = visibleObjects.end(); 
     404 
     405                preAllUpdates(); 
    408406 
    409407                while(iter != iend) 
     
    418416                } 
    419417 
     418                postAllUpdates(); 
     419 
    420420        } 
    421421} 
     
    448448                while(it2 != itend) 
    449449                { 
    450                         if( *it1 != *it2 && OgreSharedRuns::canJoin(*it1, *it2)) 
     450                        if( it1 != it2 && OgreSharedRuns::canJoin(*it1, *it2)) 
    451451                        { 
    452452                                SharedRuns* newruns = (*it1)->joinRuns(*it2); 
     
    513513} 
    514514 
     515 
     516 
    515517RenderingRun* OgreIlluminationManager::getGlobalRun(RenderingRunType runType) 
    516518{ 
    517519        return globalSharedRuns.getRun(runType); 
     520} 
     521 
     522GlobalUseRenderTarget* OgreIlluminationManager::getGlobalTarget(GlobalTargetType type) 
     523{ 
     524        std::map<GlobalTargetType, GlobalUseRenderTarget*>::iterator it = globalTargets.find(type); 
     525         
     526        if( it != globalTargets.end()) 
     527                return (*it).second; 
     528 
     529        return 0; 
     530} 
     531 
     532void OgreIlluminationManager::addGlobalTarget(GlobalTargetType type, GlobalUseRenderTarget* target) 
     533{ 
     534        globalTargets[type] = target;   
    518535} 
    519536 
     
    545562                                lightName + "DEPTH_SHADOW_MAP", 
    546563                                sm->getLight(lightName), 
    547                                 2048, //TODO 
    548                                 2048, //TODO 
     564                                512, //TODO 
     565                                512, //TODO 
    549566                                "GameTools/ShadowMapDepth" //TODO 
    550567                                ); 
Note: See TracChangeset for help on using the changeset viewer.