28 #ifndef __RenderQueueSortingGrouping_H__
29 #define __RenderQueueSortingGrouping_H__
92 virtual bool visit(
const Pass* p) = 0;
129 OM_SORT_DESCENDING = 2,
133 OM_SORT_ASCENDING = 6
152 return hasha < hashb;
186 return (adepth > bdepth);
261 void removePassGroup(
Pass* p);
270 mOrganisationMode = 0;
280 mOrganisationMode |= om;
289 void sort(
const Camera* cam);
346 void removePassEntry(
Pass* p);
359 bool splitPassesByLightingType,
360 bool splitNoShadowPasses,
361 bool shadowCastersNotReceivers);
370 {
return mSolidsBasic; }
374 {
return mSolidsDiffuseSpecular; }
378 {
return mSolidsDecal; }
382 {
return mSolidsNoShadowReceive; }
385 {
return mTransparentsUnsorted; }
388 {
return mTransparents; }
397 void resetOrganisationModes(
void);
413 void defaultOrganisationMode(
void);
420 void sort(
const Camera* cam);
431 mSplitPassesByLightingType = split;
439 mSplitNoShadowPasses = split;
447 mShadowCastersNotReceivers = ind;
486 bool splitPassesByLightingType,
487 bool splitNoShadowPasses,
488 bool shadowCastersNotReceivers)
490 , mSplitPassesByLightingType(splitPassesByLightingType)
491 , mSplitNoShadowPasses(splitNoShadowPasses)
492 , mShadowCastersNotReceivers(shadowCastersNotReceivers)
493 , mShadowsEnabled(true)
494 , mOrganisationMode(0)
500 PriorityMap::iterator i;
501 for (i = mPriorityGroups.begin(); i != mPriorityGroups.end(); ++i)
523 PriorityMap::iterator i = mPriorityGroups.find(priority);
525 if (i == mPriorityGroups.end())
529 mSplitPassesByLightingType,
530 mSplitNoShadowPasses,
531 mShadowCastersNotReceivers);
532 if (mOrganisationMode)
538 mPriorityGroups.insert(PriorityMap::value_type(priority, pPriorityGrp));
542 pPriorityGrp = i->second;
559 PriorityMap::iterator i, iend;
560 iend = mPriorityGroups.end();
561 for (i = mPriorityGroups.begin(); i != iend; ++i)
570 mPriorityGroups.clear();
596 mSplitPassesByLightingType = split;
597 PriorityMap::iterator i, iend;
598 iend = mPriorityGroups.end();
599 for (i = mPriorityGroups.begin(); i != iend; ++i)
601 i->second->setSplitPassesByLightingType(split);
610 mSplitNoShadowPasses = split;
611 PriorityMap::iterator i, iend;
612 iend = mPriorityGroups.end();
613 for (i = mPriorityGroups.begin(); i != iend; ++i)
615 i->second->setSplitNoShadowPasses(split);
623 mShadowCastersNotReceivers = ind;
624 PriorityMap::iterator i, iend;
625 iend = mPriorityGroups.end();
626 for (i = mPriorityGroups.begin(); i != iend; ++i)
628 i->second->setShadowCastersCannotBeReceivers(ind);
639 mOrganisationMode = 0;
641 PriorityMap::iterator i, iend;
642 iend = mPriorityGroups.end();
643 for (i = mPriorityGroups.begin(); i != iend; ++i)
645 i->second->resetOrganisationModes();
657 mOrganisationMode |= om;
659 PriorityMap::iterator i, iend;
660 iend = mPriorityGroups.end();
661 for (i = mPriorityGroups.begin(); i != iend; ++i)
663 i->second->addOrganisationMode(om);
675 mOrganisationMode = 0;
677 PriorityMap::iterator i, iend;
678 iend = mPriorityGroups.end();
679 for (i = mPriorityGroups.begin(); i != iend; ++i)
681 i->second->defaultOrganisationMode();
698 PriorityMap::iterator i = mPriorityGroups.find(priority);
699 if (i == mPriorityGroups.end())
703 mSplitPassesByLightingType,
704 mSplitNoShadowPasses,
705 mShadowCastersNotReceivers);
706 if (mOrganisationMode)
712 mPriorityGroups.insert(PriorityMap::value_type(priority, pDstPriorityGrp));
716 pDstPriorityGrp = i->second;
720 pDstPriorityGrp->
merge( pSrcPriorityGrp );