class_docstr: Abstract base class for Visual-specific filters to implement a
  primitive-picking mode.
  
  Subclasses must (and usually only need to) implement
  :py:meth:`_get_picking_ids`.
class_docstr_tok: ["Abstract","base","class","for","Visual-specific","filters","to","implement","a","primitive-picking","mode",".","Subclasses","must","(","and","usually","only","need","to",")","implement",":","py",":","meth",":","`","_get_picking_ids","`","."]
docstr: Calculate the colors encoding the picking IDs for the visual.
  
  For performance, this method will not update the id colors VertexBuffer
  if :py:meth:`_get_picking_ids` returns `None`.
docstr_tok: ["Calculate","the","colors","encoding","the","picking","IDs","for","the","visual",".","For","performance",",","this","method","will","not","update","the","id","colors","VertexBuffer","if",":","py",":","meth",":","`","_get_picking_ids","`","returns","`","None","`","."]
code: def _update_id_colors(self):
      """Calculate the colors encoding the picking IDs for the visual.
  
      For performance, this method will not update the id colors VertexBuffer
      if :py:meth:`_get_picking_ids` returns `None`.
      """
      # this should remain untouched
      ids = self._get_picking_ids()
      if ids is not None:
          id_colors = self._pack_ids_into_rgba(ids)
          self._id_colors.set_data(id_colors)
  
imports: from abc import ABCMeta, abstractmethod
  import numpy
  from vispy.gloo import VertexBuffer
  from ..shaders import Function
label_desc: Use image node_id 3 for calling the PrimitivePickingFilter obj's underlying member method code with example usage: obj._update_id_colors() without return types