[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