diff --git a/render_time.py b/render_time.py index d3cc197f5f7bf62918de4e1f11b65dacdc042849..a037b02ad751401875a63b896418e31cf77a5836 100644 --- a/render_time.py +++ b/render_time.py @@ -21,9 +21,9 @@ bl_info = { "name": "Render Time Estimation", "author": "Jason van Gumster (Fweeb)", - "version": (0, 3, 0), + "version": (0, 4, 0), "blender": (2, 6, 2), - "api": 43969, + "api": 44810, "location": "UV/Image Editor > Properties > Image", "description": "Estimates the time to complete rendering on animations", "warning": "Does not work on OpenGL renders", @@ -33,32 +33,32 @@ bl_info = { import bpy, time +from bpy.app.handlers import persistent from datetime import timedelta -timer = {"average": 0.0, "total": 0.0} -time_start = 0.0 -bpy.is_rendering = False +timer = {"average": 0.0, "total": 0.0, "time_start": 0.0, "is_rendering": False} -def check_rendering(scene): - if bpy.ops.render.opengl.poll(): - bpy.is_rendering = False - else: - bpy.is_rendering = True +def set_rendering(scene): + timer["is_rendering"] = True + +@persistent +def unset_rendering(scene): + timer["is_rendering"] = False +@persistent def start_timer(scene): - global timer - global time_start + set_rendering(scene) + if scene.frame_current == scene.frame_start: - timer = {"average": 0.0, "total": 0.0} + timer["average"] = 0.0 + timer["total"] = 0.0 - time_start = time.time() + timer["time_start"] = time.time() +@persistent def end_timer(scene): - global timer - global time_start - - render_time = time.time() - time_start + render_time = time.time() - timer["time_start"] timer["total"] += render_time if scene.frame_current == scene.frame_start: timer["average"] = render_time @@ -72,30 +72,31 @@ def end_timer(scene): # UI def image_panel_rendertime(self, context): - global timer scene = context.scene layout = self.layout if context.space_data.image is not None and context.space_data.image.type == 'RENDER_RESULT': layout.label(text = "Total render time: " + str(timedelta(seconds = timer["total"]))) - if bpy.is_rendering: + if timer["is_rendering"] and scene.frame_current != scene.frame_start: layout.label(text = "Estimated completion: " + str(timedelta(seconds = (timer["average"] * (scene.frame_end - scene.frame_current))))) # Registration def register(): - bpy.app.handlers.frame_change_pre.append(check_rendering) + bpy.app.handlers.render_complete.append(unset_rendering) + bpy.app.handlers.render_cancel.append(unset_rendering) bpy.app.handlers.render_pre.append(start_timer) bpy.app.handlers.render_post.append(end_timer) bpy.types.IMAGE_PT_image_properties.append(image_panel_rendertime) def unregister(): - bpy.app.handlers.frame_change_pre.remove(check_rendering) bpy.app.handlers.render_pre.remove(start_timer) bpy.app.handlers.render_post.remove(end_timer) + bpy.app.handlers.render_cancel.append(unset_rendering) + bpy.app.handlers.render_complete.remove(unset_rendering) bpy.types.IMAGE_PT_image_properties.remove(image_panel_rendertime) if __name__ == '__main__':