Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/GCodeViewer.hpp')
-rw-r--r--src/slic3r/GUI/GCodeViewer.hpp82
1 files changed, 70 insertions, 12 deletions
diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp
index a4663dc04..1d86cf55a 100644
--- a/src/slic3r/GUI/GCodeViewer.hpp
+++ b/src/slic3r/GUI/GCodeViewer.hpp
@@ -226,6 +226,15 @@ class GCodeViewer
unsigned int path_id;
std::vector<unsigned int> sizes;
std::vector<size_t> offsets; // use size_t because we need an unsigned int whose size matches pointer's size (used in the call glMultiDrawElements())
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ bool contains(size_t offset) const {
+ for (size_t i = 0; i < offsets.size(); ++i) {
+ if (offsets[i] <= offset && offset <= offsets[i] + static_cast<size_t>(sizes[i] * sizeof(IBufferType)))
+ return true;
+ }
+ return false;
+ }
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
};
struct RenderPathPropertyHash {
size_t operator() (const RenderPath &p) const {
@@ -297,29 +306,46 @@ class GCodeViewer
{
case ERenderPrimitiveType::Point: { return 1; }
case ERenderPrimitiveType::Line: { return 2; }
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ case ERenderPrimitiveType::Triangle: { return 30; } // 3 indices x 10 triangles
+#else
case ERenderPrimitiveType::Triangle: { return 42; } // 3 indices x 14 triangles
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
default: { return 0; }
}
}
#if ENABLE_SPLITTED_VERTEX_BUFFER
size_t indices_per_segment_size_bytes() const { return static_cast<size_t>(indices_per_segment() * sizeof(IBufferType)); }
#endif // ENABLE_SPLITTED_VERTEX_BUFFER
- unsigned int start_segment_vertex_offset() const { return 0; }
- unsigned int end_segment_vertex_offset() const {
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ unsigned int max_indices_per_segment() const {
switch (render_primitive_type)
{
- case ERenderPrimitiveType::Point: { return 0; }
- case ERenderPrimitiveType::Line: { return 1; }
- case ERenderPrimitiveType::Triangle: { return 36; } // 1st vertex of 13th triangle
+ case ERenderPrimitiveType::Point: { return 1; }
+ case ERenderPrimitiveType::Line: { return 2; }
+ case ERenderPrimitiveType::Triangle: { return 36; } // 3 indices x 12 triangles
default: { return 0; }
}
}
+ size_t max_indices_per_segment_size_bytes() const { return max_indices_per_segment() * sizeof(IBufferType); }
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
#if ENABLE_SPLITTED_VERTEX_BUFFER
bool has_data() const {
return !vertices.vbos.empty() && vertices.vbos.front() != 0 && !indices.empty() && indices.front().ibo != 0;
}
#else
+ unsigned int start_segment_vertex_offset() const { return 0; }
+ unsigned int end_segment_vertex_offset() const {
+ switch (render_primitive_type)
+ {
+ case ERenderPrimitiveType::Point: { return 0; }
+ case ERenderPrimitiveType::Line: { return 1; }
+ case ERenderPrimitiveType::Triangle: { return 36; } // 1st vertex of 13th triangle
+ default: { return 0; }
+ }
+ }
+
bool has_data() const { return vertices.id != 0 && !indices.empty() && indices.front().id != 0; }
#endif // ENABLE_SPLITTED_VERTEX_BUFFER
};
@@ -439,18 +465,41 @@ class GCodeViewer
#endif // ENABLE_SPLITTED_VERTEX_BUFFER
};
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ // used to render the toolpath caps of the current sequential range
+ // (i.e. when sliding on the horizontal slider)
+ struct SequentialRangeCap
+ {
+ TBuffer* buffer{ nullptr };
+ unsigned int ibo{ 0 };
+ unsigned int vbo{ 0 };
+ Color color;
+
+ ~SequentialRangeCap();
+ bool is_renderable() const { return buffer != nullptr; }
+ void reset();
+ size_t indices_count() const { return 6; }
+ };
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+
#if ENABLE_GCODE_VIEWER_STATISTICS
struct Statistics
{
// time
int64_t results_time{ 0 };
int64_t load_time{ 0 };
+ int64_t load_vertices{ 0 };
+ int64_t smooth_vertices{ 0 };
+ int64_t load_indices{ 0 };
int64_t refresh_time{ 0 };
int64_t refresh_paths_time{ 0 };
// opengl calls
int64_t gl_multi_points_calls_count{ 0 };
int64_t gl_multi_lines_calls_count{ 0 };
int64_t gl_multi_triangles_calls_count{ 0 };
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ int64_t gl_triangles_calls_count{ 0 };
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
// memory
int64_t results_size{ 0 };
int64_t total_vertices_gpu_size{ 0 };
@@ -476,6 +525,9 @@ class GCodeViewer
void reset_times() {
results_time = 0;
load_time = 0;
+ load_vertices = 0;
+ smooth_vertices = 0;
+ load_indices = 0;
refresh_time = 0;
refresh_paths_time = 0;
}
@@ -484,6 +536,9 @@ class GCodeViewer
gl_multi_points_calls_count = 0;
gl_multi_lines_calls_count = 0;
gl_multi_triangles_calls_count = 0;
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ gl_triangles_calls_count = 0;
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
}
void reset_sizes() {
@@ -560,10 +615,10 @@ public:
};
private:
- mutable bool m_gl_data_initialized{ false };
+ bool m_gl_data_initialized{ false };
unsigned int m_last_result_id{ 0 };
size_t m_moves_count{ 0 };
- mutable std::vector<TBuffer> m_buffers{ static_cast<size_t>(EMoveType::Extrude) };
+ std::vector<TBuffer> m_buffers{ static_cast<size_t>(EMoveType::Extrude) };
// bounding box of toolpaths
BoundingBoxf3 m_paths_bounding_box;
// bounding box of toolpaths + marker tools
@@ -574,18 +629,21 @@ private:
std::vector<ExtrusionRole> m_roles;
size_t m_extruders_count;
std::vector<unsigned char> m_extruder_ids;
- mutable Extrusions m_extrusions;
- mutable SequentialView m_sequential_view;
+ Extrusions m_extrusions;
+ SequentialView m_sequential_view;
Shells m_shells;
EViewType m_view_type{ EViewType::FeatureType };
bool m_legend_enabled{ true };
PrintEstimatedTimeStatistics m_time_statistics;
- mutable PrintEstimatedTimeStatistics::ETimeMode m_time_estimate_mode{ PrintEstimatedTimeStatistics::ETimeMode::Normal };
+ PrintEstimatedTimeStatistics::ETimeMode m_time_estimate_mode{ PrintEstimatedTimeStatistics::ETimeMode::Normal };
#if ENABLE_GCODE_VIEWER_STATISTICS
- mutable Statistics m_statistics;
+ Statistics m_statistics;
#endif // ENABLE_GCODE_VIEWER_STATISTICS
- mutable std::array<float, 2> m_detected_point_sizes = { 0.0f, 0.0f };
+ std::array<float, 2> m_detected_point_sizes = { 0.0f, 0.0f };
GCodeProcessor::Result::SettingsIds m_settings_ids;
+#if ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
+ std::array<SequentialRangeCap, 2> m_sequential_range_caps;
+#endif // ENABLE_REDUCED_TOOLPATHS_SEGMENT_CAPS
public:
GCodeViewer();