#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, bool renderPatches, bool useItemBufferForGeometry); 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); bool mUseItemBuffer; }; } // namespace Ogre #endif // OcclusionQueriesQueryManager