- Timestamp:
- 06/26/06 09:52:08 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreIlluminationManager.cpp
r949 r1055 79 79 visitor = new VisibleFinderVisitor(&visibleObjects); 80 80 maxRad = 400; 81 82 for(int i = 0; i < RUN_TYPE_COUNT; i++) 83 { 84 maxRads[(RenderingRunType)i] = (float) maxRad; 85 } 81 86 82 87 //register rendertechnique factories … … 95 100 OgreSBBRenderTechniqueFactory* sbb = new OgreSBBRenderTechniqueFactory(); 96 101 addRenderTechniqueFactory(sbb); 102 OgreFireRenderTechniqueFactory* fire = new OgreFireRenderTechniqueFactory(); 103 addRenderTechniqueFactory(fire); 97 104 } 98 105 … … 160 167 void OgreIlluminationManager::initTechniques(Entity* e) 161 168 { 169 if( e->getParentSceneNode() == 0 )//Entity not attached 170 return; 171 162 172 OgreSharedRuns* sharedruns = 0; 163 173 … … 215 225 } 216 226 227 228 void 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 217 282 void OgreIlluminationManager::initTechniques() 218 283 { … … 225 290 MovableObject* o = it.getNext(); 226 291 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 281 293 initTechniques(e); 282 294 } … … 290 302 MovableObject* o = it.getNext(); 291 303 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 303 306 { 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); 341 310 } 342 343 311 catch( ... ) 312 { 313 //unsupported particle renderer, skip init 314 } 344 315 } 345 316 } … … 371 342 } 372 343 344 it++; 345 } 346 } 347 void 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 360 void 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(); 373 369 it++; 374 370 } … … 406 402 std::vector<const Renderable*>::iterator iter = visibleObjects.begin(); 407 403 const std::vector<const Renderable*>::iterator iend = visibleObjects.end(); 404 405 preAllUpdates(); 408 406 409 407 while(iter != iend) … … 418 416 } 419 417 418 postAllUpdates(); 419 420 420 } 421 421 } … … 448 448 while(it2 != itend) 449 449 { 450 if( *it1 != *it2 && OgreSharedRuns::canJoin(*it1, *it2))450 if( it1 != it2 && OgreSharedRuns::canJoin(*it1, *it2)) 451 451 { 452 452 SharedRuns* newruns = (*it1)->joinRuns(*it2); … … 513 513 } 514 514 515 516 515 517 RenderingRun* OgreIlluminationManager::getGlobalRun(RenderingRunType runType) 516 518 { 517 519 return globalSharedRuns.getRun(runType); 520 } 521 522 GlobalUseRenderTarget* 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 532 void OgreIlluminationManager::addGlobalTarget(GlobalTargetType type, GlobalUseRenderTarget* target) 533 { 534 globalTargets[type] = target; 518 535 } 519 536 … … 545 562 lightName + "DEPTH_SHADOW_MAP", 546 563 sm->getLight(lightName), 547 2048, //TODO548 2048, //TODO564 512, //TODO 565 512, //TODO 549 566 "GameTools/ShadowMapDepth" //TODO 550 567 );
Note: See TracChangeset
for help on using the changeset viewer.