mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 16:57:53 -06:00
Merge remote-tracking branch 'origin/master' into ys_bugfixing
This commit is contained in:
commit
1de06a9461
12 changed files with 65 additions and 69 deletions
|
@ -54,10 +54,9 @@ void AppConfig::set_defaults()
|
||||||
if (get("preset_update").empty())
|
if (get("preset_update").empty())
|
||||||
set("preset_update", "1");
|
set("preset_update", "1");
|
||||||
|
|
||||||
// Use OpenGL 1.1 even if OpenGL 2.0 is available. This is mainly to support some buggy Intel HD Graphics drivers.
|
// remove old 'use_legacy_opengl' parameter from this config, if present
|
||||||
// github.com/prusa3d/PrusaSlicer/issues/233
|
if (!get("use_legacy_opengl").empty())
|
||||||
if (get("use_legacy_opengl").empty())
|
erase("", "use_legacy_opengl");
|
||||||
set("use_legacy_opengl", "0");
|
|
||||||
|
|
||||||
#if __APPLE__
|
#if __APPLE__
|
||||||
if (get("use_retina_opengl").empty())
|
if (get("use_retina_opengl").empty())
|
||||||
|
@ -73,8 +72,8 @@ void AppConfig::set_defaults()
|
||||||
if (get("custom_toolbar_size").empty())
|
if (get("custom_toolbar_size").empty())
|
||||||
set("custom_toolbar_size", "100");
|
set("custom_toolbar_size", "100");
|
||||||
|
|
||||||
if (get("camera_type").empty())
|
if (get("use_perspective_camera").empty())
|
||||||
set("camera_type", "1");
|
set("use_perspective_camera", "1");
|
||||||
|
|
||||||
// Remove legacy window positions/sizes
|
// Remove legacy window positions/sizes
|
||||||
erase("", "main_frame_maximized");
|
erase("", "main_frame_maximized");
|
||||||
|
|
|
@ -31,7 +31,7 @@ Camera::Camera()
|
||||||
: phi(45.0f)
|
: phi(45.0f)
|
||||||
, requires_zoom_to_bed(false)
|
, requires_zoom_to_bed(false)
|
||||||
, inverted_phi(false)
|
, inverted_phi(false)
|
||||||
, m_type(Ortho)
|
, m_type(Perspective)
|
||||||
, m_target(Vec3d::Zero())
|
, m_target(Vec3d::Zero())
|
||||||
, m_theta(45.0f)
|
, m_theta(45.0f)
|
||||||
, m_zoom(1.0)
|
, m_zoom(1.0)
|
||||||
|
@ -61,20 +61,17 @@ void Camera::set_type(EType type)
|
||||||
if (m_type != type)
|
if (m_type != type)
|
||||||
{
|
{
|
||||||
m_type = type;
|
m_type = type;
|
||||||
|
wxGetApp().app_config->set("use_perspective_camera", (m_type == Perspective) ? "1" : "0");
|
||||||
wxGetApp().app_config->set("camera_type", std::to_string(m_type));
|
|
||||||
wxGetApp().app_config->save();
|
wxGetApp().app_config->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::set_type(const std::string& type)
|
void Camera::set_type(const std::string& type)
|
||||||
{
|
{
|
||||||
if (!type.empty() && (type != "1"))
|
if (type == "1")
|
||||||
{
|
set_type(Perspective);
|
||||||
unsigned char type_id = atoi(type.c_str());
|
else
|
||||||
if (((unsigned char)Ortho < type_id) && (type_id < (unsigned char)Num_types))
|
set_type(Ortho);
|
||||||
set_type((Camera::EType)type_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::select_next_type()
|
void Camera::select_next_type()
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
EType get_type() const { return m_type; }
|
EType get_type() const { return m_type; }
|
||||||
std::string get_type_as_string() const;
|
std::string get_type_as_string() const;
|
||||||
void set_type(EType type);
|
void set_type(EType type);
|
||||||
|
// valid values for type: "0" -> ortho, "1" -> perspective
|
||||||
void set_type(const std::string& type);
|
void set_type(const std::string& type);
|
||||||
void select_next_type();
|
void select_next_type();
|
||||||
|
|
||||||
|
|
|
@ -198,8 +198,7 @@ void GLCanvas3D::Shader::_reset()
|
||||||
#endif // !ENABLE_TEXTURES_FROM_SVG
|
#endif // !ENABLE_TEXTURES_FROM_SVG
|
||||||
|
|
||||||
GLCanvas3D::LayersEditing::LayersEditing()
|
GLCanvas3D::LayersEditing::LayersEditing()
|
||||||
: m_use_legacy_opengl(false)
|
: m_enabled(false)
|
||||||
, m_enabled(false)
|
|
||||||
, m_z_texture_id(0)
|
, m_z_texture_id(0)
|
||||||
, m_model_object(nullptr)
|
, m_model_object(nullptr)
|
||||||
, m_object_max_z(0.f)
|
, m_object_max_z(0.f)
|
||||||
|
@ -274,12 +273,7 @@ void GLCanvas3D::LayersEditing::select_object(const Model &model, int object_id)
|
||||||
|
|
||||||
bool GLCanvas3D::LayersEditing::is_allowed() const
|
bool GLCanvas3D::LayersEditing::is_allowed() const
|
||||||
{
|
{
|
||||||
return !m_use_legacy_opengl && m_shader.is_initialized() && m_shader.get_shader()->shader_program_id > 0 && m_z_texture_id > 0;
|
return m_shader.is_initialized() && m_shader.get_shader()->shader_program_id > 0 && m_z_texture_id > 0;
|
||||||
}
|
|
||||||
|
|
||||||
void GLCanvas3D::LayersEditing::set_use_legacy_opengl(bool use_legacy_opengl)
|
|
||||||
{
|
|
||||||
m_use_legacy_opengl = use_legacy_opengl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLCanvas3D::LayersEditing::is_enabled() const
|
bool GLCanvas3D::LayersEditing::is_enabled() const
|
||||||
|
@ -1253,7 +1247,7 @@ void GLCanvas3D::post_event(wxEvent &&event)
|
||||||
wxPostEvent(m_canvas, event);
|
wxPostEvent(m_canvas, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLCanvas3D::init(bool useVBOs, bool use_legacy_opengl)
|
bool GLCanvas3D::init(bool useVBOs)
|
||||||
{
|
{
|
||||||
if (m_initialized)
|
if (m_initialized)
|
||||||
return true;
|
return true;
|
||||||
|
@ -1311,7 +1305,6 @@ bool GLCanvas3D::init(bool useVBOs, bool use_legacy_opengl)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_use_VBOs = useVBOs;
|
m_use_VBOs = useVBOs;
|
||||||
m_layers_editing.set_use_legacy_opengl(use_legacy_opengl);
|
|
||||||
|
|
||||||
// on linux the gl context is not valid until the canvas is not shown on screen
|
// on linux the gl context is not valid until the canvas is not shown on screen
|
||||||
// we defer the geometry finalization of volumes until the first call to render()
|
// we defer the geometry finalization of volumes until the first call to render()
|
||||||
|
@ -3312,6 +3305,9 @@ void GLCanvas3D::handle_sidebar_focus_event(const std::string& opt_key, bool foc
|
||||||
|
|
||||||
void GLCanvas3D::update_ui_from_settings()
|
void GLCanvas3D::update_ui_from_settings()
|
||||||
{
|
{
|
||||||
|
m_camera.set_type(wxGetApp().app_config->get("use_perspective_camera"));
|
||||||
|
m_dirty = true;
|
||||||
|
|
||||||
#if ENABLE_RETINA_GL
|
#if ENABLE_RETINA_GL
|
||||||
const float orig_scaling = m_retina_helper->get_scale_factor();
|
const float orig_scaling = m_retina_helper->get_scale_factor();
|
||||||
|
|
||||||
|
@ -4646,22 +4642,24 @@ void GLCanvas3D::_load_print_object_toolpaths(const PrintObject& print_object, c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ensure that no volume grows over the limits. If the volume is too large, allocate a new one.
|
// Ensure that no volume grows over the limits. If the volume is too large, allocate a new one.
|
||||||
for (GLVolume *&vol : vols)
|
for (size_t i = 0; i < vols.size(); ++i) {
|
||||||
if (vol->indexed_vertex_array.vertices_and_normals_interleaved.size() / 6 > ctxt.alloc_size_max()) {
|
GLVolume &vol = *vols[i];
|
||||||
// Store the vertex arrays and restart their containers,
|
if (vol.indexed_vertex_array.vertices_and_normals_interleaved.size() / 6 > ctxt.alloc_size_max()) {
|
||||||
vol = new_volume(vol->color);
|
// Store the vertex arrays and restart their containers,
|
||||||
GLVolume &vol_new = *vol;
|
vols[i] = new_volume(vol.color);
|
||||||
// Assign the large pre-allocated buffers to the new GLVolume.
|
GLVolume &vol_new = *vols[i];
|
||||||
vol_new.indexed_vertex_array = std::move(vol->indexed_vertex_array);
|
// Assign the large pre-allocated buffers to the new GLVolume.
|
||||||
// Copy the content back to the old GLVolume.
|
vol_new.indexed_vertex_array = std::move(vol.indexed_vertex_array);
|
||||||
vol->indexed_vertex_array = vol_new.indexed_vertex_array;
|
// Copy the content back to the old GLVolume.
|
||||||
// Finalize a bounding box of the old GLVolume.
|
vol.indexed_vertex_array = vol_new.indexed_vertex_array;
|
||||||
vol->bounding_box = vol->indexed_vertex_array.bounding_box();
|
// Finalize a bounding box of the old GLVolume.
|
||||||
// Clear the buffers, but keep them pre-allocated.
|
vol.bounding_box = vol.indexed_vertex_array.bounding_box();
|
||||||
vol_new.indexed_vertex_array.clear();
|
// Clear the buffers, but keep them pre-allocated.
|
||||||
// Just make sure that clear did not clear the reserved memory.
|
vol_new.indexed_vertex_array.clear();
|
||||||
vol_new.indexed_vertex_array.reserve(ctxt.alloc_size_reserve());
|
// Just make sure that clear did not clear the reserved memory.
|
||||||
}
|
vol_new.indexed_vertex_array.reserve(ctxt.alloc_size_reserve());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (GLVolume *vol : vols) {
|
for (GLVolume *vol : vols) {
|
||||||
vol->bounding_box = vol->indexed_vertex_array.bounding_box();
|
vol->bounding_box = vol->indexed_vertex_array.bounding_box();
|
||||||
|
|
|
@ -197,7 +197,6 @@ class GLCanvas3D
|
||||||
static const float THICKNESS_BAR_WIDTH;
|
static const float THICKNESS_BAR_WIDTH;
|
||||||
static const float THICKNESS_RESET_BUTTON_HEIGHT;
|
static const float THICKNESS_RESET_BUTTON_HEIGHT;
|
||||||
|
|
||||||
bool m_use_legacy_opengl;
|
|
||||||
bool m_enabled;
|
bool m_enabled;
|
||||||
Shader m_shader;
|
Shader m_shader;
|
||||||
unsigned int m_z_texture_id;
|
unsigned int m_z_texture_id;
|
||||||
|
@ -250,7 +249,6 @@ class GLCanvas3D
|
||||||
void select_object(const Model &model, int object_id);
|
void select_object(const Model &model, int object_id);
|
||||||
|
|
||||||
bool is_allowed() const;
|
bool is_allowed() const;
|
||||||
void set_use_legacy_opengl(bool use_legacy_opengl);
|
|
||||||
|
|
||||||
bool is_enabled() const;
|
bool is_enabled() const;
|
||||||
void set_enabled(bool enabled);
|
void set_enabled(bool enabled);
|
||||||
|
@ -492,7 +490,7 @@ public:
|
||||||
wxGLCanvas* get_wxglcanvas() { return m_canvas; }
|
wxGLCanvas* get_wxglcanvas() { return m_canvas; }
|
||||||
const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
|
const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
|
||||||
|
|
||||||
bool init(bool useVBOs, bool use_legacy_opengl);
|
bool init(bool useVBOs);
|
||||||
void post_event(wxEvent &&event);
|
void post_event(wxEvent &&event);
|
||||||
|
|
||||||
void set_as_dirty();
|
void set_as_dirty();
|
||||||
|
|
|
@ -192,7 +192,6 @@ GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info;
|
||||||
GLCanvas3DManager::GLCanvas3DManager()
|
GLCanvas3DManager::GLCanvas3DManager()
|
||||||
: m_context(nullptr)
|
: m_context(nullptr)
|
||||||
, m_gl_initialized(false)
|
, m_gl_initialized(false)
|
||||||
, m_use_legacy_opengl(false)
|
|
||||||
, m_use_VBOs(false)
|
, m_use_VBOs(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -268,8 +267,7 @@ void GLCanvas3DManager::init_gl()
|
||||||
{
|
{
|
||||||
glewInit();
|
glewInit();
|
||||||
const AppConfig* config = GUI::get_app_config();
|
const AppConfig* config = GUI::get_app_config();
|
||||||
m_use_legacy_opengl = (config == nullptr) || (config->get("use_legacy_opengl") == "1");
|
m_use_VBOs = s_gl_info.is_version_greater_or_equal_to(2, 0);
|
||||||
m_use_VBOs = !m_use_legacy_opengl && s_gl_info.is_version_greater_or_equal_to(2, 0);
|
|
||||||
m_gl_initialized = true;
|
m_gl_initialized = true;
|
||||||
if (GLEW_EXT_texture_compression_s3tc)
|
if (GLEW_EXT_texture_compression_s3tc)
|
||||||
s_compressed_textures_supported = true;
|
s_compressed_textures_supported = true;
|
||||||
|
@ -325,16 +323,14 @@ bool GLCanvas3DManager::init(GLCanvas3D& canvas)
|
||||||
if (!m_gl_initialized)
|
if (!m_gl_initialized)
|
||||||
init_gl();
|
init_gl();
|
||||||
|
|
||||||
return canvas.init(m_use_VBOs, m_use_legacy_opengl);
|
return canvas.init(m_use_VBOs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3DManager::detect_multisample(int* attribList)
|
void GLCanvas3DManager::detect_multisample(int* attribList)
|
||||||
{
|
{
|
||||||
int wxVersion = wxMAJOR_VERSION * 10000 + wxMINOR_VERSION * 100 + wxRELEASE_NUMBER;
|
int wxVersion = wxMAJOR_VERSION * 10000 + wxMINOR_VERSION * 100 + wxRELEASE_NUMBER;
|
||||||
const AppConfig* app_config = GUI::get_app_config();
|
const AppConfig* app_config = GUI::get_app_config();
|
||||||
bool enable_multisample = app_config != nullptr
|
bool enable_multisample = wxVersion >= 30003;
|
||||||
&& app_config->get("use_legacy_opengl") != "1"
|
|
||||||
&& wxVersion >= 30003;
|
|
||||||
|
|
||||||
s_multisample = (enable_multisample && wxGLCanvas::IsDisplaySupported(attribList)) ? MS_Enabled : MS_Disabled;
|
s_multisample = (enable_multisample && wxGLCanvas::IsDisplaySupported(attribList)) ? MS_Enabled : MS_Disabled;
|
||||||
// Alternative method: it was working on previous version of wxWidgets but not with the latest, at least on Windows
|
// Alternative method: it was working on previous version of wxWidgets but not with the latest, at least on Windows
|
||||||
|
|
|
@ -75,7 +75,6 @@ private:
|
||||||
wxGLContext* m_context;
|
wxGLContext* m_context;
|
||||||
static GLInfo s_gl_info;
|
static GLInfo s_gl_info;
|
||||||
bool m_gl_initialized;
|
bool m_gl_initialized;
|
||||||
bool m_use_legacy_opengl;
|
|
||||||
bool m_use_VBOs;
|
bool m_use_VBOs;
|
||||||
static EMultisampleState s_multisample;
|
static EMultisampleState s_multisample;
|
||||||
static bool s_compressed_textures_supported;
|
static bool s_compressed_textures_supported;
|
||||||
|
|
|
@ -68,7 +68,8 @@ namespace GUI {
|
||||||
if (!is_dragging())
|
if (!is_dragging())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float zoom = (float)canvas.get_camera().get_zoom();
|
const Camera& camera = canvas.get_camera();
|
||||||
|
float zoom = (float)camera.get_zoom();
|
||||||
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
|
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
|
||||||
|
|
||||||
Size cnv_size = canvas.get_canvas_size();
|
Size cnv_size = canvas.get_canvas_size();
|
||||||
|
@ -96,6 +97,11 @@ namespace GUI {
|
||||||
|
|
||||||
glsafe(::glPushMatrix());
|
glsafe(::glPushMatrix());
|
||||||
glsafe(::glLoadIdentity());
|
glsafe(::glLoadIdentity());
|
||||||
|
// ensure that the rectangle is renderered inside the frustrum
|
||||||
|
glsafe(::glTranslated(0.0, 0.0, -(camera.get_near_z() + 0.5)));
|
||||||
|
// ensure that the overlay fits the frustrum near z plane
|
||||||
|
double gui_scale = camera.get_gui_scale();
|
||||||
|
glsafe(::glScaled(gui_scale, gui_scale, 1.0));
|
||||||
|
|
||||||
glsafe(::glPushAttrib(GL_ENABLE_BIT));
|
glsafe(::glPushAttrib(GL_ENABLE_BIT));
|
||||||
glsafe(::glLineStipple(4, 0xAAAA));
|
glsafe(::glLineStipple(4, 0xAAAA));
|
||||||
|
|
|
@ -313,6 +313,12 @@ Preview::~Preview()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Preview::set_as_dirty()
|
||||||
|
{
|
||||||
|
if (m_canvas != nullptr)
|
||||||
|
m_canvas->set_as_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
void Preview::set_number_extruders(unsigned int number_extruders)
|
void Preview::set_number_extruders(unsigned int number_extruders)
|
||||||
{
|
{
|
||||||
if (m_number_extruders != number_extruders)
|
if (m_number_extruders != number_extruders)
|
||||||
|
|
|
@ -110,6 +110,8 @@ public:
|
||||||
wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; }
|
wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; }
|
||||||
GLCanvas3D* get_canvas3d() { return m_canvas; }
|
GLCanvas3D* get_canvas3d() { return m_canvas; }
|
||||||
|
|
||||||
|
void set_as_dirty();
|
||||||
|
|
||||||
void set_number_extruders(unsigned int number_extruders);
|
void set_number_extruders(unsigned int number_extruders);
|
||||||
void set_canvas_as_dirty();
|
void set_canvas_as_dirty();
|
||||||
void set_enabled(bool enabled);
|
void set_enabled(bool enabled);
|
||||||
|
|
|
@ -1779,7 +1779,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||||
set_current_panel(view3D);
|
set_current_panel(view3D);
|
||||||
|
|
||||||
// updates camera type from .ini file
|
// updates camera type from .ini file
|
||||||
camera.set_type(get_config("camera_type"));
|
camera.set_type(get_config("use_perspective_camera"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Plater::priv::update(bool force_full_scene_refresh)
|
void Plater::priv::update(bool force_full_scene_refresh)
|
||||||
|
@ -1847,10 +1847,8 @@ void Plater::priv::update_ui_from_settings()
|
||||||
// $self->{buttons_sizer}->Layout;
|
// $self->{buttons_sizer}->Layout;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
#if ENABLE_RETINA_GL
|
|
||||||
view3D->get_canvas3d()->update_ui_from_settings();
|
view3D->get_canvas3d()->update_ui_from_settings();
|
||||||
preview->get_canvas3d()->update_ui_from_settings();
|
preview->get_canvas3d()->update_ui_from_settings();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressStatusBar* Plater::priv::statusbar()
|
ProgressStatusBar* Plater::priv::statusbar()
|
||||||
|
|
|
@ -28,7 +28,7 @@ void PreferencesDialog::build()
|
||||||
m_icon_size_sizer->ShowItems(boost::any_cast<bool>(value));
|
m_icon_size_sizer->ShowItems(boost::any_cast<bool>(value));
|
||||||
this->layout();
|
this->layout();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
// $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new(
|
// $optgroup->append_single_option_line(Slic3r::GUI::OptionsGroup::Option->new(
|
||||||
|
@ -97,16 +97,6 @@ void PreferencesDialog::build()
|
||||||
option = Option (def,"show_incompatible_presets");
|
option = Option (def,"show_incompatible_presets");
|
||||||
m_optgroup->append_single_option_line(option);
|
m_optgroup->append_single_option_line(option);
|
||||||
|
|
||||||
// TODO: remove?
|
|
||||||
def.label = L("Use legacy OpenGL 1.1 rendering");
|
|
||||||
def.type = coBool;
|
|
||||||
def.tooltip = L("If you have rendering issues caused by a buggy OpenGL 2.0 driver, "
|
|
||||||
"you may try to check this checkbox. This will disable the layer height "
|
|
||||||
"editing and anti aliasing, so it is likely better to upgrade your graphics driver.");
|
|
||||||
def.set_default_value(new ConfigOptionBool{ app_config->get("use_legacy_opengl") == "1" });
|
|
||||||
option = Option (def,"use_legacy_opengl");
|
|
||||||
m_optgroup->append_single_option_line(option);
|
|
||||||
|
|
||||||
#if __APPLE__
|
#if __APPLE__
|
||||||
def.label = L("Use Retina resolution for the 3D scene");
|
def.label = L("Use Retina resolution for the 3D scene");
|
||||||
def.type = coBool;
|
def.type = coBool;
|
||||||
|
@ -117,6 +107,13 @@ void PreferencesDialog::build()
|
||||||
m_optgroup->append_single_option_line(option);
|
m_optgroup->append_single_option_line(option);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
def.label = L("Use perspective camera");
|
||||||
|
def.type = coBool;
|
||||||
|
def.tooltip = L("If enabled, use perspective camera. If not enabled, use orthographic camera.");
|
||||||
|
def.set_default_value(new ConfigOptionBool{ app_config->get("use_perspective_camera") == "1" });
|
||||||
|
option = Option(def, "use_perspective_camera");
|
||||||
|
m_optgroup->append_single_option_line(option);
|
||||||
|
|
||||||
def.label = L("Use custom size for toolbar icons");
|
def.label = L("Use custom size for toolbar icons");
|
||||||
def.type = coBool;
|
def.type = coBool;
|
||||||
def.tooltip = L("If enabled, you can change size of toolbar icons manually.");
|
def.tooltip = L("If enabled, you can change size of toolbar icons manually.");
|
||||||
|
@ -143,8 +140,7 @@ void PreferencesDialog::build()
|
||||||
|
|
||||||
void PreferencesDialog::accept()
|
void PreferencesDialog::accept()
|
||||||
{
|
{
|
||||||
if (m_values.find("no_defaults") != m_values.end() ||
|
if (m_values.find("no_defaults") != m_values.end()) {
|
||||||
m_values.find("use_legacy_opengl") != m_values.end()) {
|
|
||||||
warning_catcher(this, wxString::Format(_(L("You need to restart %s to make the changes effective.")), SLIC3R_APP_NAME));
|
warning_catcher(this, wxString::Format(_(L("You need to restart %s to make the changes effective.")), SLIC3R_APP_NAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue