21 node_storage(
node).dimensions = 1;
23 b.add_input<
decl::Float>(
N_(
"Scale")).
min(-1000.0f).max(1000.0f).default_value(5.0f);
45 node_storage(
node).dimensions = 1;
83 "node_tex_voronoi_f1_1d",
84 "node_tex_voronoi_f1_2d",
85 "node_tex_voronoi_f1_3d",
86 "node_tex_voronoi_f1_4d",
90 "node_tex_voronoi_f2_1d",
91 "node_tex_voronoi_f2_2d",
92 "node_tex_voronoi_f2_3d",
93 "node_tex_voronoi_f2_4d",
97 "node_tex_voronoi_smooth_f1_1d",
98 "node_tex_voronoi_smooth_f1_2d",
99 "node_tex_voronoi_smooth_f1_3d",
100 "node_tex_voronoi_smooth_f1_4d",
104 "node_tex_voronoi_distance_to_edge_1d",
105 "node_tex_voronoi_distance_to_edge_2d",
106 "node_tex_voronoi_distance_to_edge_3d",
107 "node_tex_voronoi_distance_to_edge_4d",
111 "node_tex_voronoi_n_sphere_radius_1d",
112 "node_tex_voronoi_n_sphere_radius_2d",
113 "node_tex_voronoi_n_sphere_radius_3d",
114 "node_tex_voronoi_n_sphere_radius_4d",
130 float metric =
tex->distance;
190 BLI_assert(dimensions >= 2 && dimensions <= 4);
192 static std::array<fn::MFSignature, 9> signatures{
205 this->
set_signature(&signatures[(dimensions - 1) + feature * 3 - 1]);
212 if (
ELEM(dimensions, 2, 3, 4)) {
215 if (
ELEM(dimensions, 1, 4)) {
220 signature.single_input<
float>(
"Smoothness");
222 signature.single_input<
float>(
"Exponent");
223 signature.single_input<
float>(
"Randomness");
224 signature.single_output<
float>(
"Distance");
227 if (dimensions != 1) {
230 if (
ELEM(dimensions, 1, 4)) {
240 return params.readonly_single_input<
float3>(param_index,
"Vector");
243 return params.readonly_single_input<
float>(param_index,
"W");
246 return params.readonly_single_input<
float>(param_index,
"Scale");
248 auto get_smoothness = [&](
int param_index) ->
VArray<float> {
249 return params.readonly_single_input<
float>(param_index,
"Smoothness");
252 return params.readonly_single_input<
float>(param_index,
"Exponent");
254 auto get_randomness = [&](
int param_index) ->
VArray<float> {
255 return params.readonly_single_input<
float>(param_index,
"Randomness");
258 return params.uninitialized_single_output_if_required<
float>(param_index,
"Distance");
264 return params.uninitialized_single_output_if_required<
float3>(param_index,
"Position");
267 return params.uninitialized_single_output_if_required<
float>(param_index,
"W");
271 switch (dimensions_) {
282 const bool calc_distance = !r_distance.
is_empty();
283 const bool calc_color = !r_color.
is_empty();
284 const bool calc_position = !r_position.
is_empty();
293 calc_distance ? &r_distance[i] :
nullptr,
294 calc_color ? &
col :
nullptr,
295 calc_position ? &
pos :
nullptr);
314 const bool calc_distance = !r_distance.
is_empty();
315 const bool calc_color = !r_color.
is_empty();
316 const bool calc_position = !r_position.
is_empty();
325 calc_distance ? &r_distance[i] :
nullptr,
326 calc_color ? &
col :
nullptr,
327 calc_position ? &
pos :
nullptr);
347 const bool calc_distance = !r_distance.
is_empty();
348 const bool calc_color = !r_color.
is_empty();
349 const bool calc_position = !r_position.
is_empty();
360 calc_distance ? &r_distance[i] :
nullptr,
361 calc_color ? &
col :
nullptr,
362 calc_position ? &
pos :
nullptr);
386 const bool calc_distance = !r_distance.
is_empty();
387 const bool calc_color = !r_color.
is_empty();
388 const bool calc_position = !r_position.
is_empty();
396 calc_distance ? &r_distance[i] :
nullptr,
397 calc_color ? &
col :
nullptr,
398 calc_position ? &r_position[i] :
nullptr);
416 const bool calc_distance = !r_distance.
is_empty();
417 const bool calc_color = !r_color.
is_empty();
418 const bool calc_position = !r_position.
is_empty();
426 calc_distance ? &r_distance[i] :
nullptr,
427 calc_color ? &
col :
nullptr,
428 calc_position ? &r_position[i] :
nullptr);
447 const bool calc_distance = !r_distance.
is_empty();
448 const bool calc_color = !r_color.
is_empty();
449 const bool calc_position = !r_position.
is_empty();
459 calc_distance ? &r_distance[i] :
nullptr,
460 calc_color ? &
col :
nullptr,
461 calc_position ? &r_position[i] :
nullptr);
486 const bool calc_distance = !r_distance.
is_empty();
487 const bool calc_color = !r_color.
is_empty();
488 const bool calc_position = !r_position.
is_empty();
489 const bool calc_w = !r_w.
is_empty();
499 calc_distance ? &r_distance[i] :
nullptr,
500 calc_color ? &
col :
nullptr,
501 calc_position || calc_w ? &
pos :
nullptr);
505 if (calc_position || calc_w) {
527 const bool calc_distance = !r_distance.
is_empty();
528 const bool calc_color = !r_color.
is_empty();
529 const bool calc_position = !r_position.
is_empty();
530 const bool calc_w = !r_w.
is_empty();
540 calc_distance ? &r_distance[i] :
nullptr,
541 calc_color ? &
col :
nullptr,
542 calc_position || calc_w ? &
pos :
nullptr);
546 if (calc_position || calc_w) {
569 const bool calc_distance = !r_distance.
is_empty();
570 const bool calc_color = !r_color.
is_empty();
571 const bool calc_position = !r_position.
is_empty();
572 const bool calc_w = !r_w.
is_empty();
584 calc_distance ? &r_distance[i] :
nullptr,
585 calc_color ? &
col :
nullptr,
586 calc_position || calc_w ? &
pos :
nullptr);
590 if (calc_position || calc_w) {
622 : dimensions_(dimensions), feature_(feature), metric_(metric)
624 BLI_assert(dimensions >= 1 && dimensions <= 4);
626 static std::array<fn::MFSignature, 12> signatures{
642 this->
set_signature(&signatures[dimensions + feature * 4 - 1]);
649 if (
ELEM(dimensions, 2, 3, 4)) {
652 if (
ELEM(dimensions, 1, 4)) {
657 signature.single_input<
float>(
"Smoothness");
659 signature.single_input<
float>(
"Randomness");
660 signature.single_output<
float>(
"Distance");
663 if (dimensions != 1) {
666 if (
ELEM(dimensions, 1, 4)) {
676 return params.readonly_single_input<
float3>(param_index,
"Vector");
679 return params.readonly_single_input<
float>(param_index,
"W");
682 return params.readonly_single_input<
float>(param_index,
"Scale");
684 auto get_smoothness = [&](
int param_index) ->
VArray<float> {
685 return params.readonly_single_input<
float>(param_index,
"Smoothness");
687 auto get_randomness = [&](
int param_index) ->
VArray<float> {
688 return params.readonly_single_input<
float>(param_index,
"Randomness");
691 return params.uninitialized_single_output_if_required<
float>(param_index,
"Distance");
697 return params.uninitialized_single_output_if_required<
float3>(param_index,
"Position");
700 return params.uninitialized_single_output_if_required<
float>(param_index,
"W");
704 switch (dimensions_) {
714 const bool calc_distance = !r_distance.
is_empty();
715 const bool calc_color = !r_color.
is_empty();
716 const bool calc_w = !r_w.
is_empty();
718 const float p =
w[i] * scale[i];
723 calc_distance ? &r_distance[i] :
nullptr,
724 calc_color ? &
col :
nullptr,
725 calc_w ? &r_w[i] :
nullptr);
742 const bool calc_distance = !r_distance.
is_empty();
743 const bool calc_color = !r_color.
is_empty();
744 const bool calc_w = !r_w.
is_empty();
746 const float p =
w[i] * scale[i];
751 calc_distance ? &r_distance[i] :
nullptr,
752 calc_color ? &
col :
nullptr,
753 calc_w ? &r_w[i] :
nullptr);
771 const bool calc_distance = !r_distance.
is_empty();
772 const bool calc_color = !r_color.
is_empty();
773 const bool calc_w = !r_w.
is_empty();
775 const float p =
w[i] * scale[i];
782 calc_distance ? &r_distance[i] :
nullptr,
783 calc_color ? &
col :
nullptr,
784 calc_w ? &r_w[i] :
nullptr);
806 const bool calc_distance = !r_distance.
is_empty();
807 const bool calc_color = !r_color.
is_empty();
808 const bool calc_position = !r_position.
is_empty();
817 calc_distance ? &r_distance[i] :
nullptr,
818 calc_color ? &
col :
nullptr,
819 calc_position ? &
pos :
nullptr);
837 const bool calc_distance = !r_distance.
is_empty();
838 const bool calc_color = !r_color.
is_empty();
839 const bool calc_position = !r_position.
is_empty();
848 calc_distance ? &r_distance[i] :
nullptr,
849 calc_color ? &
col :
nullptr,
850 calc_position ? &
pos :
nullptr);
869 const bool calc_distance = !r_distance.
is_empty();
870 const bool calc_color = !r_color.
is_empty();
871 const bool calc_position = !r_position.
is_empty();
882 calc_distance ? &r_distance[i] :
nullptr,
883 calc_color ? &
col :
nullptr,
884 calc_position ? &
pos :
nullptr);
907 const bool calc_distance = !r_distance.
is_empty();
908 const bool calc_color = !r_color.
is_empty();
909 const bool calc_position = !r_position.
is_empty();
917 calc_distance ? &r_distance[i] :
nullptr,
918 calc_color ? &
col :
nullptr,
919 calc_position ? &r_position[i] :
nullptr);
936 const bool calc_distance = !r_distance.
is_empty();
937 const bool calc_color = !r_color.
is_empty();
938 const bool calc_position = !r_position.
is_empty();
946 calc_distance ? &r_distance[i] :
nullptr,
947 calc_color ? &
col :
nullptr,
948 calc_position ? &r_position[i] :
nullptr);
966 const bool calc_distance = !r_distance.
is_empty();
967 const bool calc_color = !r_color.
is_empty();
968 const bool calc_position = !r_position.
is_empty();
979 calc_distance ? &r_distance[i] :
nullptr,
980 calc_color ? &
col :
nullptr,
981 calc_position ? &r_position[i] :
nullptr);
1007 const bool calc_distance = !r_distance.
is_empty();
1008 const bool calc_color = !r_color.
is_empty();
1009 const bool calc_position = !r_position.
is_empty();
1010 const bool calc_w = !r_w.
is_empty();
1020 calc_distance ? &r_distance[i] :
nullptr,
1021 calc_color ? &
col :
nullptr,
1022 calc_position || calc_w ? &
pos :
nullptr);
1026 if (calc_position || calc_w) {
1028 if (calc_position) {
1047 const bool calc_distance = !r_distance.
is_empty();
1048 const bool calc_color = !r_color.
is_empty();
1049 const bool calc_position = !r_position.
is_empty();
1050 const bool calc_w = !r_w.
is_empty();
1060 calc_distance ? &r_distance[i] :
nullptr,
1061 calc_color ? &
col :
nullptr,
1062 calc_position || calc_w ? &
pos :
nullptr);
1066 if (calc_position || calc_w) {
1068 if (calc_position) {
1088 const bool calc_distance = !r_distance.
is_empty();
1089 const bool calc_color = !r_color.
is_empty();
1090 const bool calc_position = !r_position.
is_empty();
1091 const bool calc_w = !r_w.
is_empty();
1103 calc_distance ? &r_distance[i] :
nullptr,
1104 calc_color ? &
col :
nullptr,
1105 calc_position || calc_w ? &
pos :
nullptr);
1109 if (calc_position || calc_w) {
1111 if (calc_position) {
1141 BLI_assert(dimensions >= 1 && dimensions <= 4);
1143 static std::array<fn::MFSignature, 8> signatures{
1154 this->
set_signature(&signatures[dimensions + (feature - 3) * 4 - 1]);
1161 if (
ELEM(dimensions, 2, 3, 4)) {
1164 if (
ELEM(dimensions, 1, 4)) {
1168 signature.single_input<
float>(
"Randomness");
1171 signature.single_output<
float>(
"Distance");
1174 signature.single_output<
float>(
"Radius");
1183 return params.readonly_single_input<
float3>(param_index,
"Vector");
1186 return params.readonly_single_input<
float>(param_index,
"W");
1189 return params.readonly_single_input<
float>(param_index,
"Scale");
1191 auto get_randomness = [&](
int param_index) ->
VArray<float> {
1192 return params.readonly_single_input<
float>(param_index,
"Randomness");
1195 return params.uninitialized_single_output<
float>(param_index,
"Distance");
1198 return params.uninitialized_single_output<
float>(param_index,
"Radius");
1202 switch (dimensions_) {
1212 const float p =
w[i] * scale[i];
1221 const float p =
w[i] * scale[i];
1321 bool dist_radius =
ELEM(
1327 else if (minowski) {
void node_type_gpu(struct bNodeType *ntype, NodeGPUExecFunction gpu_fn)
void node_type_update(struct bNodeType *ntype, void(*updatefunc)(struct bNodeTree *ntree, struct bNode *node))
#define NODE_STORAGE_FUNCS(StorageT)
void nodeSetSocketAvailability(struct bNodeTree *ntree, struct bNodeSocket *sock, bool is_available)
void node_type_init(struct bNodeType *ntype, void(*initfunc)(struct bNodeTree *ntree, struct bNode *node))
void node_type_storage(struct bNodeType *ntype, const char *storagename, void(*freefunc)(struct bNode *node), void(*copyfunc)(struct bNodeTree *dest_ntree, struct bNode *dest_node, const struct bNode *src_node))
struct bNodeSocket * nodeFindSocket(const struct bNode *node, eNodeSocketInOut in_out, const char *identifier)
#define NODE_CLASS_TEXTURE
void nodeRegisterType(struct bNodeType *ntype)
void BKE_texture_mapping_default(struct TexMapping *texmap, int type)
void BKE_texture_colormapping_default(struct ColorMapping *colormap)
@ SHD_VORONOI_DISTANCE_TO_EDGE
@ SHD_VORONOI_N_SPHERE_RADIUS
#define TEXMAP_TYPE_POINT
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
GPUNodeLink * GPU_constant(const float *num)
bool GPU_stack_link(GPUMaterial *mat, struct bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out,...)
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise SH_NODE_TEX_VORONOI
@ UI_ITEM_R_SPLIT_EMPTY_NAME
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
constexpr bool is_empty() const
void set_signature(const MFSignature *signature)
const MFSignature & signature() const
void construct_and_set_matching_fn(Args &&...args)
void make_available(bNode &node) const
void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override
static fn::MFSignature create_signature(int dimensions, int feature)
ExecutionHints get_execution_hints() const override
VoronoiEdgeFunction(int dimensions, int feature)
VoronoiMetricFunction(int dimensions, int feature, int metric)
void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override
ExecutionHints get_execution_hints() const override
static fn::MFSignature create_signature(int dimensions, int feature)
static fn::MFSignature create_signature(int dimensions, int feature)
void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override
ExecutionHints get_execution_hints() const override
VoronoiMinowskiFunction(int dimensions, int feature)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
T safe_divide(const T &a, const T &b)
static void node_shader_init_tex_voronoi(bNodeTree *UNUSED(ntree), bNode *node)
static void sh_node_tex_voronoi_declare(NodeDeclarationBuilder &b)
static void sh_node_voronoi_build_multi_function(NodeMultiFunctionBuilder &builder)
static void node_shader_update_tex_voronoi(bNodeTree *ntree, bNode *node)
static MultiFunction::ExecutionHints voronoi_execution_hints
static int node_shader_gpu_tex_voronoi(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
static void node_shader_buts_tex_voronoi(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
static const char * gpu_shader_get_name(const int feature, const int dimensions)
void voronoi_n_sphere_radius(float w, float randomness, float *r_radius)
void voronoi_smooth_f1(float w, float smoothness, float randomness, float *r_distance, float3 *r_color, float *r_w)
void voronoi_distance_to_edge(float w, float randomness, float *r_distance)
void voronoi_f1(float w, float randomness, float *r_distance, float3 *r_color, float *r_w)
void voronoi_f2(float w, float randomness, float *r_distance, float3 *r_color, float *r_w)
vec_base< float, 3 > float3
vec_base< float, 4 > float4
vec_base< float, 2 > float2
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
void register_node_type_sh_tex_voronoi()
void node_shader_gpu_tex_mapping(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *UNUSED(out))
void node_shader_gpu_default_tex_coord(GPUMaterial *mat, bNode *node, GPUNodeLink **link)
void sh_fn_node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
void node_copy_standard_storage(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node)
void node_free_standard_storage(bNode *node)
int RNA_enum_get(PointerRNA *ptr, const char *name)
void(* draw_buttons)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr)
NodeMultiFunctionBuildFunction build_multi_function
NodeDeclareFunction declare