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:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-02-22 18:56:54 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-02-22 19:02:51 +0300
commit3b132778deaac733baa78653685471e344b6b7c8 (patch)
tree568e05c772008ef3e1d3149c55dfb0e20719d950 /source/blender/blenkernel/intern/subdiv_ccg_mask.c
parentb6c61945aed51d86dc474df616761f9a25d71d09 (diff)
Multires: Support smooth shading when sculpting
On CCG side it is done similar to displacement, where we have a dedicated functor which evaluates displacement. Might be seemed as an overkill, but allows to decouple SubdivCCG from mesh entirely, and maybe even free up coarse mesh in order to save some memory. Some weak-looking aspect is the call to update normals from the draw manager. Ideally, the manager will only draw what is already evaluated. But it's a bit tricky to find a best place for this since we avoid dependency graph updates during sculpt as much as possible. The new code mimics the old code, this is how it was in 2.7. Fix shading part of T58307.
Diffstat (limited to 'source/blender/blenkernel/intern/subdiv_ccg_mask.c')
-rw-r--r--source/blender/blenkernel/intern/subdiv_ccg_mask.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/subdiv_ccg_mask.c b/source/blender/blenkernel/intern/subdiv_ccg_mask.c
index e90d5df3774..ec9dfd30f16 100644
--- a/source/blender/blenkernel/intern/subdiv_ccg_mask.c
+++ b/source/blender/blenkernel/intern/subdiv_ccg_mask.c
@@ -54,7 +54,7 @@ typedef struct GridPaintMaskData {
} GridPaintMaskData;
static int mask_get_grid_and_coord(
- SubdivCCGMask *mask_evaluator,
+ SubdivCCGMaskEvaluator *mask_evaluator,
const int ptex_face_index, const float u, const float v,
const GridPaintMask **r_mask_grid,
float *grid_u, float *grid_v)
@@ -92,7 +92,7 @@ BLI_INLINE float read_mask_grid(const GridPaintMask *mask_grid,
return mask_grid->data[y * grid_size + x];
}
-static float eval_mask(SubdivCCGMask *mask_evaluator,
+static float eval_mask(SubdivCCGMaskEvaluator *mask_evaluator,
const int ptex_face_index,
const float u, const float v)
{
@@ -105,7 +105,7 @@ static float eval_mask(SubdivCCGMask *mask_evaluator,
return read_mask_grid(mask_grid, grid_u, grid_v);
}
-static void free_mask_data(SubdivCCGMask *mask_evaluator)
+static void free_mask_data(SubdivCCGMaskEvaluator *mask_evaluator)
{
GridPaintMaskData *data = mask_evaluator->user_data;
MEM_freeN(data->ptex_poly_corner);
@@ -126,7 +126,7 @@ static int count_num_ptex_faces(const Mesh *mesh)
return num_ptex_faces;
}
-static void mask_data_init_mapping(SubdivCCGMask *mask_evaluator,
+static void mask_data_init_mapping(SubdivCCGMaskEvaluator *mask_evaluator,
const Mesh *mesh)
{
GridPaintMaskData *data = mask_evaluator->user_data;
@@ -156,7 +156,8 @@ static void mask_data_init_mapping(SubdivCCGMask *mask_evaluator,
}
}
-static void mask_init_data(SubdivCCGMask *mask_evaluator, const Mesh *mesh)
+static void mask_init_data(SubdivCCGMaskEvaluator *mask_evaluator,
+ const Mesh *mesh)
{
GridPaintMaskData *data = mask_evaluator->user_data;
data->mpoly = mesh->mpoly;
@@ -165,14 +166,14 @@ static void mask_init_data(SubdivCCGMask *mask_evaluator, const Mesh *mesh)
mask_data_init_mapping(mask_evaluator, mesh);
}
-static void mask_init_functions(SubdivCCGMask *mask_evaluator)
+static void mask_init_functions(SubdivCCGMaskEvaluator *mask_evaluator)
{
mask_evaluator->eval_mask = eval_mask;
mask_evaluator->free = free_mask_data;
}
bool BKE_subdiv_ccg_mask_init_from_paint(
- SubdivCCGMask *mask_evaluator,
+ SubdivCCGMaskEvaluator *mask_evaluator,
const struct Mesh *mesh)
{
GridPaintMask *grid_paint_mask =