[Bf-blender-cvs] [4fd005fefb0] blender-v2.83-release: Fix T76131: Crash combing Hair using Python

Philipp Oeser noreply at git.blender.org
Mon Apr 27 16:45:29 CEST 2020


Commit: 4fd005fefb014a8570747b1d043de7d610078b46
Author: Philipp Oeser
Date:   Mon Apr 27 11:37:20 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB4fd005fefb014a8570747b1d043de7d610078b46

Fix T76131: Crash combing Hair using Python

Caused by rBe82827bf6ed5.

DRW_draw_depth_object calls DRW_mesh_batch_cache_create_requested with
NULL scene, but that is accessed later on...

Scene is actually available, so pass that around.

Maniphest Tasks: T76131

Differential Revision: https://developer.blender.org/D7540

===================================================================

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/intern/draw_cache_extract_mesh.c
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/space_view3d/view3d_draw.c

===================================================================

diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 7ecf9df275d..1bdc3bc5a03 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -118,7 +118,8 @@ void DRW_draw_depth_loop_gpencil(struct Depsgraph *depsgraph,
                                  struct ARegion *region,
                                  struct View3D *v3d,
                                  struct GPUViewport *viewport);
-void DRW_draw_depth_object(struct ARegion *region,
+void DRW_draw_depth_object(struct Scene *scene,
+                           struct ARegion *region,
                            struct View3D *v3d,
                            struct GPUViewport *viewport,
                            struct Object *object);
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c
index 4c51ed99f2c..40687306b4e 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.c
@@ -4540,6 +4540,7 @@ static void extract_task_create(TaskPool *task_pool,
                                 void *buf,
                                 int32_t *task_counter)
 {
+  BLI_assert(scene != NULL);
   const bool do_hq_normals = (scene->r.perf_flag & SCE_PERF_HQ_NORMALS) != 0;
   if (do_hq_normals && (extract == &extract_lnor)) {
     extract = &extract_lnor_hq;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 51222d833c2..7bc3dcfab81 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2430,7 +2430,7 @@ static void draw_world_clip_planes_from_rv3d(GPUBatch *batch, const float world_
 /**
  * Clears the Depth Buffer and draws only the specified object.
  */
-void DRW_draw_depth_object(ARegion *region, View3D *v3d, GPUViewport *viewport, Object *object)
+void DRW_draw_depth_object(Scene *scene, ARegion *region, View3D *v3d, GPUViewport *viewport, Object *object)
 {
   RegionView3D *rv3d = region->regiondata;
 
@@ -2468,7 +2468,7 @@ void DRW_draw_depth_object(ARegion *region, View3D *v3d, GPUViewport *viewport,
         batch = DRW_mesh_batch_cache_get_surface(me);
       }
 
-      DRW_mesh_batch_cache_create_requested(object, me, NULL, false, true);
+      DRW_mesh_batch_cache_create_requested(object, me, scene, false, true);
 
       const eGPUShaderConfig sh_cfg = world_clip_planes ? GPU_SHADER_CFG_CLIPPED :
                                                           GPU_SHADER_CFG_DEFAULT;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index c1995249c26..e58559f4f6b 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2217,7 +2217,7 @@ void ED_view3d_backbuf_depth_validate(ViewContext *vc)
 
     if (obact_eval && ((obact_eval->base_flag & BASE_VISIBLE_DEPSGRAPH) != 0)) {
       GPUViewport *viewport = WM_draw_region_get_viewport(region);
-      DRW_draw_depth_object(vc->region, vc->v3d, viewport, obact_eval);
+      DRW_draw_depth_object(vc->scene, vc->region, vc->v3d, viewport, obact_eval);
     }
 
     vc->v3d->flag &= ~V3D_INVALID_BACKBUF;



More information about the Bf-blender-cvs mailing list