diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-03-01 18:36:34 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-03-01 18:40:20 +0300 |
commit | fa5950d87820655ef357a3a0ec301ff4816a00e5 (patch) | |
tree | 4a9b9e8c888912789232c2ae8134b9cf16fa48fc /source/blender/draw/intern/draw_cache_impl_curve.c | |
parent | 5eee1b4d1bfe23515350809511e8e8fcc1c64500 (diff) |
Fix crash with wireframe on highpoly curves on some AMD gpus.
Differential Revision: https://developer.blender.org/D4433
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_curve.c')
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_curve.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_curve.c b/source/blender/draw/intern/draw_cache_impl_curve.c index d40e33ab6e7..ebffedf9454 100644 --- a/source/blender/draw/intern/draw_cache_impl_curve.c +++ b/source/blender/draw/intern/draw_cache_impl_curve.c @@ -346,6 +346,7 @@ static void curve_cd_calc_used_gpu_layers(int *cd_layers, struct GPUMaterial **g typedef struct CurveBatchCache { struct { GPUVertBuf *pos_nor; + GPUVertBuf *edge_fac; GPUVertBuf *curves_pos; GPUVertBuf *loop_pos_nor; @@ -915,6 +916,7 @@ void DRW_curve_batch_cache_create_requested(Object *ob) if (DRW_batch_requested(cache->batch.surfaces_edges, GPU_PRIM_LINES)) { DRW_ibo_request(cache->batch.surfaces_edges, &cache->ibo.surfaces_lines); DRW_vbo_request(cache->batch.surfaces_edges, &cache->ordered.pos_nor); + DRW_vbo_request(cache->batch.surfaces_edges, &cache->ordered.edge_fac); } if (DRW_batch_requested(cache->batch.curves, GPU_PRIM_LINE_STRIP)) { DRW_ibo_request(cache->batch.curves, &cache->ibo.curves_lines); @@ -954,6 +956,7 @@ void DRW_curve_batch_cache_create_requested(Object *ob) /* Generate MeshRenderData flags */ int mr_flag = 0; DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.pos_nor, CU_DATATYPE_SURFACE); + DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.edge_fac, CU_DATATYPE_SURFACE); DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.curves_pos, CU_DATATYPE_WIRE); DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_pos_nor, CU_DATATYPE_SURFACE); DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_flag, cache->ordered.loop_uv, CU_DATATYPE_SURFACE); @@ -979,7 +982,10 @@ void DRW_curve_batch_cache_create_requested(Object *ob) /* Generate VBOs */ if (DRW_vbo_requested(cache->ordered.pos_nor)) { - DRW_displist_vertbuf_create_pos_and_nor_and_wiredata(lb, cache->ordered.pos_nor); + DRW_displist_vertbuf_create_pos_and_nor(lb, cache->ordered.pos_nor); + } + if (DRW_vbo_requested(cache->ordered.edge_fac)) { + DRW_displist_vertbuf_create_wiredata(lb, cache->ordered.edge_fac); } if (DRW_vbo_requested(cache->ordered.curves_pos)) { curve_create_curves_pos(rdata, cache->ordered.curves_pos); |