38#define MIN_RANGE_LEN 1024
193 bool edit_mode_active,
203 MeshBufferCache &cache);
252 for (const int i : range) {
253 const int2 edge = edges[loose_edges[i]];
254 gpu_data[i * 2 + 0] = vert_data[edge[0]];
255 gpu_data[i * 2 + 1] = vert_data[edge[1]];
260void extract_positions(
const MeshRenderData &mr, gpu::VertBuf &vbo);
261void extract_positions_subdiv(
const DRWSubdivCache &subdiv_cache,
262 const MeshRenderData &mr,
264 gpu::VertBuf *orco_vbo);
266void extract_face_dots_position(
const MeshRenderData &mr, gpu::VertBuf &vbo);
267void extract_face_dots_subdiv(
const DRWSubdivCache &subdiv_cache,
268 gpu::VertBuf &fdots_pos,
269 gpu::VertBuf *fdots_nor,
270 gpu::IndexBuf &fdots);
272void extract_normals(
const MeshRenderData &mr,
bool use_hq, gpu::VertBuf &vbo);
273void extract_normals_subdiv(
const MeshRenderData &mr,
274 const DRWSubdivCache &subdiv_cache,
275 gpu::VertBuf &pos_nor,
277void extract_vert_normals(
const MeshRenderData &mr, gpu::VertBuf &vbo);
278void extract_face_dot_normals(
const MeshRenderData &mr,
const bool use_hq, gpu::VertBuf &vbo);
279void extract_edge_factor(
const MeshRenderData &mr, gpu::VertBuf &vbo);
280void extract_edge_factor_subdiv(
const DRWSubdivCache &subdiv_cache,
281 const MeshRenderData &mr,
282 gpu::VertBuf &pos_nor,
285void extract_tris(
const MeshRenderData &mr,
286 const SortedFaceData &face_sorted,
287 MeshBatchCache &cache,
289void extract_tris_subdiv(
const DRWSubdivCache &subdiv_cache,
290 MeshBatchCache &cache,
293void extract_lines(
const MeshRenderData &mr,
294 gpu::IndexBuf *lines,
295 gpu::IndexBuf *lines_loose,
296 bool &no_loose_wire);
297void extract_lines_subdiv(
const DRWSubdivCache &subdiv_cache,
298 const MeshRenderData &mr,
299 gpu::IndexBuf *lines,
300 gpu::IndexBuf *lines_loose,
301 bool &no_loose_wire);
303void extract_points(
const MeshRenderData &mr, gpu::IndexBuf &points);
304void extract_points_subdiv(
const MeshRenderData &mr,
305 const DRWSubdivCache &subdiv_cache,
306 gpu::IndexBuf &points);
308void extract_edit_data(
const MeshRenderData &mr, gpu::VertBuf &vbo);
309void extract_edit_data_subdiv(
const MeshRenderData &mr,
310 const DRWSubdivCache &subdiv_cache,
313void extract_tangents(
const MeshRenderData &mr,
314 const MeshBatchCache &cache,
317void extract_tangents_subdiv(
const MeshRenderData &mr,
318 const DRWSubdivCache &subdiv_cache,
319 const MeshBatchCache &cache,
322void extract_vert_index(
const MeshRenderData &mr, gpu::VertBuf &vbo);
323void extract_edge_index(
const MeshRenderData &mr, gpu::VertBuf &vbo);
324void extract_face_index(
const MeshRenderData &mr, gpu::VertBuf &vbo);
325void extract_face_dot_index(
const MeshRenderData &mr, gpu::VertBuf &vbo);
327void extract_vert_index_subdiv(
const DRWSubdivCache &subdiv_cache,
328 const MeshRenderData &mr,
330void extract_edge_index_subdiv(
const DRWSubdivCache &subdiv_cache,
331 const MeshRenderData &mr,
333void extract_face_index_subdiv(
const DRWSubdivCache &subdiv_cache,
334 const MeshRenderData &mr,
337void extract_weights(
const MeshRenderData &mr,
const MeshBatchCache &cache, gpu::VertBuf &vbo);
338void extract_weights_subdiv(
const MeshRenderData &mr,
339 const DRWSubdivCache &subdiv_cache,
340 const MeshBatchCache &cache,
343void extract_face_dots(
const MeshRenderData &mr, gpu::IndexBuf &face_dots);
345void extract_face_dots_uv(
const MeshRenderData &mr, gpu::VertBuf &vbo);
346void extract_face_dots_edituv_data(
const MeshRenderData &mr, gpu::VertBuf &vbo);
348void extract_lines_paint_mask(
const MeshRenderData &mr, gpu::IndexBuf &lines);
349void extract_lines_paint_mask_subdiv(
const MeshRenderData &mr,
350 const DRWSubdivCache &subdiv_cache,
351 gpu::IndexBuf &lines);
353void extract_lines_adjacency(
const MeshRenderData &mr, gpu::IndexBuf &ibo,
bool &r_is_manifold);
354void extract_lines_adjacency_subdiv(
const DRWSubdivCache &subdiv_cache,
356 bool &r_is_manifold);
358void extract_uv_maps(
const MeshRenderData &mr,
const MeshBatchCache &cache, gpu::VertBuf &vbo);
359void extract_uv_maps_subdiv(
const DRWSubdivCache &subdiv_cache,
360 const MeshBatchCache &cache,
362void extract_edituv_stretch_area(
const MeshRenderData &mr,
366void extract_edituv_stretch_area_subdiv(
const MeshRenderData &mr,
367 const DRWSubdivCache &subdiv_cache,
371void extract_edituv_stretch_angle(
const MeshRenderData &mr, gpu::VertBuf &vbo);
372void extract_edituv_stretch_angle_subdiv(
const MeshRenderData &mr,
373 const DRWSubdivCache &subdiv_cache,
374 const MeshBatchCache &cache,
376void extract_edituv_data(
const MeshRenderData &mr, gpu::VertBuf &vbo);
377void extract_edituv_data_subdiv(
const MeshRenderData &mr,
378 const DRWSubdivCache &subdiv_cache,
380void extract_edituv_tris(
const MeshRenderData &mr, gpu::IndexBuf &ibo);
381void extract_edituv_tris_subdiv(
const MeshRenderData &mr,
382 const DRWSubdivCache &subdiv_cache,
384void extract_edituv_lines(
const MeshRenderData &mr, gpu::IndexBuf &ibo);
385void extract_edituv_lines_subdiv(
const MeshRenderData &mr,
386 const DRWSubdivCache &subdiv_cache,
388void extract_edituv_points(
const MeshRenderData &mr, gpu::IndexBuf &ibo);
389void extract_edituv_points_subdiv(
const MeshRenderData &mr,
390 const DRWSubdivCache &subdiv_cache,
392void extract_edituv_face_dots(
const MeshRenderData &mr, gpu::IndexBuf &ibo);
394void extract_skin_roots(
const MeshRenderData &mr, gpu::VertBuf &vbo);
396void extract_sculpt_data(
const MeshRenderData &mr, gpu::VertBuf &vbo);
397void extract_sculpt_data_subdiv(
const MeshRenderData &mr,
398 const DRWSubdivCache &subdiv_cache,
401void extract_orco(
const MeshRenderData &mr, gpu::VertBuf &vbo);
403void extract_mesh_analysis(
const MeshRenderData &mr, gpu::VertBuf &vbo);
405void extract_attributes(
const MeshRenderData &mr,
406 const Span<DRW_AttributeRequest> requests,
407 const Span<gpu::VertBuf *> vbos);
408void extract_attributes_subdiv(
const MeshRenderData &mr,
409 const DRWSubdivCache &subdiv_cache,
410 const Span<DRW_AttributeRequest> requests,
411 const Span<gpu::VertBuf *> vbos);
412void extract_attr_viewer(
const MeshRenderData &mr, gpu::VertBuf &vbo);
MINLINE void normal_float_to_short_v3(short out[3], const float in[3])
#define BM_elem_index_get(ele)
BLI_INLINE BMEdge * BM_edge_at_index(BMesh *bm, const int index)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
constexpr IndexRange index_range() const
constexpr bool is_empty() const
const CustomData & mesh_cd_ldata_get_from_mesh(const Mesh &mesh)
BLI_INLINE BMFace * bm_original_face_get(const MeshRenderData &mr, int idx)
void mesh_render_data_update_face_normals(MeshRenderData &mr)
BLI_INLINE BMVert * bm_original_vert_get(const MeshRenderData &mr, int idx)
GPUType convert_normal(const float3 &src)
BLI_INLINE BMEdge * bm_original_edge_get(const MeshRenderData &mr, int idx)
void convert_normals(Span< float3 > src, MutableSpan< GPUType > dst)
const CustomData & mesh_cd_edata_get_from_mesh(const Mesh &mesh)
const Mesh & editmesh_final_or_this(const Object &object, const Mesh &mesh)
std::unique_ptr< MeshRenderData > mesh_render_data_create(Object &object, Mesh &mesh, const bool is_editmode, const bool is_paint_mode, const bool edit_mode_active, const float4x4 &object_to_world, const bool do_final, const bool do_uvedit, const bool use_hide, const ToolSettings *ts)
BLI_INLINE const float * bm_face_no_get(const MeshRenderData &mr, const BMFace *efa)
void mesh_render_data_update_corner_normals(MeshRenderData &mr)
void mesh_render_data_face_flag(const MeshRenderData &mr, const BMFace *efa, const BMUVOffsets offsets, EditLoopData &eattr)
const SortedFaceData & mesh_render_data_faces_sorted_ensure(const MeshRenderData &mr, MeshBufferCache &cache)
const CustomData & mesh_cd_vdata_get_from_mesh(const Mesh &mesh)
BLI_INLINE const float * bm_vert_no_get(const MeshRenderData &mr, const BMVert *eve)
void mesh_render_data_update_loose_geom(MeshRenderData &mr, MeshBufferCache &cache)
void mesh_render_data_loop_flag(const MeshRenderData &mr, const BMLoop *l, const BMUVOffsets offsets, EditLoopData &eattr)
void extract_mesh_loose_edge_data(const Span< T > vert_data, const Span< int2 > edges, const Span< int > loose_edges, MutableSpan< T > gpu_data)
BLI_INLINE const float * bm_vert_co_get(const MeshRenderData &mr, const BMVert *eve)
void mesh_render_data_loop_edge_flag(const MeshRenderData &mr, const BMLoop *l, const BMUVOffsets offsets, EditLoopData &eattr)
const CustomData & mesh_cd_pdata_get_from_mesh(const Mesh &mesh)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
VArraySpan< bool > hide_vert
const char * default_color_name
Span< float3 > bm_vert_coords
VArraySpan< bool > hide_edge
Span< float3 > bm_vert_normals
bke::EditMeshData * edit_data
const int * orig_index_vert
bool use_simplify_normals
const ToolSettings * toolsettings
Span< float3 > vert_positions
const int * orig_index_face
VArraySpan< bool > select_vert
VArraySpan< bool > sharp_faces
const char * active_color_name
VArraySpan< bool > select_poly
eMRExtractType extract_type
VArraySpan< bool > select_edge
Span< float3 > bm_face_normals
Span< float3 > face_normals
const int * orig_index_edge
Span< float3 > corner_normals
VArraySpan< int > material_indices
VArraySpan< bool > hide_poly
OffsetIndices< int > faces
bke::MeshNormalDomain normals_domain
Array< float3 > bm_loop_normals