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
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-03-29 14:43:23 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-03-29 14:43:30 +0300
commit8301b2645249a2522d817c77e295d7de139af5e7 (patch)
tree0b35ed66d8c680b6e5fefdf5cb2fb12e9526d229 /source
parent72b4d444f6a3929cdc1b2368b0118539588e1b49 (diff)
EEVEE: Fix bad framebuffer configuration
Was causing black / corrupted scene because of broken downsample Add a debug check to not run into this problem again.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c14
-rw-r--r--source/blender/gpu/intern/gpu_framebuffer.c2
2 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 2cb02a9ad7b..977eb14a1bb 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -170,16 +170,13 @@ void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object
if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) {
/* Intel gpu seems to have problem rendering to only depth format */
DRW_texture_ensure_2D(&txl->maxzbuffer, size[0], size[1], DRW_TEX_R_32, DRW_TEX_MIPMAP);
- GPU_framebuffer_ensure_config(&fbl->downsample_fb, {
- GPU_ATTACHMENT_NONE,
- GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer)
- });
}
else {
DRW_texture_ensure_2D(&txl->maxzbuffer, size[0], size[1], DRW_TEX_DEPTH_24, DRW_TEX_MIPMAP);
- GPU_framebuffer_ensure_config(&fbl->downsample_fb, {
- GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer)
- });
+ }
+
+ if (fbl->downsample_fb == NULL) {
+ fbl->downsample_fb = GPU_framebuffer_create();
}
/**
@@ -363,6 +360,7 @@ void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, GPUTexture *depth_src, int l
/* Create lower levels */
GPU_framebuffer_recursive_downsample(fbl->downsample_fb, 8, &max_downsample_cb, vedata);
+ GPU_framebuffer_texture_detach(fbl->downsample_fb, txl->maxzbuffer);
DRW_stats_group_end();
/* Restore */
@@ -381,6 +379,7 @@ void EEVEE_downsample_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int le
DRW_stats_group_start("Downsample buffer");
GPU_framebuffer_texture_attach(fbl->downsample_fb, texture_src, 0, 0);
GPU_framebuffer_recursive_downsample(fbl->downsample_fb, level, &simple_downsample_cb, vedata);
+ GPU_framebuffer_texture_detach(fbl->downsample_fb, texture_src);
DRW_stats_group_end();
}
@@ -396,6 +395,7 @@ void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, i
DRW_stats_group_start("Downsample Cube buffer");
GPU_framebuffer_texture_attach(fbl->downsample_fb, texture_src, 0, 0);
GPU_framebuffer_recursive_downsample(fbl->downsample_fb, level, &simple_downsample_cube_cb, vedata);
+ GPU_framebuffer_texture_detach(fbl->downsample_fb, texture_src);
DRW_stats_group_end();
}
diff --git a/source/blender/gpu/intern/gpu_framebuffer.c b/source/blender/gpu/intern/gpu_framebuffer.c
index 458f2a1e031..e016ab358e2 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.c
+++ b/source/blender/gpu/intern/gpu_framebuffer.c
@@ -616,6 +616,8 @@ void GPU_framebuffer_recursive_downsample(
}
}
+ BLI_assert(GPU_framebuffer_check_valid(fb, NULL));
+
glViewport(0, 0, current_dim[0], current_dim[1]);
callback(userData, i);