pyglet.graphics.allocation

Memory allocation algorithm for vertex arrays and buffers.

The region allocator is used to allocate vertex indices within a vertex domain’s multiple buffers. (“Buffer” refers to any abstract buffer presented by pyglet.graphics.vertexbuffer.

The allocator will at times request more space from the buffers. The current policy is to double the buffer size when there is not enough room to fulfil an allocation. The buffer is never resized smaller.

The allocator maintains references to free space only; it is the caller’s responsibility to maintain the allocated regions.

exception AllocatorMemoryException

The buffer is not large enough to fulfil an allocation.

Raised by Allocator methods when the operation failed due to lack of buffer space. The buffer should be increased to at least requested_capacity and then the operation retried (guaranteed to pass second time).

__init__(requested_capacity: int) None

Requested capacity failed to allocate.

class Allocator

Buffer space allocation implementation.

__init__(capacity: int) None

Create an allocator for a buffer of the specified maximum capacity size.

alloc(size: int) int

Allocate memory in the buffer.

Raises AllocatorMemoryException if the allocation cannot be fulfilled.

Parameters:

size (int) – Size of region to allocate.

Return type:

int

Returns:

Starting index of the allocated region.

dealloc(start: int, size: int) None

Free a region of the buffer.

Parameters:
  • start (int) – Starting index of the region.

  • size (int) – Size of the region.

Return type:

None

get_allocated_regions() tuple[list, list]

Get a list of (aggregate) allocated regions.

The result of this method is (starts, sizes), where starts is a list of starting indices of the regions and sizes their corresponding lengths.

Return type:

tuple[list, list]

get_fragmentation() float

Return fraction of free space that is not expandable.

Return type:

float

get_fragmented_free_size() int

Returns the amount of space unused, not including the final free block.

Return type:

int

get_free_size() int

Return the amount of space unused.

Return type:

int

get_usage() float

Return fraction of capacity currently allocated.

Return type:

float

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

Reallocate a region of the buffer.

This is more efficient than separate dealloc and alloc calls, as the region can often be resized in-place.

Raises AllocatorMemoryException if the allocation cannot be fulfilled.

Parameters:
  • start (int) – Current starting index of the region.

  • size (int) – Current size of the region.

  • new_size (int) – int New size of the region.

Return type:

int

Returns:

Starting index of the re-allocated region.

set_capacity(size: int) None

Resize the maximum buffer size.

The capacity cannot be reduced.

Return type:

None

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