mirror of
https://github.com/Sarsoo/csbindgen.git
synced 2024-12-23 06:56:27 +00:00
wip, libphysx
This commit is contained in:
parent
1bd4f42ba2
commit
b39702c95c
1
csbindgen-tests/Cargo.toml
vendored
1
csbindgen-tests/Cargo.toml
vendored
@ -14,6 +14,7 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
csbindgen = { path = "../csbindgen" }
|
csbindgen = { path = "../csbindgen" }
|
||||||
|
physx-sys = "0.11.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
cc = "1.0.79"
|
cc = "1.0.79"
|
||||||
|
9
csbindgen-tests/build.rs
vendored
9
csbindgen-tests/build.rs
vendored
@ -125,5 +125,14 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
.csharp_dll_name("libpng16")
|
.csharp_dll_name("libpng16")
|
||||||
.generate_csharp_file("../dotnet-sandbox/libpng16_csbindgen.cs")?;
|
.generate_csharp_file("../dotnet-sandbox/libpng16_csbindgen.cs")?;
|
||||||
|
|
||||||
|
|
||||||
|
csbindgen::Builder::new()
|
||||||
|
.input_bindgen_file("src/physx/physx_generated.rs")
|
||||||
|
.input_bindgen_file("src/physx/x86_64-pc-windows-msvc/structgen.rs")
|
||||||
|
.csharp_namespace("Physx")
|
||||||
|
.csharp_class_name("LibPhysxd")
|
||||||
|
.csharp_dll_name("libphysx")
|
||||||
|
.generate_csharp_file("../dotnet-sandbox/libphysx_csbindgen.cs")?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
34
csbindgen-tests/src/lib.rs
vendored
34
csbindgen-tests/src/lib.rs
vendored
@ -1,8 +1,10 @@
|
|||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
ffi::{c_char, c_long, c_ulong, c_void, CString},
|
ffi::{c_char, c_long, c_ulong, c_void, CString}, ptr::null_mut,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use physx_sys::*;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
@ -546,3 +548,33 @@ pub struct CallbackTable {
|
|||||||
pub foo: extern "C" fn(),
|
pub foo: extern "C" fn(),
|
||||||
pub foobar: extern "C" fn(i: i32) -> i32,
|
pub foobar: extern "C" fn(i: i32) -> i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn run_physix(){
|
||||||
|
unsafe {
|
||||||
|
let foundation = physx_create_foundation();
|
||||||
|
let physics = physx_create_physics(foundation);
|
||||||
|
|
||||||
|
let mut scene_desc = PxSceneDesc_new(PxPhysics_getTolerancesScale(physics));
|
||||||
|
scene_desc.gravity = PxVec3 {
|
||||||
|
x: 0.0,
|
||||||
|
y: -9.81,
|
||||||
|
z: 0.0,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let dispatcher = phys_PxDefaultCpuDispatcherCreate(
|
||||||
|
1,
|
||||||
|
null_mut(),
|
||||||
|
PxDefaultCpuDispatcherWaitForWorkMode::WaitForWork,
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
scene_desc.cpuDispatcher = dispatcher.cast();
|
||||||
|
scene_desc.filterShader = get_default_simulation_filter_shader();
|
||||||
|
|
||||||
|
let scene = PxPhysics_createScene_mut(physics, &scene_desc);
|
||||||
|
|
||||||
|
// Your physics simulation goes here
|
||||||
|
}
|
||||||
|
}
|
408
csbindgen-tests/src/physx/lib.rs
vendored
Normal file
408
csbindgen-tests/src/physx/lib.rs
vendored
Normal file
@ -0,0 +1,408 @@
|
|||||||
|
//! # 🎳 physx-sys
|
||||||
|
//!
|
||||||
|
//! ![Build Status](https://github.com/EmbarkStudios/physx-rs/workflows/CI/badge.svg)
|
||||||
|
//! [![Crates.io](https://img.shields.io/crates/v/physx-sys.svg)](https://crates.io/crates/physx-sys)
|
||||||
|
//! [![Docs](https://docs.rs/physx-sys/badge.svg)](https://docs.rs/physx-sys)
|
||||||
|
//! [![Contributor Covenant](https://img.shields.io/badge/contributor%20covenant-v1.4%20adopted-ff69b4.svg)](../CODE_OF_CONDUCT.md)
|
||||||
|
//! [![Embark](https://img.shields.io/badge/embark-open%20source-blueviolet.svg)](http://embark.games)
|
||||||
|
//!
|
||||||
|
//! Unsafe automatically-generated Rust bindings for [NVIDIA PhysX 4.1](https://github.com/NVIDIAGameWorks/PhysX) C++ API.
|
||||||
|
//!
|
||||||
|
//! Please also see the [repository](https://github.com/EmbarkStudios/physx-rs) containing a work-in-progress safe wrapper.
|
||||||
|
//!
|
||||||
|
//! ## Presentation
|
||||||
|
//!
|
||||||
|
//! [Tomasz Stachowiak](https://github.com/h3r2tic) did a presentation at the Stockholm Rust Meetup on October 2019
|
||||||
|
//! about this project that goes through the tecnical details of how C++ to Rust bindings of `physx-sys` works:
|
||||||
|
//!
|
||||||
|
//! [![](http://img.youtube.com/vi/RxtXGeDHu0w/0.jpg)](http://www.youtube.com/watch?v=RxtXGeDHu0w "An unholy fusion of
|
||||||
|
//! Rust and C++ in physx-rs (Stockholm Rust Meetup, October 2019)")
|
||||||
|
//!
|
||||||
|
//!
|
||||||
|
//! ## Basic usage
|
||||||
|
//!
|
||||||
|
//! ```Rust
|
||||||
|
//! unsafe {
|
||||||
|
//! let foundation = physx_create_foundation();
|
||||||
|
//! let physics = physx_create_physics(foundation);
|
||||||
|
//!
|
||||||
|
//! let mut scene_desc = PxSceneDesc_new(PxPhysics_getTolerancesScale(physics));
|
||||||
|
//! scene_desc.gravity = PxVec3 {
|
||||||
|
//! x: 0.0,
|
||||||
|
//! y: -9.81,
|
||||||
|
//! z: 0.0,
|
||||||
|
//! };
|
||||||
|
//!
|
||||||
|
//! let dispatcher = PxDefaultCpuDispatcherCreate(2, null_mut());
|
||||||
|
//!
|
||||||
|
//! scene_desc.cpuDispatcher = dispatcher as *mut PxCpuDispatcher;
|
||||||
|
//! scene_desc.filterShader = Some(PxDefaultSimulationFilterShader);
|
||||||
|
//!
|
||||||
|
//! let scene = PxPhysics_createScene_mut(physics, &scene_desc);
|
||||||
|
//!
|
||||||
|
//! // Your physics simulation goes here
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! ## Examples
|
||||||
|
//!
|
||||||
|
//! ### [Ball](examples/ball.rs)
|
||||||
|
//!
|
||||||
|
//! A simple example to showcase how to use physx-sys. It can be run with `cargo run --examples ball`.
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//! o
|
||||||
|
//!
|
||||||
|
//! o
|
||||||
|
//! o
|
||||||
|
//!
|
||||||
|
//! o
|
||||||
|
//! ooooooooo
|
||||||
|
//! o oo oo
|
||||||
|
//! o o
|
||||||
|
//! o o o
|
||||||
|
//! o oo
|
||||||
|
//! o o o
|
||||||
|
//! o ooooooo
|
||||||
|
//! o o oo oo
|
||||||
|
//! o o o oo oo
|
||||||
|
//! o o o o ooooooooo
|
||||||
|
//! o o o oo oooooooooo oo
|
||||||
|
//!
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! ## How it works
|
||||||
|
//!
|
||||||
|
//! The binding is generated using a custom C++ app written against clang's
|
||||||
|
//! [libtooling](https://clang.llvm.org/docs/LibTooling.html). It queries the compiler's abstract syntax tree, and maps
|
||||||
|
//! the C++ PhysX functions and types to Rust using heuristics chosen specifically for this SDK. It is not a general
|
||||||
|
//! C++ <-> Rust binding generator, and using it on other projects *will* likely crash and burn.
|
||||||
|
//!
|
||||||
|
//! Since C++ does not have a standardized and stable ABI, it's generally not safe to call it from Rust code; since
|
||||||
|
//! PhysX exposes a C++ interface, we can't use it directly. That's why `physx-sys` generates both a Rust interface as
|
||||||
|
//! well as a plain C wrapper. The C code is compiled into a static library at build time, and Rust then talks to C.
|
||||||
|
//!
|
||||||
|
//! In order to minimize the amount of work required to marshall data between the C wrapper and the original C++ API, we
|
||||||
|
//! generate a **bespoke C wrapper for each build target**. The wrapper is based on metadata about structure layout
|
||||||
|
//! extracted directly from compiling and running a tiny program against the PhysX SDK using the specific C++ compiler
|
||||||
|
//! used in the build process.
|
||||||
|
//!
|
||||||
|
//! The build process comprises a few steps:
|
||||||
|
//!
|
||||||
|
//! 1. The `pxbind` utility uses `clang` to extract metadata about PhysX functions and types, and generates partial
|
||||||
|
//! Rust and C bindings as `physx_generated.hpp` and `physx_generated.rs`. Those contain all function definitions, and
|
||||||
|
//! a small subset of types. It also generates a C++ utility called `structgen` by emitting `structgen.cpp`.
|
||||||
|
//! 2. `structgen` is compiled against the PhysX SDK, and generates all the remaining type wrappers. For each struct, it
|
||||||
|
//! queries the size and offset of its members, and generates `structgen_out.hpp` and `structgen_out.rs`. The types are
|
||||||
|
//! "plain old data" structs which will perfectly match the memory layout of the C++ types.
|
||||||
|
//! 3. All the generated C types are compiled together to form `physx_api`, a static library for Rust to link with.
|
||||||
|
//! 4. The Rust wrapper is compiled, and linked with PhysX and the C wrapper.
|
||||||
|
//!
|
||||||
|
//! Steps *2..4* are performed completely automatically from within `build.rs`, while step *1* is only necessary when
|
||||||
|
//! upgrading the PhysX SDK or modifying the generator. As such, building and running `pxbind` is a manual task, and is
|
||||||
|
//! currently only supported on \*nix systems.
|
||||||
|
//!
|
||||||
|
//! ## License
|
||||||
|
//!
|
||||||
|
//! Licensed under either of
|
||||||
|
//!
|
||||||
|
//! * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
||||||
|
//! * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
||||||
|
//!
|
||||||
|
//! at your option.
|
||||||
|
//!
|
||||||
|
//! Note that the [PhysX C++ SDK](https://github.com/NVIDIAGameWorks/PhysX) has it's
|
||||||
|
//! [own BSD 3 license](https://gameworksdocs.nvidia.com/PhysX/4.1/documentation/physxguide/Manual/License.html) and
|
||||||
|
//! depends on [additional C++ third party libraries](https://github.com/NVIDIAGameWorks/PhysX/tree/4.1/externals).
|
||||||
|
//!
|
||||||
|
//! ### Contribution
|
||||||
|
//!
|
||||||
|
//! Unless you explicitly state otherwise, any contribution intentionally
|
||||||
|
//! submitted for inclusion in the work by you, as defined in the Apache-2.0
|
||||||
|
//! license, shall be dual licensed as above, without any additional terms or
|
||||||
|
//! conditions.
|
||||||
|
|
||||||
|
// crate-specific exceptions:
|
||||||
|
#![allow(
|
||||||
|
unsafe_code,
|
||||||
|
non_upper_case_globals,
|
||||||
|
non_camel_case_types,
|
||||||
|
non_snake_case,
|
||||||
|
clippy::doc_markdown, // TODO: fixup comments and docs (though annoyingly complains about "PhysX")
|
||||||
|
clippy::unreadable_literal,
|
||||||
|
clippy::unused_unit,
|
||||||
|
clippy::upper_case_acronyms
|
||||||
|
)]
|
||||||
|
|
||||||
|
#[cfg(feature = "structgen")]
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/structgen_out.rs"));
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "linux",
|
||||||
|
target_arch = "x86_64",
|
||||||
|
))]
|
||||||
|
include!("generated/unix/structgen.rs");
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "linux",
|
||||||
|
target_arch = "aarch64",
|
||||||
|
))]
|
||||||
|
include!("generated/unix/structgen.rs");
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "android",
|
||||||
|
target_arch = "aarch64",
|
||||||
|
))]
|
||||||
|
include!("generated/unix/structgen.rs");
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "macos",
|
||||||
|
target_arch = "x86_64",
|
||||||
|
))]
|
||||||
|
include!("generated/unix/structgen.rs");
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "macos",
|
||||||
|
target_arch = "aarch64",
|
||||||
|
))]
|
||||||
|
include!("generated/unix/structgen.rs");
|
||||||
|
|
||||||
|
#[cfg(all(
|
||||||
|
not(feature = "structgen"),
|
||||||
|
target_os = "windows",
|
||||||
|
target_arch = "x86_64",
|
||||||
|
target_env = "msvc",
|
||||||
|
))]
|
||||||
|
include!("generated/x86_64-pc-windows-msvc/structgen.rs");
|
||||||
|
|
||||||
|
include!("physx_generated.rs");
|
||||||
|
|
||||||
|
use std::ffi::c_void;
|
||||||
|
|
||||||
|
pub const fn version(major: u32, minor: u32, patch: u32) -> u32 {
|
||||||
|
(major << 24) + (minor << 16) + (patch << 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type CollisionCallback =
|
||||||
|
unsafe extern "C" fn(*mut c_void, *const PxContactPairHeader, *const PxContactPair, u32);
|
||||||
|
|
||||||
|
pub type TriggerCallback = unsafe extern "C" fn(*mut c_void, *const PxTriggerPair, u32);
|
||||||
|
|
||||||
|
pub type ConstraintBreakCallback = unsafe extern "C" fn(*mut c_void, *const PxConstraintInfo, u32);
|
||||||
|
|
||||||
|
pub type WakeSleepCallback = unsafe extern "C" fn(*mut c_void, *const *const PxActor, u32, bool);
|
||||||
|
|
||||||
|
pub type AdvanceCallback =
|
||||||
|
unsafe extern "C" fn(*mut c_void, *const *const PxRigidBody, *const PxTransform, u32);
|
||||||
|
|
||||||
|
// Function pointers in Rust are normally not nullable (which is why they don't require unsafe to call)
|
||||||
|
// but we need them to be, so we simply wrap them in Option<>. An Option<funcptr> is luckily represented
|
||||||
|
// by the compiler as a simple pointer with null representing None, so this is compatible with the C struct.
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct SimulationEventCallbackInfo {
|
||||||
|
// Callback for collision events.
|
||||||
|
pub collision_callback: Option<CollisionCallback>,
|
||||||
|
pub collision_user_data: *mut c_void,
|
||||||
|
// Callback for trigger shape events (an object entered or left a trigger shape).
|
||||||
|
pub trigger_callback: Option<TriggerCallback>,
|
||||||
|
pub trigger_user_data: *mut c_void,
|
||||||
|
// Callback for when a constraint breaks (such as a joint with a force limit)
|
||||||
|
pub constraint_break_callback: Option<ConstraintBreakCallback>,
|
||||||
|
pub constraint_break_user_data: *mut c_void,
|
||||||
|
// Callback for when an object falls asleep or is awoken.
|
||||||
|
pub wake_sleep_callback: Option<WakeSleepCallback>,
|
||||||
|
pub wake_sleep_user_data: *mut c_void,
|
||||||
|
// Callback to get the next pose early for objects (if flagged with eENABLE_POSE_INTEGRATION_PREVIEW).
|
||||||
|
pub advance_callback: Option<AdvanceCallback>,
|
||||||
|
pub advance_user_data: *mut c_void,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for SimulationEventCallbackInfo {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
collision_callback: None,
|
||||||
|
collision_user_data: std::ptr::null_mut(),
|
||||||
|
trigger_callback: None,
|
||||||
|
trigger_user_data: std::ptr::null_mut(),
|
||||||
|
constraint_break_callback: None,
|
||||||
|
constraint_break_user_data: std::ptr::null_mut(),
|
||||||
|
wake_sleep_callback: None,
|
||||||
|
wake_sleep_user_data: std::ptr::null_mut(),
|
||||||
|
advance_callback: None,
|
||||||
|
advance_user_data: std::ptr::null_mut(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// return 0 = `PxQueryHitType::eNONE`
|
||||||
|
/// return 1 = `PxQueryHitType::eTOUCH`
|
||||||
|
/// return 2 = `PxQueryHitType::eBLOCK`
|
||||||
|
pub type RaycastHitCallback = unsafe extern "C" fn(
|
||||||
|
*const PxRigidActor,
|
||||||
|
*const PxFilterData,
|
||||||
|
*const PxShape,
|
||||||
|
hit_flags: u32,
|
||||||
|
*const c_void,
|
||||||
|
) -> PxQueryHitType;
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
pub struct FilterShaderCallbackInfo {
|
||||||
|
pub attributes0: u32,
|
||||||
|
pub attributes1: u32,
|
||||||
|
pub filterData0: PxFilterData,
|
||||||
|
pub filterData1: PxFilterData,
|
||||||
|
pub pairFlags: *mut PxPairFlags,
|
||||||
|
pub constantBlock: *const std::ffi::c_void,
|
||||||
|
pub constantBlockSize: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type SimulationFilterShader =
|
||||||
|
unsafe extern "C" fn(*mut FilterShaderCallbackInfo) -> PxFilterFlags;
|
||||||
|
|
||||||
|
pub type RaycastProcessTouchesCallback =
|
||||||
|
unsafe extern "C" fn(*const PxRaycastHit, u32, *mut c_void) -> bool;
|
||||||
|
pub type SweepProcessTouchesCallback =
|
||||||
|
unsafe extern "C" fn(*const PxSweepHit, u32, *mut c_void) -> bool;
|
||||||
|
pub type OverlapProcessTouchesCallback =
|
||||||
|
unsafe extern "C" fn(*const PxOverlapHit, u32, *mut c_void) -> bool;
|
||||||
|
|
||||||
|
pub type FinalizeQueryCallback = unsafe extern "C" fn(*mut c_void);
|
||||||
|
|
||||||
|
pub type AllocCallback =
|
||||||
|
unsafe extern "C" fn(u64, *const c_void, *const c_void, u32, *const c_void) -> *mut c_void;
|
||||||
|
|
||||||
|
pub type DeallocCallback = unsafe extern "C" fn(*const c_void, *const c_void);
|
||||||
|
|
||||||
|
pub type ZoneStartCallback =
|
||||||
|
unsafe extern "C" fn(*const i8, bool, u64, *const c_void) -> *mut c_void;
|
||||||
|
|
||||||
|
pub type ZoneEndCallback = unsafe extern "C" fn(*const c_void, *const i8, bool, u64, *const c_void);
|
||||||
|
|
||||||
|
pub type ErrorCallback =
|
||||||
|
unsafe extern "C" fn(PxErrorCode, *const i8, *const i8, u32, *const c_void);
|
||||||
|
|
||||||
|
pub type AssertHandler = unsafe extern "C" fn(*const i8, *const i8, u32, *mut bool, *const c_void);
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
pub fn physx_create_foundation() -> *mut PxFoundation;
|
||||||
|
pub fn physx_create_foundation_with_alloc(
|
||||||
|
allocator: *mut PxDefaultAllocator,
|
||||||
|
) -> *mut PxFoundation;
|
||||||
|
pub fn physx_create_physics(foundation: *mut PxFoundation) -> *mut PxPhysics;
|
||||||
|
|
||||||
|
pub fn get_default_allocator() -> *mut PxDefaultAllocator;
|
||||||
|
pub fn get_default_error_callback() -> *mut PxDefaultErrorCallback;
|
||||||
|
|
||||||
|
/// Destroy the returned callback object using PxQueryFilterCallback_delete.
|
||||||
|
pub fn create_raycast_filter_callback(
|
||||||
|
actor_to_ignore: *const PxRigidActor,
|
||||||
|
) -> *mut PxQueryFilterCallback;
|
||||||
|
|
||||||
|
/// Destroy the returned callback object using PxQueryFilterCallback_delete.
|
||||||
|
pub fn create_raycast_filter_callback_func(
|
||||||
|
callback: RaycastHitCallback,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxQueryFilterCallback;
|
||||||
|
|
||||||
|
pub fn create_raycast_buffer() -> *mut PxRaycastCallback;
|
||||||
|
pub fn create_sweep_buffer() -> *mut PxSweepCallback;
|
||||||
|
pub fn create_overlap_buffer() -> *mut PxOverlapCallback;
|
||||||
|
|
||||||
|
pub fn create_raycast_callback(
|
||||||
|
process_touches_callback: RaycastProcessTouchesCallback,
|
||||||
|
finalize_query_callback: FinalizeQueryCallback,
|
||||||
|
touches_buffer: *mut PxRaycastHit,
|
||||||
|
num_touches: u32,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxRaycastCallback;
|
||||||
|
pub fn create_sweep_callback(
|
||||||
|
process_touches_callback: SweepProcessTouchesCallback,
|
||||||
|
finalize_query_callback: FinalizeQueryCallback,
|
||||||
|
touches_buffer: *mut PxSweepHit,
|
||||||
|
num_touches: u32,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxSweepCallback;
|
||||||
|
pub fn create_overlap_callback(
|
||||||
|
process_touches_callback: OverlapProcessTouchesCallback,
|
||||||
|
finalize_query_callback: FinalizeQueryCallback,
|
||||||
|
touches_buffer: *mut PxOverlapHit,
|
||||||
|
num_touches: u32,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxOverlapCallback;
|
||||||
|
|
||||||
|
pub fn delete_raycast_callback(callback: *mut PxRaycastCallback);
|
||||||
|
pub fn delete_sweep_callback(callback: *mut PxSweepCallback);
|
||||||
|
pub fn delete_overlap_callback(callback: *mut PxOverlapCallback);
|
||||||
|
|
||||||
|
pub fn create_alloc_callback(
|
||||||
|
alloc_callback: AllocCallback,
|
||||||
|
dealloc_callback: DeallocCallback,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxAllocatorCallback;
|
||||||
|
|
||||||
|
pub fn create_profiler_callback(
|
||||||
|
zone_start_callback: ZoneStartCallback,
|
||||||
|
zone_end_callback: ZoneEndCallback,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxProfilerCallback;
|
||||||
|
|
||||||
|
pub fn get_alloc_callback_user_data(alloc_callback: *mut PxAllocatorCallback) -> *mut c_void;
|
||||||
|
|
||||||
|
pub fn create_error_callback(
|
||||||
|
error_callback: ErrorCallback,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxErrorCallback;
|
||||||
|
|
||||||
|
pub fn create_assert_handler(
|
||||||
|
error_callback: AssertHandler,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxAssertHandler;
|
||||||
|
|
||||||
|
pub fn get_default_simulation_filter_shader() -> *mut c_void;
|
||||||
|
|
||||||
|
/// Create a C++ proxy callback which will forward contact events to `Callback`.
|
||||||
|
/// The returned pointer must be freed by calling `destroy_contact_callback` when done using.
|
||||||
|
#[deprecated]
|
||||||
|
pub fn create_contact_callback(
|
||||||
|
callback: CollisionCallback,
|
||||||
|
userdata: *mut c_void,
|
||||||
|
) -> *mut PxSimulationEventCallback;
|
||||||
|
/// Deallocates the PxSimulationEventCallback that has previously been created
|
||||||
|
#[deprecated()]
|
||||||
|
pub fn destroy_contact_callback(callback: *mut PxSimulationEventCallback);
|
||||||
|
|
||||||
|
/// New interface to handle simulation events, replacing create_contact_callback.
|
||||||
|
pub fn create_simulation_event_callbacks(
|
||||||
|
callbacks: *const SimulationEventCallbackInfo,
|
||||||
|
) -> *mut PxSimulationEventCallback;
|
||||||
|
|
||||||
|
pub fn get_simulation_event_info(
|
||||||
|
callback: *mut PxSimulationEventCallback,
|
||||||
|
) -> *mut SimulationEventCallbackInfo;
|
||||||
|
|
||||||
|
pub fn destroy_simulation_event_callbacks(callback: *mut PxSimulationEventCallback);
|
||||||
|
|
||||||
|
/// Override the default filter shader in the scene with a custom function.
|
||||||
|
/// If call_default_filter_shader_first is set to true, this will first call the
|
||||||
|
/// built-in PhysX filter (that matches Physx 2.8 behavior) before your callback.
|
||||||
|
pub fn enable_custom_filter_shader(
|
||||||
|
scene_desc: *mut PxSceneDesc,
|
||||||
|
shader: SimulationFilterShader,
|
||||||
|
call_default_filter_shader_first: u32,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
/// Should only be used in testing etc! This isn't generated as we don't generate op functions.
|
||||||
|
pub fn PxAssertHandler_opCall_mut(
|
||||||
|
self_: *mut PxAssertHandler,
|
||||||
|
expr: *const i8,
|
||||||
|
file: *const i8,
|
||||||
|
line: i32,
|
||||||
|
ignore: *mut bool,
|
||||||
|
) -> ();
|
||||||
|
}
|
14250
csbindgen-tests/src/physx/physx_generated.rs
vendored
Normal file
14250
csbindgen-tests/src/physx/physx_generated.rs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2815
csbindgen-tests/src/physx/unix/structgen.rs
vendored
Normal file
2815
csbindgen-tests/src/physx/unix/structgen.rs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2822
csbindgen-tests/src/physx/x86_64-pc-windows-msvc/structgen.rs
vendored
Normal file
2822
csbindgen-tests/src/physx/x86_64-pc-windows-msvc/structgen.rs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -12,7 +12,7 @@ pub struct Builder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct BindgenOptions {
|
pub struct BindgenOptions {
|
||||||
pub input_bindgen_file: String,
|
pub input_bindgen_files: Vec<String>,
|
||||||
pub input_extern_files: Vec<String>,
|
pub input_extern_files: Vec<String>,
|
||||||
pub method_filter: fn(method_name: String) -> bool,
|
pub method_filter: fn(method_name: String) -> bool,
|
||||||
pub rust_method_type_path: String,
|
pub rust_method_type_path: String,
|
||||||
@ -33,7 +33,7 @@ impl Default for Builder {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
options: BindgenOptions {
|
options: BindgenOptions {
|
||||||
input_bindgen_file: "".to_string(),
|
input_bindgen_files: vec![],
|
||||||
input_extern_files: vec![],
|
input_extern_files: vec![],
|
||||||
method_filter: |x| !x.starts_with('_'),
|
method_filter: |x| !x.starts_with('_'),
|
||||||
rust_method_type_path: "".to_string(),
|
rust_method_type_path: "".to_string(),
|
||||||
@ -60,7 +60,9 @@ impl Builder {
|
|||||||
|
|
||||||
/// Change an input .rs file(such as generated from bindgen) to generate binding.
|
/// Change an input .rs file(such as generated from bindgen) to generate binding.
|
||||||
pub fn input_bindgen_file<T: Into<String>>(mut self, input_bindgen_file: T) -> Builder {
|
pub fn input_bindgen_file<T: Into<String>>(mut self, input_bindgen_file: T) -> Builder {
|
||||||
self.options.input_bindgen_file = input_bindgen_file.into();
|
self.options
|
||||||
|
.input_bindgen_files
|
||||||
|
.push(input_bindgen_file.into());
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,7 +167,7 @@ impl Builder {
|
|||||||
&self,
|
&self,
|
||||||
csharp_output_path: P,
|
csharp_output_path: P,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
if !self.options.input_bindgen_file.is_empty() {
|
if !self.options.input_bindgen_files.is_empty() {
|
||||||
let (_, csharp) = generate(GenerateKind::InputBindgen, &self.options)?;
|
let (_, csharp) = generate(GenerateKind::InputBindgen, &self.options)?;
|
||||||
|
|
||||||
let mut csharp_file = make_file(csharp_output_path.as_ref())?;
|
let mut csharp_file = make_file(csharp_output_path.as_ref())?;
|
||||||
@ -189,7 +191,7 @@ impl Builder {
|
|||||||
rust_output_path: P,
|
rust_output_path: P,
|
||||||
csharp_output_path: P,
|
csharp_output_path: P,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
if !self.options.input_bindgen_file.is_empty() {
|
if !self.options.input_bindgen_files.is_empty() {
|
||||||
let (rust, csharp) = generate(GenerateKind::InputBindgen, &self.options)?;
|
let (rust, csharp) = generate(GenerateKind::InputBindgen, &self.options)?;
|
||||||
|
|
||||||
if let Some(rust) = rust {
|
if let Some(rust) = rust {
|
||||||
|
@ -25,9 +25,8 @@ pub(crate) fn generate(
|
|||||||
generate_kind: GenerateKind,
|
generate_kind: GenerateKind,
|
||||||
options: &BindgenOptions,
|
options: &BindgenOptions,
|
||||||
) -> Result<(Option<String>, String), Box<dyn Error>> {
|
) -> Result<(Option<String>, String), Box<dyn Error>> {
|
||||||
let temp_input = [options.input_bindgen_file.clone()];
|
|
||||||
let (paths, generate_rust) = match generate_kind {
|
let (paths, generate_rust) = match generate_kind {
|
||||||
GenerateKind::InputBindgen => (temp_input.as_slice(), true),
|
GenerateKind::InputBindgen => (options.input_bindgen_files.as_slice(), true),
|
||||||
GenerateKind::InputExtern => (options.input_extern_files.as_slice(), false),
|
GenerateKind::InputExtern => (options.input_extern_files.as_slice(), false),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
10738
dotnet-sandbox/libphysx_csbindgen.cs
vendored
Normal file
10738
dotnet-sandbox/libphysx_csbindgen.cs
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -43,7 +43,7 @@ MonoBehaviour:
|
|||||||
width: 1953
|
width: 1953
|
||||||
height: 1546
|
height: 1546
|
||||||
m_ShowMode: 4
|
m_ShowMode: 4
|
||||||
m_Title: Game
|
m_Title: Console
|
||||||
m_RootView: {fileID: 11}
|
m_RootView: {fileID: 11}
|
||||||
m_MinSize: {x: 875, y: 300}
|
m_MinSize: {x: 875, y: 300}
|
||||||
m_MaxSize: {x: 10000, y: 10000}
|
m_MaxSize: {x: 10000, y: 10000}
|
||||||
@ -97,7 +97,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 640, y: 601}
|
m_MinSize: {x: 640, y: 601}
|
||||||
m_MaxSize: {x: 4000, y: 4021}
|
m_MaxSize: {x: 4000, y: 4021}
|
||||||
vertical: 0
|
vertical: 0
|
||||||
controlID: 2323
|
controlID: 123
|
||||||
--- !u!114 &5
|
--- !u!114 &5
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -148,7 +148,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 200, y: 100}
|
m_MinSize: {x: 200, y: 100}
|
||||||
m_MaxSize: {x: 16192, y: 8096}
|
m_MaxSize: {x: 16192, y: 8096}
|
||||||
vertical: 0
|
vertical: 0
|
||||||
controlID: 24
|
controlID: 231
|
||||||
--- !u!114 &7
|
--- !u!114 &7
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -173,7 +173,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 300, y: 200}
|
m_MinSize: {x: 300, y: 200}
|
||||||
m_MaxSize: {x: 24288, y: 16192}
|
m_MaxSize: {x: 24288, y: 16192}
|
||||||
vertical: 0
|
vertical: 0
|
||||||
controlID: 17
|
controlID: 108
|
||||||
--- !u!114 &8
|
--- !u!114 &8
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -193,8 +193,8 @@ MonoBehaviour:
|
|||||||
y: 0
|
y: 0
|
||||||
width: 456
|
width: 456
|
||||||
height: 1496
|
height: 1496
|
||||||
m_MinSize: {x: 276, y: 71}
|
m_MinSize: {x: 275, y: 50}
|
||||||
m_MaxSize: {x: 4001, y: 4021}
|
m_MaxSize: {x: 4000, y: 4000}
|
||||||
m_ActualView: {fileID: 20}
|
m_ActualView: {fileID: 20}
|
||||||
m_Panes:
|
m_Panes:
|
||||||
- {fileID: 20}
|
- {fileID: 20}
|
||||||
@ -236,7 +236,7 @@ MonoBehaviour:
|
|||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 1
|
m_EditorHideFlags: 1
|
||||||
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
|
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
m_Name: ProjectSettingsWindow
|
m_Name: ConsoleWindow
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Position:
|
m_Position:
|
||||||
@ -245,14 +245,14 @@ MonoBehaviour:
|
|||||||
y: 0
|
y: 0
|
||||||
width: 997
|
width: 997
|
||||||
height: 608
|
height: 608
|
||||||
m_MinSize: {x: 311, y: 221}
|
m_MinSize: {x: 101, y: 121}
|
||||||
m_MaxSize: {x: 4001, y: 4021}
|
m_MaxSize: {x: 4001, y: 4021}
|
||||||
m_ActualView: {fileID: 18}
|
m_ActualView: {fileID: 24}
|
||||||
m_Panes:
|
m_Panes:
|
||||||
- {fileID: 24}
|
- {fileID: 24}
|
||||||
- {fileID: 18}
|
- {fileID: 18}
|
||||||
m_Selected: 1
|
m_Selected: 0
|
||||||
m_LastSelected: 0
|
m_LastSelected: 1
|
||||||
--- !u!114 &11
|
--- !u!114 &11
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -348,7 +348,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 200, y: 200}
|
m_MinSize: {x: 200, y: 200}
|
||||||
m_MaxSize: {x: 16192, y: 16192}
|
m_MaxSize: {x: 16192, y: 16192}
|
||||||
vertical: 1
|
vertical: 1
|
||||||
controlID: 123
|
controlID: 109
|
||||||
--- !u!114 &15
|
--- !u!114 &15
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -373,7 +373,7 @@ MonoBehaviour:
|
|||||||
m_MinSize: {x: 200, y: 100}
|
m_MinSize: {x: 200, y: 100}
|
||||||
m_MaxSize: {x: 16192, y: 8096}
|
m_MaxSize: {x: 16192, y: 8096}
|
||||||
vertical: 0
|
vertical: 0
|
||||||
controlID: 124
|
controlID: 110
|
||||||
--- !u!114 &16
|
--- !u!114 &16
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 52
|
m_ObjectHideFlags: 52
|
||||||
@ -560,9 +560,9 @@ MonoBehaviour:
|
|||||||
m_IsLocked: 0
|
m_IsLocked: 0
|
||||||
m_FolderTreeState:
|
m_FolderTreeState:
|
||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs: b65f0000
|
m_SelectedIDs: de5f0000
|
||||||
m_LastClickedID: 24502
|
m_LastClickedID: 24542
|
||||||
m_ExpandedIDs: 00000000b65f000000ca9a3bffffff7f
|
m_ExpandedIDs: 00000000de5f000000ca9a3bffffff7f
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name:
|
m_Name:
|
||||||
@ -590,7 +590,7 @@ MonoBehaviour:
|
|||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs:
|
m_SelectedIDs:
|
||||||
m_LastClickedID: 0
|
m_LastClickedID: 0
|
||||||
m_ExpandedIDs: 00000000b65f0000
|
m_ExpandedIDs: 00000000de5f0000
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name:
|
m_Name:
|
||||||
@ -617,7 +617,7 @@ MonoBehaviour:
|
|||||||
m_ListAreaState:
|
m_ListAreaState:
|
||||||
m_SelectedInstanceIDs:
|
m_SelectedInstanceIDs:
|
||||||
m_LastClickedInstanceID: 0
|
m_LastClickedInstanceID: 0
|
||||||
m_HadKeyboardFocusLastEvent: 1
|
m_HadKeyboardFocusLastEvent: 0
|
||||||
m_ExpandedInstanceIDs: c6230000
|
m_ExpandedInstanceIDs: c6230000
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
@ -720,21 +720,21 @@ MonoBehaviour:
|
|||||||
scrollPos: {x: 0, y: 0}
|
scrollPos: {x: 0, y: 0}
|
||||||
m_SelectedIDs:
|
m_SelectedIDs:
|
||||||
m_LastClickedID: 0
|
m_LastClickedID: 0
|
||||||
m_ExpandedIDs: 6ccbffffb6cbffff16cdffff84cfffffcecfffff2ed1ffff2cd5ffff76d5ffffd6d6ffff2ad9ffff74d9ffffd4daffff1eddffff68ddffffc8deffff24e1ffff6ee1ffffcee2ffff74e6ffffbee6ffff1ee8ffff26eaffff70eaffffd0ebfffffcf3ffff8af4ffffccf4ffff3af6ffff22fbffff78780000
|
m_ExpandedIDs: 18d4ffff60d4ffffc0d5ffff12d8ffff5ad8ffffbad9ffff04dcffff4cdcffffacddfffff6dfffff3ee0ffff58e0ffff00e1ffff48e1ffffa8e2ffff90e6ffffd8e6ffff38e8ffff5cebffffa4ebffff04edffff2afbffff
|
||||||
m_RenameOverlay:
|
m_RenameOverlay:
|
||||||
m_UserAcceptedRename: 0
|
m_UserAcceptedRename: 0
|
||||||
m_Name: Text (Legacy)
|
m_Name:
|
||||||
m_OriginalName: Text (Legacy)
|
m_OriginalName:
|
||||||
m_EditFieldRect:
|
m_EditFieldRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
y: 0
|
y: 0
|
||||||
width: 0
|
width: 0
|
||||||
height: 0
|
height: 0
|
||||||
m_UserData: -3120
|
m_UserData: 0
|
||||||
m_IsWaitingForDelay: 0
|
m_IsWaitingForDelay: 0
|
||||||
m_IsRenaming: 0
|
m_IsRenaming: 0
|
||||||
m_OriginalEventType: 4
|
m_OriginalEventType: 11
|
||||||
m_IsRenamingFilename: 0
|
m_IsRenamingFilename: 0
|
||||||
m_ClientGUIView: {fileID: 9}
|
m_ClientGUIView: {fileID: 9}
|
||||||
m_SearchString:
|
m_SearchString:
|
||||||
@ -991,9 +991,9 @@ MonoBehaviour:
|
|||||||
m_PlayAudio: 0
|
m_PlayAudio: 0
|
||||||
m_AudioPlay: 0
|
m_AudioPlay: 0
|
||||||
m_Position:
|
m_Position:
|
||||||
m_Target: {x: 639.1462, y: 631.1552, z: -5.5470376}
|
m_Target: {x: 499.8913, y: 522.92053, z: 0}
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: {x: 639.1462, y: 631.1552, z: -5.5470376}
|
m_Value: {x: 499.8913, y: 522.92053, z: 0}
|
||||||
m_RenderMode: 0
|
m_RenderMode: 0
|
||||||
m_CameraMode:
|
m_CameraMode:
|
||||||
drawMode: 0
|
drawMode: 0
|
||||||
@ -1044,9 +1044,9 @@ MonoBehaviour:
|
|||||||
speed: 2
|
speed: 2
|
||||||
m_Value: {x: 0, y: 0, z: 0, w: 1}
|
m_Value: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_Size:
|
m_Size:
|
||||||
m_Target: 636.09985
|
m_Target: 494.99554
|
||||||
speed: 2
|
speed: 2
|
||||||
m_Value: 636.09985
|
m_Value: 494.99554
|
||||||
m_Ortho:
|
m_Ortho:
|
||||||
m_Target: 1
|
m_Target: 1
|
||||||
speed: 2
|
speed: 2
|
||||||
|
Loading…
Reference in New Issue
Block a user