mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-08-30 21:36:57 +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;
|
return (argc == 0) ? 0 : 1;
|
||||||
#endif // SLIC3R_GUI
|
#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 {
|
else {
|
||||||
const ConfigOptionInt *opt_loglevel = m_config.opt<ConfigOptionInt>("debug");
|
set_logging_level(2);
|
||||||
if (opt_loglevel) {
|
|
||||||
set_logging_level(opt_loglevel->value);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
set_logging_level(2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
global_begin_time = (long long)Slic3r::Utils::get_current_time_utc();
|
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);
|
glfwSetErrorCallback(glfw_callback);
|
||||||
int ret = glfwInit();
|
int ret = glfwInit();
|
||||||
if (ret == GLFW_FALSE) {
|
if (ret == GLFW_FALSE) {
|
||||||
int code = glfwGetError(NULL);
|
const char* error_msg;
|
||||||
BOOST_LOG_TRIVIAL(error) << "glfwInit return error, code " <<code<< std::endl;
|
int code = glfwGetError(&error_msg);
|
||||||
|
BOOST_LOG_TRIVIAL(error) << "glfwInit return error, Error code: " << code << ", Error: " << error_msg << std::endl;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BOOST_LOG_TRIVIAL(info) << "glfwInit Success."<< std::endl;
|
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);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_OSMESA_CONTEXT_API);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GLFWwindow* window = glfwCreateWindow(640, 480, "base_window", NULL, NULL);
|
GLFWwindow* window = glfwCreateWindow(640, 480, "base_window", NULL, NULL);
|
||||||
if (window == NULL)
|
if (window == NULL)
|
||||||
{
|
{
|
||||||
@@ -6437,7 +6434,7 @@ int CLI::run(int argc, char **argv)
|
|||||||
|
|
||||||
//opengl manager related logic
|
//opengl manager related logic
|
||||||
{
|
{
|
||||||
Slic3r::GUI::OpenGLManager opengl_mgr;
|
GUI::OpenGLManager opengl_mgr;
|
||||||
bool opengl_valid = opengl_mgr.init_gl(false);
|
bool opengl_valid = opengl_mgr.init_gl(false);
|
||||||
if (!opengl_valid) {
|
if (!opengl_valid) {
|
||||||
BOOST_LOG_TRIVIAL(error) << "init opengl failed! skip thumbnail generating" << std::endl;
|
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));
|
glsafe(::glClear(GL_DEPTH_BUFFER_BIT));
|
||||||
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
|
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
|
||||||
model.render();
|
model.render(shader);
|
||||||
else
|
else
|
||||||
model.render(this->tverts_range);
|
model.render(this->tverts_range, shader);
|
||||||
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
|
glsafe(::glBindTexture(GL_TEXTURE_2D, 0));
|
||||||
|
|
||||||
// 2nd. render pass, just a normal render with the depth buffer passed as a texture
|
// 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))
|
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
|
||||||
m.render();
|
m.render(shader);
|
||||||
else
|
else
|
||||||
m.render(this->tverts_range);
|
m.render(this->tverts_range, shader);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
|
if (tverts_range == std::make_pair<size_t, size_t>(0, -1))
|
||||||
model.render();
|
model.render(shader);
|
||||||
else
|
else
|
||||||
model.render(this->tverts_range);
|
model.render(this->tverts_range, shader);
|
||||||
}
|
}
|
||||||
if (this->is_left_handed())
|
if (this->is_left_handed())
|
||||||
glFrontFace(GL_CCW);
|
glFrontFace(GL_CCW);
|
||||||
|
|||||||
@@ -55,7 +55,10 @@ void Camera::select_next_type()
|
|||||||
|
|
||||||
void Camera::auto_type(EType preferred_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 (preferred_type == EType::Perspective) {
|
||||||
if (!m_prevent_auto_type) {
|
if (!m_prevent_auto_type) {
|
||||||
set_type(preferred_type);
|
set_type(preferred_type);
|
||||||
@@ -758,4 +761,3 @@ void Camera::update_target() {
|
|||||||
}
|
}
|
||||||
} // GUI
|
} // GUI
|
||||||
} // Slic3r
|
} // 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)
|
if (m_render_disabled)
|
||||||
return;
|
return;
|
||||||
@@ -609,7 +609,9 @@ void GLModel::render(const std::pair<size_t, size_t>& range)
|
|||||||
if (range.second == range.first)
|
if (range.second == range.first)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GLShaderProgram* shader = wxGetApp().get_current_shader();
|
if (shader == nullptr && wxApp::GetInstance() != nullptr)
|
||||||
|
shader = wxGetApp().get_current_shader();
|
||||||
|
|
||||||
if (shader == nullptr)
|
if (shader == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ namespace Slic3r {
|
|||||||
|
|
||||||
class TriangleMesh;
|
class TriangleMesh;
|
||||||
class Polygon;
|
class Polygon;
|
||||||
|
class GLShaderProgram;
|
||||||
using Polygons = std::vector<Polygon, PointsAllocator<Polygon>>;
|
using Polygons = std::vector<Polygon, PointsAllocator<Polygon>>;
|
||||||
class BuildVolume;
|
class BuildVolume;
|
||||||
|
|
||||||
@@ -177,8 +178,8 @@ namespace GUI {
|
|||||||
const ColorRGBA& get_color() const { return m_render_data.geometry.color; }
|
const ColorRGBA& get_color() const { return m_render_data.geometry.color; }
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
void render();
|
void render(GLShaderProgram* shader = nullptr);
|
||||||
void render(const std::pair<size_t, size_t>& range);
|
void render(const std::pair<size_t, size_t>& range, GLShaderProgram* shader = nullptr);
|
||||||
void render_instanced(unsigned int instances_vbo, unsigned int instances_count);
|
void render_instanced(unsigned int instances_vbo, unsigned int instances_count);
|
||||||
|
|
||||||
bool is_initialized() const { return vertices_count() > 0 && indices_count() > 0; }
|
bool is_initialized() const { return vertices_count() > 0 && indices_count() > 0; }
|
||||||
@@ -260,4 +261,3 @@ namespace GUI {
|
|||||||
} // namespace Slic3r
|
} // namespace Slic3r
|
||||||
|
|
||||||
#endif // slic3r_GLModel_hpp_
|
#endif // slic3r_GLModel_hpp_
|
||||||
|
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ bool OpenGLManager::init_gl(bool popup_error)
|
|||||||
glewExperimental = true;
|
glewExperimental = true;
|
||||||
GLenum result = glewInit();
|
GLenum result = glewInit();
|
||||||
if (result != GLEW_OK) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
//BOOST_LOG_TRIVIAL(info) << "glewInit Success."<< std::endl;
|
//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(3, m_lock_icon);
|
||||||
calc_vertex_for_icons(4, m_plate_settings_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
|
// 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 = false;
|
||||||
bool dual_bbl = (preset->is_bbl_vendor() && preset->get_printer_extruder_count() == 2);
|
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 ? 5 : 6, m_plate_filament_map_icon);
|
||||||
calc_vertex_for_icons(dual_bbl ? 6 : 5, m_move_front_icon);
|
calc_vertex_for_icons(dual_bbl ? 6 : 5, m_move_front_icon);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user