code: def _load_variable(func, program_id, index):
      
      n = 64  # max name length TODO: read from card
      bufsize = GLsizei(n)
      length = pointer(GLsizei(0))
      size = pointer(GLint(0))
      type = pointer(GLenum(0))
      uname = create_string_buffer(n)
      func(program_id, index, bufsize, length, size, type, uname)
      return size[0], type[0], uname.value.decode('utf8')
docs: Loads the meta data for a uniform or attribute