Using this callback I would assume would still work:
def display_callback(x, y, width, height, buffer, data):
_x = x - xoff
_y = y - yoff
if buffer:
try:
result = _htiles.pop((_x, _y), None)
if result is None:
result = engine.begin_result(_x, _y, width, height)
_buffer = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_float))
rect = numpy.ctypeslib.as_array(_buffer, shape=(width * height, 4))
# TODO: gamma correction. need??? kick is darker
# set 1/2.2 the driver_display node by default
#rect **= 2.2
result.layers[0].passes[0].rect = rect
engine.end_result(result)
finally:
arnold.AiFree(buffer)
else:
result = engine.begin_result(_x, _y, width, height)
# TODO: sometimes highlighted tiles become empty
engine.update_result(result)
_htiles[(_x, _y)] = result
if engine.test_break():
arnold.AiRenderAbort()
while _htiles:
(_x, _y), result = _htiles.popitem()
engine.end_result(result, True)
mem = session["mem"] = arnold.AiMsgUtilGetUsedMemory() / 1048576 # 1024*1024
peak = session["peak"] = max(session["peak"], mem)
engine.update_memory_stats(mem, peak)