[Bf-blender-cvs] [f09dbc54a5a] temp-sculpt-colors: Merge branch 'master' into temp-sculpt-colors
Joseph Eagar
noreply at git.blender.org
Sat Feb 12 16:52:00 CET 2022
Commit: f09dbc54a5a59b189c797193dc29abf2caee0c29
Author: Joseph Eagar
Date: Sat Feb 12 02:32:00 2022 -0800
Branches: temp-sculpt-colors
https://developer.blender.org/rBf09dbc54a5a59b189c797193dc29abf2caee0c29
Merge branch 'master' into temp-sculpt-colors
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/attribute.c
index 44e24d53e7f,ba33a9fee97..07c64fedf90
--- a/source/blender/blenkernel/intern/attribute.c
+++ b/source/blender/blenkernel/intern/attribute.c
@@@ -36,12 -19,11 +19,12 @@@
#include "DNA_pointcloud_types.h"
#include "BLI_string_utf8.h"
+#include "BLI_string_utils.h"
#include "BKE_attribute.h"
+ #include "BKE_curves.h"
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
- #include "BKE_hair.h"
#include "BKE_pointcloud.h"
#include "BKE_report.h"
diff --cc source/blender/draw/intern/draw_cache_impl_mesh.c
index 7ed18a8968d,2d78a3f2b6f..ab04b57bf01
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@@ -693,80 -639,13 +678,81 @@@ static DRW_MeshCDMask mesh_cd_calc_used
cd_used.orco = 1;
break;
}
+
+ /* note that attr->type will always be CD_PROP_COLOR even for
+ CD_MLOOPCOL layers, see node_shader_gpu_vertex_color in
+ node_shader_vertex_color.cc
+ */
+ case CD_MLOOPCOL:
+ case CD_PROP_COLOR: {
+ const AttributeRef *render = &me->attr_color_render;
+
+ if (domain == ATTR_DOMAIN_NUM) {
+ domain = render->domain;
+ }
+
+ if (layer == -1 && name[0] != '\0') {
+ layer = CustomData_get_named_layer_index(cd_ldata, type, name);
+ domain = layer != -1 ? ATTR_DOMAIN_CORNER : domain;
+
+ if (layer == -1) {
+ layer = CustomData_get_named_layer_index(cd_vdata, type, name);
+ domain = layer != -1 ? ATTR_DOMAIN_POINT : domain;
+ }
+
+ if (layer == -1) {
+ layer = CustomData_get_named_layer_index(cd_ldata, CD_MLOOPCOL, name);
+
+ if (layer != -1) {
+ domain = ATTR_DOMAIN_CORNER;
+ type = CD_MLOOPCOL;
+ }
+ }
+
+ if (layer == -1) {
+ layer = CustomData_get_named_layer_index(cd_vdata, CD_MLOOPCOL, name);
+
+ if (layer != -1) {
+ domain = ATTR_DOMAIN_POINT;
+ type = CD_MLOOPCOL;
+ }
+ }
+
+ if (layer == -1) {
+ break;
+ }
+
+ AttributeRef ref;
+ const CustomData *cdata = domain == ATTR_DOMAIN_POINT ? cd_vdata : cd_ldata;
+ CustomDataLayer *clayer = cdata->layers + layer;
+
+ ref.domain = domain;
+ BLI_strncpy(ref.name, clayer->name, sizeof(ref.name));
+ ref.type = clayer->type;
+
+ int layer_i = mesh_cd_get_vcol_i(cd_vdata, cd_ldata, &ref);
+
+ if (layer_i >= 0) {
+ cd_used.vcol |= 1UL << (uint)layer_i;
+ }
+ }
+ else {
+ int layer_i = mesh_cd_get_vcol_i(cd_vdata, cd_ldata, render);
+
+ if (layer_i >= 0) {
+ cd_used.vcol |= 1UL << (uint)layer_i;
+ }
+ }
+
+ break;
+ }
+
+ case CD_PROP_FLOAT3:
case CD_PROP_BOOL:
+ case CD_PROP_INT8:
case CD_PROP_INT32:
case CD_PROP_FLOAT:
- case CD_PROP_FLOAT2:
- case CD_PROP_FLOAT3:
- case CD_PROP_COLOR: {
+ case CD_PROP_FLOAT2: {
if (layer != -1 && domain != ATTR_DOMAIN_NUM) {
drw_mesh_attributes_add_request(attributes, type, layer, domain);
}
diff --cc source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
index 990734f481e,138ff9fd1ff..27bd680f9e9
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
@@@ -120,67 -25,32 +104,40 @@@ static void init_vcol_format(GPUVertFor
{
GPU_vertformat_deinterleave(format);
+ /* note that there are two vcol types that work across point and corner domains */
+
const uint32_t vcol_layers = cache->cd_used.vcol;
- for (int i = 0; i < MAX_MCOL; i++) {
- if (vcol_layers & (1 << i)) {
- char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
- const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
- GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
+ blender::Vector<AttributeRef> refs = get_vcol_refs(cd_vdata, cd_ldata, vcol_layers);
- BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
- GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ for (const AttributeRef &ref : refs) {
+ char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
- if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL)) {
- GPU_vertformat_alias_add(format, "c");
- }
- if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL)) {
- GPU_vertformat_alias_add(format, "ac");
- }
+ GPU_vertformat_safe_attr_name(ref.name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
- /* Gather number of auto layers. */
- /* We only do `vcols` that are not overridden by `uvs`. */
- if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, layer_name) == -1) {
- BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
- GPU_vertformat_alias_add(format, attr_name);
- }
+ BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
+
+ GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+
+ if (BKE_id_attribute_ref_equals(attr_active, &ref)) {
+ GPU_vertformat_alias_add(format, "ac");
+ }
+
+ if (BKE_id_attribute_ref_equals(attr_render, &ref)) {
+ GPU_vertformat_alias_add(format, "c");
+ }
+
+ /* Gather number of auto layers. */
+ /* We only do `vcols` that are not overridden by `uvs`. */
+
+ bool bad = ref.domain == ATTR_DOMAIN_CORNER;
+ bad = bad && CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, ref.name) != -1;
+
+ if (!bad) {
+ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
+ GPU_vertformat_alias_add(format, attr_name);
}
}
-
- #if 0
- for (int i = 0; i < MAX_MCOL; i++) {
- if (vcol_layers & (1 << i)) {
- char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTR_NAME];
- const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
- GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
-
- BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
- GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
-
- if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL)) {
- GPU_vertformat_alias_add(format, "c");
- }
- if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL)) {
- GPU_vertformat_alias_add(format, "ac");
- }
-
- /* Gather number of auto layers. */
- /* We only do `vcols` that are not overridden by `uvs`. */
- if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, layer_name) == -1) {
- BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
- GPU_vertformat_alias_add(format, attr_name);
- }
- }
- }
- #endif
}
/* Vertex format for vertex colors, only used during the coarse data upload for the subdivision
diff --cc source/blender/editors/sculpt_paint/sculpt_expand.c
index 6acbe08c7f5,2ef35d540b9..46940b619e6
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@@ -1330,11 -1314,10 +1314,11 @@@ static void sculpt_expand_colors_update
continue;
}
- copy_v4_v4(vd.col, final_color);
+ SCULPT_vertex_color_set(ss, vd.index, final_color);
+
any_changed = true;
if (vd.mvert) {
- vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+ BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
}
}
BKE_pbvh_vertex_iter_end;
diff --cc source/blender/editors/sculpt_paint/sculpt_filter_color.c
index 1eed0c88836,93e2d721962..f21caa3fb4a
--- a/source/blender/editors/sculpt_paint/sculpt_filter_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
@@@ -206,13 -186,10 +190,13 @@@ static void color_filter_task_cb(void *
}
}
- copy_v3_v3(vd.col, final_color);
+ float col[4];
+ SCULPT_vertex_color_get(ss, vd.index, col);
+
+ copy_v3_v3(col, final_color);
if (vd.mvert) {
- vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+ BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
}
}
BKE_pbvh_vertex_iter_end;
diff --cc source/blender/editors/sculpt_paint/sculpt_paint_color.c
index cee53c130c8,5d248cb520a..16d168ede08
--- a/source/blender/editors/sculpt_paint/sculpt_paint_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_color.c
@@@ -101,14 -85,10 +85,14 @@@ static void do_color_smooth_task_cb_exe
float smooth_color[4];
SCULPT_neighbor_color_average(ss, smooth_color, vd.index);
- blend_color_interpolate_float(vd.col, vd.col, smooth_color, fade);
+ float col[4];
+
+ SCULPT_vertex_color_get(ss, vd.index, col);
+ blend_color_interpolate_float(col, col, smooth_color, fade);
+ SCULPT_vertex_color_set(ss, vd.index, col);
if (vd.mvert) {
- vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
+ BKE_pbvh_vert_mark_update(ss->pbvh, vd.index);
}
}
BKE_pbvh_vertex_iter_end;
@@@ -197,14 -177,12 +181,14 @@@ static void do_paint_brush_task_cb_ex(v
/* Final mix over the original color using brush alpha. */
mul_v4_v4fl(buffer_color, color_buffer->color[vd.i], brush->alpha);
- IMB_blend_color_float(vd.col, orig_data.col, buffer_color, brush->blend);
-
- CLAMP4(vd.col, 0.0f, 1.0f);
+ float col[4];
+ SCULPT_vertex_color_get(ss, vd.index, col);
+ IMB_blend_color_float(col, orig_data.col, b
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list