#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(GtpVisibility::HierarchyInterface *hierarchyInterface, Viewport *vp, int queryModes, int itemBufferMode); void ComputeCameraVisibility(const Camera &camera, GtpVisibility::NodeInfoContainer *visibleNodes, GtpVisibility::MeshInfoContainer *visibleGeometry, GtpVisibility::PatchInfoContainer *visiblePatches, bool relativeVisibility = false); /** Uses the specified point to execute the visibility query in all directions. @sa ComputeCameraVisibility() */ void ComputeFromPointVisibility(const Vector3 &point, GtpVisibility::NodeInfoContainer *visibleNodes, GtpVisibility::MeshInfoContainer *visibleGeometry, GtpVisibility::PatchInfoContainer *visiblePatches, bool relativeVisibility = false); protected: void CollectGeometryVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::GeometryVector *geometryList, GtpVisibility::MeshInfoContainer *visibleGeometry, bool relativeVisibility); void CollectNodeVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::NodeVector *nodeList, GtpVisibility::NodeInfoContainer *visibleNodes, bool relativeVisibility); void CollectRelativeGeometryVisibilityForItemBuffer(GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::GeometryVector *geometryList, GtpVisibility::MeshInfoContainer *visibleGeometry); void CollectRelativePatchVisibilityForItemBuffer( GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::PatchVector *patchList, GtpVisibility::PatchInfoContainer *visiblePatches); void CollectPatchVisibility(GtpVisibility::QueryList::iterator &visQueryIt, GtpVisibility::QueryList::iterator &projQueryIt, GtpVisibility::PatchVector *patchList, GtpVisibility::PatchInfoContainer *visiblePatches, bool relativeVisibility); void RemoveDuplicateNodes(GtpVisibility::NodeInfoContainer *visibleNodes); void RemoveDuplicateGeometry(GtpVisibility::MeshInfoContainer *visibleMesh); void RemoveDuplicatePatches(GtpVisibility::PatchInfoContainer *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::PatchVector *patchList); int mItemBufferMode; }; } // namespace Ogre #endif // OcclusionQueriesQueryManager