Ignore:
Timestamp:
07/06/05 17:52:44 (19 years ago)
Author:
mattausch
Message:

added flags for switching on/off transparents for item buffer and vertex programs for depth pass / item buffer

File:
1 edited

Legend:

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

    r158 r159  
    33#include <OgreStringConverter.h> 
    44#include <vector> 
    5  
     5#include <OgreSubEntity.h> 
    66 
    77namespace Ogre { 
    88//-----------------------------------------------------------------------  
    9 ItemBufferQueryManager::ItemBufferQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp): 
    10 PlatformQueryManager(hierarchyInterface, vp) 
     9ItemBufferQueryManager::ItemBufferQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp, 
     10                                                                                           const bool renderPatches): 
     11PlatformQueryManager(hierarchyInterface, vp), mRenderPatchesForItemBuffer(renderPatches) 
    1112{ 
    1213} 
     
    2122                            InfoContainer<GtpVisibility::NodeInfo> *visibleNodes, 
    2223                            InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry, 
     24                                InfoContainer<GtpVisibility::PatchInfo> *visiblePatches, 
    2325                            bool relativeVisibility) 
    2426{ 
    2527        // initialise item buffer (if not already initialised) 
    26         InitItemBuffer(visibleNodes, visibleGeometry); 
     28        InitItemBuffer(visibleNodes, visibleGeometry, visiblePatches); 
    2729 
    2830        // we need access to the scene manager and the rendersystem 
     
    3234        SceneManager *sm = pfHierarchyInterface->GetSceneManager(); 
    3335 
    34         // ---- Render scene with item buffer (i.e., objects with their id as color codes) 
     36        // --- Render scene with item buffer (i.e., objects with their id as color codes) 
    3537 
    3638        // const_cast allowed because camera is not changed in renderScene 
     
    6163        uchar *buf = mViewport->getTarget()->getBufferContents(dimx, dimy); 
    6264 
     65        int n = mRenderPatchesForItemBuffer ? (int)visiblePatches->size() : (int)visibleGeometry->size(); 
    6366         
    6467        // loop through frame buffer & collect visible pixels 
     
    7174 
    7275                // if valid id <= add visibility (id values start at 1 
    73                 if ((id > 0) && (id < (int)visibleGeometry->size())) 
     76                if ((id > 0) && (id < n)) 
    7477                { 
    75                         ((*visibleGeometry)[id]).AddVisibility(1, 1); 
     78                        if (mRenderPatchesForItemBuffer) 
     79                        { 
     80                                ((*visiblePatches)[id]).AddVisibility(1, 1); 
     81                        } 
     82                        else 
     83                        { 
     84                                ((*visibleGeometry)[id]).AddVisibility(1, 1); 
     85                        } 
    7686                } 
    7787        } 
     
    93103} 
    94104//----------------------------------------------------------------------- 
    95 void ItemBufferQueryManager::InitItemBuffer(InfoContainer<GtpVisibility::NodeInfo> *visibleNodes, 
    96                             InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry) 
     105void ItemBufferQueryManager::InitItemBuffer( 
     106                                InfoContainer<GtpVisibility::NodeInfo> *visibleNodes, 
     107                            InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry, 
     108                                InfoContainer<GtpVisibility::PatchInfo> *visiblePatches) 
    97109{ 
    98110        if (mWasInitialised) 
     
    109121        visibleGeometry->clear(); 
    110122        visibleNodes->clear(); 
     123        visiblePatches->clear(); 
    111124 
     125        int id = 0; 
     126 
     127        /* We can either use patches or meshes. If patches are used, an unique id must 
     128           be given each patch. Otherwise the same id must be given to all patches belonging 
     129           to the same mesh. 
     130    */ 
    112131        while (it.hasMoreElements()) 
    113132        { 
    114                 visibleGeometry->push_back(GtpVisibility::MeshInfo(it.getNext(), 0, 0)); 
     133                Entity *ent = it.getNext(); 
     134 
     135                for (int i = 0; i < (int)ent->getNumSubEntities(); ++i) 
     136                { 
     137                        SubEntity *subEnt = ent->getSubEntity(i); 
     138 
     139                        if (mRenderPatchesForItemBuffer) 
     140                        { 
     141                                ++ id; 
     142                                visiblePatches->push_back(GtpVisibility::PatchInfo(subEnt, 0, 0)); 
     143                        } 
     144                                 
     145                        subEnt->setId(id); 
     146                } 
     147                         
     148                if (!mRenderPatchesForItemBuffer) 
     149                { 
     150                        visibleGeometry->push_back(GtpVisibility::MeshInfo(ent, 0, 0)); 
     151                        ++ id; 
     152                } 
    115153        } 
    116154} 
    117155 
     156/* 
     157//----------------------------------------------------------------------- 
     158Entity* VisibilityOctreeSceneManager::createEntity(const String& entityName,  
     159                                                                                                        const String& meshName) 
     160{ 
     161        Entity *ent = SceneManager::createEntity(entityName, meshName); 
     162 
     163        for (int i = 0; i < (int)ent->getNumSubEntities(); ++i) 
     164        { 
     165                ent->getSubEntity(i)->setId(mCurrentEntityId); 
     166        } 
     167 
     168        // increase counter of entity id values 
     169        ++ mCurrentEntityId; 
     170 
     171        return ent; 
     172} 
     173*/ 
    118174} // namespace Ogre 
Note: See TracChangeset for help on using the changeset viewer.