Blender
V5.0
source
blender
nodes
composite
nodes
node_composite_image_coordinates.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2025 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
COM_node_operation.hh
"
6
7
#include "
node_composite_util.hh
"
8
9
namespace
blender::nodes::node_composite_image_coordinates_cc
{
10
11
static
void
node_declare
(
NodeDeclarationBuilder
&
b
)
12
{
13
b
.add_input<
decl::Color
>(
"Image"
)
14
.hide_value()
15
.
compositor_realization_mode
(
CompositorInputRealizationMode::None
)
16
.structure_type(StructureType::Dynamic);
17
18
b
.add_output<
decl::Vector
>(
"Uniform"
)
19
.dimensions(2)
20
.
structure_type
(StructureType::Dynamic)
21
.description(
22
"Zero centered coordinates normalizes along the larger dimension for uniform scaling"
);
23
b
.add_output<
decl::Vector
>(
"Normalized"
)
24
.dimensions(2)
25
.
structure_type
(StructureType::Dynamic)
26
.description(
"Normalized coordinates with half pixel offsets"
);
27
b
.add_output<
decl::Vector
>(
"Pixel"
)
28
.dimensions(2)
29
.
structure_type
(StructureType::Dynamic)
30
.description(
"Integer pixel coordinates"
);
31
}
32
33
using namespace
blender::compositor
;
34
35
class
ImageCoordinatesOperation
:
public
NodeOperation
{
36
public
:
37
ImageCoordinatesOperation
(
Context
&
context
,
DNode
node
) :
NodeOperation
(
context
,
node
)
38
{
39
InputDescriptor
&image_descriptor = this->
get_input_descriptor
(
"Image"
);
40
image_descriptor.
skip_type_conversion
=
true
;
41
}
42
43
void
execute
()
override
44
{
45
const
Result
&
input
= this->
get_input
(
"Image"
);
46
Result
&uniform_coordinates_result = this->
get_result
(
"Uniform"
);
47
Result
&normalized_coordinates_result = this->
get_result
(
"Normalized"
);
48
Result
&pixel_coordinates_result = this->
get_result
(
"Pixel"
);
49
if
(input.
is_single_value
()) {
50
if
(uniform_coordinates_result.
should_compute
()) {
51
uniform_coordinates_result.
allocate_invalid
();
52
}
53
if
(normalized_coordinates_result.
should_compute
()) {
54
normalized_coordinates_result.
allocate_invalid
();
55
}
56
if
(pixel_coordinates_result.
should_compute
()) {
57
pixel_coordinates_result.
allocate_invalid
();
58
}
59
return
;
60
}
61
62
const
Domain
domain =
input
.domain();
63
64
if
(uniform_coordinates_result.
should_compute
()) {
65
const
Result
&uniform_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
66
this->
context
(), domain.
size
,
CoordinatesType::Uniform
);
67
uniform_coordinates_result.
wrap_external
(uniform_coordinates);
68
uniform_coordinates_result.
transform
(domain.
transformation
);
69
}
70
71
if
(normalized_coordinates_result.
should_compute
()) {
72
const
Result
&normalized_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
73
this->
context
(), domain.
size
,
CoordinatesType::Normalized
);
74
normalized_coordinates_result.
wrap_external
(normalized_coordinates);
75
normalized_coordinates_result.
transform
(domain.
transformation
);
76
}
77
78
if
(pixel_coordinates_result.
should_compute
()) {
79
const
Result
&pixel_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
80
this->
context
(), domain.
size
,
CoordinatesType::Pixel
);
81
pixel_coordinates_result.
wrap_external
(pixel_coordinates);
82
pixel_coordinates_result.
transform
(domain.
transformation
);
83
}
84
}
85
};
86
87
static
NodeOperation
*
get_compositor_operation
(
Context
&context,
DNode
node)
88
{
89
return
new
ImageCoordinatesOperation
(context, node);
90
}
91
92
static
void
register_node
()
93
{
94
static
blender::bke::bNodeType
ntype;
95
96
cmp_node_type_base
(&ntype,
"CompositorNodeImageCoordinates"
);
97
ntype.
ui_name
=
"Image Coordinates"
;
98
ntype.
ui_description
=
"Returns the coordinates of the pixels of an image"
;
99
ntype.
nclass
=
NODE_CLASS_INPUT
;
100
ntype.
declare
=
node_declare
;
101
ntype.
get_compositor_operation
=
get_compositor_operation
;
102
103
blender::bke::node_register_type
(ntype);
104
}
105
NOD_REGISTER_NODE
(
register_node
)
106
107
}
// namespace blender::nodes::node_composite_image_coordinates_cc
NODE_CLASS_INPUT
#define NODE_CLASS_INPUT
Definition
BKE_node.hh:447
COM_node_operation.hh
NOD_REGISTER_NODE
#define NOD_REGISTER_NODE(REGISTER_FUNC)
Definition
NOD_register.hh:34
blender::compositor::Context
Definition
COM_context.hh:44
blender::compositor::Context::cache_manager
StaticCacheManager & cache_manager()
Definition
compositor/intern/context.cc:139
blender::compositor::Domain
Definition
COM_domain.hh:145
blender::compositor::Domain::size
int2 size
Definition
COM_domain.hh:148
blender::compositor::Domain::transformation
float3x3 transformation
Definition
COM_domain.hh:151
blender::compositor::ImageCoordinatesContainer::get
Result & get(Context &context, const int2 &size, const CoordinatesType type)
Definition
image_coordinates.cc:135
blender::compositor::InputDescriptor
Definition
COM_input_descriptor.hh:44
blender::compositor::InputDescriptor::skip_type_conversion
bool skip_type_conversion
Definition
COM_input_descriptor.hh:66
blender::compositor::NodeOperation
Definition
COM_node_operation.hh:31
blender::compositor::NodeOperation::node
const DNode & node() const
Definition
node_operation.cc:128
blender::compositor::NodeOperation::NodeOperation
NodeOperation(Context &context, DNode node)
Definition
node_operation.cc:30
blender::compositor::Operation::get_result
Result & get_result(StringRef identifier)
Definition
operation.cc:39
blender::compositor::Operation::context
Context & context() const
Definition
operation.cc:163
blender::compositor::Operation::get_input
Result & get_input(StringRef identifier) const
Definition
operation.cc:138
blender::compositor::Operation::get_input_descriptor
InputDescriptor & get_input_descriptor(StringRef identifier)
Definition
operation.cc:158
blender::compositor::Result
Definition
COM_result.hh:100
blender::compositor::Result::allocate_invalid
void allocate_invalid()
Definition
result.cc:457
blender::compositor::Result::should_compute
bool should_compute()
Definition
result.cc:721
blender::compositor::Result::wrap_external
void wrap_external(blender::gpu::Texture *texture)
Definition
result.cc:584
blender::compositor::Result::transform
void transform(const float3x3 &transformation)
Definition
result.cc:625
blender::compositor::Result::is_single_value
bool is_single_value() const
Definition
result.cc:758
blender::compositor::StaticCacheManager::image_coordinates
ImageCoordinatesContainer image_coordinates
Definition
COM_static_cache_manager.hh:66
blender::nodes::DNode
Definition
NOD_derived_node_tree.hh:71
blender::nodes::NodeDeclarationBuilder
Definition
NOD_node_declaration.hh:664
blender::nodes::SocketDeclaration::structure_type
StructureType structure_type
Definition
NOD_node_declaration.hh:243
blender::nodes::SocketDeclaration::compositor_realization_mode
const CompositorInputRealizationMode & compositor_realization_mode() const
Definition
node_declaration.cc:993
blender::nodes::decl::Color
Definition
NOD_socket_declarations.hh:139
blender::nodes::decl::Vector
Definition
NOD_socket_declarations.hh:83
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation
Definition
node_composite_image_coordinates.cc:35
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation::execute
void execute() override
Definition
node_composite_image_coordinates.cc:43
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation::ImageCoordinatesOperation
ImageCoordinatesOperation(Context &context, DNode node)
Definition
node_composite_image_coordinates.cc:37
b
b
Definition
compositor_morphological_distance_infos.hh:24
input
#define input
Definition
gpu_shader_compat_cxx.hh:170
blender::bke::node_register_type
void node_register_type(bNodeType &ntype)
Definition
node.cc:2416
blender::compositor
Definition
BKE_node.hh:77
blender::compositor::CoordinatesType::Pixel
@ Pixel
Definition
COM_image_coordinates.hh:23
blender::compositor::CoordinatesType::Normalized
@ Normalized
Definition
COM_image_coordinates.hh:22
blender::compositor::CoordinatesType::Uniform
@ Uniform
Definition
COM_image_coordinates.hh:21
blender::nodes::node_composite_image_coordinates_cc
Definition
node_composite_image_coordinates.cc:9
blender::nodes::node_composite_image_coordinates_cc::get_compositor_operation
static NodeOperation * get_compositor_operation(Context &context, DNode node)
Definition
node_composite_image_coordinates.cc:87
blender::nodes::node_composite_image_coordinates_cc::node_declare
static void node_declare(NodeDeclarationBuilder &b)
Definition
node_composite_image_coordinates.cc:11
blender::nodes::node_composite_image_coordinates_cc::register_node
static void register_node()
Definition
node_composite_image_coordinates.cc:92
blender::nodes::CompositorInputRealizationMode::None
@ None
Definition
NOD_node_declaration.hh:59
cmp_node_type_base
void cmp_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
Definition
node_composite_util.cc:33
node_composite_util.hh
blender::bke::bNodeType
Defines a node type.
Definition
BKE_node.hh:238
blender::bke::bNodeType::ui_description
std::string ui_description
Definition
BKE_node.hh:244
blender::bke::bNodeType::ui_name
std::string ui_name
Definition
BKE_node.hh:243
blender::bke::bNodeType::get_compositor_operation
NodeGetCompositorOperationFunction get_compositor_operation
Definition
BKE_node.hh:348
blender::bke::bNodeType::nclass
short nclass
Definition
BKE_node.hh:251
blender::bke::bNodeType::declare
NodeDeclareFunction declare
Definition
BKE_node.hh:362
Generated on
for Blender by
doxygen
1.16.1