| Uint32 | version | このインターフェースのバージョン |
| Uint16 | type | SDL_JoystickType |
| Uint16 | padding | 未使用 |
| Uint16 | vendor_id | このジョイスティックのUSBベンダーID |
| Uint16 | product_id | このジョイスティックのUSBプロダクトID |
| Uint16 | naxes | このジョイスティックの方向の数 |
| Uint16 | nbuttons | このジョイスティックのボタンの数 |
| Uint16 | nballs | このジョイスティックのトラックボールの数 |
| Uint16 | nhats | このジョイスティックのハットの数 |
| Uint16 | ntouchpads | このジョイスティックのタッチパッドの数. touchpadsが有効な定義へのポインタである必要がある |
| Uint16 | nsensors | このジョイスティックのセンサーの数. sensorsが有効な定義へのポインタである必要がある |
| Uint16 | padding2[2] | 未使用 |
| Uint32 | button_mask | このコントローラーで有効なボタンのマスク 例: (1 << SDL_GAMEPAD_BUTTON_SOUTH) |
| Uint32 | axis_mask | このコントローラーで有効な方向のマスク 例: (1 << SDL_GAMEPAD_AXIS_LEFTX) |
| const char * | name | ジョイスティックの名前 |
| const SDL_VirtualJoystickTouchpadDesc * | touchpads | タッチパッドの定義の配列へのポインタ. ntouchpads > 0の場合に必要 |
| const SDL_VirtualJoystickSensorDesc * | sensors | センサーの定義の配列へのポインタ. nsensors > 0の場合に必要 |
| void * | userdata | コールバックに渡されるユーザデータへのポインタ |
| void (SDLCALL *)(void *userdata) | Update | ジョイスティックの状態を更新する必要があるとき呼ばれるコールバック |
| void (SDLCALL *)(void *userdata, int player_index) | SetPlayerIndex | プレイヤーインデックス番号が設定されたとき呼ばれるコールバック |
| bool (SDLCALL *)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) | Rumble | SDL_RumbleJoystick()の実装 |
| bool (SDLCALL *)(void *userdata, Uint16 left_rumble, Uint16 right_rumble) | RumbleTriggers | SDL_RumbleJoystickTriggers()の実装 |
| bool (SDLCALL *)(void *userdata, Uint8 red, Uint8 green, Uint8 blue) | SetLED | SDL_SetJoystickLED()の実装 |
| bool (SDLCALL *)(void *userdata, const void *data, int size) | SendEffect | SDL_SendJoystickEffect()の実装 |
| bool (SDLCALL *)(void *userdata, bool enabled) | SetSensorsEnabled | SDL_SetGamepadSensorEnabled()の実装 |
| void (SDLCALL *)(void *userdata) | Cleanup | ジョイスティックが切断されたときuserdataを解放するためのコールバック |
この構造体はSDL_INIT_INTERFACE()で初期化する必要がある. 構造体の全ての要素は任意である.