From a72fb79f72d60570b23081903fb596dcb7ebe18a Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 9 Nov 2020 14:27:00 +0100 Subject: [PATCH] #5098 - Fixed no preview after language change --- src/slic3r/GUI/GCodeViewer.cpp | 75 ++++++++++++++++------------------ src/slic3r/GUI/GCodeViewer.hpp | 1 + 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 5dd728284a..0b5bb23aac 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -412,6 +412,9 @@ void GCodeViewer::refresh(const GCodeProcessor::Result& gcode_result, const std: void GCodeViewer::reset() { + m_initialized = false; + m_gl_data_initialized = false; + m_moves_count = 0; for (TBuffer& buffer : m_buffers) { buffer.reset(); @@ -439,46 +442,39 @@ void GCodeViewer::reset() void GCodeViewer::render() const { auto init_gl_data = [this]() { - static bool first_run = true; - if (first_run) { - // initializes opengl data of TBuffers - for (size_t i = 0; i < m_buffers.size(); ++i) { - TBuffer& buffer = m_buffers[i]; - switch (buffer_type(i)) - { - default: { break; } - case EMoveType::Tool_change: - case EMoveType::Color_change: - case EMoveType::Pause_Print: - case EMoveType::Custom_GCode: - case EMoveType::Retract: - case EMoveType::Unretract: - { - buffer.shader = wxGetApp().is_glsl_version_greater_or_equal_to(1, 20) ? "options_120" : "options_110"; - break; - } - case EMoveType::Extrude: - { - buffer.shader = "gouraud_light"; - break; - } - case EMoveType::Travel: - { - buffer.shader = "toolpaths_lines"; - break; - } - } + // initializes opengl data of TBuffers + for (size_t i = 0; i < m_buffers.size(); ++i) { + TBuffer& buffer = m_buffers[i]; + switch (buffer_type(i)) { + default: { break; } + case EMoveType::Tool_change: + case EMoveType::Color_change: + case EMoveType::Pause_Print: + case EMoveType::Custom_GCode: + case EMoveType::Retract: + case EMoveType::Unretract: { + buffer.shader = wxGetApp().is_glsl_version_greater_or_equal_to(1, 20) ? "options_120" : "options_110"; + break; + } + case EMoveType::Extrude: { + buffer.shader = "gouraud_light"; + break; + } + case EMoveType::Travel: { + buffer.shader = "toolpaths_lines"; + break; + } } - - // initializes tool marker - m_sequential_view.marker.init(); - - // initializes point sizes - std::array point_sizes; - ::glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_sizes.data()); - m_detected_point_sizes = { static_cast(point_sizes[0]), static_cast(point_sizes[1]) }; - first_run = false; } + + // initializes tool marker + m_sequential_view.marker.init(); + + // initializes point sizes + std::array point_sizes; + ::glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_sizes.data()); + m_detected_point_sizes = { static_cast(point_sizes[0]), static_cast(point_sizes[1]) }; + m_gl_data_initialized = true; }; #if ENABLE_GCODE_VIEWER_STATISTICS @@ -487,7 +483,8 @@ void GCodeViewer::render() const // OpenGL data must be initialized after the glContext has been created. // This is ensured when this method is called by GLCanvas3D::_render_gcode(). - init_gl_data(); + if (!m_gl_data_initialized) + init_gl_data(); if (m_roles.empty()) return; diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index fb805da4ac..93eb86932a 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -388,6 +388,7 @@ public: private: bool m_initialized{ false }; + mutable bool m_gl_data_initialized{ false }; unsigned int m_last_result_id{ 0 }; size_t m_moves_count{ 0 }; mutable std::vector m_buffers{ static_cast(EMoveType::Extrude) };