1#![allow(
127 unsafe_code,
128 non_upper_case_globals,
129 non_camel_case_types,
130 non_snake_case,
131 clippy::doc_markdown, clippy::unreadable_literal,
133 clippy::unused_unit,
134 clippy::upper_case_acronyms
135)]
136
137#[cfg(feature = "structgen")]
138include!(concat!(env!("OUT_DIR"), "/structgen_out.rs"));
139
140#[cfg(all(
141 not(feature = "structgen"),
142 target_os = "linux",
143 target_arch = "x86_64",
144))]
145include!("generated/unix/structgen.rs");
146
147#[cfg(all(
148 not(feature = "structgen"),
149 target_os = "linux",
150 target_arch = "aarch64",
151))]
152include!("generated/unix/structgen.rs");
153
154#[cfg(all(
155 not(feature = "structgen"),
156 target_os = "android",
157 target_arch = "x86_64",
158))]
159include!("generated/unix/structgen.rs");
160
161#[cfg(all(
162 not(feature = "structgen"),
163 target_os = "android",
164 target_arch = "aarch64",
165))]
166include!("generated/unix/structgen.rs");
167
168#[cfg(all(
169 not(feature = "structgen"),
170 target_os = "macos",
171 target_arch = "x86_64",
172))]
173include!("generated/unix/structgen.rs");
174
175#[cfg(all(
176 not(feature = "structgen"),
177 target_os = "macos",
178 target_arch = "aarch64",
179))]
180include!("generated/unix/structgen.rs");
181
182#[cfg(all(
183 not(feature = "structgen"),
184 target_os = "windows",
185 target_arch = "x86_64",
186 target_env = "msvc",
187))]
188include!("generated/x86_64-pc-windows-msvc/structgen.rs");
189
190include!("physx_generated.rs");
191
192use std::ffi::c_void;
193
194pub const fn version(major: u32, minor: u32, patch: u32) -> u32 {
195 (major << 24) + (minor << 16) + (patch << 8)
196}
197
198pub type CollisionCallback =
199 unsafe extern "C" fn(*mut c_void, *const PxContactPairHeader, *const PxContactPair, u32);
200
201pub type TriggerCallback = unsafe extern "C" fn(*mut c_void, *const PxTriggerPair, u32);
202
203pub type ConstraintBreakCallback = unsafe extern "C" fn(*mut c_void, *const PxConstraintInfo, u32);
204
205pub type WakeSleepCallback = unsafe extern "C" fn(*mut c_void, *const *const PxActor, u32, bool);
206
207pub type AdvanceCallback =
208 unsafe extern "C" fn(*mut c_void, *const *const PxRigidBody, *const PxTransform, u32);
209
210#[repr(C)]
214pub struct SimulationEventCallbackInfo {
215 pub collision_callback: Option<CollisionCallback>,
217 pub collision_user_data: *mut c_void,
218 pub trigger_callback: Option<TriggerCallback>,
220 pub trigger_user_data: *mut c_void,
221 pub constraint_break_callback: Option<ConstraintBreakCallback>,
223 pub constraint_break_user_data: *mut c_void,
224 pub wake_sleep_callback: Option<WakeSleepCallback>,
226 pub wake_sleep_user_data: *mut c_void,
227 pub advance_callback: Option<AdvanceCallback>,
229 pub advance_user_data: *mut c_void,
230}
231
232impl Default for SimulationEventCallbackInfo {
233 fn default() -> Self {
234 Self {
235 collision_callback: None,
236 collision_user_data: std::ptr::null_mut(),
237 trigger_callback: None,
238 trigger_user_data: std::ptr::null_mut(),
239 constraint_break_callback: None,
240 constraint_break_user_data: std::ptr::null_mut(),
241 wake_sleep_callback: None,
242 wake_sleep_user_data: std::ptr::null_mut(),
243 advance_callback: None,
244 advance_user_data: std::ptr::null_mut(),
245 }
246 }
247}
248
249pub type RaycastHitCallback = unsafe extern "C" fn(
250 *const PxRigidActor,
251 *const PxFilterData,
252 *const PxShape,
253 hit_flags: u32,
254 *const c_void,
255) -> PxQueryHitType;
256
257pub type PostFilterCallback =
258 unsafe extern "C" fn(*const PxFilterData, *const PxQueryHit, *const c_void) -> PxQueryHitType;
259
260#[repr(C)]
261pub struct FilterShaderCallbackInfo {
262 pub attributes0: u32,
263 pub attributes1: u32,
264 pub filterData0: PxFilterData,
265 pub filterData1: PxFilterData,
266 pub pairFlags: *mut PxPairFlags,
267 pub constantBlock: *const std::ffi::c_void,
268 pub constantBlockSize: u32,
269}
270
271pub type SimulationFilterShader =
272 unsafe extern "C" fn(*mut FilterShaderCallbackInfo) -> PxFilterFlags;
273
274pub type RaycastProcessTouchesCallback =
275 unsafe extern "C" fn(*const PxRaycastHit, u32, *mut c_void) -> bool;
276pub type SweepProcessTouchesCallback =
277 unsafe extern "C" fn(*const PxSweepHit, u32, *mut c_void) -> bool;
278pub type OverlapProcessTouchesCallback =
279 unsafe extern "C" fn(*const PxOverlapHit, u32, *mut c_void) -> bool;
280
281pub type FinalizeQueryCallback = unsafe extern "C" fn(*mut c_void);
282
283pub type AllocCallback =
284 unsafe extern "C" fn(u64, *const c_void, *const c_void, u32, *const c_void) -> *mut c_void;
285
286pub type DeallocCallback = unsafe extern "C" fn(*const c_void, *const c_void);
287
288pub type ZoneStartCallback =
289 unsafe extern "C" fn(*const i8, bool, u64, *const c_void) -> *mut c_void;
290
291pub type ZoneEndCallback = unsafe extern "C" fn(*const c_void, *const i8, bool, u64, *const c_void);
292
293pub type ErrorCallback =
294 unsafe extern "C" fn(PxErrorCode, *const i8, *const i8, u32, *const c_void);
295
296pub type AssertHandler = unsafe extern "C" fn(*const i8, *const i8, u32, *mut bool, *const c_void);
297
298extern "C" {
299 pub fn physx_create_foundation() -> *mut PxFoundation;
300 pub fn physx_create_foundation_with_alloc(
301 allocator: *mut PxDefaultAllocator,
302 ) -> *mut PxFoundation;
303 pub fn physx_create_physics(foundation: *mut PxFoundation) -> *mut PxPhysics;
304
305 pub fn get_default_allocator() -> *mut PxDefaultAllocator;
306 pub fn get_default_error_callback() -> *mut PxDefaultErrorCallback;
307
308 pub fn create_raycast_filter_callback(
310 actor_to_ignore: *const PxRigidActor,
311 ) -> *mut PxQueryFilterCallback;
312
313 pub fn create_raycast_filter_callback_func(
315 callback: RaycastHitCallback,
316 userdata: *mut c_void,
317 ) -> *mut PxQueryFilterCallback;
318
319 pub fn create_pre_and_post_raycast_filter_callback_func(
321 preFilter: RaycastHitCallback,
322 postFilter: PostFilterCallback,
323 userdata: *mut c_void,
324 ) -> *mut PxQueryFilterCallback;
325
326 pub fn create_raycast_buffer() -> *mut PxRaycastCallback;
327 pub fn create_sweep_buffer() -> *mut PxSweepCallback;
328 pub fn create_overlap_buffer() -> *mut PxOverlapCallback;
329
330 pub fn create_raycast_callback(
331 process_touches_callback: RaycastProcessTouchesCallback,
332 finalize_query_callback: FinalizeQueryCallback,
333 touches_buffer: *mut PxRaycastHit,
334 num_touches: u32,
335 userdata: *mut c_void,
336 ) -> *mut PxRaycastCallback;
337 pub fn create_sweep_callback(
338 process_touches_callback: SweepProcessTouchesCallback,
339 finalize_query_callback: FinalizeQueryCallback,
340 touches_buffer: *mut PxSweepHit,
341 num_touches: u32,
342 userdata: *mut c_void,
343 ) -> *mut PxSweepCallback;
344 pub fn create_overlap_callback(
345 process_touches_callback: OverlapProcessTouchesCallback,
346 finalize_query_callback: FinalizeQueryCallback,
347 touches_buffer: *mut PxOverlapHit,
348 num_touches: u32,
349 userdata: *mut c_void,
350 ) -> *mut PxOverlapCallback;
351
352 pub fn delete_raycast_callback(callback: *mut PxRaycastCallback);
353 pub fn delete_sweep_callback(callback: *mut PxSweepCallback);
354 pub fn delete_overlap_callback(callback: *mut PxOverlapCallback);
355
356 pub fn create_alloc_callback(
357 alloc_callback: AllocCallback,
358 dealloc_callback: DeallocCallback,
359 userdata: *mut c_void,
360 ) -> *mut PxAllocatorCallback;
361
362 pub fn create_profiler_callback(
363 zone_start_callback: ZoneStartCallback,
364 zone_end_callback: ZoneEndCallback,
365 userdata: *mut c_void,
366 ) -> *mut PxProfilerCallback;
367
368 pub fn get_alloc_callback_user_data(alloc_callback: *mut PxAllocatorCallback) -> *mut c_void;
369
370 pub fn create_error_callback(
371 error_callback: ErrorCallback,
372 userdata: *mut c_void,
373 ) -> *mut PxErrorCallback;
374
375 pub fn create_assert_handler(
376 error_callback: AssertHandler,
377 userdata: *mut c_void,
378 ) -> *mut PxAssertHandler;
379
380 pub fn get_default_simulation_filter_shader() -> *mut c_void;
381
382 #[deprecated]
385 pub fn create_contact_callback(
386 callback: CollisionCallback,
387 userdata: *mut c_void,
388 ) -> *mut PxSimulationEventCallback;
389 #[deprecated()]
391 pub fn destroy_contact_callback(callback: *mut PxSimulationEventCallback);
392
393 pub fn create_simulation_event_callbacks(
395 callbacks: *const SimulationEventCallbackInfo,
396 ) -> *mut PxSimulationEventCallback;
397
398 pub fn get_simulation_event_info(
399 callback: *mut PxSimulationEventCallback,
400 ) -> *mut SimulationEventCallbackInfo;
401
402 pub fn destroy_simulation_event_callbacks(callback: *mut PxSimulationEventCallback);
403
404 pub fn enable_custom_filter_shader(
408 scene_desc: *mut PxSceneDesc,
409 shader: SimulationFilterShader,
410 call_default_filter_shader_first: u32,
411 );
412
413 #[doc(hidden)]
414 pub fn PxAssertHandler_opCall_mut(
416 self_: *mut PxAssertHandler,
417 expr: *const i8,
418 file: *const i8,
419 line: i32,
420 ignore: *mut bool,
421 ) -> ();
422}