Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

Scene.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
00011 
00012 #pragma once
00013 
00015 #include "nvsgcommon.h"
00016 
00017 #include "nvsg/Animation.h"
00018 #include "nvsg/Camera.h"
00019 #include "nvsg/Node.h"
00020 
00021 namespace nvmath
00022 {
00023   class Trafo;
00024 }
00025 namespace nvsg
00026 {
00027   class StateSet;
00028 }
00029 
00030 namespace nvsg
00031 {
00033   class Scene : public nvutil::RCObject
00034               , public nvutil::ISWMRSync
00035   {
00036     public:
00038 
00039       NVSG_API static const Scene * create( void );
00040       
00042       NVSG_API void setBackColor( const nvmath::Vec3f &color    
00043                                 );
00044 
00046       NVSG_API const nvmath::Vec3f & getBackColor( void )  const;
00047 
00049 
00051       NVSG_API void addCamera( const Camera * pCamera   
00052                              );
00053 
00055       NVSG_API void removeCamera( size_t index 
00056                                 );
00057 
00059 
00060       NVSG_API const Camera * getCamera( size_t index = 0   
00061                                  ) const;
00062 
00064 
00066       NVSG_API size_t getNumberOfCameras( void ) const;
00067 
00069 
00072       NVSG_API size_t getNumberOfCameraAnimations( void ) const;
00073 
00075 
00077       NVSG_API void addCameraAnimation( const Animation<nvmath::Trafo> * pAnimation   
00078                                       );
00079 
00081 
00082       NVSG_API const Animation<nvmath::Trafo> * getCameraAnimation( size_t index = 0    
00083                                                                   ) const;
00084 
00086       NVSG_API void removeCameraAnimation( size_t index 
00087                                          );
00088 
00090 
00092       NVSG_API size_t getNumberOfFrames( void ) const;
00093 
00095 
00096       NVSG_API void setRootNode( const Node * root    
00097                                );
00098 
00100 
00101       NVSG_API const Node * getRootNode( void ) const;
00102 
00104 
00107       NVSG_API void setDefaultStateSet( const StateSet * pStateSet   
00108                                       );
00109 
00111 
00113       NVSG_API const StateSet * getDefaultStateSet( void ) const;
00114 
00116 
00118       NVSG_API void setOverrideStateSet( const StateSet * pStateSet   
00119                                        );
00120 
00122 
00124       NVSG_API const StateSet * getOverrideStateSet( void ) const;
00125 
00127 
00128       NVSG_API bool containsCgFx( void ) const;
00129 
00131 
00132       NVSG_API bool containsLight( void ) const;
00133 
00135 
00136       NVSG_API bool containsTransparentMaterial( void ) const;
00137 
00139 
00140       NVSG_API bool containsTransparentTexture( void ) const;
00141 
00143 
00149       NVSG_API bool waitToRead( size_t milliseconds = 0xFFFFFFFF //<! Time-out interval, in miliseconds. 
00150                               ) const;
00151 
00153 
00155       NVSG_API void doneReading( void ) const;
00156       
00158 
00164       NVSG_API bool waitToWrite( size_t milliseconds = 0xFFFFFFFF 
00165                                ) const;
00166       
00168 
00170       NVSG_API void doneWriting( void ) const;
00171 
00172     protected:
00174       NVSG_API Scene( void );
00175 
00177       NVSG_API virtual ~Scene( void );
00178 
00179     private:
00180       nvmath::Vec3f                                   m_backColor;
00181       std::vector<const Camera *>                     m_cameras;              
00182       std::vector<const Animation<nvmath::Trafo>*>    m_cameraAnimations;     
00183       const StateSet                                * m_defaultStateSet;      
00184       const StateSet                                * m_overrideStateSet;     
00185       const Node                                    * m_root;                 
00186 
00187       nvutil::SWMRSync            m_lock;
00188   };
00189 
00190   inline void Scene::addCamera( const Camera *pCamera )
00191   {
00192     __TRACE();
00193     m_cameras.push_back( pCamera );
00194     pCamera->addRef();
00195   }
00196 
00197   inline void Scene::removeCamera( size_t index )
00198   {
00199     __TRACE();
00200     __ASSERT(index < m_cameras.size());
00201 
00202     m_cameras[index]->removeRef();
00203     m_cameras.erase(m_cameras.begin()+index);
00204   }
00205 
00206   inline void Scene::addCameraAnimation( const Animation<nvmath::Trafo> *pAnimation )
00207   {
00208     __TRACE();
00209     m_cameraAnimations.push_back( pAnimation );
00210     pAnimation->addRef();
00211   }
00212 
00213   inline void Scene::removeCameraAnimation( size_t index )
00214   {
00215     __TRACE();
00216     __ASSERT(index < m_cameraAnimations.size());
00217 
00218     m_cameraAnimations[index]->removeRef();
00219     m_cameraAnimations.erase(m_cameraAnimations.begin()+index);
00220   }
00221 
00222   inline const Camera * Scene::getCamera( size_t index ) const
00223   {
00224     __TRACE();
00225     return( ( index < m_cameras.size() ) ? m_cameras[index] : NULL );
00226   }
00227 
00228   inline const Animation<nvmath::Trafo> * Scene::getCameraAnimation( size_t index ) const
00229   {
00230     __TRACE();
00231     return( ( index < m_cameraAnimations.size() ) ? m_cameraAnimations[index] : NULL );
00232   }
00233 
00234   inline const StateSet  * Scene::getDefaultStateSet( void ) const
00235   {
00236     __TRACE();
00237     return( m_defaultStateSet );
00238   }
00239 
00240   inline const StateSet * Scene::getOverrideStateSet( void ) const
00241   {
00242     __TRACE();
00243     return( m_overrideStateSet );
00244   }
00245 
00246   inline size_t Scene::getNumberOfCameras( void ) const
00247   {
00248     __TRACE();
00249     return( m_cameras.size() );
00250   }
00251 
00252   inline size_t Scene::getNumberOfCameraAnimations( void ) const
00253   {
00254     __TRACE();
00255     return( m_cameraAnimations.size() );
00256   }
00257 
00258   inline const Node * Scene::getRootNode( void ) const
00259   {
00260     __TRACE();
00261     return( m_root );
00262   }
00263 
00264   inline size_t Scene::getNumberOfFrames( void ) const
00265   {
00266     __TRACE();
00267     __ASSERT( m_root );
00268     size_t nof = m_root->getNumberOfFrames();
00269     for ( size_t i=0 ; !nof && i<m_cameraAnimations.size() ; i++ )
00270     {
00271       nof = m_cameraAnimations[i]->getNumberOfFrames();
00272     }
00273 
00274 #if defined( _DEBUG )
00275     for ( size_t i=0 ; i<m_cameraAnimations.size() ; i++ )
00276     {
00277       size_t nofca = m_cameraAnimations[i]->getNumberOfFrames();
00278       __ASSERT( ( nofca == 0 ) || ( nofca == nof ) );
00279     }
00280 #endif
00281 
00282     return( nof );
00283   }
00284 
00285   inline bool Scene::containsCgFx( void ) const
00286   {
00287     __TRACE();
00288     return( m_root->containsCgFx() );
00289   }
00290 
00291   inline bool Scene::containsLight( void ) const
00292   {
00293     __TRACE();
00294     return( m_root->containsLight() );
00295   }
00296 
00297   inline bool Scene::containsTransparentMaterial( void ) const
00298   {
00299     __TRACE();
00300     return( m_root->containsTransparentMaterial() );
00301   }
00302 
00303   inline bool Scene::containsTransparentTexture( void ) const
00304   {
00305     __TRACE();
00306     return( m_root->containsTransparentTexture() );
00307   }
00308 
00309   inline const nvmath::Vec3f& Scene::getBackColor( void ) const
00310   {
00311     __TRACE();
00312     return( m_backColor );
00313   }
00314 
00315   inline void Scene::setBackColor( const nvmath::Vec3f &color )
00316   {
00317     __TRACE();
00318     m_backColor = color;
00319   }
00320 
00321   inline bool Scene::waitToRead( size_t milliseconds ) const
00322   {
00323     __TRACE();
00324     size_t status;
00325     return m_lock.waitToRead(milliseconds, status);
00326   }
00327 
00328   inline void Scene::doneReading( void ) const
00329   {
00330     __TRACE();
00331     m_lock.doneReading();
00332   }
00333 
00334   inline bool Scene::waitToWrite( size_t milliseconds ) const
00335   {
00336     __TRACE();
00337     size_t status;
00338     return m_lock.waitToWrite(milliseconds, status);
00339   }
00340 
00341   inline void Scene::doneWriting( void ) const
00342   {
00343     __TRACE();
00344     m_lock.doneWriting();
00345   }
00346 } //  namspace nvsg

Generated on Tue Mar 1 13:19:20 2005 for NVSGSDK by NVIDIA