From 56a794340509f31c8572edaeb058a585e24610b9 Mon Sep 17 00:00:00 2001 From: bloeys Date: Fri, 28 Jan 2022 06:36:19 +0400 Subject: [PATCH] Implement SetScratchBuffer --- main.go | 3 +++ pgo/libs/libphysx-c.a | Bin 16648 -> 16898 bytes pgo/pgo.go | 6 ++++-- pgo/physx-c/CPxScene.h | 10 ++++++++++ 4 files changed, 17 insertions(+), 2 deletions(-) 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 62ece36da3a6812227e677168c58d33c58ada8df..1e57d353102b9869f569ae0a60072742788a487f 100755 GIT binary patch delta 1378 zcmb8uUr19?90%~PHp{CyONW-F%|bV)Tie`p+uhx!{lR(|l2#Peim_6of9nrH&?v&9 zr}8{C7X2ZpCtvo`gMk@E^(YZN3Hsne8T4TEP*mTuGkPe38hq~WoRtUxzf@BNXC>BaRXB8n9}wDkQ`Q}&A~Rc+ZEe6 z=Al-L(!nUTWRZ~%l}kbHAR`xvSFWzl9v>YP!!UH}DsjMO=z_}?%ec^4GVH!f5fRRVFK zfX@fWo*CqYbWSK(WTa3|2{W-2aw)o*<7Ds|DHtw#%t%o#P>O9YnqVZ?km9_^FDmgJ zQk`v{XG1-FK|z)=D_%9n^JAqKDmA}^|H3oERNiIV0r^kZsYm308<9fCjyMM0uS0)d=8!yqrDwC z$2k`ETUdBm&dsv#9d|p%w%N&hF8Ds5ZSVl&EXGMYuyrFaK_RvuWtc1-1uAH-pZ8v1 z&IjzHm)*c-n&|{ybOC)d!uvOzx4?Pdm~@ol0glrklaK1aBIQ_ABV34!(aiQBHxUj3 zk7>+X4Ham_a;!u(YGFYH zQ5fRLO6Sf1g7BjgUGTsQA8OEzrC5eKtV0t*&=E!tdQpPX|I2Lq$ISU)O;g#5-%CNn ztLnsJ+1h-j-m|Rwx6%BarqV{y?yPOOP`U0k50Yy);jeWgW<7?ut6Q{(Z}n$Qob44) z^wjd}S7XyWaPHj%@u|!z;^BVnd(F|gMt1td!*Htd-oV1Ve83Nrm@Tap4x_)aZ+FjI z)*3&UN!+Wi7dfL}+ckLW{VMi#i_b%6oT+dcO?2jb0O?#Hiu3;-Eo=1{e(tYad zTDC&M6HRKy)A6ZhwsdhjI;b%7 delta 1207 zcma*lO-NKx6bJCXmf6!9O=%P|KgVxJotZZ?Z@y>DMVoX2NiMg_L0|D7u>qk-R?cka9Q-1FYMPsTEyJ;|8x zCT&J}`ZtgRAPJNm0F}i+RR>TrrdVbH$-k}yT!2(#QtHcrv}s1Fd!sbG2BexJrFsI8 z8c$T4xg-D3c*3^>NKGu9HqJ=RT}psWNUc*R8W^e0uQac69<>-J78t3)q68B_T0SG` zTYO@D3$XF2CB08^Yy*nquDvBxh8y4>2bjH%!Z9B=-l!;999R zxxqj3@uuW0R(vDO$up;T$2m@ZHXs>`ibv;t3hpVPD3G?wNLG$ZO~;CrHKp1?#T4e^ zv>C=3ajmi=^&)dLC)IiW(y65V@8O65I4A>(D}jzGV5|n1wE*jU^R573VqRVkOw*e> z;B^CV#IcELY6Q%TX2u;K=QaW3)YZ%yTszguuS0&WTjiM10xXav$s&m$kWX9e^S}o5 zF>X76b~mu%0(yDf#<=DL_U%BFafmU&xta8V^V$qxqn0^0FZKc>jB_3~!RuZ=z#{MK z%=frYG{h!o&&soU%q~ZGG04Sw7?>fR7-S(ICY;4-oJUAZUMR{6APB!`DX_ZTFrdQ@ zCv0$_04|(CHq0nPDLnAPhcF_@K<2-yRR33%)YF2}tkhCbPj*T#`&uIUy@lGZ#lyo= zwrCUY{PA4$7`uE1wsTr+W>tu*fvDDVwEX)r#~k8SAgDMVH?Gyu{29%b}Py-#NKn!ptKY!?E1$ zi>==(n0e){CbO6iU(dZ;_<2iK_HisDuSirzqFQYK`wzLwFGeFV%fQXiPqKc1ueBro Z;7T-cBOY^LWa#1jgf-TDdw3W*e*n6P=^+3B 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