Welcome to mirror list, hosted at ThFree Co, Russian Federation.

node_util.h « intern « nodes « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 635d536459494a677ce5ca8dbd2312a6fa1a6bf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * The Original Code is Copyright (C) 2007 Blender Foundation.
 * All rights reserved.
 */

/** \file
 * \ingroup nodes
 */

#pragma once

#include "DNA_listBase.h"

#include "BLI_utildefines.h"

#include "BKE_node.h"

#include "MEM_guardedalloc.h"

#include "NOD_socket.h"

#include "GPU_material.h" /* For Shader muting GPU code... */

#include "RNA_access.h"

#ifdef __cplusplus
extern "C" {
#endif

struct bNode;
struct bNodeTree;

/* 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;

/**** Storage Data ****/

extern void node_free_curves(struct bNode *node);
extern void node_free_standard_storage(struct bNode *node);

extern void node_copy_curves(struct bNodeTree *dest_ntree,
                             struct bNode *dest_node,
                             const struct bNode *src_node);
extern void node_copy_standard_storage(struct bNodeTree *dest_ntree,
                                       struct bNode *dest_node,
                                       const struct bNode *src_node);
extern void *node_initexec_curves(struct bNodeExecContext *context,
                                  struct bNode *node,
                                  bNodeInstanceKey key);

/**** Updates ****/
void node_sock_label(struct bNodeSocket *sock, const char *name);
void node_sock_label_clear(struct bNodeSocket *sock);
void node_math_update(struct bNodeTree *ntree, struct bNode *node);

/**** Labels ****/
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);

/*** Link Handling */

/**
 * The idea behind this is: When a user connects an input to a socket that is
 * already linked (and if its not an Multi Input Socket), we try to find a replacement socket for
 * the link that we try to overwrite and connect that previous link to the new socket.
 */
void node_insert_link_default(struct bNodeTree *ntree, struct bNode *node, struct bNodeLink *link);

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);

#ifdef __cplusplus
}
#endif