Ignore:
Timestamp:
06/22/08 05:24:22 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp

    r2782 r2795  
    44#include "Texture.h" 
    55#include "Material.h" 
    6  
    76 
    87using namespace std; 
     
    2221        int tsize2 = t2 ? t2->GetByteSize() : 0; 
    2322 
    24         // if texture size equal, group by material 
    25         if (tsize1 == tsize2) 
    26                 return ent1->GetMaterial() < ent2->GetMaterial(); 
     23        return tsize1 < tsize2; 
     24} 
    2725 
    28         return tsize1 < tsize2; 
     26 
     27inline static bool IsLower2(SceneEntity *ent1, SceneEntity *ent2) 
     28{ 
     29        return ent1->GetMaterial() < ent2->GetMaterial(); 
    2930} 
    3031 
     
    6364{ 
    6465        if (mEntities.size() >= mMinSizeForSorting) 
     66        { 
     67                sortTimer.Entry(); 
    6568                Sort(); 
     69                sortTimer.Exit(); 
     70        } 
    6671         
    6772        SceneEntityContainer::const_iterator sit, sit_end = mEntities.end(); 
     
    7277                ent->Render(mState); 
    7378        } 
     79 
     80        //Print(); 
    7481} 
     82 
     83 
     84void RenderQueue::Print() 
     85{ 
     86        SceneEntityContainer::const_iterator sit, sit_end = mEntities.end(); 
     87 
     88        Debug << "\nrq size: " << GetSize() << endl; 
     89        Debug << "texture size: " << endl; 
     90        // show ordering by texture size 
     91        for (sit = mEntities.begin(); sit != sit_end; ++ sit) 
     92        { 
     93                SceneEntity *ent = *sit; 
     94                Texture *t = ent->GetMaterial()->GetTexture(); 
     95                int tsize = t ? t->GetByteSize() : 0; 
     96                Debug << tsize << " "; 
     97        } 
     98 
     99        // show ordering by material 
     100        Debug << "\nmaterial ptr: " << endl; 
    75101         
     102        for (sit = mEntities.begin(); sit != sit_end; ++ sit) 
     103        { 
     104                Debug << (*sit)->GetMaterial() << " "; 
     105        } 
     106} 
     107 
     108 
     109void RenderQueue::Apply() 
     110{ 
     111        Render(); 
     112        Clear(); 
     113} 
     114 
    76115 
    77116void RenderQueue::Sort() 
    78117{ 
    79         sort(mEntities.begin(), mEntities.end(), IsLower); 
     118        // sort by material 
     119        sort(mEntities.begin(), mEntities.end(), IsLower2); 
     120        // sort by texture size 
     121        stable_sort(mEntities.begin(), mEntities.end(), IsLower); 
    80122} 
    81123 
Note: See TracChangeset for help on using the changeset viewer.