code: def draw_material(material, face=GL_FRONT_AND_BACK):
      
      if material.gl_floats is None:
          material.gl_floats = (GLfloat * len(material.vertices))(*material.vertices)
          material.triangle_count = len(material.vertices) / material.vertex_size
  
      vertex_format = VERTEX_FORMATS.get(material.vertex_format)
      if not vertex_format:
          raise ValueError("Vertex format {} not supported by pyglet".format(material.vertex_format))
  
      glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT)
      glPushAttrib(GL_CURRENT_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT)
      glEnable(GL_CULL_FACE)
      glCullFace(GL_BACK)
  
      # Fall back to ambient texture if no diffuse
      texture = material.texture or material.texture_ambient
      if texture and material.has_uvs:
          bind_texture(texture)
      else:
          glDisable(GL_TEXTURE_2D)
  
      glMaterialfv(face, GL_DIFFUSE, gl_light(material.diffuse))
      glMaterialfv(face, GL_AMBIENT, gl_light(material.ambient))
      glMaterialfv(face, GL_SPECULAR, gl_light(material.specular))
      glMaterialfv(face, GL_EMISSION, gl_light(material.emissive))
      glMaterialf(face, GL_SHININESS, min(128.0, material.shininess))
      glEnable(GL_LIGHT0)
  
      if material.has_normals:
          glEnable(GL_LIGHTING)
      else:
          glDisable(GL_LIGHTING)
  
      glInterleavedArrays(vertex_format, 0, material.gl_floats)
      glDrawArrays(GL_TRIANGLES, 0, int(material.triangle_count))
  
      glPopAttrib()
      glPopClientAttrib()
docs: Draw a single material