pyglet.graphics.allocation

顶点数组和缓冲区的内存分配算法。

区域分配器用于在顶点域的多个缓冲区内分配顶点索引。(“缓冲区”指的是由 pyglet.graphics.vertexbuffer

分配器有时会从缓冲区请求更多空间。目前的政策是,当没有足够的空间来完成分配时,将缓冲区大小增加一倍。缓冲区的大小永远不会调整得更小。

分配器只维护对空闲空间的引用;调用方负责维护分配的区域。

exception AllocatorMemoryException

缓冲区不够大,无法完成分配。

提出者 Allocator 方法当操作因缓冲区空间不足而失败时。缓冲区应至少增加到REQUESTED_CAPTABLE,然后重试操作(保证第二次通过)。

__init__(requested_capacity: int) None

请求的容量分配失败。

class Allocator

缓冲区空间分配的实现。

__init__(capacity: int) None

为指定最大容量大小的缓冲区创建分配器。

alloc(size: int) int

分配缓冲区中的内存。

加薪 AllocatorMemoryException 如果无法完成分配。

参数:

size (int) -- 要分配的区域大小。

返回类型:

int

返回:

分配区域的起始索引。

dealloc(start: int, size: int) None

释放缓冲区的一个区域。

参数:
  • start (int) -- 区域的起始索引。

  • size (int) -- 区域的大小。

返回类型:

None

get_allocated_regions() tuple[list, list]

获取(聚合)已分配区域的列表。

这种方法的结果是 (starts, sizes) ,在哪里 starts 是各地区和地区的起始指数列表 sizes 它们相应的长度。

返回类型:

tuple[list, list]

get_fragmentation() float

返回不可扩展的可用空间的分数。

返回类型:

float

get_fragmented_free_size() int

返回未使用的空间量,不包括最后一个空闲块。

返回类型:

int

get_free_size() int

返回未使用的空间量。

返回类型:

int

get_usage() float

返回当前分配的容量的一部分。

返回类型:

float

realloc(start: int, size: int, new_size: int) int

重新分配缓冲区的一个区域。

这比分开更有效率 deallocalloc 调用,因为该区域通常可以就地调整大小。

加薪 AllocatorMemoryException 如果无法完成分配。

参数:
  • start (int) -- 该区域的当前起始索引。

  • size (int) -- 区域的当前大小。

  • new_size (int) -- int该地区的新大小。

返回类型:

int

返回:

重新分配区域的开始索引。

set_capacity(size: int) None

调整最大缓冲区大小。

容量不能减少。

返回类型:

None

capacity
sizes: list[int]
starts: list[int]