Fix T71532 EEVEE: Hair UV/Color attributes not working
This commit is contained in:
parent
fca069a705
commit
ba5bbf14f9
Notes:
blender-bot
2023-02-14 05:44:22 +01:00
Referenced by issue #71532, Hair Particles Not Adopting The Colour Of The Surface They Are On (when named UVMap node is used)
|
@ -894,11 +894,13 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit
|
|||
GPU_vertbuf_data_alloc(cache->proc_uv_buf[i], cache->strands_len);
|
||||
GPU_vertbuf_attr_get_raw_data(cache->proc_uv_buf[i], uv_id, &uv_step[i]);
|
||||
|
||||
char attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i);
|
||||
uint hash = BLI_ghashutil_strhash_p(name);
|
||||
GPU_vertformat_safe_attrib_name(name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
|
||||
|
||||
int n = 0;
|
||||
BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "u%u", hash);
|
||||
BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%u", hash);
|
||||
BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "u%s", attr_safe_name);
|
||||
BLI_snprintf(cache->uv_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name);
|
||||
|
||||
if (i == active_uv) {
|
||||
BLI_strncpy(cache->uv_layer_names[i][n++], "au", MAX_LAYER_NAME_LEN);
|
||||
|
@ -913,14 +915,16 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit
|
|||
GPU_vertbuf_data_alloc(cache->proc_col_buf[i], cache->strands_len);
|
||||
GPU_vertbuf_attr_get_raw_data(cache->proc_col_buf[i], col_id, &col_step[i]);
|
||||
|
||||
char attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPCOL, i);
|
||||
uint hash = BLI_ghashutil_strhash_p(name);
|
||||
GPU_vertformat_safe_attrib_name(name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
|
||||
|
||||
int n = 0;
|
||||
BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "c%u", hash);
|
||||
BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "c%s", attr_safe_name);
|
||||
|
||||
/* We only do vcols auto name that are not overridden by uvs */
|
||||
if (CustomData_get_named_layer_index(&psmd->mesh_final->ldata, CD_MLOOPUV, name) == -1) {
|
||||
BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%u", hash);
|
||||
BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name);
|
||||
}
|
||||
|
||||
if (i == active_col) {
|
||||
|
@ -1176,10 +1180,12 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit,
|
|||
col_id = MEM_mallocN(sizeof(*col_id) * num_col_layers, "Col attr format");
|
||||
|
||||
for (int i = 0; i < num_uv_layers; i++) {
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i);
|
||||
char uuid[32];
|
||||
|
||||
BLI_snprintf(uuid, sizeof(uuid), "u%u", BLI_ghashutil_strhash_p(name));
|
||||
char uuid[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i);
|
||||
GPU_vertformat_safe_attrib_name(name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
|
||||
|
||||
BLI_snprintf(uuid, sizeof(uuid), "u%s", attr_safe_name);
|
||||
uv_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
||||
|
||||
if (i == active_uv) {
|
||||
|
@ -1187,11 +1193,12 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit,
|
|||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < num_uv_layers; i++) {
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i);
|
||||
char uuid[32];
|
||||
for (int i = 0; i < num_col_layers; i++) {
|
||||
char uuid[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
|
||||
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPCOL, i);
|
||||
GPU_vertformat_safe_attrib_name(name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
|
||||
|
||||
BLI_snprintf(uuid, sizeof(uuid), "c%u", BLI_ghashutil_strhash_p(name));
|
||||
BLI_snprintf(uuid, sizeof(uuid), "c%s", attr_safe_name);
|
||||
col_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
||||
|
||||
if (i == active_col) {
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#define __DRAW_HAIR_PRIVATE_H__
|
||||
|
||||
#define MAX_LAYER_NAME_CT 4 /* u0123456789, u, au, a0123456789 */
|
||||
#define MAX_LAYER_NAME_LEN DECIMAL_DIGITS_BOUND(uint) + 2
|
||||
#define MAX_LAYER_NAME_LEN GPU_MAX_SAFE_ATTRIB_NAME + 2
|
||||
#define MAX_THICKRES 2 /* see eHairType */
|
||||
#define MAX_HAIR_SUBDIV 4 /* see hair_subdiv rna */
|
||||
|
||||
|
|
Loading…
Reference in New Issue