#ifndef _OcclusionQueriesQueryManager_H__ #define _OcclusionQueriesQueryManager_H__ #include "OgrePlatformQueryManager.h" namespace Ogre { /** Class which implements a query manager for Ogre scene queries using occlusion queries. */ class __declspec(dllexport) OcclusionQueriesQueryManager: public PlatformQueryManager { public: /** Constructor taking a hierarchy interface as an argument. This allows to operate on different hierarchy types, while reusing the implementation of the query methods. */ OcclusionQueriesQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp, int queryModes, int itemBufferMode); void ComputeCameraVisibility(const Camera &camera, InfoContainer *visibleNodes, InfoContainer *visibleGeometry, InfoContainer *visiblePatches, bool relativeVisibility = false); /** Uses the specified point to execute the visibility query in all directions. @sa ComputeCameraVisibility() */ void ComputeFromPointVisibility(const Vector3 &point, InfoContainer *visibleNodes, InfoContainer *visibleGeometry, InfoContainer *visiblePatches, bool relativeVisibility = false); protected: void CollectGeometryVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::GeometryList *geometryList, InfoContainer *visibleGeometry, bool relativeVisibility); void CollectNodeVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::HierarchyNodeList *nodeList, InfoContainer *visibleNodes, bool relativeVisibility); void CollectRelativeGeometryVisibilityForItemBuffer(GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::GeometryList *geometryList, InfoContainer *visibleGeometry); void CollectRelativePatchVisibilityForItemBuffer( GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::PatchList *patchList, InfoContainer *visiblePatches); void CollectPatchVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::PatchList *patchList, InfoContainer *visiblePatches, bool relativeVisibility); void RemoveDuplicateNodes(InfoContainer *visibleNodes); void RemoveDuplicateGeometry(InfoContainer *visibleMesh); void RemoveDuplicatePatches(InfoContainer *visiblePatches); /** Returns the patches of the geometry of a given node. @param node the node containing the patches @param patchList the patches are returned in this list */ virtual void GetNodePatchList(GtpVisibility::HierarchyNode *node, GtpVisibility::PatchList *patchList); int mItemBufferMode; }; } // namespace Ogre #endif // OcclusionQueriesQueryManager