Avril
e5c3f0deb0
|
4 years ago | |
---|---|---|
src | 4 years ago | |
.gitignore | 4 years ago | |
Cargo.toml | 4 years ago | |
README.org | 4 years ago | |
build.rs | 4 years ago |
README.org
GHOST Rust bindings
Rust bindings and interop for GHOST.
Layout
ABI-compatable types and functions are all prefixed with `GHOST_` and are exported in the `c` module (TODO). I've attempted to provide more Rust-idiomatic API variants as well, which have non-prefixed names.
Implementation log
Implemented C compatable ABI
Note: List is in-progress and doesn't show everything
-
`GHOST_Types.h`
-
Handles
- GHOST_SystemHandle
- GHOST_TimerTaskHandle
- GHOST_WindowHandle
- GHOST_EventHandle
- GHOST_RectangleHandle
- GHOST_EventConsumerHandle
- GHOST_ContextHandle
- GHOST_XrContextHandle
-
Primitives (ones that begin with
T
I count as `primitive')- GHOST_TInt8
- GHOST_TUns8
- GHOST_Tint16
- GHOST_TUns16
- GHOST_Tint32
- GHOST_TUns32
- GHOST_TInt64
- GHOST_TUns64
- GHOST_TUserDataPtr
- GHOST_TSuccess
- GHOST_TTabletMode
- GHOST_TTabletAPI
- GHOST_TVisibility
- GHOST_TFireTimeConstant
- GHOST_TModifierKeyMask
- GHOST_TWindowState
- GHOST_TWindowOrder
- GHOST_TDrawingContextType
- GHOST_TButtonMask
- GHOST_TEventType
- GHOST_TStandardCursor
- GHOST_TKey
-
Structures
- GHOST_GLSettings
- GHOST_GLFlags
- GHOST_DialogOptions
- GHOST_TabletData
-
Constants
-
GHOST_TABLET_DATA_NONE
- reimpl as
const fn
(GHOST_TabletData::none()
)
- reimpl as
-
-
Native Rust API
I provide more Rust idiomatic API for some things. They may or may not share ABI, if they do they will have type aliases to the corresponding GHOST_
identifier, so always use those when ABI compatability is desired.
Overview
List and implementation status of features
-
Types
- /flanchan/ghost-rust/src/commit/e5c3f0deb04e67e5e1865f38b27d8a8402381ff1/Handles:
handle.rs
- Events:
event.rs
- /flanchan/ghost-rust/src/commit/e5c3f0deb04e67e5e1865f38b27d8a8402381ff1/Handles:
Handles
Handles keep the C ABI, but are re-wrtten with traits to be more idiomatic.
The trait GhostHandle
is provided, which should be implemented on a structure that is not intended to be instantiated, but instead used as a `marker' for `Handle<T>'.
These types are ABI equivalent, and are present (with their corresponding GHOST_
alias in handle.rs
)
Since handles are just types pointers, they are only ever used as such and shouldn't exist themselves.
Example
extern "C" unsafe fn internal_call(window: GHOST_WindowHandle) -> GHOST_TSuccess;
fn do_something_to_window(window: &mut Handle<Window>) -> Result<()>
{
unsafe {
internal_call(window as GHOST_WindowHandle).into()
}
}