From 24bcbd9c0ceb4ebd8035a0b69324140dee9d818b Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Wed, 23 Mar 2022 15:18:24 +0100 Subject: [PATCH] Optimization in GLCanvas3D::_render_camera_target() --- src/slic3r/GUI/GLCanvas3D.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 5539d681c4..51a0f0585a 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6070,35 +6070,34 @@ void GLCanvas3D::_render_camera_target() #if ENABLE_LEGACY_OPENGL_REMOVAL const Vec3f& target = wxGetApp().plater()->get_camera().get_target().cast(); - bool target_changed = !m_camera_target.target.isApprox(target.cast()); m_camera_target.target = target.cast(); for (int i = 0; i < 3; ++i) { - if (!m_camera_target.axis[i].is_initialized() || target_changed) { + if (!m_camera_target.axis[i].is_initialized()) { m_camera_target.axis[i].reset(); GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::EIndexType::USHORT }; + init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; init_data.color = (i == X) ? ColorRGBA::X() : ((i == Y) ? ColorRGBA::Y() : ColorRGBA::Z()); init_data.reserve_vertices(2); init_data.reserve_indices(2); // vertices if (i == X) { - init_data.add_vertex(Vec3f(target.x() - half_length, target.y(), target.z())); - init_data.add_vertex(Vec3f(target.x() + half_length, target.y(), target.z())); + init_data.add_vertex(Vec3f(-half_length, 0.0f, 0.0f)); + init_data.add_vertex(Vec3f(+half_length, 0.0f, 0.0f)); } else if (i == Y) { - init_data.add_vertex(Vec3f(target.x(), target.y() - half_length, target.z())); - init_data.add_vertex(Vec3f(target.x(), target.y() + half_length, target.z())); + init_data.add_vertex(Vec3f(0.0f, -half_length, 0.0f)); + init_data.add_vertex(Vec3f(0.0f, +half_length, 0.0f)); } else { - init_data.add_vertex(Vec3f(target.x(), target.y(), target.z() - half_length)); - init_data.add_vertex(Vec3f(target.x(), target.y(), target.z() + half_length)); + init_data.add_vertex(Vec3f(0.0f, 0.0f, -half_length)); + init_data.add_vertex(Vec3f(0.0f, 0.0f, +half_length)); } // indices - init_data.add_ushort_line(0, 1); + init_data.add_line(0, 1); m_camera_target.axis[i].init_from(std::move(init_data)); } @@ -6109,7 +6108,7 @@ void GLCanvas3D::_render_camera_target() shader->start_using(); #if ENABLE_GL_SHADERS_ATTRIBUTES const Camera& camera = wxGetApp().plater()->get_camera(); - shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("view_model_matrix", camera.get_view_matrix() * Geometry::assemble_transform(m_camera_target.target)); shader->set_uniform("projection_matrix", camera.get_projection_matrix()); #endif // ENABLE_GL_SHADERS_ATTRIBUTES for (int i = 0; i < 3; ++i) {