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 管理一组顶点属性域以及有关如何绘制属性域的信息。要在自定义可绘制上实现批处理,请从给定的批处理中获取顶点域,而不是自己设置它们。

__init__() None

创建图形批次。

draw() None

画出批次。

返回类型:

None

draw_subset(
vertex_lists: Sequence[VertexList | IndexedVertexList],
) None

仅绘制批中的一些顶点列表。

非常不鼓励使用这种方法,因为它的效率很低。通常可以重新设计应用程序,以便始终可以完整地绘制批处理,使用 draw

给定的顶点列表必须属于此批处理;如果不满足此条件,则行为未定义。

参数:

vertex_lists (Sequence[VertexList | IndexedVertexList]) -- 要绘制的顶点列表。

返回类型:

None

get_domain(
indexed: bool,
instanced: bool,
mode: int,
group: Group,
program: ShaderProgram,
attributes: dict[str, Any],
) VertexDomain | IndexedVertexDomain | InstancedVertexDomain | InstancedIndexedVertexDomain

获取或创建与给定参数对应的顶点域。

模式是渲染模式,例如GL_LINES或GL_TERANGLES

返回类型:

VertexDomain | IndexedVertexDomain | InstancedVertexDomain | InstancedIndexedVertexDomain

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,
) None

将顶点列表迁移到另一个批次和/或组。

vertex_listmode 共同标识要迁移的顶点列表。 groupbatch 是迁移后顶点列表的新所有者。

如果满足以下条件,则结果未定义 mode 不正确或如果 vertex_list 不属于此批处理(它们未被选中,不一定会立即引发异常)。

batch 如果只需要更改组,则可以保持不变。

参数:
  • vertex_list (VertexList | IndexedVertexList) -- 当前属于此批的顶点列表。

  • mode (int) -- 顶点列表的当前GL绘制模式。

  • group (Group) -- 要迁移到的新组。

  • batch (Batch) -- 要迁移到的批次(或当前批次)。

返回类型:

None

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()
__init__(order: int = 0, parent: Group | None = None) None

初始化渲染组。

参数:
  • order (int) -- 设置渲染顺序,使其高于或低于其他组。较低的顺序首先绘制。

  • parent (Group | None) -- 组以包含此组;其状态将设置为此组的状态之前。

set_state() None

应用OpenGL状态更改。

默认实现不执行任何操作。

返回类型:

None

set_state_recursive() None

设置这个群体及其祖先。

如果单独使用组,则调用此方法:父组将以自上而下的顺序调用,此类的 set 被叫到最后。

返回类型:

None

unset_state() None

撤销OpenGL状态更改。

默认实现不执行任何操作。

返回类型:

None

unset_state_recursive() None

把这个群体和它的祖先分开。

的反面 set_state_recursive

返回类型:

None

property batches: tuple[Batch, ...]

该组属于哪些图形批次。

只读。

property order: int

与其他组相比,呈现此组的顺序。

首先抽取较低的数字。

property visible: bool

组在渲染管道中的可见性。

确定此组在分配给它的任何批次中是否可见。如果 False ,则不会渲染此组中的对象。

class ShaderGroup

启用和绑定ShaderProgram的组。

__init__(
program: ShaderProgram,
order: int = 0,
parent: Group | None = None,
) None

初始化渲染组。

参数:
  • order (int) -- 设置渲染顺序,使其高于或低于其他组。较低的顺序首先绘制。

  • parent (Group | None) -- 组以包含此组;其状态将设置为此组的状态之前。

set_state() None

应用OpenGL状态更改。

默认实现不执行任何操作。

返回类型:

None

unset_state() None

撤销OpenGL状态更改。

默认实现不执行任何操作。

返回类型:

None

class TextureGroup

启用并绑定纹理的组。

如果纹理的目标和名称相同,则纹理组是相等的。

__init__(
texture: Texture,
order: int = 0,
parent: Group | None = None,
) None

创建纹理组。

参数:
  • texture (Texture) -- 要绑定的纹理。

  • order (int) -- 更改顺序以呈现在其他组之上或之下。

  • parent (Group | None) -- 家长组。

set_state() None

应用OpenGL状态更改。

默认实现不执行任何操作。

返回类型:

None

draw(size: int, mode: int, **data: Any) None

立即绘制一个基本体。

警告:

从2.0.4开始,此函数已弃用,并将在下一个版本中删除。

参数:
  • size (int) -- 给定的顶点数

  • mode (int) -- OpenGL绘图模式,例如 GL_TRIANGLES ,避免引号。

  • **data (Any) -- 用于传递顶点属性数据的关键字参数。关键字应该是顶点属性名称,参数应该是(格式、数据)的二元组。例如: position=('f', array)

返回类型:

None

draw_indexed(
size: int,
mode: int,
indices: Sequence[int],
**data: Any,
) None

立即绘制一个带有索引顶点的基本体。

警告:

从2.0.4开始,此函数已弃用,并将在下一个版本中删除。

参数:
  • size (int) -- 给定的顶点数

  • mode (int) -- OpenGL绘图模式,例如 GL_TRIANGLES

  • indices (Sequence[int]) -- 给出顶点列表索引的整数序列。

  • **data (Any) -- 用于传递顶点属性数据的关键字参数。关键字应该是顶点属性名称,参数应该是(格式、数据)的二元组。例如: position=('f', array)

返回类型:

None

get_default_batch() Batch

批量用于未指定批量的对象。

返回类型:

Batch

get_default_shader() ShaderProgram

默认批次的默认基本着色器。

返回类型:

ShaderProgram