#ifndef SUBDIVISIONCANDIDATE_H #define SUBDIVISIONCANDIDATE_H #include "FlexibleHeap.h" using namespace std; namespace GtpVisibilityPreprocessor { /** Candidate for a view space / object space split. */ class SubdivisionCandidate: public Heapable { public: enum {OBJECT_SPACE, VIEW_SPACE}; SubdivisionCandidate(): mRenderCostDecrease(0) {}; virtual ~SubdivisionCandidate() {}; virtual void EvalPriority() = 0; virtual int Type() const = 0; virtual bool GlobalTerminationCriteriaMet() const = 0; /** Set render cost decrease achieved through this split. */ inline void SetRenderCostDecrease(const float renderCostDecr) { mRenderCostDecrease = renderCostDecr; } inline float GetRenderCostDecrease() const { return mRenderCostDecrease; } /** Position in queue. */ inline int GetPosition() const { return mPosition; } inline void SetSplitAxis(const int splitAxis) { mSplitAxis = splitAxis; } inline void SetMaxCostMisses(const int misses) { mMaxCostMisses = misses; } inline void SetPvsEntriesIncr(const int pvsEntriesIncr) { mPvsEntriesIncr = pvsEntriesIncr; } inline int GetSplitAxis() const { return mSplitAxis; } inline int GetMaxCostMisses() const { return mMaxCostMisses; } inline int GetPvsEntriesIncr() const { return mPvsEntriesIncr; } protected: /// split axis of this plane (0, 1, 2, or 3 if non-axis-aligned) int mSplitAxis; /// the number of misses of max cost ratio until this split int mMaxCostMisses; /// render cost decrease achieved through this split float mRenderCostDecrease; /// the decrease of the number of pvs entries int mPvsEntriesIncr; }; typedef FlexibleHeap SplitQueue; typedef vector SubdivisionCandidateContainer; } // FLEXIBLEHEAP_H #endif