From 329efa23d0e5555243a413407e8d6cc9e4cf7d65 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 5 Jul 2022 15:56:39 +0200 Subject: Cleanup: Unused headers in generic compositor nodes header Move headers to node files which actually need those. There is no need for all nodes to have all those headers included indirectly. --- source/blender/nodes/composite/nodes/node_composite_huecorrect.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/nodes/composite/nodes/node_composite_huecorrect.cc') diff --git a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc index bb5e6bf06a8..d252d96f8c3 100644 --- a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc +++ b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc @@ -7,6 +7,8 @@ #include "node_composite_util.hh" +#include "BKE_colortools.h" + namespace blender::nodes::node_composite_huecorrect_cc { static void cmp_node_huecorrect_declare(NodeDeclarationBuilder &b) -- cgit v1.2.3 From 6109ad6cce9186bd6e8ff4dbfb281ae8f6742119 Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Wed, 10 Aug 2022 09:58:44 +0200 Subject: Realtime Compositor: Add basic color nodes This patch implements the following nodes for the realtime compositor: - Alpha over node. - Bright contrast node. - Color balance node. - Color correction node. - Exposure node. - Gamma node. - Hue correct node. - Hue saturation value node. - Invert node. - Mix node. - Posterize node. - Time curve node. - Vector curve node. Differential Revision: https://developer.blender.org/D15228 Reviewed By: Clement Foucault --- .../composite/nodes/node_composite_huecorrect.cc | 65 +++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'source/blender/nodes/composite/nodes/node_composite_huecorrect.cc') diff --git a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc index d252d96f8c3..a84420231aa 100644 --- a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc +++ b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc @@ -5,6 +5,12 @@ * \ingroup cmpnodes */ +#include "BKE_colortools.h" + +#include "GPU_material.h" + +#include "COM_shader_node.hh" + #include "node_composite_util.hh" #include "BKE_colortools.h" @@ -13,8 +19,15 @@ namespace blender::nodes::node_composite_huecorrect_cc { static void cmp_node_huecorrect_declare(NodeDeclarationBuilder &b) { - b.add_input(N_("Fac")).default_value(1.0f).min(0.0f).max(1.0f).subtype(PROP_FACTOR); - b.add_input(N_("Image")).default_value({1.0f, 1.0f, 1.0f, 1.0f}); + b.add_input(N_("Fac")) + .default_value(1.0f) + .min(0.0f) + .max(1.0f) + .subtype(PROP_FACTOR) + .compositor_domain_priority(1); + b.add_input(N_("Image")) + .default_value({1.0f, 1.0f, 1.0f, 1.0f}) + .compositor_domain_priority(0); b.add_output(N_("Image")); } @@ -35,6 +48,53 @@ static void node_composit_init_huecorrect(bNodeTree *UNUSED(ntree), bNode *node) cumapping->cur = 1; } +using namespace blender::realtime_compositor; + +class HueCorrectShaderNode : public ShaderNode { + public: + using ShaderNode::ShaderNode; + + void compile(GPUMaterial *material) override + { + GPUNodeStack *inputs = get_inputs_array(); + GPUNodeStack *outputs = get_outputs_array(); + + CurveMapping *curve_mapping = get_curve_mapping(); + + BKE_curvemapping_init(curve_mapping); + float *band_values; + int band_size; + BKE_curvemapping_table_RGBA(curve_mapping, &band_values, &band_size); + float band_layer; + GPUNodeLink *band_texture = GPU_color_band(material, band_size, band_values, &band_layer); + + float range_minimums[CM_TOT]; + BKE_curvemapping_get_range_minimums(curve_mapping, range_minimums); + float range_dividers[CM_TOT]; + BKE_curvemapping_compute_range_dividers(curve_mapping, range_dividers); + + GPU_stack_link(material, + &bnode(), + "node_composite_hue_correct", + inputs, + outputs, + band_texture, + GPU_constant(&band_layer), + GPU_uniform(range_minimums), + GPU_uniform(range_dividers)); + } + + CurveMapping *get_curve_mapping() + { + return static_cast(bnode().storage); + } +}; + +static ShaderNode *get_compositor_shader_node(DNode node) +{ + return new HueCorrectShaderNode(node); +} + } // namespace blender::nodes::node_composite_huecorrect_cc void register_node_type_cmp_huecorrect() @@ -48,6 +108,7 @@ void register_node_type_cmp_huecorrect() node_type_size(&ntype, 320, 140, 500); node_type_init(&ntype, file_ns::node_composit_init_huecorrect); node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves); + ntype.get_compositor_shader_node = file_ns::get_compositor_shader_node; nodeRegisterType(&ntype); } -- cgit v1.2.3 From 91d9f46aecacab60d747b757cf57ecdc1b18913a Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 31 Aug 2022 11:49:35 -0500 Subject: Cleanup: Use const for node data in compositor Push the const usage a bit further for compositor nodes, so that they are more explicit about not modifying original nodes from the editor. Differential Revision: https://developer.blender.org/D15822 --- source/blender/nodes/composite/nodes/node_composite_huecorrect.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/nodes/composite/nodes/node_composite_huecorrect.cc') diff --git a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc index a84420231aa..6333860a19b 100644 --- a/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc +++ b/source/blender/nodes/composite/nodes/node_composite_huecorrect.cc @@ -59,7 +59,7 @@ class HueCorrectShaderNode : public ShaderNode { GPUNodeStack *inputs = get_inputs_array(); GPUNodeStack *outputs = get_outputs_array(); - CurveMapping *curve_mapping = get_curve_mapping(); + CurveMapping *curve_mapping = const_cast(get_curve_mapping()); BKE_curvemapping_init(curve_mapping); float *band_values; @@ -84,9 +84,9 @@ class HueCorrectShaderNode : public ShaderNode { GPU_uniform(range_dividers)); } - CurveMapping *get_curve_mapping() + const CurveMapping *get_curve_mapping() { - return static_cast(bnode().storage); + return static_cast(bnode().storage); } }; -- cgit v1.2.3