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
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-03-15 00:29:42 +0300
committerTon Roosendaal <ton@blender.org>2006-03-15 00:29:42 +0300
commitea9866a75f9e7f348364617b866cd2e6f057e458 (patch)
tree8ede0ba1858980cb90409127c6cf8b90c07fcddf /source/blender/imbuf/intern/openexr/openexr_api.cpp
parentafc8dec9218ad0f85dd5c32475d09dfde74723b5 (diff)
Memory saving for large renders:
New option "Save Buffers", in first Output panel of renderbuttons, will not allocate all render buffers, but instead save the rendered tiles to exr. For each scene rendered, a single exr file then is created. After rendering, the files get read, and only then the memory allocation is done. The exr files are saved in the temp dir (from user settings), and have names derived from the filename+scene name. That way these buffers remain relatively unique, and can be re-used later too. Saving all render-layers and passes in a single file (as F3 command) will be done later. Also reading back the current muli-layer exr files is not supported yet (will read black). The purpose is that these files then can be used as input for the Compositor. One fun thing I added; after rendering once with this option, close Blender, and restart it. If you have a Composite set up press 'R' on an active RenderResult node. This will refresh the node(s) and load the exr, so you can composite again without a re-render.
Diffstat (limited to 'source/blender/imbuf/intern/openexr/openexr_api.cpp')
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 4b5cf64cd49..6883cc4051d 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -429,18 +429,20 @@ int IMB_exr_begin_read(void *handle, char *filename, int *width, int *height)
{
ExrHandle *data= (ExrHandle *)handle;
- data->ifile = new InputFile(filename);
- if(data->ifile) {
- Box2i dw = data->ifile->header().dataWindow();
- data->width= *width = dw.max.x - dw.min.x + 1;
- data->height= *height = dw.max.y - dw.min.y + 1;
-
- const ChannelList &channels = data->ifile->header().channels();
-
- for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i)
- IMB_exr_add_channel(data, NULL, i.name());
-
- return 1;
+ if(BLI_exists(filename)) {
+ data->ifile = new InputFile(filename);
+ if(data->ifile) {
+ Box2i dw = data->ifile->header().dataWindow();
+ data->width= *width = dw.max.x - dw.min.x + 1;
+ data->height= *height = dw.max.y - dw.min.y + 1;
+
+ const ChannelList &channels = data->ifile->header().channels();
+
+ for (ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i)
+ IMB_exr_add_channel(data, NULL, i.name());
+
+ return 1;
+ }
}
return 0;
}