Ignore:
Timestamp:
02/06/06 19:09:53 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCell.cpp

    r590 r600  
    2222        bool operator() (T v1, T v2) const 
    2323        { 
    24                 return (v1->GetTimeStamp() < v2->GetTimeStamp()); 
     24                return (v1->GetMergeCost() < v2->GetMergeCost()); 
    2525        } 
    2626}; 
     
    107107mValid(true), 
    108108mParent(NULL), 
    109 mTimeStamp(0), 
     109mMergeCost(0), 
    110110mIsActive(false) 
    111111{ 
     
    119119mValid(true), 
    120120mParent(NULL), 
    121 mTimeStamp(0), 
     121mMergeCost(0), 
    122122mIsActive(false) 
    123123{ 
     
    230230 
    231231 
    232 void ViewCell::SetTimeStamp(const int timeStamp) 
    233 { 
    234         mTimeStamp = timeStamp; 
    235 } 
    236  
    237  
    238 int ViewCell::GetTimeStamp() const 
    239 { 
    240         return mTimeStamp; 
     232void ViewCell::SetMergeCost(const float mergeCost) 
     233{ 
     234        mMergeCost = mergeCost; 
     235} 
     236 
     237 
     238float ViewCell::GetMergeCost() const 
     239{ 
     240        return mMergeCost; 
    241241} 
    242242 
     
    445445        float variance = 0; 
    446446        int totalPvs = 0; 
    447         float totalCost = 0; 
     447        float totalRenderCost = 0; 
    448448 
    449449        //-- compute statistics values of initial view cells 
    450         mViewCellsManager->EvaluateRenderStatistics(totalCost, 
     450        mViewCellsManager->EvaluateRenderStatistics(totalRenderCost, 
    451451                                                                                                mExpectedCost, 
    452452                                                                                                mDeviation, 
     
    471471        Debug << "deviation: " << mDeviation << endl; 
    472472        Debug << "avg render cost: " << mAvgRenderCost << endl; 
    473         Debug << "expected cost: " <<mExpectedCost << endl; 
     473        Debug << "expected cost: " << mExpectedCost << endl; 
    474474 
    475475 
     
    498498 
    499499        // frequency stats are updated 
    500         const int statsOut = 100; 
     500        const int statsOut = 1; 
    501501 
    502502        // passes are needed for statistics, because we don't want to record 
     
    521521 
    522522        //-- use priority queue to merge leaf pairs 
    523  
    524         while (!mMergeQueue.empty())// && (realNumActiveViewCells > mMergeMinViewCells)) 
     523// HACK 
     524        //const float maxAvgCost = 350; 
     525        while (!mMergeQueue.empty())//NumActiveViewCells > mMergeMinViewCells)) 
    525526        { 
    526527                //-- reset merge queue if the ratio of current expected cost / real expected cost 
     
    588589                { 
    589590                        ViewCell::NewMail(); 
    590                                                  
     591 
     592                        //-- update statistical values 
    591593                        -- realNumActiveViewCells; 
    592594                        ++ mergeStats.merged; 
    593595                        ++ mergedPerPass; 
    594596 
    595  
    596                         //-- update statistical values 
     597                        const float renderCostIncr = mc.GetRenderCost(); 
     598                        const float mergeCostIncr = mc.GetMergeCost(); 
     599 
     600                        totalRenderCost += renderCostIncr; 
     601                        mDeviation += mc.GetDeviationIncr(); 
     602                         
     603                         
     604                        // merge the view cells of leaf1 and leaf2 
     605                        int pvsDiff; 
     606                        ViewCellInterior *mergedVc =  
     607                                MergeViewCells(mc.mLeftViewCell, mc.mRightViewCell, pvsDiff); 
     608 
    597609 
    598610                        // total render cost and deviation has changed 
     
    600612                        // cost heuristics, but cannot recompute costs on each increase of the  
    601613                        // expected cost 
    602  
    603                         totalCost += mc.GetRenderCost(); 
    604                         mDeviation += mc.GetDeviationIncr(); 
    605                                                  
    606                         realExpectedCost = totalCost / (float)realNumActiveViewCells; 
    607                          
    608                         const float currentMergeCost = mc.GetMergeCost(); 
    609  
    610                         // merge the view cells of leaf1 and leaf2 
    611                         int pvsDiff; 
    612                         ViewCellInterior *mergedVc =  
    613                                 MergeViewCells(mc.mLeftViewCell, mc.mRightViewCell, pvsDiff); 
    614  
    615614                        totalPvs += pvsDiff; 
    616  
    617                         // set timestamp 
    618                         mergedVc->SetTimeStamp(mergeStats.merged); 
    619  
     615                        realExpectedCost = totalRenderCost / (float)realNumActiveViewCells; 
    620616                        realAvgRenderCost = (float)totalPvs / (float)realNumActiveViewCells; 
     617         
     618                        // set merge cost to this node 
     619                        mergedVc->SetMergeCost(totalRenderCost); 
     620 
    621621#if VC_HISTORY 
    622622                        if (mc.mLeftViewCell->IsSibling(mc.mRightViewCell)) 
     
    632632                                        << "#Merged\n" << mergeStats.merged << endl  
    633633                                        << "#Viewcells\n" << realNumActiveViewCells << endl  
    634                                         << "#CurrentCost\n" << currentMergeCost << endl 
    635                                         << "#RelativeCost\n" << currentMergeCost / mOverallCost << endl 
    636                                         << "#CurrentPvs\n" << mc.GetLeftViewCell()->GetPvs().GetSize() << endl 
    637                                         << "#MergedSiblings\n" << mergeStats.siblings << endl 
    638                                         << "#AvgTreeDist\n" << mergeStats.AvgTreeDist() << endl 
    639                                         << "#UsedExpectedCost\n" << mExpectedCost << endl 
    640                                         << "#RealExpectedCost\n" << realExpectedCost << endl 
    641                                         << "#RealAvgRenderCost\n" << realAvgRenderCost << endl 
    642                                         << "#AvgRenderCost\n" << mAvgRenderCost << endl 
    643                                         << "#expectedCostRatio\n" << mExpectedCost / realExpectedCost << endl 
    644                                         << "#Deviation\n" << mDeviation / (float)realNumActiveViewCells << endl 
    645                                         << "#TotalDeviation\n" << mDeviation<< endl; 
     634                                        << "#RenderCostIncrease\n" << renderCostIncr << endl 
     635                                        << "#TotalRenderCost\n" << totalRenderCost << endl 
     636                                        << "#CurrentPvs\n" << mergedVc->GetPvs().GetSize() << endl 
     637                                        << "#ExpectedCost\n" << realExpectedCost << endl 
     638                                        << "#AvgRenderCost\n" << realAvgRenderCost << endl 
     639                                        << "#Deviation\n" << mDeviation << endl 
     640                                        << "#TotalPvs\n" << totalPvs << endl 
     641                                        << "#PvsSizeDecrease\n" << -pvsDiff << endl; 
    646642                        } 
    647643                } 
     
    682678                }*/ 
    683679                ViewCellInterior *root = mViewCellsManager->MergeViewCells(activeViewCells); 
    684  
    685                 root->SetTimeStamp(mergeStats.merged + 1); 
     680                root->SetMergeCost(totalRenderCost); 
    686681                mRoot = root; 
    687682        } 
     
    692687        } 
    693688 
     689 
     690        while (!mMergeQueue.empty()) 
     691        { 
     692                mMergeQueue.pop(); 
     693        } 
     694         
     695         
    694696        // TODO delete because makes no sense here 
    695697        mergeStats.expectedRenderCost = realExpectedCost; 
Note: See TracChangeset for help on using the changeset viewer.