Merge pull request #44718 from hoontee/fix-44713

Properly handle empty CSGShapes
This commit is contained in:
Rémi Verschelde 2020-12-27 11:37:36 +01:00 committed by GitHub
commit d55e335026
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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);