diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-05-01 17:18:26 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-05-01 17:30:51 +0300 |
commit | d33801e2bff1e39cefc74f53ae2b5e532cc7d964 (patch) | |
tree | cc5a07c416371612736ecaca2ac20f59f56fc7d5 /source/blender/draw/engines/overlay | |
parent | 1c992cc647d9954e43d06e10741692ad9d8af36d (diff) |
Overlay: Port image empty shader to use shaderCreateInfo
This should have no functional changes.
Diffstat (limited to 'source/blender/draw/engines/overlay')
3 files changed, 40 insertions, 20 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c index 701b03bf8b1..22a10b9d6c4 100644 --- a/source/blender/draw/engines/overlay/overlay_shader.c +++ b/source/blender/draw/engines/overlay/overlay_shader.c @@ -745,19 +745,11 @@ GPUShader *OVERLAY_shader_edit_uv_mask_image(void) GPUShader *OVERLAY_shader_image(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->image) { - sh_data->image = GPU_shader_create_from_arrays({ - .vert = (const char *[]){sh_cfg->lib, - datatoc_common_view_lib_glsl, - datatoc_image_vert_glsl, - NULL}, - .frag = (const char *[]){datatoc_common_colormanagement_lib_glsl, - datatoc_image_frag_glsl, - NULL}, - .defs = (const char *[]){sh_cfg->def, NULL}, - }); + /* TODO(fclem): Do we want to allow clipping reference images? */ + sh_data->image = GPU_shader_create_from_info_name(0 ? "overlay_image_clipped" : + "overlay_image"); } return sh_data->image; } 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"); + +/** \} */ |