From bfeef2f5f07094c4014ce7c7bf7e933c168c2bd0 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 3 Apr 2013 09:08:02 +0000 Subject: Fix/Workaround #34854: render buffer update writes to wrong layer Was caused by recent change in image_buffer_rect_update which was writing data to ibuf-rect_float. Apparently, this buffer could point to different render layer than came from RenderResult. Made quick fix for this, which ends up in skipping float buffer update in image_buffer_rect_update and skipping GLSL when image has both byte and float buffers. This will bring speed down a bit, but slower blender is better than broken blender. Proper fix will arrive later this week. --- source/blender/editors/screen/glutil.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/screen') diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c index fecb3c58a2d..74086c7cc8b 100644 --- a/source/blender/editors/screen/glutil.c +++ b/source/blender/editors/screen/glutil.c @@ -998,7 +998,14 @@ void glaDrawImBuf_glsl_ctx(const bContext *C, ImBuf *ibuf, float x, float y, int bool need_fallback = true; /* Bytes and dithering are not supported on GLSL yet */ - if (ibuf->rect_float && ibuf->dither == 0.0f) { + + /* WORKAROUND: only use GLSL if there's no byte buffer at all, + * this is because of how render results are handled, + * they're not updating image buffer's float buffer, + * but writes data directly to it's byte buffer and + * modifies display buffer. + */ + if (ibuf->rect == NULL && ibuf->rect_float && ibuf->dither == 0.0f) { if (IMB_colormanagement_setup_glsl_draw_from_ctx(C)) { glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f(1.0, 1.0, 1.0, 1.0); -- cgit v1.2.3