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 "nvtraverser/GLTraverser.h" 00018 00019 namespace nvtraverser 00020 { 00022 00024 class OcclusionCullGLTraverser : public GLTraverser 00025 { 00026 public: 00028 NVSG_API OcclusionCullGLTraverser(void); 00029 00030 NVSG_API std::vector<GLuint> * getQueries( void ); 00031 #if defined( _DEBUG ) 00032 NVSG_API std::vector<const nvsg::Drawable *> * getDrawables( void ); 00033 #endif 00034 00035 protected: 00037 NVSG_API virtual ~OcclusionCullGLTraverser(void); 00038 00039 NVSG_API virtual bool preTraverseRoot( const nvsg::SimpleCamera *p, const nvsg::Node *root ); 00040 NVSG_API virtual void postTraverseRoot( const nvsg::SimpleCamera *p, const nvsg::Node *root ); 00041 00042 NVSG_API virtual void handleDirectedLight( const nvsg::DirectedLight *p); 00043 NVSG_API virtual void handlePointLight( const nvsg::PointLight *p ); 00044 NVSG_API virtual void handleSpotLight( const nvsg::SpotLight *p ); 00045 00046 NVSG_API virtual void handleQuads( const nvsg::Quads *p ); 00047 NVSG_API virtual void handleAnimatedQuads( const nvsg::AnimatedQuads * p ); 00048 NVSG_API virtual void handleQuadStrips( const nvsg::QuadStrips *p ); 00049 NVSG_API virtual void handleTriangles( const nvsg::Triangles *p ); 00050 NVSG_API virtual void handleAnimatedTriangles( const nvsg::AnimatedTriangles * p ); 00051 NVSG_API virtual void handleSkinnedTriangles( const nvsg::SkinnedTriangles * p ); 00052 NVSG_API virtual void handleTriStrips( const nvsg::TriStrips *p ); 00053 00054 NVSG_API virtual void handleStateSet( const nvsg::StateSet *p ); 00055 NVSG_API virtual void handleCgFx( const nvsg::CgFx *p ); 00056 NVSG_API virtual void handleFaceAttribute( const nvsg::FaceAttribute *p ); 00057 NVSG_API virtual void handleMaterial( const nvsg::Material *p ); 00058 NVSG_API virtual void handleTextureAttribute( const nvsg::TextureAttribute *p ); 00059 NVSG_API virtual void handleTextureAttributeItem( const nvsg::TextureAttributeItem * p, size_t tu ); 00060 00061 NVSG_API virtual void handleJitterCamera( const nvsg::JitterCamera *p, const nvsg::Node *root ); 00062 NVSG_API virtual void handleStereoCamera( const nvsg::StereoCamera *p, const nvsg::Node *root ); 00063 00064 NVSG_API virtual void handleHighlightBox( const nvsg::HighlightBox *p, const nvsg::GeoSet *g ); 00065 NVSG_API virtual void handleHighlightEdges( const nvsg::HighlightEdges *p, const nvsg::GeoSet *geoSet ); 00066 00067 private: 00068 GLuint genQueryId( const nvsg::Drawable *p ); 00069 00070 private: 00071 std::vector<GLuint> m_queries; 00072 #if defined( _DEBUG ) 00073 std::vector<const nvsg::Drawable *> m_drawables; 00074 #endif 00075 }; 00076 00077 inline std::vector<GLuint> * OcclusionCullGLTraverser::getQueries( void ) 00078 { 00079 return( &m_queries ); 00080 } 00081 00082 #if defined( _DEBUG ) 00083 inline std::vector<const nvsg::Drawable *> * OcclusionCullGLTraverser::getDrawables( void ) 00084 { 00085 return( &m_drawables ); 00086 } 00087 #endif 00088 }