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>2021-10-04 14:10:20 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-10-08 18:58:42 +0300
commit9f85107fef7f20689cec83671b88b4c71b5ef8fd (patch)
tree13cdafa288b89219f31e49d66cd21a68ac33cbd7 /source/blender
parentbcd5bd6cd51146250341e78de2a34ff693cee154 (diff)
EEVEE: Fix smooth transition when using render borders
The first sample buffer is fullscreen and needs to have its uvs corrected to match the render border viewport.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/eevee/eevee_film.cc6
-rw-r--r--source/blender/draw/engines/eevee/shaders/eevee_film_resolve_frag.glsl5
2 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_film.cc b/source/blender/draw/engines/eevee/eevee_film.cc
index 143c795f10f..a45d503a25c 100644
--- a/source/blender/draw/engines/eevee/eevee_film.cc
+++ b/source/blender/draw/engines/eevee/eevee_film.cc
@@ -166,8 +166,10 @@ void Film::end_sync()
if (do_smooth_viewport_smooth_transition() && (data_.opacity < 1.0f || is_first_sample)) {
char full_name[32];
SNPRINTF(full_name, "Film.%s.first_sample", name_.c_str());
- eGPUTextureFormat tex_format = GPU_texture_format(DRW_viewport_texture_list_get()->color);
- first_sample_tx_.ensure(full_name, UNPACK2(data_.extent), 1, tex_format);
+ GPUTexture *dtxl_color = DRW_viewport_texture_list_get()->color;
+ eGPUTextureFormat tex_format = GPU_texture_format(dtxl_color);
+ int extent[2] = {GPU_texture_width(dtxl_color), GPU_texture_height(dtxl_color)};
+ first_sample_tx_.ensure(full_name, UNPACK2(extent), 1, tex_format);
first_sample_ref_ = first_sample_tx_;
}
else {
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_film_resolve_frag.glsl b/source/blender/draw/engines/eevee/shaders/eevee_film_resolve_frag.glsl
index 8b77649481e..bdf36d52e96 100644
--- a/source/blender/draw/engines/eevee/shaders/eevee_film_resolve_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/eevee_film_resolve_frag.glsl
@@ -23,6 +23,9 @@ void main(void)
out_color = film_data_decode(film, color, weight);
- vec4 first_sample = textureLod(first_sample_tx, uv, 0.0);
+ /* First sample is stored in a fullscreen buffer. */
+ vec2 uv_first_sample = ((uv * film.extent) + film.offset) /
+ vec2(textureSize(first_sample_tx, 0).xy);
+ vec4 first_sample = textureLod(first_sample_tx, uv_first_sample, 0.0);
out_color = mix(first_sample, out_color, film.opacity);
}