pyglet.graphics
子模块
细节
低级图形渲染和抽象。
此模块提供对OpenGL对象(如着色器和缓冲区)的高效抽象。它还提供用于高性能批处理呈现和分组的类。
请参阅 着色器和渲染 有关如何使用此图形API的详细信息。
- class Batch
管理用于批处理渲染的可绘制文件集合。
许多可绘制的pyglet对象接受可选的 Batch 参数在它们的构造函数中。通过给一个 Batch 对于多个对象,您可以告诉Pyglet您希望一次绘制所有这些对象,这样它就可以优化其对OpenGL的使用。因此,绘制一个 Batch 通常比单独绘制每个包含的可绘制要快得多。
下面的示例创建一个批处理,向该批处理添加两个精灵,然后绘制整个批处理:
batch = pyglet.graphics.Batch() car = pyglet.sprite.Sprite(car_image, batch=batch) boat = pyglet.sprite.Sprite(boat_image, batch=batch) def on_draw(): batch.draw()
虽然任何可绘制的内容都可以添加到 Batch ,只有那些具有相同绘制模式、着色器程序和组的对象才能一起优化。
在内部,一个 Batch 管理一组顶点属性域以及有关如何绘制属性域的信息。要在自定义可绘制上实现批处理,请从给定的批处理中获取顶点域,而不是自己设置它们。
- draw_subset(
- vertex_lists: Sequence[VertexList | IndexedVertexList],
仅绘制批中的一些顶点列表。
非常不鼓励使用这种方法,因为它的效率很低。通常可以重新设计应用程序,以便始终可以完整地绘制批处理,使用 draw 。
给定的顶点列表必须属于此批处理;如果不满足此条件,则行为未定义。
- 参数:
vertex_lists (
Sequence
[VertexList
|IndexedVertexList
]) -- 要绘制的顶点列表。- 返回类型:
- get_domain(
- indexed: bool,
- instanced: bool,
- mode: int,
- group: Group,
- program: ShaderProgram,
- attributes: dict[str, Any],
获取或创建与给定参数对应的顶点域。
模式是渲染模式,例如GL_LINES或GL_TERANGLES
- invalidate() None
强制批次更新绘图列表。
This method can be used to force the batch to re-compute the draw list when the ordering of groups has changed. :rtype:
None
Added in version 1.2.
- migrate(
- vertex_list: VertexList | IndexedVertexList,
- mode: int,
- group: Group,
- batch: Batch,
将顶点列表迁移到另一个批次和/或组。
vertex_list 和 mode 共同标识要迁移的顶点列表。 group 和 batch 是迁移后顶点列表的新所有者。
如果满足以下条件,则结果未定义 mode 不正确或如果 vertex_list 不属于此批处理(它们未被选中,不一定会立即引发异常)。
batch
如果只需要更改组,则可以保持不变。- 参数:
vertex_list (
VertexList
|IndexedVertexList
) -- 当前属于此批的顶点列表。mode (
int
) -- 顶点列表的当前GL绘制模式。group (
Group
) -- 要迁移到的新组。batch (
Batch
) -- 要迁移到的批次(或当前批次)。
- 返回类型:
- class Group
公共OpenGL状态的组。
Group
控件中如何处理可绘制对象提供额外的控制Batch
。当批处理绘制可绘制对象时,它会确保设置其组的状态;这可以包括绑定纹理、着色器或设置任何其他参数。它还会在绘制之前对组进行排序。在下面的示例中,确保在汽车和船之前绘制背景精灵:
batch = pyglet.graphics.Batch() background = pyglet.graphics.Group(order=0) foreground = pyglet.graphics.Group(order=1) background = pyglet.sprite.Sprite(background_image, batch=batch, group=background) car = pyglet.sprite.Sprite(car_image, batch=batch, group=foreground) boat = pyglet.sprite.Sprite(boat_image, batch=batch, group=foreground) def on_draw(): batch.draw()
- class ShaderGroup
启用和绑定ShaderProgram的组。
- get_default_shader() ShaderProgram
默认批次的默认基本着色器。
- 返回类型: