diff --git a/main.go b/main.go index f70412c..3f0602f 100755 --- a/main.go +++ b/main.go @@ -73,6 +73,9 @@ func main() { println("Box 2 mass:", dynBox2.GetMass()) println("Sphere mass:", dynSphere.GetMass()) println("Capsule mass:", dynCapsule.GetMass()) + + s.SetScratchBuffer(4) + for { s.Simulate(1 / 60.0) s.FetchResults(true) diff --git a/pgo/libs/libphysx-c.a b/pgo/libs/libphysx-c.a index 62ece36..1e57d35 100755 Binary files a/pgo/libs/libphysx-c.a and b/pgo/libs/libphysx-c.a differ diff --git a/pgo/pgo.go b/pgo/pgo.go index 02e3a1d..e6c60b3 100755 --- a/pgo/pgo.go +++ b/pgo/pgo.go @@ -95,12 +95,10 @@ func (s *Scene) AddActor(a *Actor) { C.CPxScene_addActor(s.cS, a.cA) } -// void CPxScene_simulate(CSTRUCT CPxScene*, CPxReal elapsedTime); func (s *Scene) Simulate(elapsedTime float32) { C.CPxScene_simulate(s.cS, C.float(elapsedTime)) } -// bool CPxScene_fetchResults(struct CPxScene*, bool block, CPxU32* errorState); func (s *Scene) FetchResults(block bool) (bool, uint32) { var errState uint32 @@ -108,6 +106,10 @@ func (s *Scene) FetchResults(block bool) (bool, uint32) { return bool(b), errState } +func (s *Scene) SetScratchBuffer(multiplesOf16k uint32) { + C.CPxScene_setScratchBuffer(s.cS, C.uint(multiplesOf16k)) +} + type Physics struct { cPhysics *C.struct_CPxPhysics } diff --git a/pgo/physx-c/CPxScene.h b/pgo/physx-c/CPxScene.h index 6c39400..99acf2e 100755 --- a/pgo/physx-c/CPxScene.h +++ b/pgo/physx-c/CPxScene.h @@ -11,6 +11,8 @@ extern "C" { struct CPxScene { void* obj; + void* scratchBuffer; + CPxU32 scratchBufferSize; }; CPxAPI CSTRUCT CPxPvdSceneClient* CPxScene_getScenePvdClient(CSTRUCT CPxScene*); @@ -18,6 +20,14 @@ extern "C" { CPxAPI void CPxScene_simulate(CSTRUCT CPxScene*, CPxReal elapsedTime); CPxAPI bool CPxScene_fetchResults(CSTRUCT CPxScene*, bool block, CPxU32* errorState); + /// + /// Creates a scratch buffer thats a multiple of 16K to be used by the scene when running CPxScene_simulate. + /// The buffer MUST be 16-byte aligned. If a buffer already exists then it is freed and a new one is allocated. + /// If multiples passed are zero then any existing buffers are cleared + /// + /// + CPxAPI void CPxScene_setScratchBuffer(CSTRUCT CPxScene*, uint32_t multiplesOf16k); + CPxAPI void CPxScene_release(CSTRUCT CPxScene*); #ifdef __cplusplus