source: GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreVisibilityOptionsManager.cpp @ 2171

Revision 2171, 2.8 KB checked in by mattausch, 17 years ago (diff)

implemented function for exact visibility queries

RevLine 
[75]1#include "OgreVisibilityOptionsManager.h"
2
3namespace Ogre {
4//-----------------------------------------------------------------------
[100]5VisibilityOptionsManager::VisibilityOptionsManager(
[187]6                                                        GtpVisibility::VisibilityManager *visManager,
7                                                        PlatformHierarchyInterface *hierarchyInterface):
[100]8mVisibilityManager(visManager),
9mHierarchyInterface(hierarchyInterface)
[75]10{
11}
12//-----------------------------------------------------------------------
[187]13bool VisibilityOptionsManager::setOption(const String & key, const void * val)
[75]14{
[100]15        if (key == "Algorithm")
[75]16        {
[254]17                // delete old queries (not needed for e.g., view frustum culling)
[2171]18                // note cannot be deleted because of new ogre occlusion query
19                // implementation there we cannot just delete the queries, so
20                // they would stay!
21                // mHierarchyInterface->ResetQueries();
[75]22                mVisibilityManager->SetCullingManager(*static_cast<const
23                        GtpVisibility::VisibilityEnvironment::CullingManagerType *>(val));
24                return true;
25        }
[100]26        if (key == "Threshold")
[75]27        {
28                mVisibilityManager->SetVisibilityCullingThreshold(*static_cast<const int *>(val));
29                return true;
30        }
[146]31        if (key == "AssumedVisibility")
32        {
[155]33                mVisibilityManager->SetAssumedVisibilityForChc(*static_cast<const int *>(val));
[146]34                return true;
35        }
[155]36        if (key == "TestGeometryForVisibleLeaves")
[86]37        {
[155]38                mHierarchyInterface->TestGeometryForVisibleLeaves(*static_cast<const bool *>(val));
[86]39                return true;
40        }
[75]41       
42        return false;
43}
44//-----------------------------------------------------------------------
45bool VisibilityOptionsManager::getOption( const String & key, void *val )
46{
47        if (key == "NumTraversedNodes")
48        {
49                * static_cast <unsigned int *>(val) =
50                        mHierarchyInterface->GetNumTraversedNodes();
51                return true;
52        }
53        if (key == "NumRenderedNodes")
54        {
55                * static_cast <unsigned int *>(val) =
56                        mHierarchyInterface->GetNumRenderedNodes();
57                return true;
58        }
59        if (key == "NumQueryCulledNodes")
60        {
61                * static_cast <unsigned int *>(val) =
62                        mVisibilityManager->GetCullingManager()->GetNumQueryCulledNodes();
63                return true;
64        }
65        if (key == "NumFrustumCulledNodes")
66        {
67                * static_cast<unsigned int *>(val) =
68                        mVisibilityManager->GetCullingManager()->GetNumFrustumCulledNodes();
69                return true;
70        }
[87]71        if (key == "NumQueriesIssued")
72        {
73                * static_cast<unsigned int *>(val) =
74                        mVisibilityManager->GetCullingManager()->GetNumQueriesIssued();
75                return true;
76        }
[86]77       
[75]78        return false;
79}
80//-----------------------------------------------------------------------
[100]81bool VisibilityOptionsManager::getOptionKeys(StringVector & refKeys)
[75]82{
[155]83        refKeys.push_back("NumRenderedNodes");
84        refKeys.push_back("NumTraversedNodes");
85        refKeys.push_back("NumQueryCulledNodes");
86        refKeys.push_back("NumFrustumCulledNodes");
[1175]87        refKeys.push_back("NumQueriesIssued");
[75]88       
89        return true;
90}
91} // namespace Ogre
Note: See TracBrowser for help on using the repository browser.