def set_parameter(self, name, value): if name in self.parameters and self.parameters[name] == value: return if isinstance(value, (int, bool)): ImageFilterSetParameter1u(self, pyrpr.encode(name), int(value)) self.parameters[name] = value elif isinstance(value, float): ImageFilterSetParameter1f(self, pyrpr.encode(name), value) self.parameters[name] = value elif isinstance(value, str): ImageFilterSetParameterString(self, pyrpr.encode(name), pyrpr.encode(value)) self.parameters[name] = value elif isinstance(value, Image): ImageFilterSetParameterImage(self, pyrpr.encode(name), value) self.parameters[name] = value elif isinstance(value, tuple) and len(value) == 2: if isinstance(value[0], int): ImageFilterSetParameter2u(self, pyrpr.encode(name), *value) else: raise TypeError("Incorrect type for ImageFilterSetParameter*", self, name, value) self.parameters[name] = value elif isinstance(value, list) and isinstance(value[0], float): arr = ffi.new('float[]', value) ImageFilterSetParameterFloatArray(self, pyrpr.encode(name), arr, len(value)) self.parameters[name] = (value, arr) elif isinstance(value, list) and isinstance(value[0], Image): handles = [] for img in value: handles.append(img._get_handle()) arr = ArrayObject('rif_image[]', handles) ImageFilterSetParameterImageArray(self,pyrpr.encode(name), arr, len(value)) self.parameters[name] = (value, arr) else: raise TypeError("Incorrect type for ImageFilterSetParameter*", self, name, value)
def _create(self, rpr_context): cl_context = rpr_context.get_info(pyrpr.CL_CONTEXT, 'rpr_cl_context') cl_device = rpr_context.get_info(pyrpr.CL_DEVICE, 'rpr_cl_device') cl_command_queue = rpr_context.get_info(pyrpr.CL_COMMAND_QUEUE, 'rpr_cl_command_queue') CreateContextFromOpenClContext(API_VERSION, cl_context, cl_device, cl_command_queue, pyrpr.encode(str(self.cache_path)), self)
def _create(self, rpr_context): metal_device = rpr_context.get_info(pyrpr.METAL_DEVICE, 'rpr_metal_device') metal_command_queue = rpr_context.get_info(pyrpr.METAL_COMMAND_QUEUE, 'rpr_metal_command_queue') CreateContextFromMetalContext(API_VERSION, metal_device, metal_command_queue, pyrpr.encode(str(self.cache_path)), self)
def export(name, context, scene, flags): # last param defines export bit flags. # image handling type flags: # RPRLOADSTORE_EXPORTFLAG_EXTERNALFILES (1 << 0) - image data will be stored to rprsb external file # RPRLOADSTORE_EXPORTFLAG_COMPRESS_IMAGE_LEVEL_1 (1 << 1) - image data will be lossless compressed during export # RPRLOADSTORE_EXPORTFLAG_COMPRESS_IMAGE_LEVEL_2 (1 << 2) - image data will be lossy compressed during export # note: without any of above flags images will not be exported. return lib.rprsExport(pyrpr.encode(name), context._get_handle(), scene._get_handle(), 0, ffi.NULL, ffi.NULL, 0, ffi.NULL, ffi.NULL, flags)
def _create(self, rpr_context): CreateContext(API_VERSION, BACKEND_API, 0, pyrpr.encode(str(self.cache_path)), self)