#ifndef __PVS_H #define __PVS_H #include class KdNode; class BspNode; class Ray; struct LtKdNode { bool operator()(const KdNode *a, const KdNode *b) const { return a < b; } }; /** Superclass for all types of PVS data. */ class Pvs { public: Pvs(): mSamples(0) {} int mSamples; virtual int Compress() = 0; virtual int GetSize() = 0; }; struct KdPvsData { int mVisibleSamples; KdPvsData() {} KdPvsData(const int samples):mVisibleSamples(samples) {} }; typedef std::map KdPvsMap; class KdPvs: public Pvs { public: KdPvsMap mEntries; KdPvs():mEntries() {} KdPvsData *Find(KdNode *node); int AddNodeSample(KdNode *node); int Compress() {return 0;} int GetSize() { return (int)mEntries.size(); } void GetData(const int index, KdNode *&node, KdPvsData &data ); }; struct LtBspNode { bool operator()(const BspNode *a, const BspNode *b) const { return a < b; } }; struct BspPvsData { int mVisibleSamples; BspPvsData() {} BspPvsData(const int samples): mVisibleSamples(samples) {} }; typedef std::map BspPvsMap; class BspPvs: public Pvs { public: BspPvs(): mEntries() {} BspPvsMap mEntries; BspPvsData *Find(BspNode *node); int AddNodeSample(BspNode *node); int Compress() {return 0;} int GetSize() {return (int)mEntries.size();} void GetData(const int index, BspNode *&node, BspPvsData &data); }; #endif