Blender V4.3
extract_mesh_vbo_skin_roots.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10
11#include "extract_mesh.hh"
12
13namespace blender::draw {
14
19
21{
22 /* Exclusively for edit mode. */
23 BLI_assert(mr.bm);
24
25 static GPUVertFormat format = {0};
26 if (format.attr_len == 0) {
29 }
30
31 Vector<SkinRootData> skin_roots;
32 const int offset = CustomData_get_offset(&mr.bm->vdata, CD_MVERT_SKIN);
33 BMIter iter;
34 BMVert *vert;
35 BM_ITER_MESH (vert, &iter, mr.bm, BM_VERTS_OF_MESH) {
36 const MVertSkin *vs = (const MVertSkin *)BM_ELEM_CD_GET_VOID_P(vert, offset);
37 if (vs->flag & MVERT_SKIN_ROOT) {
38 skin_roots.append({(vs->radius[0] + vs->radius[1]) * 0.5f, bm_vert_co_get(mr, vert)});
39 }
40 }
41
43 GPU_vertbuf_data_alloc(vbo, skin_roots.size());
44 vbo.data<SkinRootData>().copy_from(skin_roots);
45}
46
47} // namespace blender::draw
int CustomData_get_offset(const CustomData *data, eCustomDataType type)
#define BLI_assert(a)
Definition BLI_assert.h:50
@ CD_MVERT_SKIN
@ MVERT_SKIN_ROOT
#define GPU_vertbuf_init_with_format(verts, format)
void GPU_vertbuf_data_alloc(blender::gpu::VertBuf &verts, uint v_len)
@ GPU_FETCH_FLOAT
uint GPU_vertformat_attr_add(GPUVertFormat *, const char *name, GPUVertCompType, uint comp_len, GPUVertFetchMode)
@ GPU_COMP_F32
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_ITER_MESH(ele, iter, bm, itype)
@ BM_VERTS_OF_MESH
int64_t size() const
void append(const T &value)
MutableSpan< T > data()
Extraction of Mesh data into VBO to feed to GPU.
format
void extract_skin_roots(const MeshRenderData &mr, gpu::VertBuf &vbo)
BLI_INLINE const float * bm_vert_co_get(const MeshRenderData &mr, const BMVert *eve)
CustomData vdata