[Bf-blender-cvs] [5ed9bb563e4] viewport-compositor: Viewport Compositor: Port Color Ramp node
Omar Emara
noreply at git.blender.org
Tue Dec 28 20:02:44 CET 2021
Commit: 5ed9bb563e4101cb08ae06a6cb8a6f35794fef0a
Author: Omar Emara
Date: Fri Nov 12 18:00:16 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB5ed9bb563e4101cb08ae06a6cb8a6f35794fef0a
Viewport Compositor: Port Color Ramp node
This patch ports the Color Ramp node to the viewport compositor. The
shading color ramp shader was moved into a common directory to be used
by both materials and the compositor.
===================================================================
M source/blender/gpu/CMakeLists.txt
M source/blender/gpu/intern/gpu_material_library.c
R100 source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl source/blender/gpu/shaders/common/gpu_shader_common_color_ramp.glsl
M source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
===================================================================
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index d5de5722dfe..157ac93cfc6 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -275,6 +275,7 @@ data_to_c_simple(shaders/gpu_shader_codegen_lib.glsl SRC)
data_to_c_simple(shaders/gpu_shader_geometry.glsl SRC)
+data_to_c_simple(shaders/common/gpu_shader_common_color_ramp.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_color_util.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_curves.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_math_util.glsl SRC)
@@ -306,7 +307,6 @@ data_to_c_simple(shaders/material/gpu_shader_material_bright_contrast.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_bump.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_camera.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_clamp.glsl SRC)
-data_to_c_simple(shaders/material/gpu_shader_material_color_ramp.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_combine_hsv.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_combine_rgb.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_combine_xyz.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index 38930dd9293..fb3acc73eed 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -41,6 +41,7 @@
* If a file uses functions from another file, it must be added to the list of
* dependencies, and be placed after that file in the list. */
+extern char datatoc_gpu_shader_common_color_ramp_glsl[];
extern char datatoc_gpu_shader_common_color_util_glsl[];
extern char datatoc_gpu_shader_common_curves_glsl[];
extern char datatoc_gpu_shader_common_math_util_glsl[];
@@ -72,7 +73,6 @@ extern char datatoc_gpu_shader_material_bright_contrast_glsl[];
extern char datatoc_gpu_shader_material_bump_glsl[];
extern char datatoc_gpu_shader_material_camera_glsl[];
extern char datatoc_gpu_shader_material_clamp_glsl[];
-extern char datatoc_gpu_shader_material_color_ramp_glsl[];
extern char datatoc_gpu_shader_material_combine_hsv_glsl[];
extern char datatoc_gpu_shader_material_combine_rgb_glsl[];
extern char datatoc_gpu_shader_material_combine_xyz_glsl[];
@@ -155,6 +155,11 @@ static GPUMaterialLibrary gpu_shader_common_color_util_library = {
.dependencies = {NULL},
};
+static GPUMaterialLibrary gpu_shader_common_color_ramp_library = {
+ .code = datatoc_gpu_shader_common_color_ramp_glsl,
+ .dependencies = {NULL},
+};
+
static GPUMaterialLibrary gpu_shader_common_curves_library = {
.code = datatoc_gpu_shader_common_curves_glsl,
.dependencies = {NULL},
@@ -311,11 +316,6 @@ static GPUMaterialLibrary gpu_shader_material_clamp_library = {
.dependencies = {NULL},
};
-static GPUMaterialLibrary gpu_shader_material_color_ramp_library = {
- .code = datatoc_gpu_shader_material_color_ramp_glsl,
- .dependencies = {NULL},
-};
-
static GPUMaterialLibrary gpu_shader_material_combine_hsv_library = {
.code = datatoc_gpu_shader_material_combine_hsv_glsl,
.dependencies = {&gpu_shader_common_color_util_library, NULL},
@@ -657,6 +657,7 @@ static GPUMaterialLibrary gpu_shader_material_world_normals_library = {
};
static GPUMaterialLibrary *gpu_material_libraries[] = {
+ &gpu_shader_common_color_ramp_library,
&gpu_shader_common_math_util_library,
&gpu_shader_common_color_util_library,
&gpu_shader_common_curves_library,
@@ -677,7 +678,6 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
&gpu_shader_material_bump_library,
&gpu_shader_material_camera_library,
&gpu_shader_material_clamp_library,
- &gpu_shader_material_color_ramp_library,
&gpu_shader_material_combine_hsv_library,
&gpu_shader_material_combine_rgb_library,
&gpu_shader_material_combine_xyz_library,
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl b/source/blender/gpu/shaders/common/gpu_shader_common_color_ramp.glsl
similarity index 100%
rename from source/blender/gpu/shaders/material/gpu_shader_material_color_ramp.glsl
rename to source/blender/gpu/shaders/common/gpu_shader_common_color_ramp.glsl
diff --git a/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc b/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
index ece52dea269..dbe79b93908 100644
--- a/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
@@ -39,6 +39,67 @@ static void node_composit_init_valtorgb(bNodeTree *UNUSED(ntree), bNode *node)
node->storage = BKE_colorband_add(true);
}
+static int node_composite_gpu_valtorgb(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ struct ColorBand *coba = (ColorBand *)node->storage;
+ float *array, layer;
+ int size;
+
+ /* Common / easy case optimization. */
+ if ((coba->tot <= 2) && (coba->color_mode == COLBAND_BLEND_RGB)) {
+ float mul_bias[2];
+ switch (coba->ipotype) {
+ case COLBAND_INTERP_LINEAR:
+ mul_bias[0] = 1.0f / (coba->data[1].pos - coba->data[0].pos);
+ mul_bias[1] = -mul_bias[0] * coba->data[0].pos;
+ return GPU_stack_link(mat,
+ node,
+ "valtorgb_opti_linear",
+ in,
+ out,
+ GPU_uniform(mul_bias),
+ GPU_uniform(&coba->data[0].r),
+ GPU_uniform(&coba->data[1].r));
+ case COLBAND_INTERP_CONSTANT:
+ mul_bias[1] = max_ff(coba->data[0].pos, coba->data[1].pos);
+ return GPU_stack_link(mat,
+ node,
+ "valtorgb_opti_constant",
+ in,
+ out,
+ GPU_uniform(&mul_bias[1]),
+ GPU_uniform(&coba->data[0].r),
+ GPU_uniform(&coba->data[1].r));
+ case COLBAND_INTERP_EASE:
+ mul_bias[0] = 1.0f / (coba->data[1].pos - coba->data[0].pos);
+ mul_bias[1] = -mul_bias[0] * coba->data[0].pos;
+ return GPU_stack_link(mat,
+ node,
+ "valtorgb_opti_ease",
+ in,
+ out,
+ GPU_uniform(mul_bias),
+ GPU_uniform(&coba->data[0].r),
+ GPU_uniform(&coba->data[1].r));
+ default:
+ break;
+ }
+ }
+
+ BKE_colorband_evaluate_table_rgba(coba, &array, &size);
+ GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
+
+ if (coba->ipotype == COLBAND_INTERP_CONSTANT) {
+ return GPU_stack_link(mat, node, "valtorgb_nearest", in, out, tex, GPU_constant(&layer));
+ }
+
+ return GPU_stack_link(mat, node, "valtorgb", in, out, tex, GPU_constant(&layer));
+}
+
void register_node_type_cmp_valtorgb(void)
{
static bNodeType ntype;
@@ -48,6 +109,7 @@ void register_node_type_cmp_valtorgb(void)
node_type_size(&ntype, 240, 200, 320);
node_type_init(&ntype, node_composit_init_valtorgb);
node_type_storage(&ntype, "ColorBand", node_free_standard_storage, node_copy_standard_storage);
+ node_type_gpu(&ntype, node_composite_gpu_valtorgb);
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list