Merge pull request #44718 from hoontee/fix-44713
Properly handle empty CSGShapes
This commit is contained in:
commit
d55e335026
1 changed files with 11 additions and 11 deletions
|
@ -701,7 +701,7 @@ CSGPrimitive3D::CSGPrimitive3D() {
|
||||||
|
|
||||||
CSGBrush *CSGMesh3D::_build_brush() {
|
CSGBrush *CSGMesh3D::_build_brush() {
|
||||||
if (!mesh.is_valid()) {
|
if (!mesh.is_valid()) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Vector3> vertices;
|
Vector<Vector3> vertices;
|
||||||
|
@ -719,7 +719,7 @@ CSGBrush *CSGMesh3D::_build_brush() {
|
||||||
|
|
||||||
if (arrays.size() == 0) {
|
if (arrays.size() == 0) {
|
||||||
_make_dirty();
|
_make_dirty();
|
||||||
ERR_FAIL_COND_V(arrays.size() == 0, nullptr);
|
ERR_FAIL_COND_V(arrays.size() == 0, memnew(CSGBrush));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Vector3> avertices = arrays[Mesh::ARRAY_VERTEX];
|
Vector<Vector3> avertices = arrays[Mesh::ARRAY_VERTEX];
|
||||||
|
@ -840,7 +840,7 @@ CSGBrush *CSGMesh3D::_build_brush() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vertices.size() == 0) {
|
if (vertices.size() == 0) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _create_brush_from_arrays(vertices, uvs, smooth, materials);
|
return _create_brush_from_arrays(vertices, uvs, smooth, materials);
|
||||||
|
@ -1502,7 +1502,7 @@ CSGBrush *CSGTorus3D::_build_brush() {
|
||||||
float max_radius = outer_radius;
|
float max_radius = outer_radius;
|
||||||
|
|
||||||
if (min_radius == max_radius) {
|
if (min_radius == max_radius) {
|
||||||
return nullptr; //sorry, can't
|
return memnew(CSGBrush); //sorry, can't
|
||||||
}
|
}
|
||||||
|
|
||||||
if (min_radius > max_radius) {
|
if (min_radius > max_radius) {
|
||||||
|
@ -1721,7 +1721,7 @@ CSGBrush *CSGPolygon3D::_build_brush() {
|
||||||
// set our bounding box
|
// set our bounding box
|
||||||
|
|
||||||
if (polygon.size() < 3) {
|
if (polygon.size() < 3) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<Point2> final_polygon = polygon;
|
Vector<Point2> final_polygon = polygon;
|
||||||
|
@ -1733,7 +1733,7 @@ CSGBrush *CSGPolygon3D::_build_brush() {
|
||||||
Vector<int> triangles = Geometry2D::triangulate_polygon(final_polygon);
|
Vector<int> triangles = Geometry2D::triangulate_polygon(final_polygon);
|
||||||
|
|
||||||
if (triangles.size() < 3) {
|
if (triangles.size() < 3) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
Path3D *path = nullptr;
|
Path3D *path = nullptr;
|
||||||
|
@ -1767,15 +1767,15 @@ CSGBrush *CSGPolygon3D::_build_brush() {
|
||||||
|
|
||||||
if (mode == MODE_PATH) {
|
if (mode == MODE_PATH) {
|
||||||
if (!has_node(path_node)) {
|
if (!has_node(path_node)) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
Node *n = get_node(path_node);
|
Node *n = get_node(path_node);
|
||||||
if (!n) {
|
if (!n) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
path = Object::cast_to<Path3D>(n);
|
path = Object::cast_to<Path3D>(n);
|
||||||
if (!path) {
|
if (!path) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path != path_cache) {
|
if (path != path_cache) {
|
||||||
|
@ -1793,10 +1793,10 @@ CSGBrush *CSGPolygon3D::_build_brush() {
|
||||||
}
|
}
|
||||||
curve = path->get_curve();
|
curve = path->get_curve();
|
||||||
if (curve.is_null()) {
|
if (curve.is_null()) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
if (curve->get_baked_length() <= 0) {
|
if (curve->get_baked_length() <= 0) {
|
||||||
return nullptr;
|
return memnew(CSGBrush);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CSGBrush *brush = memnew(CSGBrush);
|
CSGBrush *brush = memnew(CSGBrush);
|
||||||
|
|
Loading…
Reference in a new issue