40 for (const int face_index : range) {
41 const BMFace &face = *BM_face_at_index(&const_cast<BMesh &>(bm), face_index);
42 const BMLoop *loop = BM_FACE_FIRST_LOOP(&face);
43 for ([[maybe_unused]] const int i : IndexRange(face.len)) {
44 const int index = BM_elem_index_get(loop);
45 corners_data[index] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, loop->v));
51 const Span<int> loose_edges = mr.loose_edges;
53 for (const int i : range) {
54 const BMEdge &edge = *BM_edge_at_index(&const_cast<BMesh &>(bm), loose_edges[i]);
55 loose_edge_data[i * 2 + 0] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, edge.v1));
56 loose_edge_data[i * 2 + 1] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, edge.v2));
60 const Span<int> loose_verts = mr.loose_verts;
62 for (const int i : range) {
63 const BMVert &vert = *BM_vert_at_index(&const_cast<BMesh &>(bm), loose_verts[i]);
64 loose_vert_data[i] = GPU_normal_convert_i10_v3(bm_vert_no_get(mr, &vert));
72 if (
format.attr_len == 0) {
#define GPU_vertbuf_init_with_format(verts, format)
void GPU_vertbuf_data_alloc(blender::gpu::VertBuf &verts, uint v_len)
ATTR_WARN_UNUSED_RESULT BMesh * bm
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
constexpr int64_t size() const
constexpr IndexRange index_range() const
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
constexpr MutableSpan slice(const int64_t start, const int64_t size) const
constexpr MutableSpan take_back(const int64_t n) const
constexpr MutableSpan take_front(const int64_t n) const
constexpr int64_t size() const
constexpr IndexRange index_range() const
void gather(const GVArray &src, const IndexMask &indices, GMutableSpan dst, int64_t grain_size=4096)
void convert_normals(Span< float3 > src, MutableSpan< GPUType > dst)
static void extract_vert_normals_bm(const MeshRenderData &mr, MutableSpan< GPUPackedNormal > vbo_data)
void extract_vert_normals(const MeshRenderData &mr, gpu::VertBuf &vbo)
void extract_mesh_loose_edge_data(const Span< T > vert_data, const Span< int2 > edges, const Span< int > loose_edges, MutableSpan< T > gpu_data)
static void extract_vert_normals_mesh(const MeshRenderData &mr, MutableSpan< GPUPackedNormal > vbo_data)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
eMRExtractType extract_type