Fix thumbnail rendering in CLI (#12129)

* Fix thumbnail rendering in CLI

* Remove OSMesa context flag

* Add stringified error message for glfwInit and glewInit

* micro refactor

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
Ocraftyone
2026-02-10 00:08:22 -05:00
committed by GitHub
parent ed3f0e2898
commit abefb0e698
7 changed files with 36 additions and 32 deletions

View File

@@ -462,9 +462,9 @@ void GLVolume::render_with_outline(const GUI::Size& cnv_size)
}
glsafe(::glClear(GL_DEPTH_BUFFER_BIT));
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
model.render();
model.render(shader);
else
model.render(this->tverts_range);
model.render(this->tverts_range, shader);
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
// 2nd. render pass, just a normal render with the depth buffer passed as a texture
@@ -576,15 +576,15 @@ void GLVolume::simple_render(GLShaderProgram* shader, ModelObjectPtrs& model_obj
}
}
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
m.render();
m.render(shader);
else
m.render(this->tverts_range);
m.render(this->tverts_range, shader);
}
} else {
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
model.render();
model.render(shader);
else
model.render(this->tverts_range);
model.render(this->tverts_range, shader);
}
if (this->is_left_handed())
glFrontFace(GL_CCW);

View File

@@ -55,7 +55,10 @@ void Camera::select_next_type()
void Camera::auto_type(EType preferred_type)
{
if (!wxGetApp().app_config->get_bool("auto_perspective")) return;
if (wxApp::GetInstance() == nullptr || wxGetApp().app_config == nullptr)
return;
if (!wxGetApp().app_config->get_bool("auto_perspective"))
return;
if (preferred_type == EType::Perspective) {
if (!m_prevent_auto_type) {
set_type(preferred_type);
@@ -758,4 +761,3 @@ void Camera::update_target() {
}
} // GUI
} // Slic3r

View File

@@ -596,12 +596,12 @@ static GLenum get_index_type(const GLModel::Geometry& data)
}
}
void GLModel::render()
void GLModel::render(GLShaderProgram* shader)
{
render(std::make_pair<size_t, size_t>(0, indices_count()));
render(std::make_pair<size_t, size_t>(0, indices_count()), shader);
}
void GLModel::render(const std::pair<size_t, size_t>& range)
void GLModel::render(const std::pair<size_t, size_t>& range, GLShaderProgram* shader)
{
if (m_render_disabled)
return;
@@ -609,7 +609,9 @@ void GLModel::render(const std::pair<size_t, size_t>& range)
if (range.second == range.first)
return;
GLShaderProgram* shader = wxGetApp().get_current_shader();
if (shader == nullptr && wxApp::GetInstance() != nullptr)
shader = wxGetApp().get_current_shader();
if (shader == nullptr)
return;

View File

@@ -13,6 +13,7 @@ namespace Slic3r {
class TriangleMesh;
class Polygon;
class GLShaderProgram;
using Polygons = std::vector<Polygon, PointsAllocator<Polygon>>;
class BuildVolume;
@@ -177,8 +178,8 @@ namespace GUI {
const ColorRGBA& get_color() const { return m_render_data.geometry.color; }
void reset();
void render();
void render(const std::pair<size_t, size_t>& range);
void render(GLShaderProgram* shader = nullptr);
void render(const std::pair<size_t, size_t>& range, GLShaderProgram* shader = nullptr);
void render_instanced(unsigned int instances_vbo, unsigned int instances_count);
bool is_initialized() const { return vertices_count() > 0 && indices_count() > 0; }
@@ -260,4 +261,3 @@ namespace GUI {
} // namespace Slic3r
#endif // slic3r_GLModel_hpp_

View File

@@ -253,7 +253,7 @@ bool OpenGLManager::init_gl(bool popup_error)
glewExperimental = true;
GLenum result = glewInit();
if (result != GLEW_OK) {
BOOST_LOG_TRIVIAL(error) << "Unable to init glew library";
BOOST_LOG_TRIVIAL(error) << "Unable to init glew library, Error: " << glewGetErrorString(result);
return false;
}
//BOOST_LOG_TRIVIAL(info) << "glewInit Success."<< std::endl;

View File

@@ -3110,8 +3110,11 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, co
calc_vertex_for_icons(3, m_lock_icon);
calc_vertex_for_icons(4, m_plate_settings_icon);
// ORCA also change bed_icon_count number in calc_vertex_for_icons() after adding or removing icons for circular shaped beds that uses vertical alingment for icons
PresetBundle* preset = wxGetApp().preset_bundle;
bool dual_bbl = (preset->is_bbl_vendor() && preset->get_printer_extruder_count() == 2);
bool dual_bbl = false;
if (m_plater) {
PresetBundle* preset = wxGetApp().preset_bundle;
dual_bbl = (preset->is_bbl_vendor() && preset->get_printer_extruder_count() == 2);
}
calc_vertex_for_icons(dual_bbl ? 5 : 6, m_plate_filament_map_icon);
calc_vertex_for_icons(dual_bbl ? 6 : 5, m_move_front_icon);