Skip to content

Batch module #238

@GuillaumeBroggi

Description

@GuillaumeBroggi

Following-up on #235

The new batch module is amazing and looks very promising. Only with this I can get at least a 50% running time improvement.

There is an error when using the arbiter distance with a space containing a sensor. For instance:

import pymunk, pymunk.batch

s = pymunk.Space()
b1 = pymunk.Body(1, 1)
b1.position = 1, 2

shape = pymunk.Circle(b1, 4)
shape.sensor = True
s.add(b1, shape)

b2 = pymunk.Body(1, 1)
b2.position = 3, 4
s.add(b2, pymunk.Circle(b2, 4))

s.step(1)
data = pymunk.batch.Buffer()
pymunk.batch.get_space_arbiters(
    s,
    pymunk.batch.ArbiterFields.DISTANCE_1 | pymunk.batch.ArbiterFields.BODY_B_ID,
    data,
)

raises

Aborting due to Chipmunk error: Index error: The specified contact index is invalid for this arbiter
        Failed condition: 0 <= i && i < cpArbiterGetCount(arb)
        Source:Chipmunk2D/src/cpArbiter.c:93

(Does it mean it would be possible to get arbiter information for sensors through this interface? That would also bring significant speed improvements instead of relying on pre_solve and separate callbacks to monitor sensors.)

If you are looking for more batching ideas, it could be nice to have:

  • batched position_func: I enforce a toroïdal space in my application by using simple maths on the body coordinates inside a position_func. However, the overhead of this callback is significant (almost 50% of the current running time).
  • batched addition of bodies
  • batched removal of bodies

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions