mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-14 00:52:04 +00:00
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:
@@ -1316,14 +1316,14 @@ int CLI::run(int argc, char **argv)
|
||||
return (argc == 0) ? 0 : 1;
|
||||
#endif // SLIC3R_GUI
|
||||
}
|
||||
|
||||
// Setup logging for CLI
|
||||
const ConfigOptionInt* opt_loglevel = m_config.opt<ConfigOptionInt>("debug");
|
||||
if (opt_loglevel) {
|
||||
set_logging_level(opt_loglevel->value);
|
||||
}
|
||||
else {
|
||||
const ConfigOptionInt *opt_loglevel = m_config.opt<ConfigOptionInt>("debug");
|
||||
if (opt_loglevel) {
|
||||
set_logging_level(opt_loglevel->value);
|
||||
}
|
||||
else {
|
||||
set_logging_level(2);
|
||||
}
|
||||
set_logging_level(2);
|
||||
}
|
||||
|
||||
global_begin_time = (long long)Slic3r::Utils::get_current_time_utc();
|
||||
@@ -6401,8 +6401,9 @@ int CLI::run(int argc, char **argv)
|
||||
glfwSetErrorCallback(glfw_callback);
|
||||
int ret = glfwInit();
|
||||
if (ret == GLFW_FALSE) {
|
||||
int code = glfwGetError(NULL);
|
||||
BOOST_LOG_TRIVIAL(error) << "glfwInit return error, code " <<code<< std::endl;
|
||||
const char* error_msg;
|
||||
int code = glfwGetError(&error_msg);
|
||||
BOOST_LOG_TRIVIAL(error) << "glfwInit return error, Error code: " << code << ", Error: " << error_msg << std::endl;
|
||||
}
|
||||
else {
|
||||
BOOST_LOG_TRIVIAL(info) << "glfwInit Success."<< std::endl;
|
||||
@@ -6422,10 +6423,6 @@ int CLI::run(int argc, char **argv)
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_OSMESA_CONTEXT_API);
|
||||
#endif
|
||||
|
||||
GLFWwindow* window = glfwCreateWindow(640, 480, "base_window", NULL, NULL);
|
||||
if (window == NULL)
|
||||
{
|
||||
@@ -6437,7 +6434,7 @@ int CLI::run(int argc, char **argv)
|
||||
|
||||
//opengl manager related logic
|
||||
{
|
||||
Slic3r::GUI::OpenGLManager opengl_mgr;
|
||||
GUI::OpenGLManager opengl_mgr;
|
||||
bool opengl_valid = opengl_mgr.init_gl(false);
|
||||
if (!opengl_valid) {
|
||||
BOOST_LOG_TRIVIAL(error) << "init opengl failed! skip thumbnail generating" << std::endl;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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_
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user