Ignore:
Timestamp:
08/07/05 16:51:06 (19 years ago)
Author:
mattausch
Message:

stable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r192 r202  
    3131mEnableDepthWrite(true), 
    3232mSkipTransparents(false), 
    33 mSavedShadowTechnique(SHADOWTYPE_NONE), 
    3433mRenderTransparentsForItemBuffer(true), 
    35 mExecuteVertexProgramForAllPasses(true) 
     34mExecuteVertexProgramForAllPasses(true), 
     35mIsHierarchicalCulling(false) 
    3636{ 
    3737        mHierarchyInterface = new OctreeHierarchyInterface(this, mDestRenderSystem); 
     
    319319                mSkipTransparents = false; 
    320320                mLeavePassesInQueue = 0; 
    321                 mShadowTechnique = mSavedShadowTechnique; 
    322321                 
    323322 
     
    640639        mVisibilityManager->GetCullingManager()->InitFrame(mVisualizeCulledNodes); 
    641640 
    642         // save shadow technique. It will be reset after hierarchical culling 
    643         mSavedShadowTechnique = mShadowTechnique; 
    644  
    645         // render standard solids without shadows during hierarchical culling pass 
    646         if ((mShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE) || 
    647             (mShadowTechnique == SHADOWTYPE_STENCIL_MODULATIVE)) 
    648         {        
    649                 mShadowTechnique = SHADOWTYPE_NONE; 
    650         } 
    651  
    652641        // set depth pass flag before rendering 
    653642        mRenderDepthPass = mUseDepthPass; 
     
    666655        mLeavePassesInQueue = 0; 
    667656 
    668         if (!mUseDepthPass || !mUseItemBuffer) 
    669         { 
    670                 if (mSavedShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE) 
     657        if (!mUseDepthPass && !mUseItemBuffer) 
     658        { 
     659                if (mShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE) 
    671660                { 
    672661                        // TODO: remove this pass because it should be processed during hierarchical culling 
    673                         //mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES; 
    674                         mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW; 
     662                        //mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW; 
    675663 
    676664                        mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_DECAL; 
     
    682670                } 
    683671         
    684                 if (mSavedShadowTechnique == SHADOWTYPE_STENCIL_MODULATIVE) 
     672                if (mShadowTechnique == SHADOWTYPE_STENCIL_MODULATIVE) 
    685673                { 
    686674                        mLeavePassesInQueue |= RenderPriorityGroup::SOLID_PASSES_NOSHADOW; 
     
    722710} 
    723711//----------------------------------------------------------------------- 
    724 /*void VisibilityTerrainSceneManager::renderBasicQueueGroupObjects(RenderQueueGroup* pGroup) 
    725 { 
    726     // Basic render loop: Iterate through priorities 
    727     RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator(); 
    728  
    729     while (groupIt.hasMoreElements()) 
    730     { 
    731         RenderPriorityGroup* pPriorityGrp = groupIt.getNext(); 
    732  
    733         // Sort the queue first 
    734         pPriorityGrp->sort(mCameraInProgress); 
    735  
    736                 // Do solids 
    737                 // TODO: render other solid passes for shadows 
    738         renderObjects(pPriorityGrp->_getSolidPassesNoShadows(), true); 
    739  
    740                 // do solid passes no shadows if addititive stencil shadows 
    741                 if (mSavedShadowTechnique == SHADOWTYPE_STENCIL_ADDITIVE) 
    742                         renderObjects(pPriorityGrp->_getSolidPassesNoShadows(), true); 
    743                  
    744         // Do transparents 
    745         renderObjects(pPriorityGrp->_getTransparentPasses(), true); 
    746  
    747  
    748     }// for each priority 
    749 } 
    750 */ 
    751 //----------------------------------------------------------------------- 
    752712Entity* VisibilityTerrainSceneManager::createEntity(const String& entityName,  
    753713                                                                                                        const String& meshName) 
     
    765725        return ent; 
    766726} 
     727//----------------------------------------------------------------------- 
     728void VisibilityTerrainSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup) 
     729{ 
     730        // only render solid passes during hierarchical culling 
     731        if (mIsHierarchicalCulling) 
     732        { 
     733                RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator(); 
     734            LightList lightList; 
     735 
     736                while (groupIt.hasMoreElements()) 
     737                { 
     738                        RenderPriorityGroup* pPriorityGrp = groupIt.getNext(); 
     739 
     740                        // Sort the queue first 
     741                        pPriorityGrp->sort(mCameraInProgress); 
     742 
     743                        // Clear light list 
     744                        lightList.clear(); 
     745 
     746                        // Render all the ambient passes first, no light iteration, no lights 
     747                        mIlluminationStage = IRS_AMBIENT; 
     748 
     749                        OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), false, &lightList); 
     750                        // Also render any objects which have receive shadows disabled 
     751                        OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPassesNoShadow(), true); 
     752                } 
     753        } 
     754        else 
     755        { 
     756                OctreeSceneManager::renderAdditiveStencilShadowedQueueGroupObjects(pGroup); 
     757        } 
     758} 
     759//----------------------------------------------------------------------- 
     760void VisibilityTerrainSceneManager::renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup) 
     761{ 
     762   if (mIsHierarchicalCulling) 
     763   { 
     764           // Iterate through priorities 
     765           RenderQueueGroup::PriorityMapIterator groupIt = pGroup->getIterator(); 
     766 
     767           while (groupIt.hasMoreElements()) 
     768           { 
     769                   RenderPriorityGroup* pPriorityGrp = groupIt.getNext(); 
     770 
     771                   // Sort the queue first 
     772                   pPriorityGrp->sort(mCameraInProgress); 
     773 
     774                   // Do (shadowable) solids 
     775                   OctreeSceneManager::renderObjects(pPriorityGrp->_getSolidPasses(), true); 
     776           } 
     777   } 
     778   else 
     779   { 
     780           SceneManager::renderModulativeStencilShadowedQueueGroupObjects(pGroup); 
     781   } 
     782} 
    767783} // namespace Ogre 
Note: See TracChangeset for help on using the changeset viewer.