// main visibility determination & render queue filling routine // over-ridden from base/default scene manager. This is *the* // main call. void PCZSceneManager::_findVisibleObjects(Camera* cam, VisibleObjectsBoundsInfo* visibleBounds, bool onlyShadowCasters) { // clear the render queue getRenderQueue()->clear(); // if we are re-rendering the scene again with the same camera, we can just use the cache. // this helps post processing compositors. unsigned long frameCount = Root::getSingleton().getNextFrameNumber(); if (mLastActiveCamera == cam && mFrameCount == frameCount) { RenderQueue* queue = getRenderQueue(); size_t count = mVisible.size(); for (size_t i = 0; i < count; ++i) { ((PCZSceneNode*)mVisible[i])->_addToRenderQueue( cam, queue, onlyShadowCasters, visibleBounds); } return; } // increment the visibility frame counter mFrameCount = frameCount; mLastActiveCamera = cam; // clear the list of visible nodes mVisible.clear(); // turn off sky enableSky(false); // remove all extra culling planes ((PCZCamera*)cam)->removeAllExtraCullingPlanes(); // update the camera ((PCZCamera*)cam)->update(); // get the home zone of the camera PCZone* cameraHomeZone = ((PCZSceneNode*)(cam->getParentSceneNode()))->getHomeZone(); // walk the zones, starting from the camera home zone, // adding all visible scene nodes to the mVisibles list cameraHomeZone->setLastVisibleFrame(mFrameCount); cameraHomeZone->findVisibleNodes((PCZCamera*)cam, mVisible, getRenderQueue(), visibleBounds, onlyShadowCasters, mDisplayNodes, mShowBoundingBoxes); }