code: def __init__(self):
      app.Canvas.__init__(self, keys="interactive", size=(560, 420))
  
      # Create texture to render to
      shape = self.physical_size[1], self.physical_size[0]
      self._rendertex = gloo.Texture2D((shape + (3,)))
  
      # Create FBO, attach the color buffer and depth buffer
      self._fbo = gloo.FrameBuffer(
          self._rendertex, gloo.RenderBuffer(shape)
      )
  
      # Create program to render a shape
      self._program1 = gloo.Program(VERT_SHADER1, FRAG_SHADER1)
      self._program1["u_color"] = 0.9, 1.0, 0.4, 1
      self._program1["a_position"] = gloo.VertexBuffer(vPosition)
  
      # Create program to render FBO result
      self._program2 = gloo.Program(VERT_SHADER2, FRAG_SHADER2)
      self._program2["a_position"] = gloo.VertexBuffer(vPosition)
      self._program2["a_texcoord"] = gloo.VertexBuffer(vTexcoord)
      self._program2["u_texture1"] = self._rendertex
  
      self.show()
  
file_path: vispy/examples/gloo/hello_fbo.py
imports: from vispy import gloo
  from vispy import app
  import numpy
label_desc: Use image node_id 1 to create a new Canvas object from inherited base classes: app with example: obj = Canvas()