class_docstr: GPU data buffer that is aware of data type and elements size
  
  Parameters
  ----------
  data : ndarray | None
      Buffer data.
class_docstr_tok: ["GPU","data","buffer","that","is","aware","of","data","type","and","elements","size","Parameters","--","--","--","--","--","data",":","ndarray","|","None","Buffer","data","."]
docstr: GLSL declaration strings required for a variable to hold this data.
code: def glsl_type(self):
      """GLSL declaration strings required for a variable to hold this data."""
      if self.dtype is None:
          return None
      dtshape = self.dtype[0].shape
      n = dtshape[0] if dtshape else 1
      if n > 1:
          dtype = "vec%d" % n
      else:
          dtype = "float" if "f" in self.dtype[0].base.kind else "int"
      return "attribute", dtype
  
imports: import numpy
  from os import path
  from traceback import extract_stack, format_list
  import weakref
  from .globject import GLObject
  from ..util import logger
label_desc: Use image node_id 10 for calling the DataBuffer obj's underlying member method code with example usage: obj.glsl_type() and returns: str,  dtype, None