[Bf-blender-cvs] [2419e48608a] asset-lite-greasepencil: Remove duplicated preview_scene_create
Antonio Vazquez
noreply at git.blender.org
Mon Nov 14 16:23:05 CET 2022
Commit: 2419e48608a78274d57da2dca18b88bf8b6c9801
Author: Antonio Vazquez
Date: Mon Nov 14 16:11:50 2022 +0100
Branches: asset-lite-greasepencil
https://developer.blender.org/rB2419e48608a78274d57da2dca18b88bf8b6c9801
Remove duplicated preview_scene_create
Avoid code duplication reusing object functionj
===================================================================
M source/blender/editors/render/render_preview.cc
===================================================================
diff --git a/source/blender/editors/render/render_preview.cc b/source/blender/editors/render/render_preview.cc
index 585cf519e81..690a55a29d0 100644
--- a/source/blender/editors/render/render_preview.cc
+++ b/source/blender/editors/render/render_preview.cc
@@ -811,6 +811,11 @@ static Scene *object_preview_scene_create(const struct ObjectPreviewData *previe
Depsgraph **r_depsgraph)
{
Scene *scene = BKE_scene_add(preview_data->pr_main, "Object preview scene");
+ const bool is_gpencil = (preview_data->object == nullptr ||
+ (preview_data->object != nullptr &&
+ preview_data->object->type == OB_GPENCIL));
+ Object *ob_gpencil_temp = nullptr;
+
/* Preview need to be in the current frame to get a thumbnail similar of what
* viewport displays. */
scene->r.cfra = preview_data->cfra;
@@ -819,13 +824,35 @@ static Scene *object_preview_scene_create(const struct ObjectPreviewData *previe
Depsgraph *depsgraph = DEG_graph_new(
preview_data->pr_main, scene, view_layer, DAG_EVAL_VIEWPORT);
- BLI_assert(preview_data->object != nullptr);
- BLI_addtail(&preview_data->pr_main->objects, preview_data->object);
+ if (!is_gpencil) {
+ BLI_assert(preview_data->object != nullptr);
+ BLI_addtail(&preview_data->pr_main->objects, preview_data->object);
- BKE_collection_object_add(preview_data->pr_main, scene->master_collection, preview_data->object);
+ BKE_collection_object_add(
+ preview_data->pr_main, scene->master_collection, preview_data->object);
+ }
+ else {
+ /* Grease pencil draw engine needs an object to draw the datablock. */
+ ob_gpencil_temp = BKE_object_add_for_data(preview_data->pr_main,
+ scene,
+ view_layer,
+ OB_GPENCIL,
+ "preview_object",
+ preview_data->datablock,
+ true);
+ BLI_assert(ob_gpencil_temp != nullptr);
+ /* Copy the materials to get full color previews. */
+ const short *materials_len_p = BKE_id_material_len_p(preview_data->datablock);
+ if (materials_len_p && *materials_len_p > 0) {
+ BKE_object_materials_test(preview_data->pr_main, ob_gpencil_temp, preview_data->datablock);
+ }
+ }
- Object *camera_object = object_preview_camera_create(
- preview_data->pr_main, scene, view_layer, preview_data->object);
+ Object *camera_object = object_preview_camera_create(preview_data->pr_main,
+ scene,
+ view_layer,
+ is_gpencil ? ob_gpencil_temp :
+ preview_data->object);
scene->camera = camera_object;
scene->r.xsch = preview_data->sizex;
@@ -833,7 +860,8 @@ static Scene *object_preview_scene_create(const struct ObjectPreviewData *previe
scene->r.size = 100;
BKE_view_layer_synced_ensure(scene, view_layer);
- Base *preview_base = BKE_view_layer_base_find(view_layer, preview_data->object);
+ Base *preview_base = BKE_view_layer_base_find(
+ view_layer, is_gpencil ? ob_gpencil_temp : preview_data->object);
/* For 'view selected' below. */
preview_base->flag |= BASE_SELECTED;
@@ -1043,57 +1071,6 @@ static void action_preview_render(IconPreview *preview, IconPreviewSize *preview
/** \name Grease Pencil Preview
* \{ */
-static Scene *gpencil_preview_scene_create(const struct ObjectPreviewData *preview_data,
- Depsgraph **r_depsgraph)
-{
- Scene *scene = BKE_scene_add(preview_data->pr_main, "Object preview scene");
- /* Grease pencil needs to set the scene to the current frame or the strokes
- * will not be visible in the preview. */
- scene->r.cfra = preview_data->cfra;
- ViewLayer *view_layer = (ViewLayer *)scene->view_layers.first;
- Depsgraph *depsgraph = DEG_graph_new(
- preview_data->pr_main, scene, view_layer, DAG_EVAL_VIEWPORT);
-
- /* Grease pencil draw engine needs an object to draw the datablock. */
- Object *ob_temp = BKE_object_add_for_data(preview_data->pr_main,
- scene,
- view_layer,
- OB_GPENCIL,
- "preview_object",
- preview_data->datablock,
- true);
- BLI_assert(ob_temp != nullptr);
- /* Copy the materials to get full color previews. */
- const short *materials_len_p = BKE_id_material_len_p(preview_data->datablock);
- if (materials_len_p && *materials_len_p > 0) {
- BKE_object_materials_test(preview_data->pr_main, ob_temp, preview_data->datablock);
- }
-
- Object *camera_object = object_preview_camera_create(
- preview_data->pr_main, scene, view_layer, ob_temp);
-
- scene->camera = camera_object;
- scene->r.xsch = preview_data->sizex;
- scene->r.ysch = preview_data->sizey;
- scene->r.size = 100;
-
- BKE_view_layer_synced_ensure(scene, view_layer);
- Base *preview_base = BKE_view_layer_base_find(view_layer, ob_temp);
- /* For 'view selected' below. */
- preview_base->flag |= BASE_SELECTED;
-
- DEG_graph_build_from_view_layer(depsgraph);
- DEG_evaluate_on_refresh(depsgraph);
-
- ED_view3d_camera_to_view_selected_with_set_clipping(
- preview_data->pr_main, depsgraph, scene, camera_object);
-
- BKE_scene_graph_update_tagged(depsgraph, preview_data->pr_main);
-
- *r_depsgraph = depsgraph;
- return scene;
-}
-
/* Render a grease pencil datablock. As the Draw Engine needs an object, the datablock is assigned
* to a temporary object, just for render. */
static void gpencil_preview_render(IconPreview *preview, IconPreviewSize *preview_sized)
@@ -1121,7 +1098,7 @@ static void gpencil_preview_render(IconPreview *preview, IconPreviewSize *previe
preview_data.sizey = preview_sized->sizey;
Depsgraph *depsgraph;
- Scene *scene = gpencil_preview_scene_create(&preview_data, &depsgraph);
+ Scene *scene = object_preview_scene_create(&preview_data, &depsgraph);
/* Ownership is now ours. */
preview->id_copy = nullptr;
More information about the Bf-blender-cvs
mailing list