mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Tech ENABLE_GLBEGIN_GLEND_REMOVAL - Another refactoring to simplify client code of GLModel::Geometry
(cherry picked from commit prusa3d/PrusaSlicer@fa1ff1c357)
This commit is contained in:
		
							parent
							
								
									8107057e17
								
							
						
					
					
						commit
						12dbbf2d1c
					
				
					 8 changed files with 26 additions and 26 deletions
				
			
		|  | @ -45,8 +45,7 @@ bool init_model_from_poly(GLModel &model, const ExPolygon &poly, float z) | |||
|         return false; | ||||
| 
 | ||||
|     GLModel::Geometry init_data; | ||||
|     const GLModel::Geometry::EIndexType index_type = (triangles.size() < 65536) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3T2, index_type }; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3T2, GLModel::Geometry::index_type(triangles.size()) }; | ||||
|     init_data.reserve_vertices(triangles.size()); | ||||
|     init_data.reserve_indices(triangles.size() / 3); | ||||
| 
 | ||||
|  | @ -71,7 +70,7 @@ bool init_model_from_poly(GLModel &model, const ExPolygon &poly, float z) | |||
|         init_data.add_vertex(p, (Vec2f)(v - min).cwiseProduct(inv_size).eval()); | ||||
|         ++vertices_counter; | ||||
|         if (vertices_counter % 3 == 0) { | ||||
|             if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|                 init_data.add_ushort_triangle((unsigned short)vertices_counter - 3, (unsigned short)vertices_counter - 2, (unsigned short)vertices_counter - 1); | ||||
|             else | ||||
|                 init_data.add_uint_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); | ||||
|  |  | |||
|  | @ -497,8 +497,7 @@ void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) | |||
|         m_profile.profile.reset(); | ||||
| 
 | ||||
|         GLModel::Geometry init_data; | ||||
|         const GLModel::Geometry::EIndexType index_type = (m_layer_height_profile.size() / 2 < 65536) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|         init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P2, index_type }; | ||||
|         init_data.format = { GLModel::Geometry::EPrimitiveType::LineStrip, GLModel::Geometry::EVertexLayout::P2, GLModel::Geometry::index_type(m_layer_height_profile.size() / 2) }; | ||||
|         init_data.color = ColorRGBA::BLUE(); | ||||
|         init_data.reserve_vertices(m_layer_height_profile.size() / 2); | ||||
|         init_data.reserve_indices(m_layer_height_profile.size() / 2); | ||||
|  | @ -507,7 +506,7 @@ void GLCanvas3D::LayersEditing::render_profile(const Rect& bar_rect) | |||
|         for (unsigned int i = 0; i < (unsigned int)m_layer_height_profile.size(); i += 2) { | ||||
|             init_data.add_vertex(Vec2f(bar_rect.get_left() + float(m_layer_height_profile[i + 1]) * scale_x, | ||||
|                                        bar_rect.get_bottom() + float(m_layer_height_profile[i]) * scale_y)); | ||||
|             if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|                 init_data.add_ushort_index((unsigned short)i / 2); | ||||
|             else | ||||
|                 init_data.add_uint_index(i / 2); | ||||
|  |  | |||
|  | @ -327,6 +327,11 @@ size_t GLModel::Geometry::index_stride_bytes(const Format& format) | |||
|     }; | ||||
| } | ||||
| 
 | ||||
| GLModel::Geometry::EIndexType GLModel::Geometry::index_type(size_t vertices_count) | ||||
| { | ||||
|     return (vertices_count < 65536) ? EIndexType::USHORT : EIndexType::UINT; | ||||
| } | ||||
| 
 | ||||
| bool GLModel::Geometry::has_position(const Format& format) | ||||
| { | ||||
|     switch (format.vertex_layout) | ||||
|  |  | |||
|  | @ -63,11 +63,11 @@ namespace GUI { | |||
|             void reserve_vertices(size_t vertices_count); | ||||
|             void reserve_indices(size_t indices_count); | ||||
| 
 | ||||
|             void add_vertex(const Vec2f& position); | ||||
|             void add_vertex(const Vec2f& position, const Vec2f& tex_coord); | ||||
|             void add_vertex(const Vec3f& position); | ||||
|             void add_vertex(const Vec3f& position, const Vec2f& tex_coord); | ||||
|             void add_vertex(const Vec3f& position, const Vec3f& normal); | ||||
|             void add_vertex(const Vec2f& position);                          // EVertexLayout::P2
 | ||||
|             void add_vertex(const Vec2f& position, const Vec2f& tex_coord);  // EVertexLayout::P2T2
 | ||||
|             void add_vertex(const Vec3f& position);                          // EVertexLayout::P3
 | ||||
|             void add_vertex(const Vec3f& position, const Vec2f& tex_coord);  // EVertexLayout::P3T2
 | ||||
|             void add_vertex(const Vec3f& position, const Vec3f& normal);     // EVertexLayout::P3N3
 | ||||
| 
 | ||||
|             void add_ushort_index(unsigned short id); | ||||
|             void add_uint_index(unsigned int id); | ||||
|  | @ -115,6 +115,8 @@ namespace GUI { | |||
| 
 | ||||
|             static size_t index_stride_bytes(const Format& format); | ||||
| 
 | ||||
|             static EIndexType index_type(size_t vertices_count); | ||||
| 
 | ||||
|             static bool has_position(const Format& format); | ||||
|             static bool has_normal(const Format& format); | ||||
|             static bool has_tex_coord(const Format& format); | ||||
|  |  | |||
|  | @ -337,14 +337,13 @@ void GLGizmoFlatten::update_planes() | |||
|     // the vertices in order, so triangulation is trivial.
 | ||||
|     for (auto& plane : m_planes) { | ||||
|         GLModel::Geometry init_data; | ||||
|         const GLModel::Geometry::EIndexType index_type = (plane.vertices.size() < 65536) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|         init_data.format = { GLModel::Geometry::EPrimitiveType::TriangleFan, GLModel::Geometry::EVertexLayout::P3N3, index_type }; | ||||
|         init_data.format = { GLModel::Geometry::EPrimitiveType::TriangleFan, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::index_type(plane.vertices.size()) }; | ||||
|         init_data.reserve_vertices(plane.vertices.size()); | ||||
|         init_data.reserve_indices(plane.vertices.size()); | ||||
|         // vertices + indices
 | ||||
|         for (size_t i = 0; i < plane.vertices.size(); ++i) { | ||||
|             init_data.add_vertex((Vec3f)plane.vertices[i].cast<float>(), (Vec3f)plane.normal.cast<float>()); | ||||
|             if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|                 init_data.add_ushort_index((unsigned short)i); | ||||
|             else | ||||
|                 init_data.add_uint_index((unsigned int)i); | ||||
|  |  | |||
|  | @ -1661,8 +1661,7 @@ void TriangleSelectorGUI::update_paint_contour() | |||
| 
 | ||||
|     GLModel::Geometry init_data; | ||||
|     const std::vector<Vec2i> contour_edges = this->get_seed_fill_contour(); | ||||
|     const GLModel::Geometry::EIndexType index_type = (2 * contour_edges.size() < 65536) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, index_type }; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::index_type(2 * contour_edges.size()) }; | ||||
|     init_data.reserve_vertices(2 * contour_edges.size()); | ||||
|     init_data.reserve_indices(2 * contour_edges.size()); | ||||
|     // vertices + indices
 | ||||
|  | @ -1671,7 +1670,7 @@ void TriangleSelectorGUI::update_paint_contour() | |||
|         init_data.add_vertex(m_vertices[edge(0)].v); | ||||
|         init_data.add_vertex(m_vertices[edge(1)].v); | ||||
|         vertices_count += 2; | ||||
|         if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|         if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             init_data.add_ushort_line((unsigned short)vertices_count - 2, (unsigned short)vertices_count - 1); | ||||
|         else | ||||
|             init_data.add_uint_line(vertices_count - 2, vertices_count - 1); | ||||
|  |  | |||
|  | @ -205,8 +205,7 @@ void MeshClipper::recalculate_triangles() | |||
|     m_model.reset(); | ||||
| 
 | ||||
|     GLModel::Geometry init_data; | ||||
|     const GLModel::Geometry::EIndexType index_type = (m_triangles2d.size() < 65536) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, index_type }; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3, GLModel::Geometry::index_type(m_triangles2d.size()) }; | ||||
|     init_data.reserve_vertices(m_triangles2d.size()); | ||||
|     init_data.reserve_indices(m_triangles2d.size()); | ||||
| 
 | ||||
|  | @ -216,7 +215,7 @@ void MeshClipper::recalculate_triangles() | |||
|         init_data.add_vertex((Vec3f)(tr * Vec3d((*(it + 1)).x(), (*(it + 1)).y(), height_mesh)).cast<float>(), (Vec3f)up.cast<float>()); | ||||
|         init_data.add_vertex((Vec3f)(tr * Vec3d((*(it + 2)).x(), (*(it + 2)).y(), height_mesh)).cast<float>(), (Vec3f)up.cast<float>()); | ||||
|         const size_t idx = it - m_triangles2d.cbegin(); | ||||
|         if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|         if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             init_data.add_ushort_triangle((unsigned short)idx, (unsigned short)idx + 1, (unsigned short)idx + 2); | ||||
|         else | ||||
|             init_data.add_uint_triangle((unsigned int)idx, (unsigned int)idx + 1, (unsigned int)idx + 2); | ||||
|  |  | |||
|  | @ -351,8 +351,7 @@ static bool init_model_from_lines(GLModel &model, const Lines &lines, float z) | |||
| { | ||||
| 
 | ||||
|     GLModel::Geometry init_data; | ||||
|     const GLModel::Geometry::EIndexType index_type = (lines.size() < 65536 / 2) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, index_type }; | ||||
|     init_data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::index_type(2 * lines.size()) }; | ||||
|     init_data.reserve_vertices(2 * lines.size()); | ||||
|     init_data.reserve_indices(2 * lines.size()); | ||||
| 
 | ||||
|  | @ -360,7 +359,7 @@ static bool init_model_from_lines(GLModel &model, const Lines &lines, float z) | |||
|         init_data.add_vertex(Vec3f(unscale<float>(l.a.x()), unscale<float>(l.a.y()), z)); | ||||
|         init_data.add_vertex(Vec3f(unscale<float>(l.b.x()), unscale<float>(l.b.y()), z)); | ||||
|         const unsigned int vertices_counter = (unsigned int)init_data.vertices_count(); | ||||
|         if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|         if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             init_data.add_ushort_line((unsigned short)vertices_counter - 2, (unsigned short)vertices_counter - 1); | ||||
|         else | ||||
|             init_data.add_uint_line(vertices_counter - 2, vertices_counter - 1); | ||||
|  | @ -375,8 +374,7 @@ static bool init_model_from_lines(GLModel &model, const Lines3 &lines) | |||
| { | ||||
| 
 | ||||
|     GLModel::Geometry init_data; | ||||
|     const GLModel::Geometry::EIndexType index_type = (lines.size() < 65536 / 2) ? GLModel::Geometry::EIndexType::USHORT : GLModel::Geometry::EIndexType::UINT; | ||||
|     init_data.format = {GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, index_type}; | ||||
|     init_data.format = {GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3, GLModel::Geometry::index_type(2 * lines.size())}; | ||||
|     init_data.reserve_vertices(2 * lines.size()); | ||||
|     init_data.reserve_indices(2 * lines.size()); | ||||
| 
 | ||||
|  | @ -384,7 +382,7 @@ static bool init_model_from_lines(GLModel &model, const Lines3 &lines) | |||
|         init_data.add_vertex(Vec3f(unscale<float>(l.a.x()), unscale<float>(l.a.y()), unscale<float>(l.a.z()))); | ||||
|         init_data.add_vertex(Vec3f(unscale<float>(l.b.x()), unscale<float>(l.b.y()), unscale<float>(l.b.z()))); | ||||
|         const unsigned int vertices_counter = (unsigned int) init_data.vertices_count(); | ||||
|         if (index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|         if (init_data.format.index_type == GLModel::Geometry::EIndexType::USHORT) | ||||
|             init_data.add_ushort_line((unsigned short) vertices_counter - 2, (unsigned short) vertices_counter - 1); | ||||
|         else | ||||
|             init_data.add_uint_line(vertices_counter - 2, vertices_counter - 1); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966