Fix part of #33132: render resoltuion refresh issues after persistent images

was added for cycles.

This fixes the case where the option is disabled. I moved the option now to
Blender itself and made it keep the engine around only when it's enabled. Also
fixes case where there could be issues when switching to another renderer.
This commit is contained in:
Brecht Van Lommel 2012-11-09 23:54:58 +00:00
parent 5a29885007
commit 7d03e5c615
9 changed files with 45 additions and 13 deletions

@ -297,12 +297,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
default=False,
)
cls.use_persistent_images = BoolProperty(
name="Persistent Images",
description="Keep images loaded on the device so they could be reused by next render",
default=False,
)
@classmethod
def unregister(cls):
del bpy.types.Scene.cycles

@ -218,7 +218,7 @@ class CyclesRender_PT_performance(CyclesButtonsPanel, Panel):
sub = col.column(align=True)
sub.label(text="Final Render:")
sub.prop(cscene, "use_persistent_images")
sub.prop(rd, "use_persistent_data", text="Persistent Images")
class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):

@ -284,6 +284,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
SceneParams BlenderSync::get_scene_params(BL::Scene b_scene, bool background)
{
BL::RenderSettings r = b_scene.render();
SceneParams params;
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
int shadingsystem = RNA_enum_get(&cscene, "shading_system");
@ -301,7 +302,7 @@ SceneParams BlenderSync::get_scene_params(BL::Scene b_scene, bool background)
params.use_bvh_spatial_split = RNA_boolean_get(&cscene, "debug_use_spatial_splits");
params.use_bvh_cache = (background)? RNA_boolean_get(&cscene, "use_cache"): false;
params.persistent_images = (background)? RNA_boolean_get(&cscene, "use_persistent_images"): false;
params.persistent_images = (background)? r.use_persistent_data(): false;
return params;
}

@ -58,6 +58,7 @@
#include "GPU_material.h"
#include "RE_engine.h"
#include "RE_pipeline.h"
#include "ED_node.h"
#include "ED_render.h"
@ -157,6 +158,8 @@ void ED_render_engine_changed(Main *bmain)
for (sc = bmain->screen.first; sc; sc = sc->id.next)
for (sa = sc->areabase.first; sa; sa = sa->next)
ED_render_engine_area_exit(sa);
RE_FreePersistentData();
}
/***************************** Updates ***********************************

@ -1192,6 +1192,7 @@ typedef struct Scene {
#define R_NO_OVERWRITE 0x400000 /* skip existing files */
#define R_TOUCH 0x800000 /* touch files before rendering */
#define R_SIMPLIFY 0x1000000
#define R_PERSISTENT_DATA 0x2000000 /* keep data around for re-render */
/* seq_flag */
#define R_SEQ_GL_PREV 1

@ -1254,6 +1254,12 @@ static void rna_Scene_simplify_update(Main *bmain, Scene *scene, PointerRNA *ptr
rna_Scene_use_simplify_update(bmain, scene, ptr);
}
static void rna_Scene_use_persistent_data_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr))
{
if (!(scene->r.mode & R_PERSISTENT_DATA))
RE_FreePersistentData();
}
static int rna_Scene_use_audio_get(PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->data;
@ -4036,6 +4042,12 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", R_SIMPLE_NO_TRIANGULATE);
RNA_def_property_ui_text(prop, "Skip Quad to Triangles", "Disable non-planar quads being triangulated");
/* persistent data */
prop = RNA_def_property(srna, "use_persistent_data", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_PERSISTENT_DATA);
RNA_def_property_ui_text(prop, "Persistent Data", "Keep render data around for faster re-renders");
RNA_def_property_update(prop, 0, "rna_Scene_use_persistent_data_update");
/* Scene API */
RNA_api_scene_render(srna);
}

@ -170,6 +170,8 @@ void RE_FreeRender (struct Render *re);
void RE_FreeAllRender (void);
/* only call on file load */
void RE_FreeAllRenderResults(void);
/* for external render engines that can keep persistent data */
void RE_FreePersistentData(void);
/* get results and statistics */
void RE_FreeRenderResult(struct RenderResult *rr);

@ -382,6 +382,11 @@ int RE_engine_render(Render *re, int do_all)
if (type->render)
type->render(engine, re->scene);
if(!(re->r.mode & R_PERSISTENT_DATA)) {
RE_engine_free(re->engine);
re->engine = NULL;
}
if (re->result->do_exr_tile) {
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
render_result_exr_file_end(re);

@ -244,6 +244,7 @@ Render *RE_GetRender(const char *name)
return re;
}
/* if you want to know exactly what has been done */
RenderResult *RE_AcquireResultRead(Render *re)
{
@ -424,6 +425,19 @@ void RE_FreeAllRenderResults(void)
}
}
void RE_FreePersistentData()
{
Render *re;
/* render engines can be kept around for quick re-render, this clears all */
for (re = RenderGlobal.renderlist.first; re; re = re->next) {
if (re->engine) {
RE_engine_free(re);
re->engine = NULL;
}
}
}
/* ********* initialize state ******** */