コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
 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)
コード例 #4
0
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)
コード例 #5
0
 def _create(self, rpr_context):
     CreateContext(API_VERSION, BACKEND_API, 0,
                   pyrpr.encode(str(self.cache_path)), self)