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 17:18:26 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-05-01 17:30:51 +0300
commitd33801e2bff1e39cefc74f53ae2b5e532cc7d964 (patch)
treecc5a07c416371612736ecaca2ac20f59f56fc7d5 /source/blender/draw/engines/overlay/shaders
parent1c992cc647d9954e43d06e10741692ad9d8af36d (diff)
Overlay: Port image empty shader to use shaderCreateInfo
This should have no functional changes.
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders')
-rw-r--r--source/blender/draw/engines/overlay/shaders/image_vert.glsl19
-rw-r--r--source/blender/draw/engines/overlay/shaders/infos/extra_info.hh27
2 files changed, 37 insertions, 9 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/image_vert.glsl b/source/blender/draw/engines/overlay/shaders/image_vert.glsl
index a44ea7081ba..45cddb3610d 100644
--- a/source/blender/draw/engines/overlay/shaders/image_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/image_vert.glsl
@@ -1,20 +1,20 @@
-uniform bool depthSet;
-uniform bool isCameraBackground;
-
-in vec3 pos;
-
-out vec2 uvs;
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
void main()
{
+ vec3 world_pos = point_object_to_world(pos);
if (isCameraBackground) {
- vec3 vP = (ModelMatrix * vec4(pos, 1.0)).xyz;
- gl_Position = point_view_to_ndc(vP);
+ /* Model matrix converts to view position to avoid jittering (see T91398). */
+ gl_Position = point_view_to_ndc(world_pos);
+ /* Camera background images are not really part of the 3D space.
+ * It makes no sense to apply clipping on them. */
+ view_clipping_distances_bypass();
}
else {
- vec3 world_pos = point_object_to_world(pos);
gl_Position = point_world_to_ndc(world_pos);
+ view_clipping_distances(world_pos);
}
if (depthSet) {
@@ -22,6 +22,7 @@ void main()
* This mimics the effect of infinite projection matrix
* (see http://www.terathon.com/gdc07_lengyel.pdf). */
gl_Position.z = gl_Position.w - 2.4e-7;
+ view_clipping_distances_bypass();
}
uvs = pos.xy * 0.5 + 0.5;
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 e2ce4329bd7..2643f5cd806 100644
--- a/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh
+++ b/source/blender/draw/engines/overlay/shaders/infos/extra_info.hh
@@ -224,3 +224,30 @@ GPU_SHADER_CREATE_INFO(overlay_motion_path_point_clipped)
.additional_info("overlay_motion_path_point", "drw_clipped");
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Image Empty
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(overlay_image_iface, "").smooth(Type::VEC2, "uvs");
+
+GPU_SHADER_CREATE_INFO(overlay_image)
+ .do_static_compilation(true)
+ .push_constant(Type::BOOL, "depthSet")
+ .push_constant(Type::BOOL, "isCameraBackground")
+ .push_constant(Type::BOOL, "imgPremultiplied")
+ .push_constant(Type::BOOL, "imgAlphaBlend")
+ .push_constant(Type::VEC4, "color")
+ .vertex_in(0, Type::VEC3, "pos")
+ .vertex_out(overlay_image_iface)
+ .sampler(0, ImageType::FLOAT_2D, "imgTexture")
+ .fragment_out(0, Type::VEC4, "fragColor")
+ .vertex_source("image_vert.glsl")
+ .fragment_source("image_frag.glsl")
+ .additional_info("draw_mesh");
+
+GPU_SHADER_CREATE_INFO(overlay_image_clipped)
+ .do_static_compilation(true)
+ .additional_info("overlay_image", "drw_clipped");
+
+/** \} */