[Bf-blender-cvs] [c5ef9fc5ecc] tmp-workbench-rewrite2: Ensure the camera object is of camera type

Miguel Pozo noreply at git.blender.org
Mon Nov 7 16:22:05 CET 2022


Commit: c5ef9fc5eccd31822cf7546865b18c3434a3c3f2
Author: Miguel Pozo
Date:   Mon Nov 7 16:22:01 2022 +0100
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rBc5ef9fc5eccd31822cf7546865b18c3434a3c3f2

Ensure the camera object is of camera type

Avoids issues when DoF is enabled. (See T101533)

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

M	source/blender/draw/engines/workbench/workbench_effect_dof.cc
M	source/blender/draw/engines/workbench/workbench_private.hh
M	source/blender/draw/engines/workbench/workbench_state.cc

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

diff --git a/source/blender/draw/engines/workbench/workbench_effect_dof.cc b/source/blender/draw/engines/workbench/workbench_effect_dof.cc
index b388c2d907e..413cb41d45e 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_dof.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_dof.cc
@@ -21,8 +21,6 @@
 #include "BKE_camera.h"
 #include "DEG_depsgraph_query.h"
 
-#include "DNA_camera_types.h"
-
 namespace blender::workbench {
 /**
  * Transform [-1..1] square to unit circle.
@@ -123,7 +121,7 @@ void DofPass::init(const SceneState &scene_state)
   coc_halfres_tx_.ensure_mip_views();
   coc_halfres_tx_.filter_mode(true);
 
-  Camera *camera = static_cast<Camera *>(scene_state.camera_object->data);
+  Camera *camera = scene_state.camera;
 
   /* Parameters */
   float fstop = camera->dof.aperture_fstop;
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index b60ec8e6439..fca61f2ec59 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
+#include "DNA_camera_types.h"
 #include "DRW_render.h"
 #include "draw_manager.hh"
 #include "draw_pass.hh"
@@ -59,6 +60,7 @@ struct SceneState {
   Scene *scene;
 
   Object *camera_object;
+  Camera *camera;
   float4x4 view_projection_matrix;
   int2 resolution;
 
diff --git a/source/blender/draw/engines/workbench/workbench_state.cc b/source/blender/draw/engines/workbench/workbench_state.cc
index b9ea9a92cbe..a22599f4016 100644
--- a/source/blender/draw/engines/workbench/workbench_state.cc
+++ b/source/blender/draw/engines/workbench/workbench_state.cc
@@ -11,7 +11,6 @@
 #include "BKE_particle.h"
 #include "BKE_pbvh.h"
 #include "DEG_depsgraph_query.h"
-#include "DNA_camera_types.h"
 #include "DNA_fluid_types.h"
 #include "ED_paint.h"
 #include "ED_view3d.h"
@@ -41,7 +40,9 @@ void SceneState::init()
     /*TODO(Miguel Pozo)*/
     // camera = wpd->cam_original_ob;
   }
-  Camera *camera = camera_object ? static_cast<Camera *>(camera_object->data) : nullptr;
+  camera = camera_object && camera_object->type == OB_CAMERA ?
+               static_cast<Camera *>(camera_object->data) :
+               nullptr;
 
   object_mode = CTX_data_mode_enum_ex(context->object_edit, context->obact, context->object_mode);



More information about the Bf-blender-cvs mailing list