You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm using pure physx (physx-sys). The problem is that my "onConnect" (when bodies collides) never gets called. The filter shader is called though. Here is the scene creation.
pub fn create_scene(physics: PtrPhysics, gravity: f32) -> PtrScene {
unsafe {
let mut scene_desc: PS::PxSceneDesc =
PS::PxSceneDesc_new(PS::PxPhysics_getTolerancesScale(physics));
scene_desc.gravity = PS::PxVec3 {
x: 0.0,
y: gravity,
z: 0.0,
};
unsafe extern "C" fn filterShader(mut s: *mut PS::FilterShaderCallbackInfo) -> u16 {
use PS::PxPairFlag as F;
let mut f = PS::PxPairFlags {
mBits: (F::eCONTACT_DEFAULT | F::eNOTIFY_TOUCH_FOUND) as u16,
}; //;;
(*s).pairFlags = &mut f;
(PS::PxFilterFlag::eDEFAULT) as u16
}
unsafe extern "C" fn onConnect( //<--- This never gets called
a: *mut std::ffi::c_void,
b: *const PS::PxContactPairHeader,
c: *const PS::PxContactPair,
d: u32,
) {
println!("Connecting!"); //but it doesn't :(
};
let info = PS::SimulationEventCallbackInfo {
collision_callback: Some(onConnect),
..Default::default()
};
let simulation_event_callback = PS::create_simulation_event_callbacks(&info);
scene_desc.simulationEventCallback = simulation_event_callback;
let dispatcher = PS::phys_PxDefaultCpuDispatcherCreate(1, null_mut());
scene_desc.cpuDispatcher = dispatcher as *mut PS::PxCpuDispatcher;
PS::enable_custom_filter_shader(&mut scene_desc, shader, 1);
let scene = PS::PxPhysics_createScene_mut(physics, &scene_desc);
scene
}
}
And this is how I set the filter data
pub fn set_filter_data(actor: *mut PS::PxRigidActor) {
unsafe {
let data = PS::PxFilterData_new_2(2, 2, 2, 2);
let capacity = PS::PxRigidActor_getNbShapes(actor);
let mut buffer: Vec<*mut PS::PxShape> = Vec::with_capacity(capacity as usize);
let len =
PS::PxRigidActor_getShapes(actor, buffer.as_mut_ptr() as *mut *mut _, capacity, 0);
buffer.set_len(len as usize);
for n in 0..(len as usize) {
let shape = buffer.get(n);
match shape {
None => {}
Some(ptr) => {
PS::PxShape_setSimulationFilterData_mut(*ptr, &data);
}
}
}
}
}
I saw the PxSimulationFilterCallback_pairFound_mut ? method but that is supposed to be overriden, not called, and how should it be overriden? I'm really at a loss, there is no crashes, it just doesn't work for some reason.
Are there perhaps some examples out there on how it works? Couldn't find any so far.
The text was updated successfully, but these errors were encountered:
I'm using pure physx (physx-sys). The problem is that my "onConnect" (when bodies collides) never gets called. The filter shader is called though. Here is the scene creation.
And this is how I set the filter data
I saw the
PxSimulationFilterCallback_pairFound_mut
? method but that is supposed to be overriden, not called, and how should it be overriden? I'm really at a loss, there is no crashes, it just doesn't work for some reason.Are there perhaps some examples out there on how it works? Couldn't find any so far.
The text was updated successfully, but these errors were encountered: