code: def quad_2d(width, height, xpos=0.0, ypos=0.0) -> VAO:
      
      pos = numpy.array([
          xpos - width / 2.0, ypos + height / 2.0, 0.0,
          xpos - width / 2.0, ypos - height / 2.0, 0.0,
          xpos + width / 2.0, ypos - height / 2.0, 0.0,
          xpos - width / 2.0, ypos + height / 2.0, 0.0,
          xpos + width / 2.0, ypos - height / 2.0, 0.0,
          xpos + width / 2.0, ypos + height / 2.0, 0.0,
      ], dtype=numpy.float32)
  
      normals = numpy.array([
          0.0, 0.0, 1.0,
          0.0, 0.0, 1.0,
          0.0, 0.0, 1.0,
          0.0, 0.0, 1.0,
          0.0, 0.0, 1.0,
          0.0, 0.0, 1.0,
      ], dtype=numpy.float32)
  
      uvs = numpy.array([
          0.0, 1.0,
          0.0, 0.0,
          1.0, 0.0,
          0.0, 1.0,
          1.0, 0.0,
          1.0, 1.0,
      ], dtype=numpy.float32)
  
      vao = VAO("geometry:quad", mode=moderngl.TRIANGLES)
      vao.buffer(pos, '3f', ["in_position"])
      vao.buffer(normals, '3f', ["in_normal"])
      vao.buffer(uvs, '2f', ["in_uv"])
  
      return vao
docs: Creates a 2D quad VAO using 2 triangles with normals and texture coordinates.
  
      Args:
          width (float): Width of the quad
          height (float): Height of the quad
  
      Keyword Args:
          xpos (float): Center position x
          ypos (float): Center position y
  
      Returns:
          A :py:class:`demosys.opengl.vao.VAO` instance.