mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -04:00
limit cost of test_vref_integrity()
This commit is contained in:
parent
66b5af633b
commit
326da19431
@ -144,6 +144,12 @@ ConfigVariableDouble egg_coplanar_threshold
|
|||||||
PRC_DESC("The numerical threshold below which polygons are considered "
|
PRC_DESC("The numerical threshold below which polygons are considered "
|
||||||
"to be coplanar. Determined empirically."));
|
"to be coplanar. Determined empirically."));
|
||||||
|
|
||||||
|
ConfigVariableInt egg_test_vref_integrity
|
||||||
|
("egg-test-vref-integrity", 20,
|
||||||
|
PRC_DESC("The maximum number of vertices a primitive may have before "
|
||||||
|
"its vertices will no longer be checked for internal integrity. "
|
||||||
|
"This is meaningful in non-production builds only."));
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: init_libegg
|
// Function: init_libegg
|
||||||
// Description: Initializes the library. This must be called at
|
// Description: Initializes the library. This must be called at
|
||||||
|
@ -39,6 +39,7 @@ extern EXPCL_PANDAEGG ConfigVariableBool egg_consider_fans;
|
|||||||
extern EXPCL_PANDAEGG ConfigVariableDouble egg_max_tfan_angle;
|
extern EXPCL_PANDAEGG ConfigVariableDouble egg_max_tfan_angle;
|
||||||
extern EXPCL_PANDAEGG ConfigVariableInt egg_min_tfan_tris;
|
extern EXPCL_PANDAEGG ConfigVariableInt egg_min_tfan_tris;
|
||||||
extern EXPCL_PANDAEGG ConfigVariableDouble egg_coplanar_threshold;
|
extern EXPCL_PANDAEGG ConfigVariableDouble egg_coplanar_threshold;
|
||||||
|
extern EXPCL_PANDAEGG ConfigVariableInt egg_test_vref_integrity;
|
||||||
|
|
||||||
extern EXPCL_PANDAEGG void init_libegg();
|
extern EXPCL_PANDAEGG void init_libegg();
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "eggMiscFuncs.h"
|
#include "eggMiscFuncs.h"
|
||||||
#include "eggTextureCollection.h"
|
#include "eggTextureCollection.h"
|
||||||
#include "lexerDefs.h"
|
#include "lexerDefs.h"
|
||||||
|
#include "config_egg.h"
|
||||||
|
|
||||||
#include "indent.h"
|
#include "indent.h"
|
||||||
#include "vector_int.h"
|
#include "vector_int.h"
|
||||||
@ -813,37 +814,39 @@ copy_vertices(const EggPrimitive &other) {
|
|||||||
void EggPrimitive::
|
void EggPrimitive::
|
||||||
test_vref_integrity() const {
|
test_vref_integrity() const {
|
||||||
test_ref_count_integrity();
|
test_ref_count_integrity();
|
||||||
|
|
||||||
// First, we need to know how many times each vertex appears.
|
if ((int)size() <= egg_test_vref_integrity) {
|
||||||
// Usually, this will be only one, but it's possible for a vertex to
|
// First, we need to know how many times each vertex appears.
|
||||||
// appear more than once.
|
// Usually, this will be only one, but it's possible for a vertex to
|
||||||
typedef pmap<const EggVertex *, int> VertexCount;
|
// appear more than once.
|
||||||
VertexCount _count;
|
typedef pmap<const EggVertex *, int> VertexCount;
|
||||||
|
VertexCount _count;
|
||||||
// Now count up the vertices.
|
|
||||||
iterator vi;
|
// Now count up the vertices.
|
||||||
for (vi = begin(); vi != end(); ++vi) {
|
iterator vi;
|
||||||
const EggVertex *vert = *vi;
|
for (vi = begin(); vi != end(); ++vi) {
|
||||||
vert->test_ref_count_integrity();
|
const EggVertex *vert = *vi;
|
||||||
|
vert->test_ref_count_integrity();
|
||||||
VertexCount::iterator vci = _count.find(vert);
|
|
||||||
if (vci == _count.end()) {
|
VertexCount::iterator vci = _count.find(vert);
|
||||||
_count[vert] = 1;
|
if (vci == _count.end()) {
|
||||||
} else {
|
_count[vert] = 1;
|
||||||
(*vci).second++;
|
} else {
|
||||||
|
(*vci).second++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ok, now walk through the vertices found and make sure the vertex
|
||||||
|
// has the proper number of entries of this primitive in its pref.
|
||||||
|
VertexCount::iterator vci;
|
||||||
|
for (vci = _count.begin(); vci != _count.end(); ++vci) {
|
||||||
|
const EggVertex *vert = (*vci).first;
|
||||||
|
|
||||||
|
int count = (*vci).second;
|
||||||
|
int vert_count = vert->has_pref(this);
|
||||||
|
|
||||||
|
nassertv(count == vert_count);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Ok, now walk through the vertices found and make sure the vertex
|
|
||||||
// has the proper number of entries of this primitive in its pref.
|
|
||||||
VertexCount::iterator vci;
|
|
||||||
for (vci = _count.begin(); vci != _count.end(); ++vci) {
|
|
||||||
const EggVertex *vert = (*vci).first;
|
|
||||||
|
|
||||||
int count = (*vci).second;
|
|
||||||
int vert_count = vert->has_pref(this);
|
|
||||||
|
|
||||||
nassertv(count == vert_count);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user