code: def load(self, data, size=None):
          
          self.bind()
          if size is None:
              # ffi's sizeof understands arrays
              size = sizeof(data)
          if size == self.buffer_size:
              # same size - no need to allocate new buffer, just copy
              glBufferSubData(
                  self.array_type,
                  0,
                  size,
                  to_raw_pointer(data)
              )
          else:
              # buffer size has changed - need to allocate new buffer in the GPU
              glBufferData(
                  self.array_type,
                  size,
                  to_raw_pointer(data),
                  self.draw_type
              )
              self.buffer_size = size
          self.unbind()
docs: Data is cffi array