Index: head/emulators/ppsspp/Makefile =================================================================== --- head/emulators/ppsspp/Makefile (revision 470889) +++ head/emulators/ppsspp/Makefile (revision 470890) @@ -1,93 +1,99 @@ # $FreeBSD$ PORTNAME= ppsspp DISTVERSIONPREFIX= v -DISTVERSION?= 1.5.4 -PORTREVISION?= 1 +DISTVERSION?= 1.6 +PORTREVISION?= 0 CATEGORIES= emulators # XXX Get from Debian once #697821 lands MASTER_SITES= https://bazaar.launchpad.net/~sergio-br2/${PORTNAME}/debian-sdl/download/5/${PORTNAME}.1-20140802045408-dd26dik367ztj5xg-8/:manpage DISTFILES= ${PORTNAME}.1:manpage EXTRACT_ONLY= ${DISTFILES:N*\:manpage:C/:.*//} -PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/ -PATCHFILES= 70c54a7d1ab1.patch:-p1 - MAINTAINER= jbeich@FreeBSD.org COMMENT= PSP emulator in C++ with dynarec JIT for x86, ARM, MIPS LICENSE= GPLv2+ LIB_DEPENDS= libzip.so:archivers/libzip \ libsnappy.so:archivers/snappy \ libavcodec.so:multimedia/ffmpeg RUN_DEPENDS= xdg-open:devel/xdg-utils USE_GITHUB= yes GH_ACCOUNT= hrydgard GH_TUPLE?= hrydgard:glslang:2edde666:glslang/ext/glslang \ - hrydgard:${PORTNAME}-lang:1e3e4a0:lang/assets/lang \ + hrydgard:${PORTNAME}-lang:c2c4ad9:lang/assets/lang \ KhronosGroup:SPIRV-Cross:90966d5:SPIRV/ext/SPIRV-Cross \ Kingcom:armips:v0.9-89-g8b4cada:armips/ext/armips \ Kingcom:tinyformat:Release-2.0.1-7-gb7f5a22:tinyformat/ext/armips/ext/tinyformat CONFLICTS_INSTALL= ${PORTNAME}-* USES= cmake:outsource compiler:c++11-lib localbase:ldflags pkgconfig EXCLUDE= libzip zlib EXTRACT_AFTER_ARGS=${EXCLUDE:S,^,--exclude ,} USE_GL= gl glew glu USE_SDL= sdl2 # joystick -CMAKE_ON= USE_SYSTEM_FFMPEG +CMAKE_ON= USE_SYSTEM_FFMPEG USE_SYSTEM_LIBZIP CMAKE_OFF= USING_EGL SUB_FILES= pkg-message PORTDATA= assets ${PORTNAME} DESKTOP_ENTRIES="PPSSPP" \ "" \ "${PORTNAME}" \ "${PORTNAME} %f" \ "Game;Emulator;" \ "" OPTIONS_DEFINE= OLDJOY OPTIONS_SINGLE= GUI OPTIONS_SINGLE_GUI= QT5 SDL -OPTIONS_SLAVE?= SDL +OPTIONS_SLAVE?= LIBRETRO SDL OPTIONS_EXCLUDE:= ${OPTIONS_SINGLE_GUI} +LIBRETRO_DESC= libretro core for games/retroarch +LIBRETRO_CMAKE_BOOL= LIBRETRO +LIBRETRO_PLIST_FILES= lib/libretro/${PORTNAME}_libretro.so +LIBRETRO_IMPLIES= SDL OLDJOY_DESC= Old joystick support with fixed button mappings (deprecated) OLDJOY_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-old-joy QT5_USE= QT5=qmake_build,buildtools_build,linguisttools_build,gui,opengl,widgets QT5_CMAKE_BOOL= USING_QT_UI QT5_VARS= EXENAME=PPSSPPQt SDL_BUILD_DEPENDS= png>=1.6:graphics/png SDL_LIB_DEPENDS= libpng.so:graphics/png SDL_VARS= EXENAME=PPSSPPSDL post-patch: @${REINPLACE_CMD} -e 's/Linux/${OPSYS}/' \ ${WRKSRC}/assets/gamecontrollerdb.txt @${REINPLACE_CMD} -e 's,/usr/share,${PREFIX}/share,' \ ${WRKSRC}/UI/NativeApp.cpp @${REINPLACE_CMD} -e 's/"unknown"/"${GH_TAGNAME}"/' \ ${WRKSRC}/git-version.cmake do-install: # cmake doesn't pack assets into the app unlike qmake (cd ${INSTALL_WRKSRC} && ${COPYTREE_SHARE} \ "${PORTDATA:N${PORTNAME}}" ${STAGEDIR}${DATADIR}) # Install the app alongside assets to avoid warnings with GetExeDirectory() ${INSTALL_PROGRAM} ${INSTALL_WRKSRC}/${EXENAME} \ ${STAGEDIR}${DATADIR}/${PORTNAME} ${LN} -sf ../${DATADIR_REL}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin ${INSTALL_MAN} ${_DISTDIR}/${PORTNAME}.1 \ ${STAGEDIR}${MAN1PREFIX}/man/man1 (cd ${WRKSRC}/icons && ${COPYTREE_SHARE} \ "hicolor" ${STAGEDIR}${PREFIX}/share/icons) ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps ${INSTALL_DATA} ${WRKSRC}/icons/icon-512.svg \ ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps/${PORTNAME}.svg + +do-install-LIBRETRO-on: + ${MKDIR} ${STAGEDIR}${PREFIX}/${LIBRETRO_PLIST_FILES:H} + ${INSTALL_LIB} ${BUILD_WRKSRC}/lib/${LIBRETRO_PLIST_FILES:T} \ + ${STAGEDIR}${PREFIX}/${LIBRETRO_PLIST_FILES:H} .include Index: head/emulators/ppsspp/distinfo =================================================================== --- head/emulators/ppsspp/distinfo (revision 470889) +++ head/emulators/ppsspp/distinfo (revision 470890) @@ -1,17 +1,15 @@ -TIMESTAMP = 1512481911 +TIMESTAMP = 1527337592 SHA256 (ppsspp.1) = 64a7cca4c3a5fc6ad5b63399edef9056b0c85ea68fed00fb7e97f4b2724e503b SIZE (ppsspp.1) = 1598 -SHA256 (hrydgard-ppsspp-v1.5.4_GH0.tar.gz) = e739155f135f9b3e2e5ce85d0cc11028c4ad71a0078673abe3f908ac6875284a -SIZE (hrydgard-ppsspp-v1.5.4_GH0.tar.gz) = 19008538 +SHA256 (hrydgard-ppsspp-v1.6_GH0.tar.gz) = d5f7f10b0d39cd927c08bb296a22c9b724ce40f8cc0be17136ff845f33b7ffa5 +SIZE (hrydgard-ppsspp-v1.6_GH0.tar.gz) = 19472093 SHA256 (hrydgard-glslang-2edde666_GH0.tar.gz) = 9ab09c2aa5a89b2c32297358d25850bec56667aa28fdfe6986fbedd1ced28e78 SIZE (hrydgard-glslang-2edde666_GH0.tar.gz) = 1941913 -SHA256 (hrydgard-ppsspp-lang-1e3e4a0_GH0.tar.gz) = 9b4f7356c5e17de9910a70f82d7ea5593db6d8b05e369ca2d8095d371f1ca9c3 -SIZE (hrydgard-ppsspp-lang-1e3e4a0_GH0.tar.gz) = 347352 +SHA256 (hrydgard-ppsspp-lang-c2c4ad9_GH0.tar.gz) = 6ba8b1cf10686ae141ed7d87480b4907a702eb2479f4e4e196cb612d2206a39e +SIZE (hrydgard-ppsspp-lang-c2c4ad9_GH0.tar.gz) = 477345 SHA256 (KhronosGroup-SPIRV-Cross-90966d5_GH0.tar.gz) = de8bcf01e0a0c4107871fdc8b764771487052fedbe2990a369e7908d4a95c000 SIZE (KhronosGroup-SPIRV-Cross-90966d5_GH0.tar.gz) = 228783 SHA256 (Kingcom-armips-v0.9-89-g8b4cada_GH0.tar.gz) = c41aa68bd6798356af568509de4f298485f752f620caae35ff84d17ff798b227 SIZE (Kingcom-armips-v0.9-89-g8b4cada_GH0.tar.gz) = 191171 SHA256 (Kingcom-tinyformat-Release-2.0.1-7-gb7f5a22_GH0.tar.gz) = d86b5b4592047254c5118d0639e51d00869b3adc2f2c5419fdf29381ca42011e SIZE (Kingcom-tinyformat-Release-2.0.1-7-gb7f5a22_GH0.tar.gz) = 22286 -SHA256 (70c54a7d1ab1.patch) = bb8cda9414a11fd611c6214e3c46d30ad373b3f1a68b3c8afb60311e830ca1c6 -SIZE (70c54a7d1ab1.patch) = 1111 Index: head/emulators/ppsspp/files/extra-patch-old-joy =================================================================== --- head/emulators/ppsspp/files/extra-patch-old-joy (revision 470889) +++ head/emulators/ppsspp/files/extra-patch-old-joy (revision 470890) @@ -1,477 +1,466 @@ The patch reverts SDL_GameController API usage from: https://github.com/hrydgard/ppsspp/commit/67425d7d477d https://github.com/hrydgard/ppsspp/commit/db2cc49e0dd1 https://github.com/hrydgard/ppsspp/commit/e4a0a3cea3bc https://github.com/hrydgard/ppsspp/commit/182b9e0fdae3 https://github.com/hrydgard/ppsspp/commit/d6b81236626f https://github.com/hrydgard/ppsspp/commit/b058b987ad0f https://github.com/hrydgard/ppsspp/commit/1b699363ca4d https://github.com/hrydgard/ppsspp/commit/ac0052c6af92 --- SDL/SDLJoystick.cpp.orig 2017-10-04 19:26:40 UTC +++ SDL/SDLJoystick.cpp @@ -1,13 +1,8 @@ #include "SDL/SDLJoystick.h" #include "Core/Config.h" -#include "Common/FileUtil.h" -#include "file/vfs.h" #include -#include -using namespace std; - static int SDLJoystickEventHandlerWrapper(void* userdata, SDL_Event* event) { static_cast(userdata)->ProcessInput(*event); @@ -17,79 +12,30 @@ static int SDLJoystickEventHandlerWrapper(void* userda SDLJoystick::SDLJoystick(bool init_SDL ) : registeredAsEventHandler(false) { SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); if (init_SDL) { - SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER); + SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO); } - const char *dbPath = "gamecontrollerdb.txt"; - cout << "loading control pad mappings from " << dbPath << ": "; - - size_t size; - u8 *mappingData = VFSReadFile(dbPath, &size); - if (mappingData) { - SDL_RWops *rw = SDL_RWFromConstMem(mappingData, size); - // 1 to free the rw after use - if (SDL_GameControllerAddMappingsFromRW(rw, 1) == -1) { - cout << "Failed to read mapping data - corrupt?" << endl; - } - delete[] mappingData; - } else { - cout << "gamecontrollerdb.txt missing" << endl; - } - cout << "SUCCESS!" << endl; - setUpControllers(); -} - -void SDLJoystick::setUpControllers() { int numjoys = SDL_NumJoysticks(); + SDL_JoystickEventState(SDL_ENABLE); for (int i = 0; i < numjoys; i++) { - setUpController(i); + joys.push_back(SDL_JoystickOpen(i)); +// printf("Initialized joystick %d: %s",i,SDL_JoystickNameForIndex(i)); + if(strstr(SDL_JoystickNameForIndex(i),"PLAYSTATION(R)3 Controller")) + g_Config.bPS3Controller = true; } - if (controllers.size() > 0) { - cout << "pad 1 has been assigned to control pad: " << SDL_GameControllerName(controllers.front()) << endl; - } -} -void SDLJoystick::setUpController(int deviceIndex) { - if (!SDL_IsGameController(deviceIndex)) { - cout << "Control pad device " << deviceIndex << " not supported by SDL game controller database, attempting to create default mapping..." << endl; - int cbGUID = 33; - char pszGUID[cbGUID]; - SDL_Joystick* joystick = SDL_JoystickOpen(deviceIndex); - SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), pszGUID, cbGUID); - // create default mapping - this is the PS3 dual shock mapping - std::string mapping = string(pszGUID) + "," + string(SDL_JoystickName(joystick)) + ",x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4"; - if (SDL_GameControllerAddMapping(mapping.c_str()) == 1){ - cout << "Added default mapping ok" << endl; - } else { - cout << "Failed to add default mapping" << endl; - } - SDL_JoystickClose(joystick); - } - SDL_GameController *controller = SDL_GameControllerOpen(deviceIndex); - if (controller) { - if (SDL_GameControllerGetAttached(controller)) { - controllers.push_back(controller); - controllerDeviceMap[SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(controller))] = deviceIndex; - cout << "found control pad: " << SDL_GameControllerName(controller) << ", loading mapping: "; - auto mapping = SDL_GameControllerMapping(controller); - if (mapping == NULL) { - //cout << "FAILED" << endl; - cout << "Could not find mapping in SDL2 controller database" << endl; - } else { - cout << "SUCCESS, mapping is:" << endl << mapping << endl; - } - } else { - SDL_GameControllerClose(controller); - } - } + if (g_Config.bPS3Controller) + fillMappingPS3(); + else + fillMapping(); } SDLJoystick::~SDLJoystick() { if (registeredAsEventHandler) { SDL_DelEventWatch(SDLJoystickEventHandlerWrapper, this); } - for (auto & controller : controllers) { - SDL_GameControllerClose(controller); + for (SDL_Joystick *joy : joys) { + SDL_JoystickClose(joy); } } @@ -98,107 +44,124 @@ void SDLJoystick::registerEventHandler() { registeredAsEventHandler = true; } -keycode_t SDLJoystick::getKeycodeForButton(SDL_GameControllerButton button) { - switch (button) { - case SDL_CONTROLLER_BUTTON_DPAD_UP: - return NKCODE_DPAD_UP; - case SDL_CONTROLLER_BUTTON_DPAD_DOWN: - return NKCODE_DPAD_DOWN; - case SDL_CONTROLLER_BUTTON_DPAD_LEFT: - return NKCODE_DPAD_LEFT; - case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: - return NKCODE_DPAD_RIGHT; - case SDL_CONTROLLER_BUTTON_A: - return NKCODE_BUTTON_2; - case SDL_CONTROLLER_BUTTON_B: - return NKCODE_BUTTON_3; - case SDL_CONTROLLER_BUTTON_X: - return NKCODE_BUTTON_4; - case SDL_CONTROLLER_BUTTON_Y: - return NKCODE_BUTTON_1; - case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: - return NKCODE_BUTTON_5; - case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: - return NKCODE_BUTTON_6; - case SDL_CONTROLLER_BUTTON_START: - return NKCODE_BUTTON_10; - case SDL_CONTROLLER_BUTTON_BACK: - return NKCODE_BUTTON_9; // select button - case SDL_CONTROLLER_BUTTON_GUIDE: - return NKCODE_BACK; // pause menu - case SDL_CONTROLLER_BUTTON_LEFTSTICK: - return NKCODE_BUTTON_THUMBL; - case SDL_CONTROLLER_BUTTON_RIGHTSTICK: - return NKCODE_BUTTON_THUMBR; - case SDL_CONTROLLER_BUTTON_INVALID: - default: - return NKCODE_UNKNOWN; - } -} - void SDLJoystick::ProcessInput(SDL_Event &event){ switch (event.type) { - case SDL_CONTROLLERBUTTONDOWN: - if (event.cbutton.state == SDL_PRESSED) { - auto code = getKeycodeForButton((SDL_GameControllerButton)event.cbutton.button); - if (code != NKCODE_UNKNOWN) { + case SDL_JOYAXISMOTION: + { + std::map::const_iterator i = SDLJoyAxisMap.find(event.jaxis.axis); + int deviceIndex = getDeviceIndex(event.jaxis.which); + if (i != SDLJoyAxisMap.end() && deviceIndex >= 0) { + AxisInput axis; + axis.axisId = i->second; + // 1.2 to try to approximate the PSP's clamped rectangular range. + axis.value = 1.2 * event.jaxis.value * g_Config.fXInputAnalogSensitivity / 32767.0f; + if (axis.value > 1.0f) axis.value = 1.0f; + if (axis.value < -1.0f) axis.value = -1.0f; + axis.deviceId = DEVICE_ID_PAD_0 + deviceIndex; + axis.flags = 0; + NativeAxis(axis); + } + break; + } + + case SDL_JOYBUTTONDOWN: + { + std::map::const_iterator i = SDLJoyButtonMap.find(event.jbutton.button); + int deviceIndex = getDeviceIndex(event.jbutton.which); + if (i != SDLJoyButtonMap.end() && deviceIndex >= 0) { KeyInput key; key.flags = KEY_DOWN; - key.keyCode = code; - key.deviceId = DEVICE_ID_PAD_0 + getDeviceIndex(event.cbutton.which); + key.keyCode = i->second; + key.deviceId = DEVICE_ID_PAD_0 + deviceIndex; NativeKey(key); } + break; } - break; - case SDL_CONTROLLERBUTTONUP: - if (event.cbutton.state == SDL_RELEASED) { - auto code = getKeycodeForButton((SDL_GameControllerButton)event.cbutton.button); - if (code != NKCODE_UNKNOWN) { + + case SDL_JOYBUTTONUP: + { + std::map::const_iterator i = SDLJoyButtonMap.find(event.jbutton.button); + int deviceIndex = getDeviceIndex(event.jbutton.which); + if (i != SDLJoyButtonMap.end() && deviceIndex >= 0) { KeyInput key; key.flags = KEY_UP; - key.keyCode = code; - key.deviceId = DEVICE_ID_PAD_0 + getDeviceIndex(event.cbutton.which); + key.keyCode = i->second; + key.deviceId = DEVICE_ID_PAD_0 + deviceIndex; NativeKey(key); } + break; } - break; - case SDL_CONTROLLERAXISMOTION: - AxisInput axis; - axis.axisId = event.caxis.axis; - // 1.2 to try to approximate the PSP's clamped rectangular range. - axis.value = 1.2 * event.caxis.value * g_Config.fXInputAnalogSensitivity / 32767.0f; - if (axis.value > 1.0f) axis.value = 1.0f; - if (axis.value < -1.0f) axis.value = -1.0f; - axis.deviceId = DEVICE_ID_PAD_0 + getDeviceIndex(event.caxis.which); - axis.flags = 0; - NativeAxis(axis); - break; - case SDL_CONTROLLERDEVICEREMOVED: - // for removal events, "which" is the instance ID for SDL_CONTROLLERDEVICEREMOVED - for (auto it = controllers.begin(); it != controllers.end(); ++it) { - if (SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(*it)) == event.cdevice.which) { - SDL_GameControllerClose(*it); - controllers.erase(it); + + case SDL_JOYHATMOTION: + { + int deviceIndex = getDeviceIndex(event.jhat.which); + if (deviceIndex < 0) { break; } +#ifdef _WIN32 + KeyInput key; + key.deviceId = DEVICE_ID_PAD_0 + deviceIndex; + + key.flags = (event.jhat.value & SDL_HAT_UP)?KEY_DOWN:KEY_UP; + key.keyCode = NKCODE_DPAD_UP; + NativeKey(key); + key.flags = (event.jhat.value & SDL_HAT_LEFT)?KEY_DOWN:KEY_UP; + key.keyCode = NKCODE_DPAD_LEFT; + NativeKey(key); + key.flags = (event.jhat.value & SDL_HAT_DOWN)?KEY_DOWN:KEY_UP; + key.keyCode = NKCODE_DPAD_DOWN; + NativeKey(key); + key.flags = (event.jhat.value & SDL_HAT_RIGHT)?KEY_DOWN:KEY_UP; + key.keyCode = NKCODE_DPAD_RIGHT; + NativeKey(key); +#else + AxisInput axisX; + AxisInput axisY; + axisX.axisId = JOYSTICK_AXIS_HAT_X; + axisY.axisId = JOYSTICK_AXIS_HAT_Y; + axisX.deviceId = DEVICE_ID_PAD_0 + deviceIndex; + axisY.deviceId = DEVICE_ID_PAD_0 + deviceIndex; + axisX.value = 0.0f; + axisY.value = 0.0f; + if (event.jhat.value & SDL_HAT_LEFT) axisX.value = -1.0f; + if (event.jhat.value & SDL_HAT_RIGHT) axisX.value = 1.0f; + if (event.jhat.value & SDL_HAT_DOWN) axisY.value = 1.0f; + if (event.jhat.value & SDL_HAT_UP) axisY.value = -1.0f; + NativeAxis(axisX); + NativeAxis(axisY); +#endif + break; } - break; - case SDL_CONTROLLERDEVICEADDED: - // for add events, "which" is the device index! - int prevNumControllers = controllers.size(); - setUpController(event.cdevice.which); - if (prevNumControllers == 0 && controllers.size() > 0) { - cout << "pad 1 has been assigned to control pad: " << SDL_GameControllerName(controllers.front()) << endl; + + case SDL_JOYDEVICEADDED: + { + int deviceIndex = event.jdevice.which; + if (deviceIndex >= joys.size()) { + joys.resize(deviceIndex+1); + } + joys[deviceIndex] = SDL_JoystickOpen(deviceIndex); + SDL_JoystickEventState(SDL_ENABLE); + break; } - break; + + case SDL_JOYDEVICEREMOVED: + { + int deviceIndex = getDeviceIndex(event.jdevice.which); + if (deviceIndex >= 0) { + SDL_JoystickClose(joys[deviceIndex]); + joys[deviceIndex] = 0; + } + break; + } } } int SDLJoystick::getDeviceIndex(int instanceId) { - auto it = controllerDeviceMap.find(instanceId); - if (it == controllerDeviceMap.end()) { - // could not find device - return -1; + for (int i = 0; i < joys.size(); i++) { + SDL_Joystick *joy = joys[i]; + if (SDL_JoystickInstanceID(joy) == instanceId) { + return i; + } } - return it->second; + return -1; } --- SDL/SDLJoystick.h.orig 2017-10-04 19:26:40 UTC +++ SDL/SDLJoystick.h @@ -1,9 +1,11 @@ #pragma once #ifdef _WIN32 #include "SDL/SDL.h" +#include "SDL/SDL_joystick.h" #include "SDL/SDL_thread.h" #else #include "SDL.h" +#include "SDL_joystick.h" #include "SDL_thread.h" #endif @@ -21,11 +23,119 @@ class SDLJoystick{ (public) void ProcessInput(SDL_Event &event); private: - void setUpController(int deviceIndex); - void setUpControllers(); - keycode_t getKeycodeForButton(SDL_GameControllerButton button); - int getDeviceIndex(int instanceId); + void fillMappingPS3() + { + SDLJoyButtonMap[14] = NKCODE_BUTTON_1; // Cross + SDLJoyButtonMap[13] = NKCODE_BUTTON_2; // Circle + SDLJoyButtonMap[15] = NKCODE_BUTTON_3; // Sqlare + SDLJoyButtonMap[12] = NKCODE_BUTTON_4; // Triangle + SDLJoyButtonMap[10] = NKCODE_BUTTON_5; // L1 + SDLJoyButtonMap[11] = NKCODE_BUTTON_6; // R1 + SDLJoyButtonMap[8] = NKCODE_BUTTON_7; // L2 + SDLJoyButtonMap[9] = NKCODE_BUTTON_8; // R2 + SDLJoyButtonMap[0] = NKCODE_BUTTON_9; // Select + SDLJoyButtonMap[3] = NKCODE_BUTTON_10; // Start + SDLJoyButtonMap[1] = NKCODE_BUTTON_11; // L3 + SDLJoyButtonMap[2] = NKCODE_BUTTON_12; // R3 + SDLJoyButtonMap[16] = NKCODE_BUTTON_13; // PS + SDLJoyButtonMap[4] = NKCODE_DPAD_UP; + SDLJoyButtonMap[6] = NKCODE_DPAD_DOWN; + SDLJoyButtonMap[7] = NKCODE_DPAD_LEFT; + SDLJoyButtonMap[5] = NKCODE_DPAD_RIGHT; + SDLJoyAxisMap[0] = JOYSTICK_AXIS_X; + SDLJoyAxisMap[1] = JOYSTICK_AXIS_Y; + SDLJoyAxisMap[2] = JOYSTICK_AXIS_Z; + SDLJoyAxisMap[3] = JOYSTICK_AXIS_RZ; + } + void fillMapping() + { + //TODO: C++11 aggregate initialization + //would remove runtime overhead completely + + // Mapping on Windows +#ifdef _WIN32 + SDLJoyButtonMap[0] = NKCODE_BUTTON_2; + SDLJoyButtonMap[1] = NKCODE_BUTTON_3; + SDLJoyButtonMap[2] = NKCODE_BUTTON_4; + SDLJoyButtonMap[3] = NKCODE_BUTTON_1; + SDLJoyButtonMap[4] = NKCODE_BUTTON_7; + SDLJoyButtonMap[5] = NKCODE_BUTTON_8; + SDLJoyButtonMap[6] = NKCODE_BUTTON_9; + SDLJoyButtonMap[7] = NKCODE_BUTTON_10; + SDLJoyButtonMap[8] = NKCODE_BUTTON_11; + SDLJoyButtonMap[9] = NKCODE_BUTTON_12; + SDLJoyButtonMap[10] = NKCODE_BUTTON_5; + SDLJoyButtonMap[11] = NKCODE_BUTTON_6; + SDLJoyButtonMap[12] = NKCODE_BUTTON_7; + SDLJoyButtonMap[13] = NKCODE_BUTTON_8; + SDLJoyButtonMap[14] = NKCODE_BUTTON_9; + + SDLJoyAxisMap[0] = JOYSTICK_AXIS_X; + SDLJoyAxisMap[1] = JOYSTICK_AXIS_Y; + SDLJoyAxisMap[2] = JOYSTICK_AXIS_Z; + SDLJoyAxisMap[3] = JOYSTICK_AXIS_RZ; + SDLJoyAxisMap[4] = JOYSTICK_AXIS_LTRIGGER; + SDLJoyAxisMap[5] = JOYSTICK_AXIS_RTRIGGER; + // Mapping on MacOSX to match X360 controller +#elif __APPLE__ + SDLJoyButtonMap[0] = NKCODE_DPAD_UP; + SDLJoyButtonMap[1] = NKCODE_DPAD_DOWN; + SDLJoyButtonMap[2] = NKCODE_DPAD_LEFT; + SDLJoyButtonMap[3] = NKCODE_DPAD_RIGHT; + SDLJoyButtonMap[4] = NKCODE_BUTTON_10; + SDLJoyButtonMap[5] = NKCODE_BUTTON_9; + SDLJoyButtonMap[6] = NKCODE_BUTTON_5; + SDLJoyButtonMap[7] = NKCODE_BUTTON_6; + SDLJoyButtonMap[8] = NKCODE_BUTTON_7; + SDLJoyButtonMap[9] = NKCODE_BUTTON_8; + SDLJoyButtonMap[10] = NKCODE_BUTTON_SELECT; + SDLJoyButtonMap[11] = NKCODE_BUTTON_2; + SDLJoyButtonMap[12] = NKCODE_BUTTON_3; + SDLJoyButtonMap[13] = NKCODE_BUTTON_4; + SDLJoyButtonMap[14] = NKCODE_BUTTON_1; + SDLJoyButtonMap[15] = NKCODE_BUTTON_11; + SDLJoyButtonMap[16] = NKCODE_BUTTON_12; + + SDLJoyAxisMap[0] = JOYSTICK_AXIS_X; + SDLJoyAxisMap[1] = JOYSTICK_AXIS_Y; + SDLJoyAxisMap[2] = JOYSTICK_AXIS_Z; + SDLJoyAxisMap[3] = JOYSTICK_AXIS_RZ; + SDLJoyAxisMap[4] = JOYSTICK_AXIS_LTRIGGER; + SDLJoyAxisMap[5] = JOYSTICK_AXIS_RTRIGGER; + // Mapping on Linux/Android/Other to match X360 and wii-u pro controller +#else + SDLJoyButtonMap[0] = NKCODE_BUTTON_1; + SDLJoyButtonMap[1] = NKCODE_BUTTON_2; + SDLJoyButtonMap[2] = NKCODE_BUTTON_3; + SDLJoyButtonMap[3] = NKCODE_BUTTON_4; + SDLJoyButtonMap[4] = NKCODE_BUTTON_5; + SDLJoyButtonMap[5] = NKCODE_BUTTON_6; + SDLJoyButtonMap[6] = NKCODE_BUTTON_7; + SDLJoyButtonMap[7] = NKCODE_BUTTON_8; + SDLJoyButtonMap[8] = NKCODE_BUTTON_9; + SDLJoyButtonMap[9] = NKCODE_BUTTON_10; + SDLJoyButtonMap[10] = NKCODE_BUTTON_11; + SDLJoyButtonMap[11] = NKCODE_BUTTON_12; + SDLJoyButtonMap[12] = NKCODE_BUTTON_13; + SDLJoyButtonMap[13] = NKCODE_DPAD_UP; + SDLJoyButtonMap[14] = NKCODE_DPAD_DOWN; + SDLJoyButtonMap[15] = NKCODE_DPAD_LEFT; + SDLJoyButtonMap[16] = NKCODE_DPAD_RIGHT; + + SDLJoyAxisMap[0] = JOYSTICK_AXIS_X; + SDLJoyAxisMap[1] = JOYSTICK_AXIS_Y; + SDLJoyAxisMap[2] = JOYSTICK_AXIS_Z; + SDLJoyAxisMap[3] = JOYSTICK_AXIS_RZ; + SDLJoyAxisMap[4] = JOYSTICK_AXIS_LTRIGGER; + SDLJoyAxisMap[5] = JOYSTICK_AXIS_RTRIGGER; + +#endif + } + std::map SDLJoyButtonMap; + std::map SDLJoyAxisMap; + + std::vector joys; bool registeredAsEventHandler; - std::vector controllers; - std::map controllerDeviceMap; + + int getDeviceIndex(int instanceId); }; ---- ext/native/base/PCMain.cpp.orig 2017-10-04 19:26:40 UTC -+++ ext/native/base/PCMain.cpp -@@ -428,7 +428,7 @@ int main(int argc, char *argv[]) { - NativeGetAppInfo(&app_name, &app_name_nice, &landscape, &version); - - bool joystick_enabled = true; -- if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0) { -+ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO) < 0) { - joystick_enabled = false; - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { - fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError()); Index: head/emulators/ppsspp-qt5/Makefile =================================================================== --- head/emulators/ppsspp-qt5/Makefile (revision 470889) +++ head/emulators/ppsspp-qt5/Makefile (revision 470890) @@ -1,10 +1,10 @@ # $FreeBSD$ -PORTREVISION= 1 +PORTREVISION= 0 PKGNAMESUFFIX= -qt5 MASTERDIR= ${.CURDIR}/../ppsspp OPTIONS_SLAVE= QT5 .include "${MASTERDIR}/Makefile"