Blender
V4.5
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"
).hide_value().
compositor_realization_mode
(
14
CompositorInputRealizationMode::None
);
15
16
b
.add_output<
decl::Vector
>(
"Uniform"
).dimensions(2).
description
(
17
"Zero centered coordinates normalizes along the larger dimension for uniform scaling"
);
18
b
.add_output<
decl::Vector
>(
"Normalized"
)
19
.dimensions(2)
20
.
description
(
"Normalized coordinates with half pixel offsets"
);
21
b
.add_output<
decl::Vector
>(
"Pixel"
).dimensions(2).
description
(
"Integer pixel coordinates"
);
22
}
23
24
using namespace
blender::compositor
;
25
26
class
ImageCoordinatesOperation
:
public
NodeOperation
{
27
public
:
28
ImageCoordinatesOperation
(
Context
&
context
,
DNode
node
) :
NodeOperation
(
context
,
node
)
29
{
30
InputDescriptor
&image_descriptor = this->
get_input_descriptor
(
"Image"
);
31
image_descriptor.
skip_type_conversion
=
true
;
32
}
33
34
void
execute
()
override
35
{
36
const
Result
&
input
= this->
get_input
(
"Image"
);
37
Result
&uniform_coordinates_result = this->
get_result
(
"Uniform"
);
38
Result
&normalized_coordinates_result = this->
get_result
(
"Normalized"
);
39
Result
&pixel_coordinates_result = this->
get_result
(
"Pixel"
);
40
if
(input.
is_single_value
()) {
41
if
(uniform_coordinates_result.
should_compute
()) {
42
uniform_coordinates_result.
allocate_invalid
();
43
}
44
if
(normalized_coordinates_result.
should_compute
()) {
45
normalized_coordinates_result.
allocate_invalid
();
46
}
47
if
(pixel_coordinates_result.
should_compute
()) {
48
pixel_coordinates_result.
allocate_invalid
();
49
}
50
return
;
51
}
52
53
const
Domain
domain =
input
.domain();
54
55
if
(uniform_coordinates_result.
should_compute
()) {
56
const
Result
&uniform_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
57
this->
context
(), domain.
size
,
CoordinatesType::Uniform
);
58
uniform_coordinates_result.
wrap_external
(uniform_coordinates);
59
uniform_coordinates_result.
transform
(domain.
transformation
);
60
}
61
62
if
(normalized_coordinates_result.
should_compute
()) {
63
const
Result
&normalized_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
64
this->
context
(), domain.
size
,
CoordinatesType::Normalized
);
65
normalized_coordinates_result.
wrap_external
(normalized_coordinates);
66
normalized_coordinates_result.
transform
(domain.
transformation
);
67
}
68
69
if
(pixel_coordinates_result.
should_compute
()) {
70
const
Result
&pixel_coordinates = this->
context
().
cache_manager
().
image_coordinates
.
get
(
71
this->
context
(), domain.
size
,
CoordinatesType::Pixel
);
72
pixel_coordinates_result.
wrap_external
(pixel_coordinates);
73
pixel_coordinates_result.
transform
(domain.
transformation
);
74
}
75
}
76
};
77
78
static
NodeOperation
*
get_compositor_operation
(
Context
&context,
DNode
node)
79
{
80
return
new
ImageCoordinatesOperation
(context, node);
81
}
82
83
static
void
register_node
()
84
{
85
static
blender::bke::bNodeType
ntype;
86
87
cmp_node_type_base
(&ntype,
"CompositorNodeImageCoordinates"
);
88
ntype.
ui_name
=
"Image Coordinates"
;
89
ntype.
ui_description
=
"Returns the coordinates of the pixels of an image"
;
90
ntype.
nclass
=
NODE_CLASS_INPUT
;
91
ntype.
declare
=
node_declare
;
92
ntype.
get_compositor_operation
=
get_compositor_operation
;
93
94
blender::bke::node_register_type
(ntype);
95
}
96
NOD_REGISTER_NODE
(
register_node
)
97
98
}
// namespace blender::nodes::node_composite_image_coordinates_cc
NODE_CLASS_INPUT
#define NODE_CLASS_INPUT
Definition
BKE_node.hh:433
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:114
blender::compositor::Domain
Definition
COM_domain.hh:135
blender::compositor::Domain::size
int2 size
Definition
COM_domain.hh:138
blender::compositor::Domain::transformation
float3x3 transformation
Definition
COM_domain.hh:141
blender::compositor::ImageCoordinatesContainer::get
Result & get(Context &context, const int2 &size, const CoordinatesType type)
Definition
image_coordinates.cc:136
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:95
blender::compositor::Result::allocate_invalid
void allocate_invalid()
Definition
result.cc:360
blender::compositor::Result::should_compute
bool should_compute()
Definition
result.cc:588
blender::compositor::Result::transform
void transform(const float3x3 &transformation)
Definition
result.cc:489
blender::compositor::Result::wrap_external
void wrap_external(GPUTexture *texture)
Definition
result.cc:448
blender::compositor::Result::is_single_value
bool is_single_value() const
Definition
result.cc:625
blender::compositor::StaticCacheManager::image_coordinates
ImageCoordinatesContainer image_coordinates
Definition
COM_static_cache_manager.hh:67
blender::nodes::DNode
Definition
NOD_derived_node_tree.hh:71
blender::nodes::NodeDeclarationBuilder
Definition
NOD_node_declaration.hh:629
blender::nodes::SocketDeclaration::description
std::string description
Definition
NOD_node_declaration.hh:202
blender::nodes::SocketDeclaration::compositor_realization_mode
const CompositorInputRealizationMode & compositor_realization_mode() const
Definition
node_declaration.cc:872
blender::nodes::decl::Color
Definition
NOD_socket_declarations.hh:133
blender::nodes::decl::Vector
Definition
NOD_socket_declarations.hh:77
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation
Definition
node_composite_image_coordinates.cc:26
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation::execute
void execute() override
Definition
node_composite_image_coordinates.cc:34
blender::nodes::node_composite_image_coordinates_cc::ImageCoordinatesOperation::ImageCoordinatesOperation
ImageCoordinatesOperation(Context &context, DNode node)
Definition
node_composite_image_coordinates.cc:28
b
b
Definition
compositor_morphological_distance_info.hh:24
input
#define input
Definition
gpu_glsl_cpp_stubs.hh:1059
blender::bke::node_register_type
void node_register_type(bNodeType &ntype)
Definition
node.cc:2748
blender::compositor
Definition
BKE_node.hh:76
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:78
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:83
blender::nodes::CompositorInputRealizationMode::None
@ None
Definition
NOD_node_declaration.hh:56
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:226
blender::bke::bNodeType::ui_description
std::string ui_description
Definition
BKE_node.hh:232
blender::bke::bNodeType::ui_name
std::string ui_name
Definition
BKE_node.hh:231
blender::bke::bNodeType::get_compositor_operation
NodeGetCompositorOperationFunction get_compositor_operation
Definition
BKE_node.hh:336
blender::bke::bNodeType::nclass
short nclass
Definition
BKE_node.hh:239
blender::bke::bNodeType::declare
NodeDeclareFunction declare
Definition
BKE_node.hh:355
Generated on
for Blender by
doxygen
1.16.1