Changeset 154 for trunk/VUT/work


Ignore:
Timestamp:
07/04/05 17:57:51 (20 years ago)
Author:
mattausch
Message:

added item buffer queries.

Location:
trunk/VUT/work
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.cpp

    r153 r154  
    99#include "OgreVisibilityTerrainSceneManager.h" 
    1010#include "VisibilityInfo.h" 
    11 #include "OgreItemBufferQueryManager.h"; 
     11#include "OgreItemBufferQueryManager.h" 
     12#include "OgreOcclusionQueriesQueryManager.h" 
     13 
     14 
     15 
     16 
    1217// output file for frame info 
    1318const char* frames_out_filename = "frame.out"; 
     
    1621 
    1722 
     23// --- captions for overlays 
     24 
    1825String currentAlgorithmCaptions[GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS] =  
    1926{ 
     
    2330}; 
    2431 
    25 String queryTypeCaptions[4] =  
    26 { 
    27         "from camera, visible pixels",  
    28         "from viewpoint, visible pixels",  
    29         "from camera, relative visibility", 
    30         "from viewpoint, relative visibility" 
     32String queryTypeCaptions[] =  
     33{ 
     34        "from camera",  
     35        "from viewpoint" 
     36}; 
     37 
     38String queryRelativeVisCaptions[] =  
     39{ 
     40        "visible pixels",  
     41        "relative visibility" 
     42}; 
     43 
     44String queryMethodCaptions[] =  
     45{ 
     46        "occlusion queries",  
     47        "item buffer" 
    3148}; 
    3249 
     
    360377} 
    361378//----------------------------------------------------------------------- 
    362 void TerrainFrameListener::ApplyVisibilityQuery(bool fromPoint, bool relativeVisibility) 
     379void TerrainFrameListener::ApplyVisibilityQuery(bool fromPoint, bool relativeVisibility,  
     380                                                                                                bool useItemBuffer) 
    363381{ 
    364382        // TODO: change this (does not work with other scene manager plugins) 
    365         VisibilityTerrainSceneManager *sm = dynamic_cast<VisibilityTerrainSceneManager *>(mSceneMgr); 
    366  
    367         mQueryManager = new ItemBufferQueryManager(sm->GetHierarchyInterface(), mWindow->getViewport(0)); 
    368         //mQueryManager = new PlatformQueryManager(sm->GetHierarchyInterface(), mWindow->getViewport(0)); 
     383        VisibilityTerrainSceneManager *sm =  
     384                dynamic_cast<VisibilityTerrainSceneManager *>(mSceneMgr); 
     385 
     386        if (useItemBuffer) 
     387        { 
     388                mQueryManager = new ItemBufferQueryManager(sm->GetHierarchyInterface(),  
     389                        mWindow->getViewport(0)); 
     390        } 
     391        else 
     392        { 
     393                mQueryManager = new OcclusionQueriesQueryManager(sm->GetHierarchyInterface(),  
     394                        mWindow->getViewport(0)); 
     395        } 
    369396 
    370397        sm->GetVisibilityManager()->SetQueryManager(mQueryManager); 
     
    403430                        ++geomSize; 
    404431                         
    405                         std::stringstream d; d << "Geometry visibility: " << vis; 
     432                        std::stringstream d; d << "Geometry " << geomSize << " visibility: " << vis; 
    406433                        LogManager::getSingleton().logMessage(d.str()); 
    407434                } 
     
    431458                averageGeometryVis /= (float)geomSize; 
    432459 
    433         char str[100]; 
    434  
    435460        //-- update visibility queries stats 
    436461    try  
    437462        { 
    438                 //-- visibility queries stats 
    439                 int idx = fromPoint ?  1 : 0; 
    440                 idx += relativeVisibility ? 2 : 0; 
    441  
    442                 sprintf(str, ": %s", queryTypeCaptions[idx].c_str());  
     463                char str[100]; 
     464                 
     465                sprintf(str, ": %s, %s, %s",  
     466                                queryTypeCaptions[fromPoint ?  1 : 0].c_str(), 
     467                                queryRelativeVisCaptions[relativeVisibility ? 1 : 0].c_str(), 
     468                                queryMethodCaptions[useItemBuffer ? 1 : 0].c_str()); 
     469 
    443470                mQueryTypeInfo->setCaption(str); 
    444471 
     
    912939                break; 
    913940        case KC_F5: 
    914                 ApplyVisibilityQuery(false, mShiftPressed); 
     941                ApplyVisibilityQuery(false, mShiftPressed, false); 
    915942                break; 
    916943        case KC_F6: 
    917                 ApplyVisibilityQuery(true, mShiftPressed); 
    918                 break; 
    919  
     944                ApplyVisibilityQuery(true, mShiftPressed, false); 
     945                break; 
     946        case KC_F7: 
     947                ApplyVisibilityQuery(false, mShiftPressed, true); 
     948                break; 
     949        case KC_F8: 
     950                ApplyVisibilityQuery(true, mShiftPressed, true); 
     951                break; 
    920952        case KC_F11: 
    921953                takeScreenShot(); 
  • trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.h

    r151 r154  
    117117        /** Applies visibility query. Collects the visible objects  
    118118                and their visibility information. 
    119                 @param fromnPoint if query should be from point or from camera 
    120                 @param projectedPixels if query should return number of visible pixels or the ratio 
    121                 visible pixels / projected pixels. 
     119                @param fromPoint if query should be from point or from camera 
     120                @param relativeVisibility if query should return number of visible pixels or  
     121                the ratio visible / projected pixels. 
     122                @param useItemBuffer if item buffer should be used or occlusion queries 
    122123        */ 
    123         void ApplyVisibilityQuery(bool fromPoint, bool relativeVisibility); 
     124        void ApplyVisibilityQuery(bool fromPoint, bool relativeVisibility, bool useItemBuffer); 
    124125 
    125126        void toggleShowQueryStats(); 
  • trunk/VUT/work/ogre_changes/OgreMain/include/OgreSceneNode.h

    r61 r154  
    444444                void setLastRendered(int frameid); 
    445445 
     446                /** Sets scene node id  
     447                @param the id 
     448                */ 
     449                void setId(int id); 
     450                /** see set */ 
     451                int getId(void); 
     452 
    446453        protected: 
    447454                int mLastVisited; 
    448455                bool mVisible; 
    449456                int mLastRendered; 
    450  
     457                int mId; 
    451458#endif //GTP_VISIBILITY_MODIFIED_OGRE 
    452459 
  • trunk/VUT/work/ogre_changes/OgreMain/src/OgreSceneNode.cpp

    r61 r154  
    4242        mYawFixed(false), mAutoTrackTarget(0), mIsInSceneGraph(false) 
    4343#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    44         , mLastVisited(0), mVisible(false), mLastRendered(-1) 
     44        , mLastVisited(0), mVisible(false), mLastRendered(-1), mId(-1) 
    4545#endif //GTP_VISIBILITY_MODIFIED_OGRE 
    4646    { 
     
    5353        mAutoTrackTarget(0), mIsInSceneGraph(false) 
    5454        #ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    55         , mLastVisited(0), mVisible(false) 
     55        , mLastVisited(0), mVisible(false), mId(-1) 
    5656        #endif //GTP_VISIBILITY_MODIFIED_OGRE 
    5757    { 
     
    641641                mLastRendered = frameid; 
    642642        } 
     643        //----------------------------------------------------------------------- 
     644        void SceneNode::setId(int id) 
     645        { 
     646                mId = id; 
     647        } 
     648        //----------------------------------------------------------------------- 
     649        int SceneNode::getId(void) 
     650        { 
     651                return mId; 
     652        } 
    643653        #endif //GTP_VISIBILITY_MODIFIED_OGRE 
    644654} 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/include/OgreOctree.h

    r135 r154  
    192192        void _updateBounds(); 
    193193 
     194        /** Sets scene node id  
     195        @param the id 
     196        */ 
     197        void setId(int id); 
     198         
     199        /** see set */ 
     200        int getId(void); 
     201 
    194202protected: 
    195203         
     
    201209        bool mVisible; 
    202210        int mDepth; 
     211        int mId; 
    203212 
    204213#endif // GTP_VISIBILITY_MODIFIED_OGRE 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/include/OgreTerrainRenderable.h

    r131 r154  
    4747 
    4848#define MORPH_CUSTOM_PARAM_ID 77 
     49 
     50#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     51#define MAX_RENDERLEVEL_INDEX 15 
     52#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    4953 
    5054namespace Ogre 
     
    293297        /// Get the static list of indexes cached (internal use only) 
    294298        static TerrainBufferCache& _getIndexCache(void) {return msIndexCache;} 
    295                 // index of renderlevel of current pass 
    296                 static int getCurrentRenderLevelIndex() {return msCurrentRenderLevelIndex;} 
    297                 static void setCurrentRenderLevelIndex(int index) {msCurrentRenderLevelIndex = index;} 
     299 
     300#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     301                // index of renderlevel used for current pass 
     302                static int getCurrentRenderLevelIndex(); 
     303                // returns index of renderlevel 
     304                static void setCurrentRenderLevelIndex(int index); 
     305#endif // GTP_VISIBILITY_MODIFIED_OGRE 
     306 
    298307    protected: 
    299308                // index of renderlevel of current pass 
     
    355364        VertexData* mTerrain; 
    356365 
    357         /// The current LOD level: for multiple passes, up to 10 renderlevels can be saved 
    358         int mRenderLevel[10]; 
     366        /// The current LOD level 
     367#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     368        int mRenderLevel[MAX_RENDERLEVEL_INDEX]; 
     369#else 
     370                int mRenderLevel; 
     371#endif // GTP_VISIBILITY_MODIFIED_OGRE 
     372 
    359373        /// The previous 'next' LOD level down, for frame coherency 
    360374        int mLastNextLevel;  
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/src/OgreOctree.cpp

    r139 r154  
    8888      mHalfSize( 0, 0, 0 ) 
    8989#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    90         , mLastVisited(0), mVisible(false), mLastRendered(-1) 
     90        , mLastVisited(0), mVisible(false), mLastRendered(-1), mId(-1) 
    9191#endif //GTP_VISIBILITY_MODIFIED_OGRE 
    9292{ 
     
    271271        } 
    272272 } 
     273//----------------------------------------------------------------------- 
     274void Octree::setId(int id) 
     275{ 
     276        mId = id; 
     277} 
     278//----------------------------------------------------------------------- 
     279int Octree::getId() 
     280{ 
     281        return mId; 
     282} 
    273283#endif //GTP_VISIBILITY_MODIFIED_OGRE 
    274284} 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/src/OgreOctreeSceneManager.cpp

    r139 r154  
    318318#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    319319        mNumOctreeNodes = 1; 
     320        mOctree->setId(mNumOctreeNodes); 
    320321#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    321322    mMaxDepth = depth; 
     
    468469            octant -> mChildren[ x ][ y ][ z ] = new Octree( octant ); 
    469470#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    470         mNumOctreeNodes ++; 
     471        mOctree->setId(++ mNumOctreeNodes); 
    471472#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    472473 
     
    10321033#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    10331034        mNumOctreeNodes = 1; 
     1035        mOctree->setId(mNumOctreeNodes); 
    10341036#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    10351037    mOctree->mBox = box; 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/src/OgreTerrainRenderable.cpp

    r139 r154  
    5858    bool TerrainRenderable::mLevelInit = false; 
    5959    const TerrainOptions* TerrainRenderable::msOptions = 0; 
     60 
     61#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    6062        int TerrainRenderable::msCurrentRenderLevelIndex = 0; 
     63#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    6164    //----------------------------------------------------------------------- 
    6265    //----------------------------------------------------------------------- 
     
    177180        mInit = true; 
    178181 
    179 //#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    180                 // for up to 10 passes 
    181                 for (int i = 0; i < 10; ++i) 
     182#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     183                for (int i = 0; i < MAX_RENDERLEVEL_INDEX; ++i) 
    182184                { 
    183185                        mRenderLevel[i] = 1; 
    184186                } 
     187#else 
     188                mRenderLevel = 1; 
     189#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    185190 
    186191        mMinLevelDistSqr = new Real[ msOptions->maxGeoMipMapLevel ]; 
     
    330335        if ( mForcedRenderLevel >= 0 ) 
    331336        { 
     337#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    332338            mRenderLevel[msCurrentRenderLevelIndex] = mForcedRenderLevel; 
     339#else 
     340                        mRenderLevel = mForcedRenderLevel; 
     341#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    333342            return ; 
    334343        } 
     
    339348        Real L = diff.squaredLength(); 
    340349 
    341                 mRenderLevel[msCurrentRenderLevelIndex] = -1; 
     350#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     351            mRenderLevel[msCurrentRenderLevelIndex] = -1;; 
     352#else 
     353                        mRenderLevel = -1; 
     354#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    342355 
    343356        for ( int i = 0; i < msOptions->maxGeoMipMapLevel; i++ ) 
     
    345358            if ( mMinLevelDistSqr[ i ] > L ) 
    346359            { 
     360#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    347361                mRenderLevel[msCurrentRenderLevelIndex] = i - 1; 
     362#else 
     363                        mRenderLevel = i - 1; 
     364#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    348365                break; 
    349366            } 
    350367        } 
    351368 
     369#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    352370        if ( getRenderLevel() < 0 ) 
    353371            mRenderLevel[msCurrentRenderLevelIndex] = msOptions->maxGeoMipMapLevel - 1; 
     372#else 
     373                if ( mRenderLevel < 0 ) 
     374            mRenderLevel = msOptions->maxGeoMipMapLevel - 1; 
     375#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    354376 
    355377        if (msOptions->lodMorph) 
    356378        { 
    357379            // Get the next LOD level down 
     380#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    358381            int nextLevel = mNextLevelDown[getRenderLevel()]; 
     382#else 
     383                        int nextLevel = mNextLevelDown; 
     384#endif // GTP_VISIBILITY_MODIFIED_OGRE 
     385             
    359386            if (nextLevel == 0) 
    360387            { 
     
    668695    void TerrainRenderable::_adjustRenderLevel( int i ) 
    669696    { 
    670  
     697#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    671698        mRenderLevel[msCurrentRenderLevelIndex] = i; 
     699#else 
     700                mRenderLevel = i; 
     701#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    672702    } 
    673703    //----------------------------------------------------------------------- 
     
    14691499 
    14701500    } 
    1471  
     1501#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     1502        //----------------------------------------------------------------------- 
     1503        int TerrainRenderable::getCurrentRenderLevelIndex()  
     1504        { 
     1505                return msCurrentRenderLevelIndex; 
     1506        } 
     1507        //----------------------------------------------------------------------- 
     1508        void TerrainRenderable::setCurrentRenderLevelIndex(int index) 
     1509        { 
     1510                if (index > MAX_RENDERLEVEL_INDEX) 
     1511                        index = 0; 
     1512 
     1513                msCurrentRenderLevelIndex = index; 
     1514        } 
     1515#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    14721516 
    14731517} //namespace 
  • trunk/VUT/work/ogre_changes/RenderSystems/Direct3D9/include/OgreD3D9Texture.h

    r153 r154  
    311311 
    312312#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    313                 uchar *getBufferContents(int &dimx, int &dimy) { return NULL; }; 
     313                uchar *getBufferContents(int &dimx, int &dimy) { dimx = dimy = 0; return NULL; }; 
    314314#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    315315 
Note: See TracChangeset for help on using the changeset viewer.