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

RenderArea.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/Scene.h"
00018 #include "nvsg/ViewState.h"
00019 #include "nvtraverser/AppTraverser.h"
00020 #include "nvtraverser/CullTraverser.h"
00021 #include "nvtraverser/RenderTraverser.h"
00022 #include "nvui/CameraManipulator.h"
00023 
00024 #include <vector>
00025 
00026 namespace nvui
00027 {    
00029 
00033   class RenderArea
00034   {
00035     public:
00036  
00038       NVSG_API virtual ~RenderArea(void);
00039 
00041 
00043       NVSG_API virtual bool init( RenderArea * shareArea = NULL  
00044                                 );  
00045 
00047 
00048       NVSG_API virtual void destroy( void );
00049 
00051 
00052       NVSG_API virtual void keyDown( UINT key  
00053                                    , bool keyRepeated = false
00054                                    );
00056 
00057       NVSG_API virtual void keyUp( UINT key   
00058                                  );
00059 
00061 
00062       NVSG_API virtual void resetKeyState( void );
00063 
00065 
00066       NVSG_API virtual void mouseButtonDown( UINT btn    
00067                                            , int x       
00068                                            , int y       
00069                                            );
00071 
00072       NVSG_API virtual void mouseButtonUp( UINT btn    
00073                                          , int x       
00074                                          , int y       
00075                                          );
00077 
00078       NVSG_API virtual void resetButtonState( void );
00079 
00081 
00082       NVSG_API virtual void mouseMotion( int x  
00083                                        , int y  
00084                                        );
00085     
00087 
00090       NVSG_API virtual void renderScene( void );  
00091 
00093 
00095       NVSG_API virtual void setViewportSize( size_t width   
00096                                            , size_t height  
00097                                            );
00098 
00100 
00106       NVSG_API bool pickCameraTargetPoint( int x  
00107                                          , int y  
00108                                          );
00109 
00111 
00114       NVSG_API nvtraverser::RenderTraverser * getRenderTraverser( void ) const;
00115       
00117 
00121       NVSG_API void setRenderTraverser( nvtraverser::RenderTraverser * tr   
00122                              );
00123       
00125 
00127       NVSG_API void setAppTraverser( nvtraverser::AppTraverser * tr   
00128                                    );
00129 
00131 
00132       NVSG_API nvtraverser::AppTraverser * getAppTraverser() const;
00133 
00135 
00140       NVSG_API void pushCullTraverser( nvtraverser::CullTraverser * tr       
00141                                      );
00142 
00144 
00146       NVSG_API void popCullTraverser();
00147       
00149 
00150       NVSG_API size_t getNumberOfCullTraverser() const;
00151 
00153 
00157       NVSG_API nvtraverser::CullTraverser * getCullTraverser(size_t position) const;
00158 
00160 
00161       NVSG_API const nvsg::ViewState * getViewState( void ) const;
00162             
00164 
00166       NVSG_API void setViewState( const nvsg::ViewState * viewState );
00167       
00169 
00171       NVSG_API float getAspectRatio( void ) const;
00172 
00174 
00176       NVSG_API bool isStereoAvailable( void );
00177       
00179 
00180       NVSG_API void requestFSAA( bool bOn                  
00181                                , unsigned int numBuffers   
00182                                );
00184 
00185       NVSG_API void requestStereoSupport( bool bStereo     
00186                                         );
00187 
00189 
00202       NVSG_API void setSceneData( nvui::CameraManipulator * pCamManip  
00203                                 , const nvsg::Scene * pScene           
00204                                 , const nvsg::ViewState * pViewState = NULL  
00206                                 );  
00207 
00208       NVSG_API static size_t createNewRenderAreaID();
00209       
00211 
00213       NVSG_API virtual void triggerRedraw( void );                
00214 
00215     protected:
00217       NVSG_API RenderArea(void);
00218       
00220       enum
00221       { _UNDEFINED    = 0x00000000  
00222       , _STEREO       = 0x00000001  
00223       , _MULTISAMPLE  = 0x00000002  
00224       };
00225 
00226       std::vector<nvtraverser::CullTraverser *>  m_cullTraverser;    
00227       nvtraverser::RenderTraverser             * m_renderTraverser;  
00228       nvtraverser::AppTraverser                * m_appTraverser;     
00229 
00230       CameraManipulator * m_camManip;         
00231             
00232       
00233       const nvsg::Scene * m_scene;            
00234       const nvsg::ViewState * m_viewState;        
00235 
00236       unsigned long       m_features;         
00237       UINT                m_numMSBuffers;     
00238       bool                m_raCreated;        
00239       size_t              m_raHeight;         
00240       size_t              m_raWidth;          
00241  
00242       static size_t       m_idRenderArea;     
00243 
00244 
00245 
00246   };
00247 
00248   // - - - - - - - - - - - - - - - - - - - - - - - - - - - 
00249   // inlines 
00250   // - - - - - - - - - - - - - - - - - - - - - - - - - - - 
00251 
00252   inline float RenderArea::getAspectRatio( void ) const
00253   {
00254     __ASSERT( m_raHeight > 0 && m_raWidth > 0 );
00255 
00256     if (m_raHeight > 0 && m_raWidth > 0)
00257     {
00258       return( (float) m_raWidth / m_raHeight );
00259     }
00260     
00261     return 0.f; // error
00262   }
00263 
00264   inline const nvsg::ViewState * RenderArea::getViewState( void ) const
00265   {
00266     return( m_viewState );
00267   }
00268 
00269   inline void RenderArea::triggerRedraw()
00270   {    
00271     if (m_camManip)
00272     {
00273       m_camManip->apply();
00274     }    
00275   }
00276 
00277   inline nvtraverser::RenderTraverser * RenderArea::getRenderTraverser( void ) const
00278   {
00279     return( m_renderTraverser );
00280   }
00281 
00282   inline void RenderArea::setRenderTraverser( nvtraverser::RenderTraverser * tr )
00283   {
00284     if (m_renderTraverser)
00285     {
00286       m_renderTraverser->removeRef();
00287     }
00288 
00289     m_renderTraverser = tr;
00290     
00291     if (m_renderTraverser)
00292     {
00293       m_renderTraverser->addRef();
00294     }
00295   }
00296 
00297   inline void RenderArea::setAppTraverser(nvtraverser::AppTraverser * tr)
00298   {
00299     if (m_appTraverser)
00300     {
00301       m_appTraverser->removeRef();
00302     }
00303 
00304     m_appTraverser = tr;
00305 
00306     if (m_appTraverser)
00307     {
00308       m_appTraverser->addRef();
00309     }
00310   }
00311 
00312   inline nvtraverser::AppTraverser * RenderArea::getAppTraverser() const
00313   {
00314     return m_appTraverser;
00315   }
00316 
00317   inline void RenderArea::pushCullTraverser(nvtraverser::CullTraverser * tr)
00318   {
00319     __ASSERT(tr);
00320 
00321     m_cullTraverser.push_back(tr);
00322     tr->addRef();
00323   }
00324 
00325   inline void RenderArea::popCullTraverser()
00326   {
00327     __ASSERT(!m_cullTraverser.empty());
00328 
00329     m_cullTraverser.back()->removeRef();
00330     m_cullTraverser.pop_back();
00331   }
00332   
00333   inline size_t RenderArea::getNumberOfCullTraverser() const
00334   {
00335     return m_cullTraverser.size();
00336   }
00337 
00338   inline nvtraverser::CullTraverser * RenderArea::getCullTraverser(size_t position) const
00339   {
00340     __ASSERT(m_cullTraverser.size() > position);
00341 
00342     return m_cullTraverser[position];
00343   }
00344 
00345   inline size_t RenderArea::createNewRenderAreaID()
00346   {
00347     return (++m_idRenderArea);
00348   }
00349 
00350 } //  namespace nvui

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