class_docstr: Frame buffer object
  
  Parameters
  ----------
  color : RenderBuffer (optional)
      The color buffer to attach to this frame buffer
  depth : RenderBuffer (optional)
      The depth buffer to attach to this frame buffer
  stencil : RenderBuffer (optional)
      The stencil buffer to attach to this frame buffer
class_docstr_tok: ["Frame","buffer","object","Parameters","--","--","--","--","--","color",":","RenderBuffer","(","optional",")","The","color","buffer","to","attach","to","this","frame","buffer","depth",":","RenderBuffer","(","optional",")","The","depth","buffer","to","attach","to","this","frame","buffer","stencil",":","RenderBuffer","(","optional",")","The","stencil","buffer","to","attach","to","this","frame","buffer"]
docstr: The shape of the Texture/RenderBuffer attached to this FrameBuffer
docstr_tok: ["The","shape","of","the","Texture\/RenderBuffer","attached","to","this","FrameBuffer"]
code: def shape(self):
      """The shape of the Texture/RenderBuffer attached to this FrameBuffer"""
      if self.color_buffer is not None:
          return self.color_buffer.shape[:2]  # in case its a texture
      if self.depth_buffer is not None:
          return self.depth_buffer.shape[:2]
      if self.stencil_buffer is not None:
          return self.stencil_buffer.shape[:2]
      raise RuntimeError(
          "FrameBuffer without buffers has undefined shape"
      )
  
imports: from .globject import GLObject
  from .texture import Texture2D
  from .wrappers import _check_valid, read_pixels
  from .context import get_current_canvas
label_desc: Use image node_id 13 for calling the FrameBuffer obj's underlying member method code with example usage: obj.shape() and returns: self, self, self