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