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-05-03 23:59:31 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2022-05-03 23:59:31 +0300
commit502c707e0e836b14516ceed54622adc3a605d31e (patch)
treec6b372b373ae48f5f2dc3521e30f6ef72cb279f4 /source/blender/draw
parent1d668b6356327ba86d524d53bbf1360a5a0914d5 (diff)
parent281bcc1c1dd6b786bafa2712986885c44ed482a3 (diff)
Merge remote-tracking branch 'origin/blender-v3.2-release'
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_vert.glsl18
-rw-r--r--source/blender/draw/engines/eevee/shaders/surface_frag.glsl8
-rw-r--r--source/blender/draw/engines/eevee/shaders/surface_vert.glsl18
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl9
-rw-r--r--source/blender/draw/intern/draw_cache_impl_particles.c16
-rw-r--r--source/blender/draw/intern/draw_cache_impl_subdivision.cc11
-rw-r--r--source/blender/draw/intern/draw_subdivision.h5
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc19
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc13
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc7
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc12
-rw-r--r--source/blender/draw/intern/shaders/common_attribute_lib.glsl6
12 files changed, 44 insertions, 98 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
index ab0f4d6bec8..5295a05b965 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -71,16 +71,6 @@ vec4 attr_load_tangent(samplerBuffer cd_buf)
return vec4(0.0, 0.0, 0.0, 1.0);
}
-vec3 attr_load_uv(samplerBuffer cd_buf)
-{
- return texelFetch(cd_buf, hairStrandID).rgb;
-}
-
-vec4 attr_load_color(samplerBuffer cd_buf)
-{
- return texelFetch(cd_buf, hairStrandID).rgba;
-}
-
vec4 attr_load_vec4(samplerBuffer cd_buf)
{
return texelFetch(cd_buf, hairStrandID).rgba;
@@ -135,14 +125,6 @@ vec2 attr_load_float(vec2 attr)
{
return attr;
}
-vec4 attr_load_color(vec4 attr)
-{
- return attr;
-}
-vec3 attr_load_uv(vec3 attr)
-{
- return attr;
-}
#endif
/* Passthrough. */
diff --git a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl
index 79ec3807d0b..ace6c7d788d 100644
--- a/source/blender/draw/engines/eevee/shaders/surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/surface_frag.glsl
@@ -171,14 +171,6 @@ vec2 attr_load_vec2(vec2 attr)
{
return vec2(0);
}
-vec4 attr_load_color(vec4 attr)
-{
- return vec4(0);
-}
-vec3 attr_load_uv(vec3 attr)
-{
- return vec3(0);
-}
/* Passthrough. */
float attr_load_temperature_post(float attr)
diff --git a/source/blender/draw/engines/eevee/shaders/surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl
index 49c18832f72..7cb4d7ac25c 100644
--- a/source/blender/draw/engines/eevee/shaders/surface_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/surface_vert.glsl
@@ -77,16 +77,6 @@ vec4 attr_load_tangent(samplerBuffer cd_buf)
return vec4(hairTangent, 1.0);
}
-vec3 attr_load_uv(samplerBuffer cd_buf)
-{
- return texelFetch(cd_buf, hairStrandID).rgb;
-}
-
-vec4 attr_load_color(samplerBuffer cd_buf)
-{
- return texelFetch(cd_buf, hairStrandID).rgba;
-}
-
vec4 attr_load_vec4(samplerBuffer cd_buf)
{
return texelFetch(cd_buf, hairStrandID).rgba;
@@ -148,14 +138,6 @@ float attr_load_float(float attr)
{
return attr;
}
-vec4 attr_load_color(vec4 attr)
-{
- return attr;
-}
-vec3 attr_load_uv(vec3 attr)
-{
- return attr;
-}
#endif
/* Passthrough. */
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
index 914261d7f59..d6eeedd8640 100644
--- a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
@@ -155,15 +155,6 @@ float attr_load_float(sampler3D tex)
{
return texture(tex, grid_coordinates()).r;
}
-vec4 attr_load_color(sampler3D tex)
-{
- return texture(tex, grid_coordinates());
-}
-vec3 attr_load_uv(sampler3D attr)
-{
- attr_id += 1;
- return vec3(0);
-}
/* TODO(@fclem): These implementation details should concern the DRWManager and not be a fix on
* the engine side. But as of now, the engines are reponsible for loading the attributes. */
diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c
index 0f1ab967ca5..a1c0a42ba6f 100644
--- a/source/blender/draw/intern/draw_cache_impl_particles.c
+++ b/source/blender/draw/intern/draw_cache_impl_particles.c
@@ -875,14 +875,13 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit
GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
int n = 0;
- 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);
}
if (i == render_uv) {
- BLI_strncpy(cache->uv_layer_names[i][n++], "u", MAX_LAYER_NAME_LEN);
+ BLI_strncpy(cache->uv_layer_names[i][n++], "a", MAX_LAYER_NAME_LEN);
}
}
/* Vertex colors */
@@ -896,12 +895,7 @@ static void particle_batch_cache_ensure_procedural_strand_data(PTCacheEdit *edit
GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
int n = 0;
- 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%s", attr_safe_name);
- }
+ BLI_snprintf(cache->col_layer_names[i][n++], MAX_LAYER_NAME_LEN, "a%s", attr_safe_name);
if (i == active_col) {
BLI_strncpy(cache->col_layer_names[i][n++], "ac", MAX_LAYER_NAME_LEN);
@@ -1186,11 +1180,11 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit,
const char *name = CustomData_get_layer_name(&psmd->mesh_final->ldata, CD_MLOOPUV, i);
GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
- BLI_snprintf(uuid, sizeof(uuid), "u%s", attr_safe_name);
+ BLI_snprintf(uuid, sizeof(uuid), "a%s", attr_safe_name);
uv_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
if (i == active_uv) {
- GPU_vertformat_alias_add(&format, "u");
+ GPU_vertformat_alias_add(&format, "a");
}
}
@@ -1200,7 +1194,7 @@ static void particle_batch_cache_ensure_pos_and_seg(PTCacheEdit *edit,
&psmd->mesh_final->ldata, CD_PROP_BYTE_COLOR, i);
GPU_vertformat_safe_attr_name(name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
- BLI_snprintf(uuid, sizeof(uuid), "c%s", attr_safe_name);
+ BLI_snprintf(uuid, sizeof(uuid), "a%s", attr_safe_name);
col_id[i] = GPU_vertformat_attr_add(&format, uuid, GPU_COMP_U16, 4, GPU_FETCH_FLOAT);
if (i == active_col) {
diff --git a/source/blender/draw/intern/draw_cache_impl_subdivision.cc b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
index 7c72b77af1f..19745304b2d 100644
--- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc
+++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
@@ -366,6 +366,17 @@ static GPUVertFormat *get_origindex_format()
return &format;
}
+GPUVertFormat *draw_subdiv_get_pos_nor_format()
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ GPU_vertformat_attr_add(&format, "nor", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ GPU_vertformat_alias_add(&format, "vnor");
+ }
+ return &format;
+}
+
/** \} */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/draw/intern/draw_subdivision.h b/source/blender/draw/intern/draw_subdivision.h
index e5f64a99092..267a98f2d37 100644
--- a/source/blender/draw/intern/draw_subdivision.h
+++ b/source/blender/draw/intern/draw_subdivision.h
@@ -13,6 +13,7 @@ struct BMesh;
struct GPUIndexBuf;
struct GPUUniformBuf;
struct GPUVertBuf;
+struct GPUVertFormat;
struct Mesh;
struct MeshBatchCache;
struct MeshBufferCache;
@@ -284,6 +285,10 @@ void draw_subdiv_build_edituv_stretch_angle_buffer(const DRWSubdivCache *cache,
int uvs_offset,
struct GPUVertBuf *stretch_angles);
+/** Return the format used for the positions and normals VBO.
+ */
+struct GPUVertFormat *draw_subdiv_get_pos_nor_format();
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc
index 0d422180288..4ced14ab11a 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc
@@ -224,6 +224,21 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi
GPUVertBuf *pos_nor = cache->final.buff.vbo.pos_nor;
GPUVertBuf *uvs = cache->final.buff.vbo.uv;
+ /* It may happen that the data for the UV editor is requested before (as a separate draw update)
+ * the data for the mesh when switching to the `UV Editing` workspace, and therefore the position
+ * buffer might not be created yet. In this case, create a buffer it locally, the subdivision
+ * data should already be evaluated if we are here. This can happen if the subsurf modifier is
+ * only enabled in edit-mode. See T96338. */
+ if (!pos_nor) {
+ const DRWSubdivLooseGeom &loose_geom = subdiv_cache->loose_geom;
+ pos_nor = GPU_vertbuf_calloc();
+ GPU_vertbuf_init_build_on_device(pos_nor,
+ draw_subdiv_get_pos_nor_format(),
+ subdiv_cache->num_subdiv_loops + loose_geom.loop_len);
+
+ draw_subdiv_extract_pos_nor(subdiv_cache, pos_nor);
+ }
+
/* UVs are stored contiguously so we need to compute the offset in the UVs buffer for the active
* UV layer. */
CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_MESH) ? &mr->me->ldata : &mr->bm->ldata;
@@ -253,6 +268,10 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi
draw_subdiv_build_edituv_stretch_angle_buffer(
subdiv_cache, pos_nor, uvs, uvs_offset, refined_vbo);
+
+ if (!cache->final.buff.vbo.pos_nor) {
+ GPU_vertbuf_discard(pos_nor);
+ }
}
constexpr MeshExtract create_extractor_edituv_edituv_stretch_angle()
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
index dd056891a94..ea46d9c4caa 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
@@ -179,17 +179,6 @@ static void extract_pos_nor_finish(const MeshRenderData *UNUSED(mr),
MEM_freeN(data->normals);
}
-static GPUVertFormat *get_pos_nor_format()
-{
- static GPUVertFormat format = {0};
- if (format.attr_len == 0) {
- GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- GPU_vertformat_attr_add(&format, "nor", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- GPU_vertformat_alias_add(&format, "vnor");
- }
- return &format;
-}
-
static GPUVertFormat *get_normals_format()
{
static GPUVertFormat format = {0};
@@ -221,7 +210,7 @@ static void extract_pos_nor_init_subdiv(const DRWSubdivCache *subdiv_cache,
/* Initialize the vertex buffer, it was already allocated. */
GPU_vertbuf_init_build_on_device(
- vbo, get_pos_nor_format(), subdiv_cache->num_subdiv_loops + loose_geom.loop_len);
+ vbo, draw_subdiv_get_pos_nor_format(), subdiv_cache->num_subdiv_loops + loose_geom.loop_len);
if (subdiv_cache->num_subdiv_loops == 0) {
return;
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc
index 4532f3c3710..5fb4b401ae3 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc
@@ -44,14 +44,11 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format,
GPU_vertformat_safe_attr_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
/* UV layer name. */
- BLI_snprintf(attr_name, sizeof(attr_name), "u%s", attr_safe_name);
- GPU_vertformat_attr_add(format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- /* Auto layer name. */
BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
- GPU_vertformat_alias_add(format, attr_name);
+ GPU_vertformat_attr_add(format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
/* Active render layer name. */
if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) {
- GPU_vertformat_alias_add(format, "u");
+ GPU_vertformat_alias_add(format, "a");
}
/* Active display layer name. */
if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) {
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
index 4cb68cad66c..e5dd025787d 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
@@ -90,7 +90,7 @@ static void init_vcol_format(GPUVertFormat *format,
GPU_vertformat_safe_attr_name(ref.layer->name, attr_safe_name, GPU_MAX_SAFE_ATTR_NAME);
/* VCol layer name. */
- BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
+ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
GPU_vertformat_attr_add(format, attr_name, GPU_COMP_U16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
/* Active layer name. */
@@ -102,16 +102,6 @@ static void init_vcol_format(GPUVertFormat *format,
if (ref.layer == render) {
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.layer->name) != -1;
-
- if (!bad) {
- BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
- GPU_vertformat_alias_add(format, attr_name);
- }
}
}
diff --git a/source/blender/draw/intern/shaders/common_attribute_lib.glsl b/source/blender/draw/intern/shaders/common_attribute_lib.glsl
index 30239a84c0c..ce5e49c7f63 100644
--- a/source/blender/draw/intern/shaders/common_attribute_lib.glsl
+++ b/source/blender/draw/intern/shaders/common_attribute_lib.glsl
@@ -4,8 +4,6 @@
vec3 attr_load_orco(vec4 orco);
vec4 attr_load_tangent(vec4 tangent);
-vec3 attr_load_uv(vec3 uv);
-vec4 attr_load_color(vec4 color);
vec4 attr_load_vec4(vec4 attr);
vec3 attr_load_vec3(vec3 attr);
vec2 attr_load_vec2(vec2 attr);
@@ -13,8 +11,6 @@ float attr_load_float(float attr);
vec3 attr_load_orco(samplerBuffer orco);
vec4 attr_load_tangent(samplerBuffer tangent);
-vec3 attr_load_uv(samplerBuffer uv);
-vec4 attr_load_color(samplerBuffer color);
vec4 attr_load_vec4(samplerBuffer attr);
vec3 attr_load_vec3(samplerBuffer attr);
vec2 attr_load_vec2(samplerBuffer attr);
@@ -22,8 +18,6 @@ float attr_load_float(samplerBuffer attr);
vec3 attr_load_orco(sampler3D orco);
vec4 attr_load_tangent(sampler3D tangent);
-vec3 attr_load_uv(sampler3D attr);
-vec4 attr_load_color(sampler3D tex);
vec4 attr_load_vec4(sampler3D tex);
vec3 attr_load_vec3(sampler3D tex);
vec2 attr_load_vec2(sampler3D tex);