diff --git a/panda/src/pgraph/camera.I b/panda/src/pgraph/camera.I index bdebaaa440..a1d5cc1f58 100644 --- a/panda/src/pgraph/camera.I +++ b/panda/src/pgraph/camera.I @@ -250,3 +250,24 @@ INLINE const string &Camera:: get_tag_state_key() const { return _tag_state_key; } + +//////////////////////////////////////////////////////////////////// +// Function: Camera::get_lod_scale +// Access: Published +// Description: Returns the multiplier for LOD distances. +//////////////////////////////////////////////////////////////////// +INLINE PN_stdfloat Camera:: +get_lod_scale() const { + return _lod_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function: Camera::set_lod_scale +// Access: Published +// Description: Sets the multiplier for LOD distances. This value +// is multiplied with the LOD scale set on LodNodes. +//////////////////////////////////////////////////////////////////// +INLINE void Camera:: +set_lod_scale(PN_stdfloat value) { + _lod_scale = value; +} diff --git a/panda/src/pgraph/camera.cxx b/panda/src/pgraph/camera.cxx index dae3ee3a89..bca3b7f047 100644 --- a/panda/src/pgraph/camera.cxx +++ b/panda/src/pgraph/camera.cxx @@ -31,6 +31,7 @@ Camera(const string &name, Lens *lens) : _camera_mask(~PandaNode::get_overall_bit()), _initial_state(RenderState::make_empty()) { + set_lod_scale(1.0); } //////////////////////////////////////////////////////////////////// @@ -45,6 +46,7 @@ Camera(const Camera ©) : _scene(copy._scene), _camera_mask(copy._camera_mask), _initial_state(copy._initial_state), + _lod_scale(copy._lod_scale), _tag_state_key(copy._tag_state_key), _tag_states(copy._tag_states) { diff --git a/panda/src/pgraph/camera.h b/panda/src/pgraph/camera.h index c7fb73f732..54c0eeb945 100644 --- a/panda/src/pgraph/camera.h +++ b/panda/src/pgraph/camera.h @@ -75,6 +75,9 @@ PUBLISHED: INLINE void set_tag_state_key(const string &tag_state_key); INLINE const string &get_tag_state_key() const; + INLINE void set_lod_scale(PN_stdfloat value); + INLINE PN_stdfloat get_lod_scale() const; + void set_tag_state(const string &tag_state, const RenderState *state); void clear_tag_state(const string &tag_state); bool has_tag_state(const string &tag_state) const; @@ -97,6 +100,7 @@ private: NodePath _lod_center; DrawMask _camera_mask; + PN_stdfloat _lod_scale; typedef pvector DisplayRegions; DisplayRegions _display_regions; diff --git a/panda/src/pgraphnodes/lodNode.cxx b/panda/src/pgraphnodes/lodNode.cxx index 4d0b551c25..278a63c20b 100644 --- a/panda/src/pgraphnodes/lodNode.cxx +++ b/panda/src/pgraphnodes/lodNode.cxx @@ -177,7 +177,8 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) { if (cdata->_got_force_switch) { in_range = (cdata->_force_switch == index); } else { - in_range = sw.in_range_2(dist2*cdata->_lod_scale); + in_range = sw.in_range_2(dist2 * cdata->_lod_scale + * trav->get_scene()->get_camera_node()->get_lod_scale()); } if (in_range) { @@ -376,7 +377,8 @@ compute_child(CullTraverser *trav, CullTraverserData &data) { PN_stdfloat dist2 = center.dot(center); for (int index = 0; index < (int)cdata->_switch_vector.size(); ++index) { - if (cdata->_switch_vector[index].in_range_2(dist2*cdata->_lod_scale)) { + if (cdata->_switch_vector[index].in_range_2(dist2 * cdata->_lod_scale + * trav->get_scene()->get_camera_node()->get_lod_scale())) { if (pgraph_cat.is_debug()) { pgraph_cat.debug() << data._node_path << " at distance " << sqrt(dist2)