|
@@ -359,6 +359,10 @@ make_slope_image() {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void GeoMipTerrain::
|
|
void GeoMipTerrain::
|
|
|
generate() {
|
|
generate() {
|
|
|
|
|
+ if (_xsize < 3 || _ysize < 3) {
|
|
|
|
|
+ grutil_cat.error() << "No valid heightfield image has been set!\n";
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
calc_levels();
|
|
calc_levels();
|
|
|
_root.node()->remove_all_children();
|
|
_root.node()->remove_all_children();
|
|
|
_blocks.clear();
|
|
_blocks.clear();
|
|
@@ -400,6 +404,10 @@ generate() {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
bool GeoMipTerrain::
|
|
bool GeoMipTerrain::
|
|
|
update() {
|
|
update() {
|
|
|
|
|
+ if (_xsize < 3 || _ysize < 3) {
|
|
|
|
|
+ grutil_cat.error() << "No valid heightfield image has been set!\n";
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
if (_is_dirty) {
|
|
if (_is_dirty) {
|
|
|
generate();
|
|
generate();
|
|
|
return true;
|
|
return true;
|
|
@@ -488,7 +496,7 @@ root_flattened() {
|
|
|
if (total != _root.node()->get_num_children()) {
|
|
if (total != _root.node()->get_num_children()) {
|
|
|
grutil_cat.error() << "GeoMipTerrain: root node unexpectedly mangled: " << total << " vs " << (_root.node()->get_num_children()) << "\n";
|
|
grutil_cat.error() << "GeoMipTerrain: root node unexpectedly mangled: " << total << " vs " << (_root.node()->get_num_children()) << "\n";
|
|
|
return true;
|
|
return true;
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// The default.
|
|
// The default.
|
|
|
return false;
|
|
return false;
|
|
@@ -530,6 +538,7 @@ auto_flatten() {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void GeoMipTerrain::
|
|
void GeoMipTerrain::
|
|
|
calc_levels() {
|
|
calc_levels() {
|
|
|
|
|
+ nassertv(_xsize >= 3 && _ysize >= 3);
|
|
|
_levels.clear();
|
|
_levels.clear();
|
|
|
for (unsigned int mx = 0; mx < (_xsize - 1) / _block_size; mx++) {
|
|
for (unsigned int mx = 0; mx < (_xsize - 1) / _block_size; mx++) {
|
|
|
pvector<unsigned short> tvector; //create temporary row
|
|
pvector<unsigned short> tvector; //create temporary row
|