From 19ad96f200bd118f304f04204a884c75a9fc2b50 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 20 Mar 2012 23:28:35 +0000 Subject: demo mode no longer needs to write files to disk --- system_demo_mode/demo_mode.py | 44 +++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'system_demo_mode') diff --git a/system_demo_mode/demo_mode.py b/system_demo_mode/demo_mode.py index 54dfa2b2..efccd94a 100644 --- a/system_demo_mode/demo_mode.py +++ b/system_demo_mode/demo_mode.py @@ -69,7 +69,7 @@ global_state = { "reset_anim": False, "anim_cycles": 0, # count how many times we played the anim "last_frame": -1, - "render_out": "", + "is_render": False, "render_time": "", # time render was finished. "timer": None, "basedir": "", # demo.py is stored here @@ -77,6 +77,26 @@ global_state = { } +# ----------------------------------------------------------------------------- +# render handler - maintain "is_render" + +def handle_render_clear(): + for ls in (bpy.app.handlers.render_complete, bpy.app.handlers.render_cancel): + while handle_render_done_cb in ls: + ls.remove(handle_render_done_cb) + + +def handle_render_done_cb(self): + global_state["is_render"] = True + + +def handle_render_init(): + handle_render_clear() + bpy.app.handlers.render_complete.append(handle_render_done_cb) + bpy.app.handlers.render_cancel.append(handle_render_done_cb) + global_state["is_render"] = False + + def demo_mode_auto_select(): play_area = 0 @@ -162,18 +182,9 @@ def demo_mode_init(): elif global_config["mode"] == 'RENDER': print(" render") - # setup tempfile - handle, global_state["render_out"] = tempfile.mkstemp() - os.close(handle) - del handle - - if os.path.exists(global_state["render_out"]): - print(" render!!!") - os.remove(global_state["render_out"]) - # setup scene. scene = bpy.context.scene - scene.render.filepath = global_state["render_out"] + scene.render.filepath = "TEMP_RENDER" scene.render.image_settings.file_format = 'AVI_JPEG' if global_config["anim_render"] else 'PNG' scene.render.use_file_extension = False scene.render.use_placeholder = False @@ -181,13 +192,14 @@ def demo_mode_init(): if global_config["anim_render"]: bpy.ops.render.render('INVOKE_DEFAULT', animation=True) else: - bpy.ops.render.render('INVOKE_DEFAULT', write_still=True) + bpy.ops.render.render('INVOKE_DEFAULT') # write_still=True, no need to write now. + + handle_render_init() + except RuntimeError: # no camera for eg: import traceback traceback.print_exc() - open(global_state["render_out"], 'w').close() # touch so we move on. - else: raise Exception("Unsupported mode %r" % global_config["mode"]) @@ -254,14 +266,14 @@ def demo_mode_update(): # -------------------------------------------------------------------------- # RENDER MODE elif global_config["mode"] == 'RENDER': - if os.path.exists(global_state["render_out"]): + if global_state["is_render"]: # wait until the time has passed # XXX, todo, if rendering an anim we need some way to check its done. if global_state["render_time"] == -1.0: global_state["render_time"] = time.time() else: if time.time() - global_state["render_time"] > global_config["display_render"]: - os.remove(global_state["render_out"]) + handle_render_clear() demo_mode_next_file() return else: -- cgit v1.2.3