class RPR_RenderDevices(bpy.types.PropertyGroup): """ Properties for render devices: CPU, GPUs """ def update_states(self, context): if len(pyrpr.Context.gpu_devices) > 0: # selecting first gpu if no gpu and cpu is selected if not any(self.gpu_states) and not self.cpu_state: self.gpu_states[0] = True else: # if no GPU then cpu always should be enabled self.cpu_state = True on_settings_changed(self, context) # after changing devices its good to reset PreviewEngine and # PreviewEngine.rpr_context will be created with updated devices from rprblender.engine.preview_engine import PreviewEngine PreviewEngine.reset() gpu_states: BoolVectorProperty( name="", description="Use GPU device for rendering", size=16, # Only first GPU is enabled by default default=tuple(i == 0 and bool(pyrpr.Context.gpu_devices) for i in range(16)), update=update_states) cpu_state: BoolProperty( name="", description="Use CPU device for rendering", default=not pyrpr.Context.gpu_devices, # True if no GPUs are available update=update_states) cpu_threads: IntProperty( name="CPU Threads", description= "Number of CPU threads for render, optimal value is about the number of physical CPU cores", min=1, max=utils.get_cpu_threads_number(), default=utils.get_cpu_threads_number(), update=on_settings_changed, ) @property def available_gpu_states(self): return (self.gpu_states[i] for i in range(len(pyrpr.Context.gpu_devices))) def count(self): res = int(self.cpu_state) res += sum(int(state) for state in self.available_gpu_states) return res def has_gpu(self): return any(bool(state) for state in self.available_gpu_states)
def send_data(data: dict): if is_error: return # System/Platform Information (excluding GPU information) data['OS Name'] = platform.system() data['OS Version'] = platform.version() data['OS Arch'] = platform.architecture()[0] data['OS Lang'], data['OS Locale'] = get_system_language() data['OS TZ'] = time.strftime("%z", time.gmtime()) if pyrpr.Context.cpu_device: data['CPU Name'] = pyrpr.Context.cpu_device['name'] data['CPU Cores'] = utils.get_cpu_threads_number() for i, gpu in enumerate(pyrpr.Context.gpu_devices): data[f'GPU{i} Name'] = gpu['name'] # ProRender Job/Workload Information data['ProRender Core Version'] = utils.core_ver_str() data['ProRender Plugin Version'] = "%d.%d.%d" % bl_info['version'] data['Host App'] = "Blender" data['App Version'] = ".".join(str(v) for v in bpy.app.version) log("send_data", data) thread = threading.Thread(target=_send_data_thread, args=(data, )) thread.start()