2022-02-11 09:07:11 +11:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
2023-02-22 10:16:42 +01:00
|
|
|
* Copyright 2007 Blender Foundation */
|
2007-04-04 13:58:12 +00:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup nodes
|
2011-02-27 20:13:22 +00:00
|
|
|
*/
|
|
|
|
|
|
2012-02-17 18:59:41 +00:00
|
|
|
#pragma once
|
2007-04-04 13:58:12 +00:00
|
|
|
|
2020-04-20 10:58:43 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2011-09-05 21:01:50 +00:00
|
|
|
struct bNode;
|
2019-01-28 21:08:24 +11:00
|
|
|
struct bNodeTree;
|
2011-09-05 21:01:50 +00:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
/* data for initializing node execution */
|
|
|
|
|
typedef struct bNodeExecContext {
|
|
|
|
|
struct bNodeInstanceHash *previews;
|
|
|
|
|
} bNodeExecContext;
|
|
|
|
|
|
|
|
|
|
typedef struct bNodeExecData {
|
|
|
|
|
void *data; /* custom data storage */
|
|
|
|
|
struct bNodePreview *preview; /* optional preview image */
|
|
|
|
|
} bNodeExecData;
|
|
|
|
|
|
2011-09-05 21:01:50 +00:00
|
|
|
/**** Storage Data ****/
|
|
|
|
|
|
2021-12-12 22:53:03 -06:00
|
|
|
void node_free_curves(struct bNode *node);
|
|
|
|
|
void node_free_standard_storage(struct bNode *node);
|
|
|
|
|
|
|
|
|
|
void node_copy_curves(struct bNodeTree *dest_ntree,
|
|
|
|
|
struct bNode *dest_node,
|
|
|
|
|
const struct bNode *src_node);
|
|
|
|
|
void node_copy_standard_storage(struct bNodeTree *dest_ntree,
|
|
|
|
|
struct bNode *dest_node,
|
|
|
|
|
const struct bNode *src_node);
|
|
|
|
|
void *node_initexec_curves(struct bNodeExecContext *context,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
bNodeInstanceKey key);
|
2007-04-04 13:58:12 +00:00
|
|
|
|
2020-02-11 15:31:40 +00:00
|
|
|
/**** Updates ****/
|
|
|
|
|
void node_sock_label(struct bNodeSocket *sock, const char *name);
|
2021-03-23 09:21:56 +00:00
|
|
|
void node_sock_label_clear(struct bNodeSocket *sock);
|
2020-02-11 15:31:40 +00:00
|
|
|
void node_math_update(struct bNodeTree *ntree, struct bNode *node);
|
2011-09-05 21:01:50 +00:00
|
|
|
|
2020-02-11 15:31:40 +00:00
|
|
|
/**** Labels ****/
|
2021-12-11 09:51:53 -06:00
|
|
|
void node_blend_label(const struct bNodeTree *ntree,
|
|
|
|
|
const struct bNode *node,
|
|
|
|
|
char *label,
|
|
|
|
|
int maxlen);
|
|
|
|
|
void node_image_label(const struct bNodeTree *ntree,
|
|
|
|
|
const struct bNode *node,
|
|
|
|
|
char *label,
|
|
|
|
|
int maxlen);
|
|
|
|
|
void node_math_label(const struct bNodeTree *ntree,
|
|
|
|
|
const struct bNode *node,
|
|
|
|
|
char *label,
|
|
|
|
|
int maxlen);
|
|
|
|
|
void node_vector_math_label(const struct bNodeTree *ntree,
|
|
|
|
|
const struct bNode *node,
|
|
|
|
|
char *label,
|
|
|
|
|
int maxlen);
|
|
|
|
|
void node_filter_label(const struct bNodeTree *ntree,
|
|
|
|
|
const struct bNode *node,
|
|
|
|
|
char *label,
|
|
|
|
|
int maxlen);
|
Nodes: Add general Combine/Separate Color nodes
Inspired by D12936 and D12929, this patch adds general purpose
"Combine Color" and "Separate Color" nodes to Geometry, Compositor,
Shader and Texture nodes.
- Within Geometry Nodes, it replaces the existing "Combine RGB" and
"Separate RGB" nodes.
- Within Compositor Nodes, it replaces the existing
"Combine RGBA/HSVA/YCbCrA/YUVA" and "Separate RGBA/HSVA/YCbCrA/YUVA"
nodes.
- Within Texture Nodes, it replaces the existing "Combine RGBA" and
"Separate RGBA" nodes.
- Within Shader Nodes, it replaces the existing "Combine RGB/HSV" and
"Separate RGB/HSV" nodes.
Python addons have not been updated to the new nodes yet.
**New shader code**
In node_color.h, color.h and gpu_shader_material_color_util.glsl,
missing methods hsl_to_rgb and rgb_to_hsl are added by directly
converting existing C code. They always produce the same result.
**Old code**
As requested by T96219, old nodes still exist but are not displayed in
the add menu. This means Python scripts can still create them as usual.
Otherwise, versioning replaces the old nodes with the new nodes when
opening .blend files.
Differential Revision: https://developer.blender.org/D14034
2022-05-04 18:44:03 +02:00
|
|
|
void node_combsep_color_label(const ListBase *sockets, NodeCombSepColorMode mode);
|
2011-02-08 12:54:32 +00:00
|
|
|
|
Node callback for handling link insertion and swapping of occupied inputs.
Nodes have a feature for moving existing links to unoccupied sockets when connecting
to an already used input. This is based on the standard legacy socket types (value/float,
vector, color/rgba) and works reasonably well for shader, compositor and texture nodes.
For new pynode systems, however, the hardcoded nature of that feature has major drawbacks:
* It does not take different type systems into account, leading to meaningless connections
when sockets are swapped and making the feature useless or outright debilitating.
* Advanced socket behaviors would be possible with a registerable callback, e.g. creating
extensible input lists that move existing connections down to make room for a new link.
Now any handling of new links is done via the 'insert_links' callback, which can also be
registered through the RNA API. For the legacy shader/compo/tex nodes the behavior is the
same, using a C callback.
Note on the 'use_swap' flag: this has been removed because it was meaningless anyway:
It was disabled only for the insert-node-on-link feature, which works only for
completely unconnected nodes anyway, so there would be nothing to swap in the first place.
2015-12-03 12:51:29 +01:00
|
|
|
/*** Link Handling */
|
2021-12-10 21:40:30 +11:00
|
|
|
|
|
|
|
|
/**
|
2023-01-28 10:07:29 +01:00
|
|
|
* By default there are no links we don't want to connect, when inserting.
|
2021-12-10 21:40:30 +11:00
|
|
|
*/
|
2023-01-16 15:47:10 -06:00
|
|
|
bool node_insert_link_default(struct bNodeTree *ntree, struct bNode *node, struct bNodeLink *link);
|
2011-11-20 16:38:23 +00:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
float node_socket_get_float(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
|
|
|
|
|
void node_socket_set_float(struct bNodeTree *ntree,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
struct bNodeSocket *sock,
|
|
|
|
|
float value);
|
|
|
|
|
void node_socket_get_color(struct bNodeTree *ntree,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
struct bNodeSocket *sock,
|
|
|
|
|
float *value);
|
|
|
|
|
void node_socket_set_color(struct bNodeTree *ntree,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
struct bNodeSocket *sock,
|
|
|
|
|
const float *value);
|
|
|
|
|
void node_socket_get_vector(struct bNodeTree *ntree,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
struct bNodeSocket *sock,
|
|
|
|
|
float *value);
|
|
|
|
|
void node_socket_set_vector(struct bNodeTree *ntree,
|
|
|
|
|
struct bNode *node,
|
|
|
|
|
struct bNodeSocket *sock,
|
|
|
|
|
const float *value);
|
|
|
|
|
|
2020-04-20 10:58:43 +02:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|