Fix T45931: Blender Fails to generate previews.
authorBastien Montagne <montagne29@wanadoo.fr>
Tue, 1 Sep 2015 15:45:16 +0000 (17:45 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Tue, 1 Sep 2015 17:15:06 +0000 (19:15 +0200)
Root of the issue was, preview generator was filling ID preview with unsigned int,
when RNA only knows of signed integers (and thus generates a python exception
when converting uint outside of int range)...

Using the brand new and much simple float pixels accessor to PreviewImage now.

Why this was working perfectly OK (it seems...) under Linux, and why error (py exception)
was so badly and misleadingly reported on Windows, remains pitch black mystery to me.

release/scripts/modules/bl_previews_utils/bl_previews_render.py

index 27922c6c5c5fb6c220b19fc93dbe9f88fe257ddf..627a6ab2d3d26c1c9772b551a71f5a0757f6149f 100644 (file)
@@ -304,11 +304,8 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
         image = bpy.data.images[render_context.image, None]
         item = getattr(bpy.data, item_container)[item_name, None]
         image.reload()
-        # Note: we could use struct module here, but not quite sure it'd give any advantage really...
-        pix = tuple((round(r * 255)) + (round(g * 255) << 8) + (round(b * 255) << 16) + (round(a * 255) << 24)
-                    for r, g, b, a in zip(*[iter(image.pixels)] * 4))
         item.preview.image_size = (RENDER_PREVIEW_SIZE, RENDER_PREVIEW_SIZE)
-        item.preview.image_pixels = pix
+        item.preview.image_pixels_float[:] = image.pixels
 
     # And now, main code!
     do_save = True