[Bf-blender-cvs] [247d75d2b1d] master: Realtime Compositor: Warn about unsupported setups

Omar Emara noreply at git.blender.org
Wed Nov 23 13:35:35 CET 2022


Commit: 247d75d2b1d285e0ff57fed883515305c387cb44
Author: Omar Emara
Date:   Wed Nov 23 14:34:31 2022 +0200
Branches: master
https://developer.blender.org/rB247d75d2b1d285e0ff57fed883515305c387cb44

Realtime Compositor: Warn about unsupported setups

This patch warns the user that the compositor setup is not fully
supported when an unsupported node is used. The warning is displayed as
an engine warning overlay and in the node header itself.

See T102353.

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

Reviewed By: Clement Foucault

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/editors/space_node/node_draw.cc
M	source/blender/nodes/composite/nodes/node_composite_antialiasing.cc
M	source/blender/nodes/composite/nodes/node_composite_convert_color_space.cc
M	source/blender/nodes/composite/nodes/node_composite_cornerpin.cc
M	source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
M	source/blender/nodes/composite/nodes/node_composite_defocus.cc
M	source/blender/nodes/composite/nodes/node_composite_denoise.cc
M	source/blender/nodes/composite/nodes/node_composite_displace.cc
M	source/blender/nodes/composite/nodes/node_composite_double_edge_mask.cc
M	source/blender/nodes/composite/nodes/node_composite_id_mask.cc
M	source/blender/nodes/composite/nodes/node_composite_image.cc
M	source/blender/nodes/composite/nodes/node_composite_inpaint.cc
M	source/blender/nodes/composite/nodes/node_composite_keying.cc
M	source/blender/nodes/composite/nodes/node_composite_keyingscreen.cc
M	source/blender/nodes/composite/nodes/node_composite_map_uv.cc
M	source/blender/nodes/composite/nodes/node_composite_mask.cc
M	source/blender/nodes/composite/nodes/node_composite_moviedistortion.cc
M	source/blender/nodes/composite/nodes/node_composite_output_file.cc
M	source/blender/nodes/composite/nodes/node_composite_planetrackdeform.cc
M	source/blender/nodes/composite/nodes/node_composite_stabilize2d.cc
M	source/blender/nodes/composite/nodes/node_composite_sunbeams.cc
M	source/blender/nodes/composite/nodes/node_composite_texture.cc
M	source/blender/nodes/composite/nodes/node_composite_vec_blur.cc
M	source/blender/nodes/composite/nodes/node_composite_zcombine.cc

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 9e85282ab42..d4e37e29505 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -330,6 +330,11 @@ typedef struct bNodeType {
    * responsibility of the caller. */
   NodeGetCompositorShaderNodeFunction get_compositor_shader_node;
 
+  /* A message to display in the node header for unsupported realtime compositor nodes. The message
+   * is assumed to be static and thus require no memory handling. This field is to be removed when
+   * all nodes are supported. */
+  const char *realtime_compositor_unsupported_message;
+
   /* Build a multi-function for this node. */
   NodeMultiFunctionBuildFunction build_multi_function;
 
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 71ff840bd1d..d5bf36ee00a 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -107,6 +107,10 @@ struct TreeDrawContext {
    * currently drawn node tree can be retrieved from the log below.
    */
   geo_log::GeoTreeLog *geo_tree_log = nullptr;
+  /**
+   * True if there is an active realtime compositor using the node tree, false otherwise.
+   */
+  bool used_by_realtime_compositor = false;
 };
 
 float ED_node_grid_size()
@@ -1653,12 +1657,45 @@ static char *node_errors_tooltip_fn(bContext * /*C*/, void *argN, const char * /
 
 #define NODE_HEADER_ICON_SIZE (0.8f * U.widget_unit)
 
+static void node_add_unsupported_compositor_operation_error_message_button(
+    TreeDrawContext &tree_draw_ctx,
+    bNode &node,
+    uiBlock &block,
+    const rctf &rect,
+    float &icon_offset)
+{
+  icon_offset -= NODE_HEADER_ICON_SIZE;
+  UI_block_emboss_set(&block, UI_EMBOSS_NONE);
+  uiDefIconBut(&block,
+               UI_BTYPE_BUT,
+               0,
+               ICON_ERROR,
+               icon_offset,
+               rect.ymax - NODE_DY,
+               NODE_HEADER_ICON_SIZE,
+               UI_UNIT_Y,
+               nullptr,
+               0,
+               0,
+               0,
+               0,
+               TIP_(node.typeinfo->realtime_compositor_unsupported_message));
+  UI_block_emboss_set(&block, UI_EMBOSS);
+}
+
 static void node_add_error_message_button(TreeDrawContext &tree_draw_ctx,
                                           bNode &node,
                                           uiBlock &block,
                                           const rctf &rect,
                                           float &icon_offset)
 {
+  if (tree_draw_ctx.used_by_realtime_compositor &&
+      node.typeinfo->realtime_compositor_unsupported_message) {
+    node_add_unsupported_compositor_operation_error_message_button(
+        tree_draw_ctx, node, block, rect, icon_offset);
+    return;
+  }
+
   Span<geo_log::NodeWarning> warnings;
   if (tree_draw_ctx.geo_tree_log) {
     geo_log::GeoNodeLog *node_log = tree_draw_ctx.geo_tree_log->nodes.lookup_ptr(node.name);
@@ -3059,6 +3096,48 @@ static void snode_setup_v2d(SpaceNode &snode, ARegion &region, const float2 &cen
   // XXX snode->curfont = uiSetCurFont_ext(snode->aspect);
 }
 
+/* Similar to is_compositor_enabled() in draw_manager.c but checks all 3D views. */
+static bool realtime_compositor_is_in_use(const bContext &context)
+{
+  if (!U.experimental.use_realtime_compositor) {
+    return false;
+  }
+
+  const Scene *scene = CTX_data_scene(&context);
+  if (!scene->use_nodes) {
+    return false;
+  }
+
+  if (!scene->nodetree) {
+    return false;
+  }
+
+  const Main *main = CTX_data_main(&context);
+  LISTBASE_FOREACH (bScreen *, screen, &main->screens) {
+    LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+      LISTBASE_FOREACH (SpaceLink *, space, &area->spacedata) {
+        if (space->spacetype != SPACE_VIEW3D) {
+          continue;
+        }
+
+        const View3D &view_3d = *reinterpret_cast<const View3D *>(space);
+
+        if (view_3d.shading.use_compositor == V3D_SHADING_USE_COMPOSITOR_DISABLED) {
+          continue;
+        }
+
+        if (!(view_3d.shading.type >= OB_MATERIAL)) {
+          continue;
+        }
+
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
 static void draw_nodetree(const bContext &C,
                           ARegion &region,
                           bNodeTree &ntree,
@@ -3082,6 +3161,9 @@ static void draw_nodetree(const bContext &C,
     tree_draw_ctx.active_geometry_nodes_viewer = viewer_path::find_geometry_nodes_viewer(
         workspace->viewer_path, *snode);
   }
+  else if (ntree.type == NTREE_COMPOSIT) {
+    tree_draw_ctx.used_by_realtime_compositor = realtime_compositor_is_in_use(C);
+  }
 
   node_update_nodetree(C, tree_draw_ctx, ntree, nodes, blocks);
   node_draw_nodetree(C, tree_draw_ctx, region, *snode, ntree, nodes, blocks, parent_key);
diff --git a/source/blender/nodes/composite/nodes/node_composite_antialiasing.cc b/source/blender/nodes/composite/nodes/node_composite_antialiasing.cc
index 8c77df08211..852b6740eb8 100644
--- a/source/blender/nodes/composite/nodes/node_composite_antialiasing.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_antialiasing.cc
@@ -5,6 +5,8 @@
  * \ingroup cmpnodes
  */
 
+#include "BLT_translation.h"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 
@@ -53,6 +55,7 @@ class AntiAliasingOperation : public NodeOperation {
   void execute() override
   {
     get_input("Image").pass_through(get_result("Image"));
+    context().set_info_message("Viewport compositor setup not fully supported");
   }
 };
 
@@ -78,6 +81,8 @@ void register_node_type_cmp_antialiasing()
   node_type_storage(
       &ntype, "NodeAntiAliasingData", node_free_standard_storage, node_copy_standard_storage);
   ntype.get_compositor_operation = file_ns::get_compositor_operation;
+  ntype.realtime_compositor_unsupported_message = N_(
+      "Node not supported in the Viewport compositor");
 
   nodeRegisterType(&ntype);
 }
diff --git a/source/blender/nodes/composite/nodes/node_composite_convert_color_space.cc b/source/blender/nodes/composite/nodes/node_composite_convert_color_space.cc
index 24928acedd9..18fa47b6bc9 100644
--- a/source/blender/nodes/composite/nodes/node_composite_convert_color_space.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_convert_color_space.cc
@@ -7,6 +7,8 @@
 
 #include "node_composite_util.hh"
 
+#include "BLT_translation.h"
+
 #include "RNA_access.h"
 
 #include "UI_interface.h"
@@ -58,6 +60,7 @@ class ConvertColorSpaceOperation : public NodeOperation {
   void execute() override
   {
     get_input("Image").pass_through(get_result("Image"));
+    context().set_info_message("Viewport compositor setup not fully supported");
   }
 };
 
@@ -82,6 +85,8 @@ void register_node_type_cmp_convert_color_space(void)
   node_type_storage(
       &ntype, "NodeConvertColorSpace", node_free_standard_storage, node_copy_standard_storage);
   ntype.get_compositor_operation = file_ns::get_compositor_operation;
+  ntype.realtime_compositor_unsupported_message = N_(
+      "Node not supported in the Viewport compositor");
 
   nodeRegisterType(&ntype);
 }
diff --git a/source/blender/nodes/composite/nodes/node_composite_cornerpin.cc b/source/blender/nodes/composite/nodes/node_composite_cornerpin.cc
index 9679701a7cf..1abfa0a2645 100644
--- a/source/blender/nodes/composite/nodes/node_composite_cornerpin.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_cornerpin.cc
@@ -5,6 +5,8 @@
  * \ingroup cmpnodes
  */
 
+#include "BLT_translation.h"
+
 #include "COM_node_operation.hh"
 
 #include "node_composite_util.hh"
@@ -44,6 +46,7 @@ class CornerPinOperation : public NodeOperation {
   {
     get_input("Image").pass_through(get_result("Image"));
     get_result("Plane").allocate_invalid();
+    context().set_info_message("Viewport compositor setup not fully supported");
   }
 };
 
@@ -63,6 +66,8 @@ void register_node_type_cmp_cornerpin()
   cmp_node_type_base(&ntype, CMP_NODE_CORNERPIN, "Corner Pin", NODE_CLASS_DISTORT);
   ntype.declare = file_ns::cmp_node_cornerpin_declare;
   ntype.get_compositor_operation = file_ns::get_compositor_operation;
+  ntype.realtime_compositor_unsupported_message = N_(
+      "Node not supported in the Viewport compositor");
 
   nodeRegisterType(&ntype);
 }
diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
index e95a306976c..fd4ef63879e 100644
--- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
@@ -14,6 +14,8 @@
 #include "BLI_string_ref.hh"
 #include "BLI_utildefines.h"
 
+#include "BLT_translation.h"
+
 #include "BKE_context.h"
 #include "BKE_cryptomatte.hh"
 #include "BKE_global.h"
@@ -311,6 +313,7 @@ class CryptoMatteOperation : public NodeOperation {
     get_input("Image").pass_through(get_result("Image"));
     get_result("Matte").allocate_invalid();
     get_result("Pick").allocate_invalid();
+    context().set_info_message("Viewport compositor setup not fully supported");
   }
 };
 
@@ -337,6 +340,8 @@ void register_node_type_cmp_cryptomatte()
   node_type_storage(
       &ntype, "NodeCryptomatte", file_ns::node_free_cryptomatte, file_ns::node_copy_cryptomatte);
   ntype.get_compositor_operation = file_ns::get_compositor_operation;
+  ntype.realtime_compositor_unsupported_message = N_(
+      "Node not supported in the Viewport compositor");
 
   nodeRegisterType(&ntype);
 }
@@ -398,6 +403,7 @@ class CryptoMatteOperation : public NodeOperation {
     get_input("image").pass_through(get_result("Image"));
     get_result("Matte").allocate_invalid();
     get_result("Pick").allocate_invalid();
+    context().set_info_message("Viewport compositor setup not fully supported");
   }
 };
 
@@ -423,6 +429,8 @@ void register_node_type_cmp_cryptomatte_legacy()
       &ntype, "NodeCryptomatte", file_ns::node_free_cryptomatte, file_ns::node_copy_cryptomatte);
   ntype.gather_link_search_ops = nullptr;
   ntype.get_compositor_operation = legacy_file_ns::get_compositor_operation;
+  ntype.realtime_compositor_unsupported_message

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list