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 19:00:12 +0300
committerKévin Dietrich <kevin.dietrich@mailoo.org>2022-05-03 19:02:10 +0300
commit947f8ba300090027304680c624c6257c41417a6b (patch)
treedba89119d7a20b72c6db67036e44af095176a8da /source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
parent5962db093f2f1fcf735ceaaa1ba6bbd25efc397f (diff)
Fix T96338: GPU subdiv crash switching to UV editing
The crash is caused as the data for the UV editor is requested before the data for the mesh as a separate draw update. Since building the UV stretch angle buffer requires the position buffer, the latter is not created yet in this case. To fix this, create a local position buffer from the subdivision data. An alternate fix was considered to remove the dependency on the position buffer by interpolating on the GPU the coarse stretch angle buffer but this did work. Maybe this will be revisited.
Diffstat (limited to 'source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc')
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc13
1 files changed, 1 insertions, 12 deletions
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;