From 252dff515fa4b045ac94655cdee0450627caf4f8 Mon Sep 17 00:00:00 2001
From: Martin Poirier <theeth@yahoo.com>
Date: Mon, 19 Dec 2011 20:36:52 +0000
Subject: [PATCH] [#29564] Patch to enable choice between BLENDER_RENDER and
 CYCLES [#29648] patch for netrender: correctly send smoke cache domain

Both by Philippe Van Hecke

Render engine support was expended to be able to specify non-builtin engines.
---
 netrender/__init__.py |  2 +-
 netrender/client.py   |  9 +++++++--
 netrender/master.py   |  2 --
 netrender/model.py    |  7 +++++--
 netrender/slave.py    |  3 ++-
 netrender/ui.py       | 34 +++++++++++++++++++++++-----------
 6 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/netrender/__init__.py b/netrender/__init__.py
index 5ae4b7741..3e7c6e7a2 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 b992f37d9..7b43b0fcf 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 c2f46c17f..b2a58b3fb 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 cab619f27..5fbf46ce3 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 f31bddee3..c7f3a8cbc 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 068d77b3e..d36e96dcf 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",
-- 
GitLab