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:
authorBrecht Van Lommel <brecht@blender.org>2021-09-23 20:22:15 +0300
committerBrecht Van Lommel <brecht@blender.org>2021-09-23 21:45:42 +0300
commit1bdaf0ebec5bafd6c0b945de49cc74515b93fe1c (patch)
treeefd40e84ee50d8a7a3634affdcabee2e3f166c63 /source/blender/render
parent7fb2b50e5dace1eeaa777965c445f85b708eaae0 (diff)
Fix T91638: image editor Open Cached Render not loading some passes
Previously this was only loading built-in render passes. Now instead of trying to load the scene render passes, load whatever passes exist in the cache file.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/render_result.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/source/blender/render/intern/render_result.c b/source/blender/render/intern/render_result.c
index 6bd6521d803..db14f7a2982 100644
--- a/source/blender/render/intern/render_result.c
+++ b/source/blender/render/intern/render_result.c
@@ -1083,7 +1083,7 @@ int render_result_exr_file_read_path(RenderResult *rr,
void *exrhandle = IMB_exr_get_handle();
int rectx, recty;
- if (IMB_exr_begin_read(exrhandle, filepath, &rectx, &recty) == 0) {
+ if (!IMB_exr_begin_read(exrhandle, filepath, &rectx, &recty, false)) {
printf("failed being read %s\n", filepath);
IMB_exr_close(exrhandle);
return 0;
@@ -1175,21 +1175,32 @@ void render_result_exr_file_cache_write(Render *re)
/* For cache, makes exact copy of render result */
bool render_result_exr_file_cache_read(Render *re)
{
- char str[FILE_MAXFILE + MAX_ID_NAME + MAX_ID_NAME + 100] = "";
+ /* File path to cache. */
+ char filepath[FILE_MAXFILE + MAX_ID_NAME + MAX_ID_NAME + 100] = "";
char *root = U.render_cachedir;
+ render_result_exr_file_cache_path(re->scene, root, filepath);
- RE_FreeRenderResult(re->result);
- re->result = render_result_new(re, &re->disprect, RR_ALL_LAYERS, RR_ALL_VIEWS);
- render_result_passes_allocated_ensure(re->result);
+ printf("read exr cache file: %s\n", filepath);
- /* First try cache. */
- render_result_exr_file_cache_path(re->scene, root, str);
+ /* Try opening the file. */
+ void *exrhandle = IMB_exr_get_handle();
+ int rectx, recty;
- printf("read exr cache file: %s\n", str);
- if (!render_result_exr_file_read_path(re->result, NULL, str)) {
- printf("cannot read: %s\n", str);
+ if (!IMB_exr_begin_read(exrhandle, filepath, &rectx, &recty, true)) {
+ printf("cannot read: %s\n", filepath);
+ IMB_exr_close(exrhandle);
return false;
}
+
+ /* Read file contents into render result. */
+ const char *colorspace = IMB_colormanagement_role_colorspace_name_get(COLOR_ROLE_SCENE_LINEAR);
+ RE_FreeRenderResult(re->result);
+
+ IMB_exr_read_channels(exrhandle);
+ re->result = render_result_new_from_exr(exrhandle, colorspace, false, rectx, recty);
+
+ IMB_exr_close(exrhandle);
+
return true;
}