def METHOD_NAME(rpr_context, obj: bpy.types.Object, **kwargs):
    """ sync the object and any data attached """
    from rprblender.engine.render_engine import RenderEngine
    log("sync", obj, obj.type)
    if obj.type == 'MESH':
        if obj.mode == 'OBJECT':
            # if in edit mode use to_mesh
            mesh.METHOD_NAME(rpr_context, obj, **kwargs)
        else:
            to_mesh.METHOD_NAME(rpr_context, obj, **kwargs)
    elif obj.type == 'LIGHT':
        light.METHOD_NAME(rpr_context, obj)
    elif obj.type == 'CAMERA':
        camera.METHOD_NAME(rpr_context, obj)
    elif obj.type in ('CURVE', 'FONT', 'SURFACE', 'META'):
        to_mesh.METHOD_NAME(rpr_context, obj, **kwargs)
    elif obj.type == 'VOLUME':
        openvdb.METHOD_NAME(rpr_context, obj, **kwargs)
    elif obj.type == 'CURVES':
        hair.sync_curves(rpr_context, obj)
    elif obj.type == 'EMPTY':
        pass
    else:
        log.warn("Object to sync not supported", obj, obj.type)
    if obj.type in ('MESH', 'CURVE', 'FONT', 'SURFACE', 'META'):
        volume.METHOD_NAME(rpr_context, obj)
        hair.METHOD_NAME(rpr_context, obj)
        # Note: particles should be exported separately in final render engine
        #       after motion blur, otherwise prev_location of particle will be (0, 0, 0)
        if rpr_context.engine_type != RenderEngine.TYPE:
            particle.METHOD_NAME(rpr_context, obj)