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
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/intern/draw_cache_extract_mesh.cc4
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh.h3
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc76
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc27
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc7
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc7
6 files changed, 66 insertions, 58 deletions
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc
index eed015bc212..117ce2a2817 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc
@@ -861,7 +861,9 @@ static void mesh_buffer_cache_create_requested_subdiv(MeshBatchCache *cache,
extractor->init_subdiv(subdiv_cache, &mr, cache, buffer, data);
if (extractor->iter_subdiv) {
- extractor->iter_subdiv(subdiv_cache, &mr, data);
+ for (uint i = 0; i < subdiv_cache->num_subdiv_quads; i++) {
+ extractor->iter_subdiv(subdiv_cache, &mr, data, i);
+ }
}
if (extractor->iter_loose_geom_subdiv) {
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh.h b/source/blender/draw/intern/mesh_extractors/extract_mesh.h
index 7c6f4dea6c9..5d3eaf16f10 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh.h
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh.h
@@ -225,7 +225,8 @@ typedef void(ExtractInitSubdivFn)(const struct DRWSubdivCache *subdiv_cache,
void *data);
typedef void(ExtractIterSubdivFn)(const struct DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *data);
+ void *data,
+ uint subdiv_quad_index);
typedef void(ExtractFinishSubdivFn)(const struct DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
struct MeshBatchCache *cache,
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
index 5cb77426438..3a2b6d468d8 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
@@ -112,30 +112,29 @@ static void extract_edituv_tris_init_subdiv(const DRWSubdivCache *subdiv_cache,
static void extract_edituv_tris_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data);
int *subdiv_loop_poly_index = subdiv_cache->subdiv_loop_poly_index;
- for (uint i = 0; i < subdiv_cache->num_subdiv_quads; i++) {
- const uint loop_idx = i * 4;
- const int poly_origindex = subdiv_loop_poly_index[loop_idx];
- BMFace *efa = bm_original_face_get(mr, poly_origindex);
+ const uint loop_idx = subdiv_quad_index * 4;
+ const int poly_origindex = subdiv_loop_poly_index[loop_idx];
+ BMFace *efa = bm_original_face_get(mr, poly_origindex);
- edituv_tri_add(data,
- BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0,
- BM_elem_flag_test(efa, BM_ELEM_SELECT) != 0,
- loop_idx,
- loop_idx + 1,
- loop_idx + 2);
-
- edituv_tri_add(data,
- BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0,
- BM_elem_flag_test(efa, BM_ELEM_SELECT) != 0,
- loop_idx,
- loop_idx + 2,
- loop_idx + 3);
- }
+ edituv_tri_add(data,
+ BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0,
+ BM_elem_flag_test(efa, BM_ELEM_SELECT) != 0,
+ loop_idx,
+ loop_idx + 1,
+ loop_idx + 2);
+
+ edituv_tri_add(data,
+ BM_elem_flag_test(efa, BM_ELEM_HIDDEN) != 0,
+ BM_elem_flag_test(efa, BM_ELEM_SELECT) != 0,
+ loop_idx,
+ loop_idx + 2,
+ loop_idx + 3);
}
static void extract_edituv_tris_finish_subdiv(const struct DRWSubdivCache *UNUSED(subdiv_cache),
@@ -256,30 +255,28 @@ static void extract_edituv_lines_init_subdiv(const DRWSubdivCache *subdiv_cache,
static void extract_edituv_lines_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data);
int *subdiv_loop_poly_index = subdiv_cache->subdiv_loop_poly_index;
int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index);
- for (uint i = 0; i < subdiv_cache->num_subdiv_quads; i++) {
+ uint start_loop_idx = subdiv_quad_index * 4;
+ uint end_loop_idx = (subdiv_quad_index + 1) * 4;
- uint start_loop_idx = i * 4;
- uint end_loop_idx = (i + 1) * 4;
+ const int poly_origindex = subdiv_loop_poly_index[start_loop_idx];
+ BMFace *efa = bm_original_face_get(mr, poly_origindex);
- const int poly_origindex = subdiv_loop_poly_index[start_loop_idx];
- BMFace *efa = bm_original_face_get(mr, poly_origindex);
-
- for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) {
- const int edge_origindex = subdiv_loop_edge_index[loop_idx];
- const bool real_edge = (edge_origindex != -1 &&
- mr->e_origindex[edge_origindex] != ORIGINDEX_NONE);
- edituv_edge_add(data,
- BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) != 0 || !real_edge,
- BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) != 0,
- loop_idx,
- (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1));
- }
+ for (uint loop_idx = start_loop_idx; loop_idx < end_loop_idx; loop_idx++) {
+ const int edge_origindex = subdiv_loop_edge_index[loop_idx];
+ const bool real_edge = (edge_origindex != -1 &&
+ mr->e_origindex[edge_origindex] != ORIGINDEX_NONE);
+ edituv_edge_add(data,
+ BM_elem_flag_test_bool(efa, BM_ELEM_HIDDEN) != 0 || !real_edge,
+ BM_elem_flag_test_bool(efa, BM_ELEM_SELECT) != 0,
+ loop_idx,
+ (loop_idx + 1 == end_loop_idx) ? start_loop_idx : (loop_idx + 1));
}
}
@@ -395,13 +392,16 @@ static void extract_edituv_points_init_subdiv(const DRWSubdivCache *subdiv_cache
static void extract_edituv_points_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
MeshExtract_EditUvElem_Data *data = static_cast<MeshExtract_EditUvElem_Data *>(_data);
int *subdiv_loop_vert_index = (int *)GPU_vertbuf_get_data(subdiv_cache->verts_orig_index);
int *subdiv_loop_poly_index = subdiv_cache->subdiv_loop_poly_index;
- for (uint i = 0; i < subdiv_cache->num_subdiv_loops; i++) {
+ uint start_loop_idx = subdiv_quad_index * 4;
+ uint end_loop_idx = (subdiv_quad_index + 1) * 4;
+ for (uint i = start_loop_idx; i < end_loop_idx; i++) {
const int vert_origindex = subdiv_loop_vert_index[i];
const int poly_origindex = subdiv_loop_poly_index[i];
BMFace *efa = bm_original_face_get(mr, poly_origindex);
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
index f125593cff2..59db4ca6445 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
@@ -198,25 +198,24 @@ static void extract_lines_adjacency_init_subdiv(const DRWSubdivCache *subdiv_cac
static void extract_lines_adjacency_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *UNUSED(mr),
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
MeshExtract_LineAdjacency_Data *data = static_cast<MeshExtract_LineAdjacency_Data *>(_data);
- for (uint i = 0; i < subdiv_cache->num_subdiv_quads; i++) {
- const uint loop_index = i * 4;
- const uint l0 = loop_index + 0;
- const uint l1 = loop_index + 1;
- const uint l2 = loop_index + 2;
- const uint l3 = loop_index + 3;
+ const uint loop_index = subdiv_quad_index * 4;
+ const uint l0 = loop_index + 0;
+ const uint l1 = loop_index + 1;
+ const uint l2 = loop_index + 2;
+ const uint l3 = loop_index + 3;
- const uint v0 = subdiv_cache->subdiv_loop_subdiv_vert_index[l0];
- const uint v1 = subdiv_cache->subdiv_loop_subdiv_vert_index[l1];
- const uint v2 = subdiv_cache->subdiv_loop_subdiv_vert_index[l2];
- const uint v3 = subdiv_cache->subdiv_loop_subdiv_vert_index[l3];
+ const uint v0 = subdiv_cache->subdiv_loop_subdiv_vert_index[l0];
+ const uint v1 = subdiv_cache->subdiv_loop_subdiv_vert_index[l1];
+ const uint v2 = subdiv_cache->subdiv_loop_subdiv_vert_index[l2];
+ const uint v3 = subdiv_cache->subdiv_loop_subdiv_vert_index[l3];
- lines_adjacency_triangle(v0, v1, v2, l0, l1, l2, data);
- lines_adjacency_triangle(v0, v2, v3, l0, l2, l3, data);
- }
+ lines_adjacency_triangle(v0, v1, v2, l0, l1, l2, data);
+ lines_adjacency_triangle(v0, v2, v3, l0, l2, l3, data);
}
static void extract_lines_adjacency_finish_subdiv(const DRWSubdivCache *UNUSED(subdiv_cache),
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc
index 0b4172dfb28..2ac495f3b4c 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edit_data.cc
@@ -263,14 +263,17 @@ static void extract_edit_data_init_subdiv(const DRWSubdivCache *subdiv_cache,
static void extract_edit_data_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
EditLoopData *vbo_data = *(EditLoopData **)_data;
int *subdiv_loop_vert_index = (int *)GPU_vertbuf_get_data(subdiv_cache->verts_orig_index);
int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index);
int *subdiv_loop_poly_index = subdiv_cache->subdiv_loop_poly_index;
- for (uint i = 0; i < subdiv_cache->num_subdiv_loops; i++) {
+ uint start_loop_idx = subdiv_quad_index * 4;
+ uint end_loop_idx = (subdiv_quad_index + 1) * 4;
+ for (uint i = start_loop_idx; i < end_loop_idx; i++) {
const int vert_origindex = subdiv_loop_vert_index[i];
const int edge_origindex = subdiv_loop_edge_index[i];
const int poly_origindex = subdiv_loop_poly_index[i];
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
index 067d482bc2b..b1866708d14 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
@@ -141,14 +141,17 @@ static void extract_edituv_data_init_subdiv(const DRWSubdivCache *subdiv_cache,
static void extract_edituv_data_iter_subdiv(const DRWSubdivCache *subdiv_cache,
const MeshRenderData *mr,
- void *_data)
+ void *_data,
+ uint subdiv_quad_index)
{
MeshExtract_EditUVData_Data *data = static_cast<MeshExtract_EditUVData_Data *>(_data);
int *subdiv_loop_vert_index = (int *)GPU_vertbuf_get_data(subdiv_cache->verts_orig_index);
int *subdiv_loop_edge_index = (int *)GPU_vertbuf_get_data(subdiv_cache->edges_orig_index);
int *subdiv_loop_poly_index = subdiv_cache->subdiv_loop_poly_index;
- for (uint i = 0; i < subdiv_cache->num_subdiv_loops; i++) {
+ uint start_loop_idx = subdiv_quad_index * 4;
+ uint end_loop_idx = (subdiv_quad_index + 1) * 4;
+ for (uint i = start_loop_idx; i < end_loop_idx; i++) {
const int vert_origindex = subdiv_loop_vert_index[i];
const int edge_origindex = subdiv_loop_edge_index[i];
const int poly_origindex = subdiv_loop_poly_index[i];