Skip to content

Commit

Permalink
Remove copy and use instance material override in gizmos, fixes #23783
Browse files Browse the repository at this point in the history
  • Loading branch information
reduz committed Feb 23, 2019
1 parent 6cd4006 commit bfa9be8
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
3 changes: 2 additions & 1 deletion editor/plugins/spatial_editor_plugin.h
Expand Up @@ -60,6 +60,7 @@ class EditorSpatialGizmo : public SpatialGizmo {

RID instance;
Ref<ArrayMesh> mesh;
Ref<Material> material;
RID skeleton;
bool billboard;
bool unscaled;
Expand Down Expand Up @@ -103,7 +104,7 @@ class EditorSpatialGizmo : public SpatialGizmo {

public:
void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false);
void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const RID &p_skeleton = RID());
void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const RID &p_skeleton = RID(), const Ref<Material> &p_material = Ref<Material>());
void add_collision_segments(const Vector<Vector3> &p_lines);
void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh);
void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1);
Expand Down
11 changes: 7 additions & 4 deletions editor/spatial_editor_gizmos.cpp
Expand Up @@ -179,17 +179,21 @@ void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base, bool p_hidde
VS::get_singleton()->instance_set_layer_mask(instance, layer); //gizmos are 26
}

void EditorSpatialGizmo::add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard, const RID &p_skeleton) {
void EditorSpatialGizmo::add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard, const RID &p_skeleton, const Ref<Material> &p_material) {

ERR_FAIL_COND(!spatial_node);
Instance ins;

ins.billboard = p_billboard;
ins.mesh = p_mesh;
ins.skeleton = p_skeleton;
ins.material = p_material;
if (valid) {
ins.create_instance(spatial_node, hidden);
VS::get_singleton()->instance_set_transform(ins.instance, spatial_node->get_global_transform());
if (ins.material.is_valid()) {
VS::get_singleton()->instance_geometry_set_material_override(ins.instance, p_material->get_rid());
}
}

instances.push_back(ins);
Expand Down Expand Up @@ -3519,9 +3523,8 @@ void CollisionShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) {
if (Object::cast_to<ConcavePolygonShape>(*s)) {

Ref<ConcavePolygonShape> cs2 = s;
Ref<ArrayMesh> mesh = cs2->get_debug_mesh()->duplicate();
mesh->surface_set_material(0, material);
p_gizmo->add_mesh(mesh);
Ref<ArrayMesh> mesh = cs2->get_debug_mesh();
p_gizmo->add_mesh(mesh, false, RID(), material);
}

if (Object::cast_to<RayShape>(*s)) {
Expand Down
3 changes: 3 additions & 0 deletions scene/3d/path.cpp
Expand Up @@ -107,6 +107,9 @@ void PathFollow::_update_transform() {
}

float bl = c->get_baked_length();
if (bl == 0.0) {
return;
}
float bi = c->get_bake_interval();
float o = offset;
float o_next = offset + bi;
Expand Down

0 comments on commit bfa9be8

Please sign in to comment.