Blender V4.3
node_composite_map_value.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2006 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "BKE_texture.h"
10
11#include "RNA_access.hh"
12
13#include "UI_interface.hh"
14#include "UI_resources.hh"
15
16#include "GPU_material.hh"
17
18#include "COM_shader_node.hh"
19
21
22/* **************** MAP VALUE ******************** */
23
25
27
29{
30 b.add_input<decl::Float>("Value")
31 .default_value(1.0f)
32 .min(0.0f)
33 .max(1.0f)
35 b.add_output<decl::Float>("Value");
36}
37
38static void node_composit_init_map_value(bNodeTree * /*ntree*/, bNode *node)
39{
41}
42
44{
45 uiLayout *sub, *col;
46
47 col = uiLayoutColumn(layout, true);
48 uiItemR(col, ptr, "offset", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
49 uiItemR(col, ptr, "size", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
50
51 col = uiLayoutColumn(layout, true);
52 uiItemR(col, ptr, "use_min", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
53 sub = uiLayoutColumn(col, false);
54 uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_min"));
55 uiItemR(sub, ptr, "min", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
56
57 col = uiLayoutColumn(layout, true);
58 uiItemR(col, ptr, "use_max", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
59 sub = uiLayoutColumn(col, false);
60 uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_max"));
61 uiItemR(sub, ptr, "max", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
62}
63
64using namespace blender::realtime_compositor;
65
67 public:
69
70 void compile(GPUMaterial *material) override
71 {
74
75 const TexMapping &texture_mapping = node_storage(bnode());
76
77 const float use_min = get_use_min();
78 const float use_max = get_use_max();
79
80 GPU_stack_link(material,
81 &bnode(),
82 "node_composite_map_value",
83 inputs,
84 outputs,
85 GPU_uniform(texture_mapping.loc),
86 GPU_uniform(texture_mapping.size),
87 GPU_constant(&use_min),
88 GPU_uniform(texture_mapping.min),
89 GPU_constant(&use_max),
90 GPU_uniform(texture_mapping.max));
91 }
92
94 {
95 return node_storage(bnode()).flag & TEXMAP_CLIP_MIN;
96 }
97
99 {
100 return node_storage(bnode()).flag & TEXMAP_CLIP_MAX;
101 }
102};
103
105{
106 return new MapValueShaderNode(node);
107}
108
109} // namespace blender::nodes::node_composite_map_value_cc
110
112{
114
115 static blender::bke::bNodeType ntype;
116
117 cmp_node_type_base(&ntype, CMP_NODE_MAP_VALUE, "Map Value", NODE_CLASS_OP_VECTOR);
118 ntype.declare = file_ns::cmp_node_map_value_declare;
119 ntype.draw_buttons = file_ns::node_composit_buts_map_value;
120 ntype.initfunc = file_ns::node_composit_init_map_value;
123 ntype.get_compositor_shader_node = file_ns::get_compositor_shader_node;
124
126}
#define NODE_STORAGE_FUNCS(StorageT)
Definition BKE_node.hh:1799
#define NODE_CLASS_OP_VECTOR
Definition BKE_node.hh:407
struct TexMapping * BKE_texture_mapping_add(int type)
Definition texture.cc:238
@ TEXMAP_CLIP_MIN
@ TEXMAP_CLIP_MAX
@ TEXMAP_TYPE_POINT
bool GPU_stack_link(GPUMaterial *mat, const bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out,...)
GPUNodeLink * GPU_constant(const float *num)
GPUNodeLink * GPU_uniform(const float *num)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
@ UI_ITEM_R_SPLIT_EMPTY_NAME
local_group_size(16, 16) .push_constant(Type b
uint col
void node_type_storage(bNodeType *ntype, const char *storagename, void(*freefunc)(bNode *node), void(*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node))
Definition node.cc:4632
void node_register_type(bNodeType *ntype)
Definition node.cc:1708
static void node_composit_init_map_value(bNodeTree *, bNode *node)
static void node_composit_buts_map_value(uiLayout *layout, bContext *, PointerRNA *ptr)
static void cmp_node_map_value_declare(NodeDeclarationBuilder &b)
static ShaderNode * get_compositor_shader_node(DNode node)
void register_node_type_cmp_map_value()
void cmp_node_type_base(blender::bke::bNodeType *ntype, int type, const char *name, short nclass)
void node_free_standard_storage(bNode *node)
Definition node_util.cc:46
void node_copy_standard_storage(bNodeTree *, bNode *dest_node, const bNode *src_node)
Definition node_util.cc:58
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
Defines a node type.
Definition BKE_node.hh:218
void(* initfunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:267
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:238
NodeDeclareFunction declare
Definition BKE_node.hh:347
NodeGetCompositorShaderNodeFunction get_compositor_shader_node
Definition BKE_node.hh:328
PointerRNA * ptr
Definition wm_files.cc:4126