Fix T56799: Custom render passes missing when using Save Buffers
authorLukas Stockner <lukas.stockner@freenet.de>
Thu, 17 Jan 2019 23:45:21 +0000 (00:45 +0100)
committerLukas Stockner <lukas.stockner@freenet.de>
Thu, 17 Jan 2019 23:58:28 +0000 (00:58 +0100)
commitc9eef24903479a70783efb2e00766d0eeec43823
treee8b7434dd06068e2030146fcd1922d44e95b5dcc
parentaf316e8bc87b053e5b50453c8c5081546777d4a9
Fix T56799: Custom render passes missing when using Save Buffers

The problem here was that when a render result is allocated, the standard render passes are added according to the
pass bitfield. Then, when the render engine sets the result, it adds the additional passes which are then merged
into the main render result.

However, when using Save Buffers, the EXR is created before the actual render starts, so it's missing all those
additional passes.

To fix that, we need to query the render engine for a list of additional passes so they can be added before the EXR
is created. Luckily, there already is a function to do that for the node editor.

The same needs to be done when the EXR is loaded back.

Due to how that is implemented though (Render API calls into engine, engine calls back for each pass), if we have
multiple places that call this function there needs to be a way to tell which one the call came from in the pass
registration callback. Therefore, the original caller now provides a callback that is called for each pass.
source/blender/nodes/composite/nodes/node_composite_image.c
source/blender/render/extern/include/RE_engine.h
source/blender/render/intern/include/render_result.h
source/blender/render/intern/source/envmap.c
source/blender/render/intern/source/external_engine.c
source/blender/render/intern/source/pipeline.c
source/blender/render/intern/source/render_result.c