Module haptic
Available on crate feature
dep_sdl3
only.Expand description
The SDL haptic subsystem manages haptic (force feedback) devices.
The basic usage is as follows:
- Initialize the subsystem ([
SDL_INIT_HAPTIC
]). - Open a haptic device.
SDL_OpenHaptic()
to open from index.SDL_OpenHapticFromJoystick()
to open from an existing joystick.- Create an effect (
SDL_HapticEffect
). - Upload the effect with
SDL_CreateHapticEffect()
. - Run the effect with
SDL_RunHapticEffect()
. - (optional) Free the effect with
SDL_DestroyHapticEffect()
. - Close the haptic device with
SDL_CloseHaptic()
.
Simple rumble example:
SDL_Haptic *haptic = NULL;
// Open the device
SDL_HapticID *haptics = SDL_GetHaptics(NULL);
if (haptics) {
haptic = SDL_OpenHaptic(haptics[0]);
SDL_free(haptics);
}
if (haptic == NULL)
return;
// Initialize simple rumble
if (!SDL_InitHapticRumble(haptic))
return;
// Play effect at 50% strength for 2 seconds
if (!SDL_PlayHapticRumble(haptic, 0.5, 2000))
return;
SDL_Delay(2000);
// Clean up
SDL_CloseHaptic(haptic);
Complete example:
bool test_haptic(SDL_Joystick *joystick)
{
SDL_Haptic *haptic;
SDL_HapticEffect effect;
int effect_id;
// Open the device
haptic = SDL_OpenHapticFromJoystick(joystick);
if (haptic == NULL) return false; // Most likely joystick isn't haptic
// See if it can do sine waves
if ((SDL_GetHapticFeatures(haptic) & SDL_HAPTIC_SINE)==0) {
SDL_CloseHaptic(haptic); // No sine effect
return false;
}
// Create the effect
SDL_memset(&effect, 0, sizeof(SDL_HapticEffect)); // 0 is safe default
effect.type = SDL_HAPTIC_SINE;
effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates
effect.periodic.direction.dir[0] = 18000; // Force comes from south
effect.periodic.period = 1000; // 1000 ms
effect.periodic.magnitude = 20000; // 20000/32767 strength
effect.periodic.length = 5000; // 5 seconds long
effect.periodic.attack_length = 1000; // Takes 1 second to get max strength
effect.periodic.fade_length = 1000; // Takes 1 second to fade away
// Upload the effect
effect_id = SDL_CreateHapticEffect(haptic, &effect);
// Test the effect
SDL_RunHapticEffect(haptic, effect_id, 1);
SDL_Delay(5000); // Wait for the effect to finish
// We destroy the effect, although closing the device also does this
SDL_DestroyHapticEffect(haptic, effect_id);
// Close the device
SDL_CloseHaptic(haptic);
return true; // Success
}
Note that the SDL haptic subsystem is not thread-safe.
Structs§
- SDL_
Haptic - The haptic structure used to identify an SDL haptic.
- SDL_
Haptic Condition - A structure containing a template for a Condition effect.
- SDL_
Haptic Constant - A structure containing a template for a Constant effect.
- SDL_
Haptic Custom - A structure containing a template for the
SDL_HAPTIC_CUSTOM
effect. - SDL_
Haptic Direction - Structure that represents a haptic direction.
- SDL_
Haptic Left Right - A structure containing a template for a Left/Right effect.
- SDL_
Haptic Periodic - A structure containing a template for a Periodic effect.
- SDL_
Haptic Ramp - A structure containing a template for a Ramp effect.
Constants§
- SDL_
HAPTIC_ AUTOCENTER - Device can set autocenter.
- SDL_
HAPTIC_ CARTESIAN - Uses cartesian coordinates for the direction.
- SDL_
HAPTIC_ CONSTANT - Constant effect supported.
- SDL_
HAPTIC_ CUSTOM - Custom effect is supported.
- SDL_
HAPTIC_ DAMPER - Damper effect supported - uses axes velocity.
- SDL_
HAPTIC_ FRICTION - Friction effect supported - uses axes movement.
- SDL_
HAPTIC_ GAIN - Device can set global gain.
- SDL_
HAPTIC_ INERTIA - Inertia effect supported - uses axes acceleration.
- SDL_
HAPTIC_ INFINITY - Used to play a device an infinite number of times.
- SDL_
HAPTIC_ LEFTRIGHT - Left/Right effect supported.
- SDL_
HAPTIC_ PAUSE - Device can be paused.
- SDL_
HAPTIC_ POLAR - Uses polar coordinates for the direction.
- SDL_
HAPTIC_ RAMP - Ramp effect supported.
- SDL_
HAPTIC_ RESERVE D1 - Reserved for future use.
- SDL_
HAPTIC_ RESERVE D2 - Reserved for future use.
- SDL_
HAPTIC_ RESERVE D3 - Reserved for future use.
- SDL_
HAPTIC_ SAWTOOTHDOWN - Sawtoothdown wave effect supported.
- SDL_
HAPTIC_ SAWTOOTHUP - Sawtoothup wave effect supported.
- SDL_
HAPTIC_ SINE - Sine wave effect supported.
- SDL_
HAPTIC_ SPHERICAL - Uses spherical coordinates for the direction.
- SDL_
HAPTIC_ SPRING - Spring effect supported - uses axes position.
- SDL_
HAPTIC_ SQUARE - Square wave effect supported.
- SDL_
HAPTIC_ STATUS - Device can be queried for effect status.
- SDL_
HAPTIC_ STEERING_ AXIS - Use this value to play an effect on the steering wheel axis.
- SDL_
HAPTIC_ TRIANGLE - Triangle wave effect supported.
Functions§
- SDL_
Close ⚠Haptic - Close a haptic device previously opened with
SDL_OpenHaptic()
. - SDL_
Create ⚠Haptic Effect - Create a new haptic effect on a specified device.
- SDL_
Destroy ⚠Haptic Effect - Destroy a haptic effect on the device.
- SDL_
GetHaptic ⚠Effect Status - Get the status of the current effect on the specified haptic device.
- SDL_
GetHaptic ⚠Features - Get the haptic device’s supported features in bitwise manner.
- SDL_
GetHaptic ⚠FromID - Get the
SDL_Haptic
associated with an instance ID, if it has been opened. - SDL_
GetHapticID ⚠ - Get the instance ID of an opened haptic device.
- SDL_
GetHaptic ⚠Name - Get the implementation dependent name of a haptic device.
- SDL_
GetHaptic ⚠Name ForID - Get the implementation dependent name of a haptic device.
- SDL_
GetHaptics ⚠ - Get a list of currently connected haptic devices.
- SDL_
GetMax ⚠Haptic Effects - Get the number of effects a haptic device can store.
- SDL_
GetMax ⚠Haptic Effects Playing - Get the number of effects a haptic device can play at the same time.
- SDL_
GetNum ⚠Haptic Axes - Get the number of haptic axes the device has.
- SDL_
Haptic ⚠Effect Supported - Check to see if an effect is supported by a haptic device.
- SDL_
Haptic ⚠Rumble Supported - Check whether rumble is supported on a haptic device.
- SDL_
Init ⚠Haptic Rumble - Initialize a haptic device for simple rumble playback.
- SDL_
IsJoystick ⚠Haptic - Query if a joystick has haptic features.
- SDL_
IsMouse ⚠Haptic - Query whether or not the current mouse has haptic capabilities.
- SDL_
Open ⚠Haptic - Open a haptic device for use.
- SDL_
Open ⚠Haptic From Joystick - Open a haptic device for use from a joystick device.
- SDL_
Open ⚠Haptic From Mouse - Try to open a haptic device from the current mouse.
- SDL_
Pause ⚠Haptic - Pause a haptic device.
- SDL_
Play ⚠Haptic Rumble - Run a simple rumble effect on a haptic device.
- SDL_
Resume ⚠Haptic - Resume a haptic device.
- SDL_
RunHaptic ⚠Effect - Run the haptic effect on its associated haptic device.
- SDL_
SetHaptic ⚠Autocenter - Set the global autocenter of the device.
- SDL_
SetHaptic ⚠Gain - Set the global gain of the specified haptic device.
- SDL_
Stop ⚠Haptic Effect - Stop the haptic effect on its associated haptic device.
- SDL_
Stop ⚠Haptic Effects - Stop all the currently playing effects on a haptic device.
- SDL_
Stop ⚠Haptic Rumble - Stop the simple rumble on a haptic device.
- SDL_
Update ⚠Haptic Effect - Update the properties of an effect.
Type Aliases§
- SDL_
HapticID - This is a unique ID for a haptic device for the time it is connected to the system, and is never reused for the lifetime of the application.
Unions§
- SDL_
Haptic Effect - The generic template for any haptic effect.