248 lines
9.8 KiB
Plaintext
248 lines
9.8 KiB
Plaintext
// Filename: cullTraverser.I
|
|
// Created by: drose (23Feb02)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
//
|
|
// All use of this software is subject to the terms of the revised BSD
|
|
// license. You should have received a copy of this license along
|
|
// with this source code in a file named "LICENSE."
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_gsg
|
|
// Access: Published
|
|
// Description: Returns the GraphicsStateGuardian in effect.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE GraphicsStateGuardianBase *CullTraverser::
|
|
get_gsg() const {
|
|
return _gsg;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_current_thread
|
|
// Access: Published
|
|
// Description: Returns the currently-executing thread object, as
|
|
// passed to the CullTraverser constructor.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE Thread *CullTraverser::
|
|
get_current_thread() const {
|
|
return _current_thread;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_scene
|
|
// Access: Published
|
|
// Description: Returns the SceneSetup object.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE SceneSetup *CullTraverser::
|
|
get_scene() const {
|
|
return _scene_setup;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::has_tag_state_key
|
|
// Access: Published
|
|
// Description: Returns true if a nonempty tag state key has been
|
|
// specified for the scene's camera, false otherwise.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CullTraverser::
|
|
has_tag_state_key() const {
|
|
return _has_tag_state_key;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_tag_state_key
|
|
// Access: Published
|
|
// Description: Returns the tag state key that has been specified for
|
|
// the scene's camera, if any.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const string &CullTraverser::
|
|
get_tag_state_key() const {
|
|
return _tag_state_key;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_camera_transform
|
|
// Access: Published
|
|
// Description: Returns the position of the camera relative to the
|
|
// starting node.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const TransformState *CullTraverser::
|
|
get_camera_transform() const {
|
|
return _scene_setup->get_camera_transform();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_world_transform
|
|
// Access: Published
|
|
// Description: Returns the position of the starting node relative
|
|
// to the camera. This is the inverse of the camera
|
|
// transform.
|
|
//
|
|
// Note that this value is always the position of the
|
|
// starting node, not the current node, even if it is
|
|
// sampled during a traversal. To get the transform of
|
|
// the current node use
|
|
// CullTraverserData::get_modelview_transform().
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const TransformState *CullTraverser::
|
|
get_world_transform() const {
|
|
return _scene_setup->get_world_transform();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_initial_state
|
|
// Access: Published
|
|
// Description: Returns the initial RenderState at the top of the
|
|
// scene graph we are traversing, or the empty state if
|
|
// the initial state was never set.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const RenderState *CullTraverser::
|
|
get_initial_state() const {
|
|
return _initial_state;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_depth_offset_decals
|
|
// Access: Published
|
|
// Description: Returns the depth_offset_decals flag. See
|
|
// set_depth_offset_decals().
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CullTraverser::
|
|
get_depth_offset_decals() const {
|
|
return _depth_offset_decals;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_camera_mask
|
|
// Access: Published
|
|
// Description: Changes the visibility mask for the camera viewing
|
|
// the scene. This is normally set automatically
|
|
// at the time setup_scene() is called; you should
|
|
// change this only if you want to render some set of
|
|
// objects different from what the camera normally would
|
|
// draw.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_camera_mask(const DrawMask &camera_mask) {
|
|
_camera_mask = camera_mask;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_camera_mask
|
|
// Access: Published
|
|
// Description: Returns the visibility mask from the camera viewing
|
|
// the scene.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const DrawMask &CullTraverser::
|
|
get_camera_mask() const {
|
|
return _camera_mask;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_view_frustum
|
|
// Access: Published
|
|
// Description: Specifies the bounding volume that corresponds to the
|
|
// view frustum. Any primitives that fall entirely
|
|
// outside of this volume are not drawn.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_view_frustum(GeometricBoundingVolume *view_frustum) {
|
|
_view_frustum = view_frustum;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_view_frustum
|
|
// Access: Published
|
|
// Description: Returns the bounding volume that corresponds to the
|
|
// view frustum, or NULL if the view frustum is not in
|
|
// use or has not been set.
|
|
//
|
|
// Note that the view frustum returned here is always in
|
|
// the coordinate space of the starting node, not the
|
|
// current node, even if it is sampled during a
|
|
// traversal. To get the view frustum in the current
|
|
// node's coordinate space, check in the current
|
|
// CullTraverserData.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE GeometricBoundingVolume *CullTraverser::
|
|
get_view_frustum() const {
|
|
return _view_frustum;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_cull_handler
|
|
// Access: Published
|
|
// Description: Specifies the object that will receive the culled
|
|
// Geoms. This must be set before calling traverse().
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_cull_handler(CullHandler *cull_handler) {
|
|
_cull_handler = cull_handler;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_cull_handler
|
|
// Access: Published
|
|
// Description: Returns the object that will receive the culled
|
|
// Geoms.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE CullHandler *CullTraverser::
|
|
get_cull_handler() const {
|
|
return _cull_handler;
|
|
}
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_portal_clipper
|
|
// Access: Published
|
|
// Description: Specifies _portal_clipper object pointer that
|
|
// subsequent traverse() or traverse_below may use.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_portal_clipper(PortalClipper *portal_clipper) {
|
|
_portal_clipper = portal_clipper;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_portal_clipper
|
|
// Access: Published
|
|
// Description: Returns the _portal_clipper pointer
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE PortalClipper *CullTraverser::
|
|
get_portal_clipper() const {
|
|
return _portal_clipper;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_effective_incomplete_render
|
|
// Access: Published
|
|
// Description: Returns true if the cull traversal is effectively in
|
|
// incomplete_render state, considering both the GSG's
|
|
// incomplete_render and the current DisplayRegion's
|
|
// incomplete_render flags. This returns the flag
|
|
// during the cull traversal; see
|
|
// GSG::get_effective_incomplete_render() for this same
|
|
// flag during the draw traversal.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CullTraverser::
|
|
get_effective_incomplete_render() const {
|
|
return _effective_incomplete_render;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::flush_level
|
|
// Access: Published, Static
|
|
// Description: Flushes the PStatCollectors used during traversal.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
flush_level() {
|
|
_nodes_pcollector.flush_level();
|
|
_geom_nodes_pcollector.flush_level();
|
|
_geoms_pcollector.flush_level();
|
|
_geoms_occluded_pcollector.flush_level();
|
|
}
|