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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKévin Dietrich <kevin.dietrich@mailoo.org>2022-02-17 10:41:01 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2022-02-17 10:41:01 +0300
commit43b40f7bdedfd9bf7a466eb9680ac95e2c18925d (patch)
treeedc8ba7439565f9ede107b6c4404f412e350fd47 /source/blender/draw/intern/mesh_extractors
parent6a8709ba136ef4e8522555f279294a886595e34c (diff)
parentbe3047c500bebcbf82ec95158a5d24703c104f3d (diff)
Merge remote-tracking branch 'origin/blender-v3.1-release'
Diffstat (limited to 'source/blender/draw/intern/mesh_extractors')
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc38
1 files changed, 15 insertions, 23 deletions
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
index 2e30d6bdfcf..b4ecffd5e4c 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
@@ -153,10 +153,10 @@ static void extract_weights_iter_poly_mesh(const MeshRenderData *mr,
}
static void extract_weights_init_subdiv(const DRWSubdivCache *subdiv_cache,
- const MeshRenderData *UNUSED(mr),
+ const MeshRenderData *mr,
struct MeshBatchCache *cache,
void *buffer,
- void *UNUSED(data))
+ void *_data)
{
Mesh *coarse_mesh = subdiv_cache->mesh;
GPUVertBuf *vbo = static_cast<GPUVertBuf *>(buffer);
@@ -168,28 +168,20 @@ static void extract_weights_init_subdiv(const DRWSubdivCache *subdiv_cache,
GPU_vertbuf_init_build_on_device(vbo, &format, subdiv_cache->num_subdiv_loops);
GPUVertBuf *coarse_weights = GPU_vertbuf_calloc();
- GPU_vertbuf_init_with_format(coarse_weights, &format);
- GPU_vertbuf_data_alloc(coarse_weights, coarse_mesh->totloop);
- float *coarse_weights_data = static_cast<float *>(GPU_vertbuf_get_data(coarse_weights));
+ extract_weights_init(mr, cache, coarse_weights, _data);
- const DRW_MeshWeightState *wstate = &cache->weight_state;
- const MDeformVert *dverts = static_cast<const MDeformVert *>(
- CustomData_get_layer(&coarse_mesh->vdata, CD_MDEFORMVERT));
-
- for (int i = 0; i < coarse_mesh->totpoly; i++) {
- const MPoly *mpoly = &coarse_mesh->mpoly[i];
-
- for (int loop_index = mpoly->loopstart; loop_index < mpoly->loopstart + mpoly->totloop;
- loop_index++) {
- const MLoop *ml = &coarse_mesh->mloop[loop_index];
-
- if (dverts != nullptr) {
- const MDeformVert *dvert = &dverts[ml->v];
- coarse_weights_data[loop_index] = evaluate_vertex_weight(dvert, wstate);
- }
- else {
- coarse_weights_data[loop_index] = evaluate_vertex_weight(nullptr, wstate);
- }
+ if (mr->extract_type != MR_EXTRACT_BMESH) {
+ for (int i = 0; i < coarse_mesh->totpoly; i++) {
+ const MPoly *mpoly = &coarse_mesh->mpoly[i];
+ extract_weights_iter_poly_mesh(mr, mpoly, i, _data);
+ }
+ }
+ else {
+ BMIter f_iter;
+ BMFace *efa;
+ int face_index = 0;
+ BM_ITER_MESH_INDEX (efa, &f_iter, mr->bm, BM_FACES_OF_MESH, face_index) {
+ extract_weights_iter_poly_bm(mr, efa, face_index, _data);
}
}