Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-05-01 16:35:54 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-05-01 16:37:37 +0300
commit0dfb6eddc001828058b84979699269a55c9bdfcb (patch)
tree96c8b7bc21070992f6269f638e274416b90c4170
parent0c44b03b091785a74fddcd5e82a80f22f44ef559 (diff)
Overlay: Port motion path shaders to use shaderCreateInfo
This should have no functional changes.
-rw-r--r--source/blender/draw/CMakeLists.txt1
-rw-r--r--source/blender/draw/engines/overlay/overlay_shader.c29
-rw-r--r--source/blender/draw/engines/overlay/overlay_shader_shared.h8
-rw-r--r--source/blender/draw/engines/overlay/shaders/infos/extra_info.hh50
-rw-r--r--source/blender/draw/engines/overlay/shaders/motion_path_line_frag.glsl5
-rw-r--r--source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl26
-rw-r--r--source/blender/draw/engines/overlay/shaders/motion_path_line_vert.glsl30
-rw-r--r--source/blender/draw/engines/overlay/shaders/motion_path_point_vert.glsl17
8 files changed, 90 insertions, 76 deletions
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 63405e5fa75..58a7d6f31da 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -494,6 +494,7 @@ set(GLSL_SRC
engines/overlay/shaders/grid_vert.glsl
engines/overlay/shaders/image_vert.glsl
engines/overlay/shaders/image_frag.glsl
+ engines/overlay/shaders/motion_path_line_frag.glsl
engines/overlay/shaders/motion_path_line_geom.glsl
engines/overlay/shaders/motion_path_line_vert.glsl
engines/overlay/shaders/motion_path_point_vert.glsl
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index e23c34e1051..701b03bf8b1 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -765,23 +765,10 @@ GPUShader *OVERLAY_shader_image(void)
GPUShader *OVERLAY_shader_motion_path_line(void)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
- const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
if (!sh_data->motion_path_line) {
- sh_data->motion_path_line = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_motion_path_line_vert_glsl,
- NULL},
- .geom = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_motion_path_line_geom_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_3D_smooth_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, NULL},
- });
+ sh_data->motion_path_line = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_motion_path_line_clipped" : "overlay_motion_path_line");
}
return sh_data->motion_path_line;
}
@@ -789,18 +776,10 @@ GPUShader *OVERLAY_shader_motion_path_line(void)
GPUShader *OVERLAY_shader_motion_path_vert(void)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
- const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
if (!sh_data->motion_path_vert) {
- sh_data->motion_path_vert = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_motion_path_point_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_point_varying_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, NULL},
- });
+ sh_data->motion_path_vert = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_motion_path_point_clipped" : "overlay_motion_path_point");
}
return sh_data->motion_path_vert;
}
diff --git a/source/blender/draw/engines/overlay/overlay_shader_shared.h b/source/blender/draw/engines/overlay/overlay_shader_shared.h
index 268346d8355..99700cdcec4 100644
--- a/source/blender/draw/engines/overlay/overlay_shader_shared.h
+++ b/source/blender/draw/engines/overlay/overlay_shader_shared.h
@@ -3,6 +3,9 @@
#ifndef GPU_SHADER
# include "GPU_shader_shared_utils.h"
+# include "DNA_action_types.h"
+# include "DNA_view3d_types.h"
+
# ifdef __cplusplus
extern "C" {
# else
@@ -67,10 +70,15 @@ BLI_STATIC_ASSERT_ALIGN(OVERLAY_GridData, 16)
# define GP_EDIT_STROKE_END 16u /* 1 << 4 */
# define GP_EDIT_POINT_DIMMED 32u /* 1 << 5 */
+# define MOTIONPATH_VERT_SEL (1 << 0)
+# define MOTIONPATH_VERT_KEY (1 << 1)
+
#else
/* TODO(fclem): Find a better way to share enums/defines from DNA files with GLSL. */
BLI_STATIC_ASSERT(CURVE_HANDLE_SELECTED == 0, "Ensure value is sync");
BLI_STATIC_ASSERT(CURVE_HANDLE_ALL == 1, "Ensure value is sync");
+BLI_STATIC_ASSERT(MOTIONPATH_VERT_SEL == (1 << 0), "Ensure value is sync");
+BLI_STATIC_ASSERT(MOTIONPATH_VERT_KEY == (1 << 1), "Ensure value is sync");
#endif
#ifndef GPU_SHADER
diff --git a/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh b/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh
index d80db60748d..e2ce4329bd7 100644
--- a/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh
+++ b/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh
@@ -174,3 +174,53 @@ GPU_SHADER_CREATE_INFO(overlay_extra_loose_point_clipped)
.additional_info("overlay_extra_loose_point", "drw_clipped");
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Motion Path
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(overlay_motion_path_line_iface, "interp")
+ .flat(Type::VEC2, "ss_pos")
+ .smooth(Type::VEC4, "color");
+
+GPU_SHADER_CREATE_INFO(overlay_motion_path_line)
+ .do_static_compilation(true)
+ .vertex_in(0, Type::VEC3, "pos")
+ .push_constant(Type::IVEC4, "mpathLineSettings")
+ .push_constant(Type::BOOL, "selected")
+ .push_constant(Type::VEC3, "customColor")
+ .push_constant(Type::INT, "lineThickness") /* In pixels. */
+ .vertex_out(overlay_motion_path_line_iface)
+ .geometry_out(overlay_motion_path_line_iface)
+ .geometry_layout(PrimitiveIn::LINES, PrimitiveOut::TRIANGLE_STRIP, 4)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .vertex_source("motion_path_line_vert.glsl")
+ .geometry_source("motion_path_line_geom.glsl")
+ .fragment_source("motion_path_line_frag.glsl")
+ .additional_info("draw_view", "draw_globals");
+
+GPU_SHADER_CREATE_INFO(overlay_motion_path_line_clipped)
+ .do_static_compilation(true)
+ .additional_info("overlay_motion_path_line", "drw_clipped");
+
+GPU_SHADER_INTERFACE_INFO(overlay_motion_path_point_iface, "").flat(Type::VEC4, "finalColor");
+
+GPU_SHADER_CREATE_INFO(overlay_motion_path_point)
+ .do_static_compilation(true)
+ .typedef_source("overlay_shader_shared.h")
+ .vertex_in(0, Type::VEC3, "pos")
+ .vertex_in(1, Type::INT, "flag")
+ .push_constant(Type::IVEC4, "mpathPointSettings")
+ .push_constant(Type::BOOL, "showKeyFrames")
+ .push_constant(Type::VEC3, "customColor")
+ .vertex_out(overlay_motion_path_point_iface)
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .vertex_source("motion_path_point_vert.glsl")
+ .fragment_source("gpu_shader_point_varying_color_frag.glsl")
+ .additional_info("draw_view", "draw_globals");
+
+GPU_SHADER_CREATE_INFO(overlay_motion_path_point_clipped)
+ .do_static_compilation(true)
+ .additional_info("overlay_motion_path_point", "drw_clipped");
+
+/** \} */
diff --git a/source/blender/draw/engines/overlay/shaders/motion_path_line_frag.glsl b/source/blender/draw/engines/overlay/shaders/motion_path_line_frag.glsl
new file mode 100644
index 00000000000..324d22501f9
--- /dev/null
+++ b/source/blender/draw/engines/overlay/shaders/motion_path_line_frag.glsl
@@ -0,0 +1,5 @@
+
+void main()
+{
+ fragColor = interp.color;
+}
diff --git a/source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl b/source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl
index 95e5b08049e..29346a44863 100644
--- a/source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl
+++ b/source/blender/draw/engines/overlay/shaders/motion_path_line_geom.glsl
@@ -1,13 +1,6 @@
-layout(lines) in;
-layout(triangle_strip, max_vertices = 4) out;
-
-uniform int lineThickness = 2;
-
-in vec4 finalColor_geom[];
-in vec2 ssPos[];
-
-out vec4 finalColor;
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
vec2 compute_dir(vec2 v0, vec2 v1)
{
@@ -19,25 +12,22 @@ vec2 compute_dir(vec2 v0, vec2 v1)
void main(void)
{
vec2 t;
- vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * sizeViewportInv.xy;
+ vec2 edge_dir = compute_dir(interp_in[0].ss_pos, interp_in[1].ss_pos) *
+ drw_view.viewport_size_inverse;
bool is_persp = (ProjectionMatrix[3][3] == 0.0);
float line_size = float(lineThickness) * sizePixel;
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_set_clip_distance(gl_in[0].gl_ClipDistance);
-#endif
- finalColor = finalColor_geom[0];
+ view_clipping_distances_set(gl_in[0]);
+ interp_out.color = interp_in[0].color;
t = edge_dir * (line_size * (is_persp ? gl_in[0].gl_Position.w : 1.0));
gl_Position = gl_in[0].gl_Position + vec4(t, 0.0, 0.0);
EmitVertex();
gl_Position = gl_in[0].gl_Position - vec4(t, 0.0, 0.0);
EmitVertex();
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_set_clip_distance(gl_in[1].gl_ClipDistance);
-#endif
- finalColor = finalColor_geom[1];
+ view_clipping_distances_set(gl_in[1]);
+ interp_out.color = interp_in[1].color;
t = edge_dir * (line_size * (is_persp ? gl_in[1].gl_Position.w : 1.0));
gl_Position = gl_in[1].gl_Position + vec4(t, 0.0, 0.0);
EmitVertex();
diff --git a/source/blender/draw/engines/overlay/shaders/motion_path_line_vert.glsl b/source/blender/draw/engines/overlay/shaders/motion_path_line_vert.glsl
index 7486f287a79..bc74a436f5e 100644
--- a/source/blender/draw/engines/overlay/shaders/motion_path_line_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/motion_path_line_vert.glsl
@@ -1,18 +1,12 @@
-uniform ivec4 mpathLineSettings;
-uniform bool selected;
-uniform vec3 customColor;
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
#define frameCurrent mpathLineSettings.x
#define frameStart mpathLineSettings.y
#define frameEnd mpathLineSettings.z
#define cacheStart mpathLineSettings.w
-in vec3 pos;
-
-out vec2 ssPos;
-out vec4 finalColor_geom;
-
/* project to screen space */
vec2 proj(vec4 pos)
{
@@ -26,7 +20,7 @@ void main()
{
gl_Position = ViewProjectionMatrix * vec4(pos, 1.0);
- ssPos = proj(gl_Position);
+ interp.ss_pos = proj(gl_Position);
int frame = gl_VertexID + cacheStart;
@@ -40,7 +34,7 @@ void main()
if (frame < frameCurrent) {
if (use_custom_color) {
/* Custom color: previous frames color is darker than current frame */
- finalColor_geom.rgb = customColor * 0.25;
+ interp.color.rgb = customColor * 0.25;
}
else {
/* black - before frameCurrent */
@@ -50,13 +44,13 @@ void main()
else {
intensity = SET_INTENSITY(frameStart, frame, frameCurrent, 0.68, 0.92);
}
- finalColor_geom.rgb = mix(colorWire.rgb, blend_base, intensity);
+ interp.color.rgb = mix(colorWire.rgb, blend_base, intensity);
}
}
else if (frame > frameCurrent) {
if (use_custom_color) {
/* Custom color: next frames color is equal to user selected color */
- finalColor_geom.rgb = customColor;
+ interp.color.rgb = customColor;
}
else {
/* blue - after frameCurrent */
@@ -67,13 +61,13 @@ void main()
intensity = SET_INTENSITY(frameCurrent, frame, frameEnd, 0.68, 0.92);
}
- finalColor_geom.rgb = mix(colorBonePose.rgb, blend_base, intensity);
+ interp.color.rgb = mix(colorBonePose.rgb, blend_base, intensity);
}
}
else {
if (use_custom_color) {
/* Custom color: current frame color is slightly darker than user selected color */
- finalColor_geom.rgb = customColor * 0.5;
+ interp.color.rgb = customColor * 0.5;
}
else {
/* green - on frameCurrent */
@@ -83,13 +77,11 @@ void main()
else {
intensity = 0.75f;
}
- finalColor_geom.rgb = mix(colorBackground.rgb, blend_base, intensity);
+ interp.color.rgb = mix(colorBackground.rgb, blend_base, intensity);
}
}
- finalColor_geom.a = 1.0;
+ interp.color.a = 1.0;
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_calc_clip_distance(pos);
-#endif
+ view_clipping_distances(pos);
}
diff --git a/source/blender/draw/engines/overlay/shaders/motion_path_point_vert.glsl b/source/blender/draw/engines/overlay/shaders/motion_path_point_vert.glsl
index 14335eb1b99..5027525b9b3 100644
--- a/source/blender/draw/engines/overlay/shaders/motion_path_point_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/motion_path_point_vert.glsl
@@ -1,21 +1,12 @@
-uniform ivec4 mpathPointSettings;
-uniform bool showKeyFrames = true;
-uniform vec3 customColor;
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
#define pointSize mpathPointSettings.x
#define frameCurrent mpathPointSettings.y
#define cacheStart mpathPointSettings.z
#define stepSize mpathPointSettings.w
-in vec3 pos;
-in int flag;
-
-#define MOTIONPATH_VERT_SEL (1 << 0)
-#define MOTIONPATH_VERT_KEY (1 << 1)
-
-out vec4 finalColor;
-
void main()
{
gl_Position = ViewProjectionMatrix * vec4(pos, 1.0);
@@ -52,7 +43,5 @@ void main()
gl_PointSize *= sizePixel;
-#ifdef USE_WORLD_CLIP_PLANES
- world_clip_planes_calc_clip_distance(pos);
-#endif
+ view_clipping_distances(pos);
}