[Bf-blender-cvs] [5a6140d2486] cycles_procedural_api: modify macros to avoid copying the arrays

Kévin Dietrich noreply at git.blender.org
Wed Sep 9 01:08:21 CEST 2020


Commit: 5a6140d24861ad924d921f3a00c38356c583ddd3
Author: Kévin Dietrich
Date:   Tue Sep 8 04:31:03 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rB5a6140d24861ad924d921f3a00c38356c583ddd3

modify macros to avoid copying the arrays

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

M	intern/cycles/blender/blender_curves.cpp
M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/blender/blender_sync.h
M	intern/cycles/graph/node.h
M	intern/cycles/render/camera.h
M	intern/cycles/render/geometry.h
M	intern/cycles/render/mesh.h
M	intern/cycles/render/object.h

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

diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index 0ebcfe26d30..ada9511a94d 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -820,7 +820,7 @@ void BlenderSync::sync_hair(Hair *hair, BL::Object &b_ob, bool motion, int motio
 void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph,
                             BL::Object b_ob,
                             Hair *hair,
-                            const array<Shader *> &used_shaders)
+                            array<Shader *> &used_shaders)
 {
   /* Compares curve_keys rather than strands in order to handle quick hair
    * adjustments in dynamic BVH - other methods could probably do this better. */
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index bf42091bb26..15cdf227bfe 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1017,7 +1017,7 @@ static void sync_mesh_fluid_motion(BL::Object &b_ob, Scene *scene, Mesh *mesh)
 void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph,
                             BL::Object b_ob,
                             Mesh *mesh,
-                            const array<Shader *> &used_shaders)
+                            array<Shader *> &used_shaders)
 {
   if (mesh->get_time_stamp() == b_depsgraph.scene().frame_current()) {
     return;
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index b493880b4a3..5bfaa29f0c4 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -156,14 +156,14 @@ class BlenderSync {
   void sync_mesh(BL::Depsgraph b_depsgraph,
                  BL::Object b_ob,
                  Mesh *mesh,
-                 const array<Shader *> &used_shaders);
+                 array<Shader *> &used_shaders);
   void sync_mesh_motion(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *mesh, int motion_step);
 
   /* Hair */
   void sync_hair(BL::Depsgraph b_depsgraph,
                  BL::Object b_ob,
                  Hair *hair,
-                 const array<Shader *> &used_shaders);
+                 array<Shader *> &used_shaders);
   void sync_hair_motion(BL::Depsgraph b_depsgraph, BL::Object b_ob, Hair *hair, int motion_step);
   void sync_hair(Hair *hair, BL::Object &b_ob, bool motion, int motion_step = 0);
   void sync_particle_hair(
diff --git a/intern/cycles/graph/node.h b/intern/cycles/graph/node.h
index 4ef68015302..0603df6c3e3 100644
--- a/intern/cycles/graph/node.h
+++ b/intern/cycles/graph/node.h
@@ -30,15 +30,15 @@ struct NodeType;
 struct Shader;
 struct Transform;
 
-// todo(kevin) set_##name will copy the arrays
-#define NODE_PUBLIC_API(type_, name) \
- public: \
+/* Note: in the following macros we use "type const &" instead of "const type &"
+ * to avoid issues when pasting a pointer type. */
+#define NODE_PUBLIC_API_BASE(type_, name, string_name) \
+  public: \
   type_ name; \
-\
  public: \
   const SocketType *get_##name##_socket() const \
   { \
-    static const SocketType *socket = type->find_input(ustring(#name)); \
+    static const SocketType *socket = type->find_input(ustring(string_name)); \
     return socket; \
   } \
   bool name##_is_modified() const \
@@ -50,34 +50,31 @@ struct Transform;
   { \
     const SocketType *socket = get_##name##_socket(); \
     return get_socket_value<type_>(this, *socket); \
-  } \
+  }
+
+#define NODE_PUBLIC_API(type_, name) \
+  NODE_PUBLIC_API_BASE(type_, name, #name) \
   void set_##name(type_ value) \
   { \
     const SocketType *socket = get_##name##_socket(); \
     this->set(*socket, value); \
   }
 
+#define NODE_PUBLIC_API_ARRAY(type_, name) \
+  NODE_PUBLIC_API_BASE(type_, name, #name) \
+  void set_##name(type_ &value) \
+  { \
+    const SocketType *socket = get_##name##_socket(); \
+    this->set(*socket, value); \
+  }
+
 #define NODE_PUBLIC_API_STRUCT_MEMBER(type_, name, member) \
-  const SocketType *get_##name##_##member##_socket() const \
+  NODE_PUBLIC_API_BASE(type_, name##_##member, #name"."#member) \
+  void set_##name##_##member(type_ &value) \
   { \
-    static const SocketType *socket = type->find_input(ustring(#name"."#member)); \
-    return socket; \
-  } \
-   bool name##_##member##_is_modified() const \
-   { \
-     const SocketType *socket = get_##name##_##member##_socket(); \
-     return socket_is_modified(*socket); \
-   } \
-   const type_ &get_##name##_##member() const \
-   { \
-     const SocketType *socket = get_##name##_##member##_socket(); \
-     return get_socket_value<type_>(this, *socket); \
-   } \
-   void set_##name##_##member(type_ value) \
-   { \
-     const SocketType *socket = get_##name##_##member##_socket(); \
-     this->set(*socket, value); \
-   }
+    const SocketType *socket = get_##name##_##member##_socket(); \
+    this->set(*socket, value); \
+  }
 
 /* Node */
 
diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h
index 48604ba0831..7c5ff8f7c6d 100644
--- a/intern/cycles/render/camera.h
+++ b/intern/cycles/render/camera.h
@@ -75,7 +75,7 @@ class Camera : public Node {
   /* motion blur */
   NODE_PUBLIC_API(float, shuttertime)
   NODE_PUBLIC_API(MotionPosition, motion_position)
-  NODE_PUBLIC_API(array<float>, shutter_curve)
+  NODE_PUBLIC_API_ARRAY(array<float>, shutter_curve)
   size_t shutter_table_offset;
 
   /* ** Rolling shutter effect. ** */
@@ -155,7 +155,7 @@ class Camera : public Node {
   NODE_PUBLIC_API(Transform, matrix)
 
   /* motion */
-  NODE_PUBLIC_API(array<Transform>, motion)
+  NODE_PUBLIC_API_ARRAY(array<Transform>, motion)
   NODE_PUBLIC_API(bool, use_perspective_motion)
   NODE_PUBLIC_API(float, fov_pre)
   NODE_PUBLIC_API(float, fov_post)
diff --git a/intern/cycles/render/geometry.h b/intern/cycles/render/geometry.h
index 93110bd4b93..710207c4a8b 100644
--- a/intern/cycles/render/geometry.h
+++ b/intern/cycles/render/geometry.h
@@ -67,7 +67,7 @@ class Geometry : public Node {
   AttributeSet attributes;  // @api
 
   /* Shaders */
-  NODE_PUBLIC_API(array<Shader *>, used_shaders)
+  NODE_PUBLIC_API_ARRAY(array<Shader *>, used_shaders)
 
   /* Update Flags */
   bool need_update_rebuild;
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index c9443895acd..381709aa8cf 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -136,20 +136,20 @@ class Mesh : public Geometry {
   NODE_PUBLIC_API(SubdivisionType, subdivision_type)
 
   /* Mesh Data */
-  NODE_PUBLIC_API(array<int>, triangles)
-  NODE_PUBLIC_API(array<float3>, verts)
-  NODE_PUBLIC_API(array<int>, shader)
-  NODE_PUBLIC_API(array<bool>, smooth)
+  NODE_PUBLIC_API_ARRAY(array<int>, triangles)
+  NODE_PUBLIC_API_ARRAY(array<float3>, verts)
+  NODE_PUBLIC_API_ARRAY(array<int>, shader)
+  NODE_PUBLIC_API_ARRAY(array<bool>, smooth)
 
   /* used for storing patch info for subd triangles, only allocated if there are patches */
-  NODE_PUBLIC_API(array<int>, triangle_patch) /* must be < 0 for non subd triangles */
-  NODE_PUBLIC_API(array<float2>, vert_patch_uv)
+  NODE_PUBLIC_API_ARRAY(array<int>, triangle_patch) /* must be < 0 for non subd triangles */
+  NODE_PUBLIC_API_ARRAY(array<float2>, vert_patch_uv)
 
   NODE_PUBLIC_API(float, volume_clipping)
   NODE_PUBLIC_API(float, volume_step_size)
   NODE_PUBLIC_API(bool, volume_object_space)
 
-  // NODE_PUBLIC_API(array<SubdFace>, subd_faces)
+  // NODE_PUBLIC_API_ARRAY(array<SubdFace>, subd_faces)
  protected:
   array<SubdFace> subd_faces;
 
@@ -169,11 +169,11 @@ class Mesh : public Geometry {
     return subd_faces;
   }
 
-  NODE_PUBLIC_API(array<int>, subd_face_corners)
+  NODE_PUBLIC_API_ARRAY(array<int>, subd_face_corners)
   NODE_PUBLIC_API(int, num_ngons)
 
-  NODE_PUBLIC_API(array<int>, subd_creases_edge)
-  NODE_PUBLIC_API(array<float>, subd_creases_weight)
+  NODE_PUBLIC_API_ARRAY(array<int>, subd_creases_edge)
+  NODE_PUBLIC_API_ARRAY(array<float>, subd_creases_weight)
 
   /* Subdivisions parameters */
   NODE_PUBLIC_API(float, subd_dicing_rate)
diff --git a/intern/cycles/render/object.h b/intern/cycles/render/object.h
index 2fc2de07c8b..5a53991ed23 100644
--- a/intern/cycles/render/object.h
+++ b/intern/cycles/render/object.h
@@ -55,7 +55,7 @@ class Object : public Node {
   NODE_PUBLIC_API(ustring, asset_name)
   vector<ParamValue> attributes;
   NODE_PUBLIC_API(uint, visibility)
-  NODE_PUBLIC_API(array<Transform>, motion)
+  NODE_PUBLIC_API_ARRAY(array<Transform>, motion)
   NODE_PUBLIC_API(bool, hide_on_missing_motion)
   NODE_PUBLIC_API(bool, use_holdout)
   NODE_PUBLIC_API(bool, is_shadow_catcher)



More information about the Bf-blender-cvs mailing list