def _task_callback(self, task): tile = task.result() key = Tile.tile_key(0, tile.level, tile.row, tile.column) texture = self._texture_cache.acquire(key) if texture is None: texture = self._create_texture(tile, key) self._textures.append(texture) self._glwidget.update()
def update(self): level = self._glwidget._zoom_manager.level # Fixme texture_cache = self._texture_cache cached_pyramid = self._cached_pyramid self._logger.debug('Update Mosaic Painter @{}'.format(level)) # always compute tile list old_tile_list = self._tile_list pyramid_level = self._cached_pyramid._pyramid[level] # Fixme: return rotated area # compute intersection mosaic_interval = pyramid_level.projection_interval_to_mosaic(self._viewport_area.area) self._tile_list = list(mosaic_interval.iter()) self._logger.debug('Viewport\n' + str(self._tile_list)) (tiles_to_release, tiles_to_keep, tiles_to_acquire) = split_list(old_tile_list, self._tile_list) # Reset self._textures = [] print(self._texture_dict) for tile_index in tiles_to_keep: row, column = tile_index key = Tile.tile_key(0, level, row, column) self._textures.append(self._texture_dict[key]) self._glwidget.update() # Get new tiles if tiles_to_acquire: tasks = [asyncio.async(cached_pyramid.acquire(level, row, column)) for row, column in tiles_to_acquire] # for task in tasks: # task.add_done_callback(self._task_callback) self._logger.debug('Run loop')
for row, column in tiles_to_acquire] # for task in tasks: # task.add_done_callback(self._task_callback) self._logger.debug('Run loop') #!# with self._loop: self._loop.run_until_complete(asyncio.wait(tasks)) self._logger.debug('loop done') for task in tasks: self._task_callback(task) # Recycle the cache for tile_index in tiles_to_release: # Fixme: key row, column = tile_index cached_pyramid.release(level, row, column) key = Tile.tile_key(0, level, row, column) texture_cache.release(key) self.recycle() self._texture_dict = {texture.key():texture for texture in self._textures} self._logger.debug('Update Mosaic Painter Done') ############################################## def _task_callback(self, task): tile = task.result() key = Tile.tile_key(0, tile.level, tile.row, tile.column) texture = self._texture_cache.acquire(key)