code: def _setup_textures(self, fname):
      data = imread(load_data_file("jfa/" + fname), format="tga")[
          ::-1
      ].copy()
      if data.ndim == 3:
          data = data[:, :, 0]  # Travis gets 2, I get three?
      self.texture_size = data.shape[:2]
      self.orig_tex = Texture2D(
          data,
          format="luminance",
          wrapping="repeat",
          interpolation="nearest",
      )
      self.comp_texs = []
      data = np.zeros(self.texture_size + (4,), np.float32)
      for _ in range(2):
          tex = Texture2D(
              data,
              format="rgba",
              wrapping="clamp_to_edge",
              interpolation="nearest",
          )
          self.comp_texs.append(tex)
      self.fbo_to[0].color_buffer = self.comp_texs[0]
      self.fbo_to[1].color_buffer = self.comp_texs[1]
      for program in self.programs[1:2]:
          program["texw"], program["texh"] = self.texture_size
  
file_path: vispy/examples/demo/gloo/jfa/jfa_vispy.py
imports: import numpy
  from os import path
  import sys
  from vispy import app
  from vispy.gloo import Program, FrameBuffer, VertexBuffer, Texture2D, set_viewport
  from vispy.io import load_data_file, imread
label_desc: Use image node_id 2 for calling the Canvas obj's underlying member method code with example usage: obj._setup_textures(fname) without return types