commit 96c28b76dce86795da184abcdf14688ad1852e32 Author: Clément Foucault Date: Thu Apr 16 15:47:18 2020 +0200 Fix T74964 Stereo 3D anaglyph and interlace not working Caused by framebuffer initialized in the wrong context. diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index 704d1c3155e..90676c75f28 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -198,18 +198,6 @@ static void gpu_viewport_framebuffer_view_set(GPUViewport *viewport, int view) GPU_ATTACHMENT_TEXTURE(dtxl->color_overlay), }); - if (((viewport->flag & GPU_VIEWPORT_STEREO) != 0)) { - GPU_framebuffer_ensure_config(&dfbl->stereo_comp_fb, - { - GPU_ATTACHMENT_NONE, - GPU_ATTACHMENT_TEXTURE(dtxl->color), - GPU_ATTACHMENT_TEXTURE(dtxl->color_overlay), - }); - } - else { - dfbl->stereo_comp_fb = NULL; - } - viewport->active_view = view; } @@ -473,9 +461,6 @@ static void gpu_viewport_default_fb_create(GPUViewport *viewport) ok = ok && GPU_framebuffer_check_valid(dfbl->color_only_fb, NULL); ok = ok && GPU_framebuffer_check_valid(dfbl->depth_only_fb, NULL); ok = ok && GPU_framebuffer_check_valid(dfbl->overlay_only_fb, NULL); - if (((viewport->flag & GPU_VIEWPORT_STEREO) != 0)) { - ok = ok && GPU_framebuffer_check_valid(dfbl->stereo_comp_fb, NULL); - } cleanup: if (!ok) { GPU_viewport_free(viewport); @@ -606,6 +591,14 @@ void GPU_viewport_stereo_composite(GPUViewport *viewport, Stereo3dFormat *stereo DefaultTextureList *dtxl = viewport->txl; DefaultFramebufferList *dfbl = viewport->fbl; + /* The composite framebuffer object needs to be created in the window context. */ + GPU_framebuffer_ensure_config(&dfbl->stereo_comp_fb, + { + GPU_ATTACHMENT_NONE, + GPU_ATTACHMENT_TEXTURE(dtxl->color), + GPU_ATTACHMENT_TEXTURE(dtxl->color_overlay), + }); + GPUVertFormat *vert_format = immVertexFormat(); uint pos = GPU_vertformat_attr_add(vert_format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); GPU_framebuffer_bind(dfbl->stereo_comp_fb);