tentative lod scale support

This commit is contained in:
Zachary Pavlov 2010-02-19 02:32:05 +00:00
parent f4e55629fa
commit 34a80d821b
3 changed files with 36 additions and 3 deletions

View File

@ -119,6 +119,30 @@ get_num_switches() const {
return cdata->_switch_vector.size(); return cdata->_switch_vector.size();
} }
////////////////////////////////////////////////////////////////////
// Function: LODNode::get_lod_scale
// Access: Published
// Description: Returns the multiplier for lod distances
////////////////////////////////////////////////////////////////////
INLINE float LODNode::
get_lod_scale() const {
CDReader cdata(_cycler);
return cdata->_lod_scale;
}
////////////////////////////////////////////////////////////////////
// Function: LODNode::set_lod_scale
// Access: Published
// Description: Sets the multiplier for lod distances. A higher
// value means you'll see farther switchs than normal
////////////////////////////////////////////////////////////////////
INLINE void LODNode::
set_lod_scale(float value) {
CDWriter cdata(_cycler);
cdata->_lod_scale = value;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: LODNode::get_in // Function: LODNode::get_in
// Access: Published // Access: Published
@ -274,7 +298,8 @@ CData() :
_highest(0), _highest(0),
_got_force_switch(false), _got_force_switch(false),
_force_switch(0), _force_switch(0),
_num_shown(0) _num_shown(0),
_lod_scale(1)
{ {
} }
@ -292,7 +317,8 @@ CData(const LODNode::CData &copy) :
_bounds_seq(UpdateSeq::old()), _bounds_seq(UpdateSeq::old()),
_got_force_switch(copy._got_force_switch), _got_force_switch(copy._got_force_switch),
_force_switch(copy._force_switch), _force_switch(copy._force_switch),
_num_shown(copy._num_shown) _num_shown(copy._num_shown),
_lod_scale(copy._lod_scale)
{ {
} }

View File

@ -176,7 +176,7 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) {
if (cdata->_got_force_switch) { if (cdata->_got_force_switch) {
in_range = (cdata->_force_switch == index); in_range = (cdata->_force_switch == index);
} else { } else {
in_range = sw.in_range_2(dist2); in_range = sw.in_range_2(dist2*cdata->_lod_scale);
} }
if (in_range) { if (in_range) {

View File

@ -69,6 +69,12 @@ PUBLISHED:
INLINE void force_switch(int index); INLINE void force_switch(int index);
INLINE void clear_force_switch(); INLINE void clear_force_switch();
//for performance tuning, increasing this value should improve performance
//at the cost of model quality
INLINE void set_lod_scale(float value);
INLINE float get_lod_scale() const;
INLINE void set_center(const LPoint3f &center); INLINE void set_center(const LPoint3f &center);
INLINE const LPoint3f &get_center() const; INLINE const LPoint3f &get_center() const;
@ -173,6 +179,7 @@ private:
bool _got_force_switch; bool _got_force_switch;
int _force_switch; int _force_switch;
int _num_shown; int _num_shown;
float _lod_scale;
}; };
PipelineCycler<CData> _cycler; PipelineCycler<CData> _cycler;