#ifndef _OcclusionQuery_H__ #define _OcclusionQuery_H__ #include #include "common.h" namespace CHCDemo { class BvhNode; /** This class is an implementation for single node queries and multiqueries. @remark the class encapsulates hardware occlusion query calls. */ class OcclusionQuery { public: OcclusionQuery(); virtual ~OcclusionQuery(); bool ResultAvailable() const; unsigned int GetQueryResult() const; void BeginQuery(); void EndQuery(); unsigned int GetQueryId() const; /** Returns the first added node. */ inline BvhNode *GetFrontNode() const { return mNodes[0]; } /** Reset the contents of this query. */ inline void Reset() { mNodes.clear(); } /** Adds a node to the query. */ inline void AddNode(BvhNode *node) { mNodes.push_back(node); } protected: OcclusionQuery(unsigned int id); //////////// //-- members float mPFail; /// all nodes that are tested with the same query BvhNodeContainer mNodes; // the query associated with this test unsigned int mQueryId; /// type of the query bool mIsVisibleQuery; }; class QueryHandler { public: QueryHandler(); OcclusionQuery *RequestQuery(); /** Must be called every frame. */ void ResetQueries(); void DestroyQueries(); protected: int mCurrentQueryIdx; QueryContainer mOcclusionQueries; }; } // namespace #endif // OcclusionQuery_H