diff --git a/netrender/__init__.py b/netrender/__init__.py index 5ae4b774139bde04a2135fc3e01fca2f1e427934..3e7c6e7a2737f9b9af3db52dfd22c38da057881b 100644 --- a/netrender/__init__.py +++ b/netrender/__init__.py @@ -21,7 +21,7 @@ bl_info = { "name": "Network Renderer", "author": "Martin Poirier", - "version": (1, 3), + "version": (1, 4), "blender": (2, 5, 6), "api": 35011, "location": "Render > Engine > Network Render", diff --git a/netrender/client.py b/netrender/client.py index b992f37d914643e708ad0fe9f65ce760dbbc5061..7b43b0fcfc2e41b5d4734de0871af97e649ca5e5 100644 --- a/netrender/client.py +++ b/netrender/client.py @@ -101,7 +101,12 @@ def fillCommonJobSettings(job, job_name, netsettings): job.chunks = netsettings.chunks job.priority = netsettings.priority - + + if netsettings.job_render_engine == "OTHER": + job.render = netsettings.job_render_engine_other + else: + job.render = netsettings.job_render_engine + if netsettings.job_type == "JOB_BLENDER": job.type = netrender.model.JOB_BLENDER elif netsettings.job_type == "JOB_PROCESS": @@ -225,7 +230,7 @@ def clientSendJobBlender(conn, scene, anim = False): addPointCache(job, object, modifier.point_cache, default_path) elif modifier.type == "SOFT_BODY": addPointCache(job, object, modifier.point_cache, default_path) - elif modifier.type == "SMOKE" and modifier.smoke_type == "TYPE_DOMAIN": + elif modifier.type == "SMOKE" and modifier.smoke_type == "DOMAIN": addPointCache(job, object, modifier.domain_settings.point_cache, default_path) elif modifier.type == "MULTIRES" and modifier.is_external: file_path = bpy.path.abspath(modifier.filepath) diff --git a/netrender/master.py b/netrender/master.py index c2f46c17fa67bb496039d63e9f6d7d90abbc5e1f..b2a58b3fbed114a08b9a16dc4fd8e4cf7a86a9a8 100644 --- a/netrender/master.py +++ b/netrender/master.py @@ -434,7 +434,6 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.send_head(headers={"job-id": job.id}) message = job.serialize(frames) - self.wfile.write(bytes(json.dumps(message), encoding='utf8')) self.server.stats("", "Sending job to slave") @@ -512,7 +511,6 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): length = int(self.headers['content-length']) job_info = netrender.model.RenderJob.materialize(json.loads(str(self.rfile.read(length), encoding='utf8'))) - job_id = self.server.nextJobID() job = MRenderJob(job_id, job_info) diff --git a/netrender/model.py b/netrender/model.py index cab619f271217711d33a7ac5dd730164dd729184..5fbf46ce32294371bc893a760f107633fac09571 100644 --- a/netrender/model.py +++ b/netrender/model.py @@ -193,7 +193,7 @@ class RenderJob: self.chunks = 0 self.priority = 0 self.blacklist = [] - + self.render = "BLENDER_RENDER" self.version_info = None self.resolution = None @@ -212,6 +212,7 @@ class RenderJob: self.priority = job_info.priority self.blacklist = job_info.blacklist self.version_info = job_info.version_info + self.render = job_info.render def hasRenderResult(self): return self.type in (JOB_BLENDER, JOB_VCS) @@ -292,7 +293,8 @@ class RenderJob: "blacklist": self.blacklist, "last_dispatched": self.last_dispatched, "version_info": self.version_info.serialize() if self.version_info else None, - "resolution": self.resolution + "resolution": self.resolution, + "render": self.render } @staticmethod @@ -314,6 +316,7 @@ class RenderJob: job.blacklist = data["blacklist"] job.last_dispatched = data["last_dispatched"] job.resolution = data["resolution"] + job.render=data["render"] version_info = data.get("version_info", None) if version_info: diff --git a/netrender/slave.py b/netrender/slave.py index f31bddee3e9fd557e9bc5c17ecede518752002ee..c7f3a8cbc3506369efc48c9495be1edd49c4a01b 100644 --- a/netrender/slave.py +++ b/netrender/slave.py @@ -238,7 +238,7 @@ def render_slave(engine, netsettings, threads): frame_args += ["-f", str(frame.number)] val = SetErrorMode() - process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(JOB_PREFIX, "######"), "-E", "BLENDER_RENDER", "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(JOB_PREFIX, "######"), "-E", job.render, "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) RestoreErrorMode(val) elif job.type == netrender.model.JOB_PROCESS: command = job.frames[0].command @@ -272,6 +272,7 @@ def render_slave(engine, netsettings, threads): run_t = current_t if testCancel(conn, job.id, first_frame): + engine.update_stats("", "Job canceled by Master") cancelled = True if job.type == netrender.model.JOB_BLENDER: diff --git a/netrender/ui.py b/netrender/ui.py index 068d77b3e12d168424dfb0ca828becf0e1c64a2a..d36e96dcf8ffc0b39c0c401d67ffa029840ce659 100644 --- a/netrender/ui.py +++ b/netrender/ui.py @@ -211,17 +211,13 @@ class RENDER_PT_network_job(NetRenderButtonsPanel, bpy.types.Panel): row.operator("render.render", text="Get Image", icon='RENDER_STILL') row.operator("render.render", text="Get Animation", icon='RENDER_ANIMATION').animation = True - split = layout.split(percentage=0.3) - - col = split.column() - col.label(text="Type:") - col.label(text="Name:") - col.label(text="Category:") - - col = split.column() - col.prop(netsettings, "job_type", text="") - col.prop(netsettings, "job_name", text="") - col.prop(netsettings, "job_category", text="") + layout.prop(netsettings, "job_type", text="Type") + layout.prop(netsettings, "job_name", text="Name") + layout.prop(netsettings, "job_category", text="Category") + layout.prop(netsettings, "job_render_engine", text="Engine") + + if netsettings.job_render_engine == "OTHER": + layout.prop(netsettings, "job_render_engine_other", text="Other Engine") row = layout.row() row.prop(netsettings, "priority") @@ -462,6 +458,22 @@ class NetRenderSettings(bpy.types.PropertyGroup): description="Category of the job", maxlen = 128, default = "") + + NetRenderSettings.job_render_engine = EnumProperty( + items = ( + ("BLENDER_RENDER", "BLENDER", "Standard Blender Render"), + ("CYCLES", "CYCLES", "Cycle Render"), + ("OTHER", "OTHER", "Other non-default Render"), + ), + name="render", + description="Render engine used to render this job", + default="BLENDER_RENDER") + + NetRenderSettings.job_render_engine_other = StringProperty( + name="Render engine", + description="Render engine other than the builtin defaults (POVRAY_RENDER, ...)", + maxlen = 128, + default = "") NetRenderSettings.chunks = IntProperty( name="Chunks",