Fix Opengl Error with glBlitFramebuffer

This was caused by 93936b8643

From GL spec :
GL_INVALID_OPERATION is generated if mask contains GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT and the source and destination depth and stencil formats do not match.

So blitting framebuffer with depth or stencil require the SAME FORMAT.
This commit is contained in:
2017-11-14 20:49:13 +01:00
parent f23a595228
commit bc648af4e1
4 changed files with 5 additions and 3 deletions

View File

@@ -136,7 +136,7 @@ static void BASIC_engine_init(void *vedata)
#ifdef USE_DEPTH
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&txl->depth_dup, DRW_TEX_DEPTH_24, 0};
DRWFboTexture tex = {&txl->depth_dup, DRW_TEX_DEPTH_24_STENCIL_8, 0};
DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_basic_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);

View File

@@ -414,7 +414,7 @@ static void CLAY_engine_init(void *vedata)
if (DRW_state_is_fbo()) {
const float *viewport_size = DRW_viewport_size_get();
DRWFboTexture tex = {&e_data.depth_dup, DRW_TEX_DEPTH_24, DRW_TEX_TEMP};
DRWFboTexture tex = {&e_data.depth_dup, DRW_TEX_DEPTH_24_STENCIL_8, DRW_TEX_TEMP};
DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_clay_type,
(int)viewport_size[0], (int)viewport_size[1],
&tex, 1);

View File

@@ -119,7 +119,7 @@ int EEVEE_temporal_sampling_init(EEVEE_SceneLayerData *UNUSED(sldata), EEVEE_Dat
effects->taa_current_sample = 1;
}
DRWFboTexture tex_double_buffer = {&txl->depth_double_buffer, DRW_TEX_DEPTH_24};
DRWFboTexture tex_double_buffer = {&txl->depth_double_buffer, DRW_TEX_DEPTH_24_STENCIL_8, 0};
DRW_framebuffer_init(&fbl->depth_double_buffer_fb, &draw_engine_eevee_type,
(int)viewport_size[0], (int)viewport_size[1],

View File

@@ -532,9 +532,11 @@ void GPU_framebuffer_blit(
if (use_depth) {
BLI_assert(GPU_texture_depth(read_tex) && GPU_texture_depth(write_tex));
BLI_assert(GPU_texture_format(read_tex) == GPU_texture_format(write_tex));
}
else if (use_stencil) {
BLI_assert(GPU_texture_stencil(read_tex) && GPU_texture_stencil(write_tex));
BLI_assert(GPU_texture_format(read_tex) == GPU_texture_format(write_tex));
}
/* read from multi-sample buffer */