Commit: c3cec828e82de70fe92eeb7c52869d24466d4109 Author: Mike Erwin Date: Sat Oct 24 19:58:06 2015 +0200 Branches: master https://developer.blender.org/rBc3cec828e82de70fe92eeb7c52869d24466d4109
ndof: rework Mac driver glue Load driver dynamically at runtime instead of weak-linking the 3Dconnexion framework. Driver no longer needed at build time! Works with really old drivers (as in PowerMac old), more recent versions, and the latest which allows us to process events on a separate thread. =================================================================== M intern/ghost/CMakeLists.txt M intern/ghost/SConscript M intern/ghost/intern/GHOST_NDOFManager.h D intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c D intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h M intern/ghost/intern/GHOST_NDOFManagerCocoa.h M intern/ghost/intern/GHOST_NDOFManagerCocoa.mm M intern/ghost/intern/GHOST_SystemCocoa.mm =================================================================== diff --git a/intern/ghost/CMakeLists.txt b/intern/ghost/CMakeLists.txt index 761bcb4..948b4bf 100644 --- a/intern/ghost/CMakeLists.txt +++ b/intern/ghost/CMakeLists.txt @@ -166,11 +166,6 @@ elseif(APPLE AND NOT WITH_X11) intern/GHOST_NDOFManagerCocoa.h ) - - list(APPEND SRC_NDOF3DCONNEXION - intern/GHOST_NDOFManager3Dconnexion.c - intern/GHOST_NDOFManager3Dconnexion.h - ) endif() if(WITH_CODEC_QUICKTIME) @@ -338,8 +333,3 @@ endif() add_definitions(${GL_DEFINITIONS}) blender_add_lib(bf_intern_ghost "${SRC}" "${INC}" "${INC_SYS}") - -# workaround for apple clang mangling extern "C" symbols -if(WITH_INPUT_NDOF AND APPLE) - blender_add_lib(bf_intern_ghostndof3dconnexion "${SRC_NDOF3DCONNEXION}" "${INC}" "${INC_SYS}") -endif() diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript index 7856621..0abd2c2 100644 --- a/intern/ghost/SConscript +++ b/intern/ghost/SConscript @@ -33,7 +33,6 @@ Import ('env') window_system = env['OURPLATFORM'] sources = env.Glob('intern/*.cpp') -sources2 = env.Glob('intern/GHOST_NDOFManager3Dconnexion.c') if window_system == 'darwin': sources += env.Glob('intern/*.mm') #remove, will be readded below if needed. @@ -193,7 +192,3 @@ elif window_system == 'darwin' and env['C_COMPILER_ID'] == 'gcc' and env['CCVER else: env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] ) - -if window_system == 'darwin' and env['WITH_BF_3DMOUSE']: # build seperate to circumvent extern "C" linkage issues - env.BlenderLib ('bf_intern_ghostndof3dconnexion', sources2, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] ) - diff --git a/intern/ghost/intern/GHOST_NDOFManager.h b/intern/ghost/intern/GHOST_NDOFManager.h index 48a4881..ba82f37 100644 --- a/intern/ghost/intern/GHOST_NDOFManager.h +++ b/intern/ghost/intern/GHOST_NDOFManager.h @@ -107,10 +107,13 @@ typedef enum { class GHOST_NDOFManager { public: - GHOST_NDOFManager(GHOST_System &); - + GHOST_NDOFManager(GHOST_System&); virtual ~GHOST_NDOFManager() {} + // whether multi-axis functionality is available (via the OS or driver) + // does not imply that a device is plugged in or being used + virtual bool available() = 0; + // each platform's device detection should call this // use standard USB/HID identifiers bool setDevice(unsigned short vendor_id, unsigned short product_id); diff --git a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c b/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c deleted file mode 100644 index 01e301f..0000000 --- a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Contributor(s): - * Jake Kauth on 9/12/13. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_INPUT_NDOF - -#include <ConnexionClientAPI.h> -#include <stdio.h> - -#include "GHOST_NDOFManager3Dconnexion.h" - -/* It is to be noted that these implementations are linked in as - * 'extern "C"' calls from GHOST_NDOFManagerCocoa. - * - * This is done in order to - * preserve weak linking capability (which as of clang-3.3 and xcode5 - * breaks weak linking when there is name mangling of c++ libraries.) - * - * We need to have the weak linked file as pure C. Therefore we build a - * compiled bridge from the real weak linked calls and the calls within C++ - * - */ - -OSErr GHOST_NDOFManager3Dconnexion_available(void) -{ - // extern unsigned int InstallConnexionHandlers() __attribute__((weak_import)); - // Make the linker happy for the framework check (see link below for more info) - // http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html - return InstallConnexionHandlers != 0; - // this means that the driver is installed and dynamically linked to blender -} - -OSErr GHOST_NDOFManager3Dconnexion_oldDRV() -{ - //extern unsigned int SetConnexionClientButtonMask() __attribute__((weak_import)); - // Make the linker happy for the framework check (see link below for more info) - // http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html - return SetConnexionClientButtonMask != 0; - // this means that the driver has this symbol -} - -UInt16 GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask) -{ - return RegisterConnexionClient(signature, name, mode, mask); -} - -void GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask) -{ - return SetConnexionClientButtonMask( clientID, buttonMask); -} - -void GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID) -{ - return UnregisterConnexionClient( clientID); -} - -OSErr GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers( - ConnexionMessageHandlerProc messageHandler, - ConnexionAddedHandlerProc addedHandler, - ConnexionRemovedHandlerProc removedHandler) -{ - return InstallConnexionHandlers( messageHandler, addedHandler, removedHandler); -} - -void GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void) -{ - return CleanupConnexionHandlers(); -} - -OSErr GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result) -{ - return ConnexionControl( message, param, result); -} - -#endif // WITH_INPUT_NDOF diff --git a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h b/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h deleted file mode 100644 index 9a84c14..0000000 --- a/intern/ghost/intern/GHOST_NDOFManager3Dconnexion.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Contributor(s): - * Jake Kauth on 9/12/13. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef __GHOST_NDOFMANAGER3DCONNEXION_H__ -#define __GHOST_NDOFMANAGER3DCONNEXION_H__ - -#ifdef WITH_INPUT_NDOF -#include <ConnexionClientAPI.h> - - -OSErr GHOST_NDOFManager3Dconnexion_available(void); -OSErr GHOST_NDOFManager3Dconnexion_oldDRV(void); -OSErr GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler); -void GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void); -UInt16 GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask); -void GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask); -void GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID); -OSErr GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result); - -extern OSErr InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler) __attribute__((weak_import)); -extern void CleanupConnexionHandlers(void) __attribute__((weak_import)); -extern UInt16 RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask) __attribute__((weak_import)); -extern void SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask) __attribute__((weak_import)); -extern void UnregisterConnexionClient(UInt16 clientID) __attribute__((weak_import)); -extern OSErr ConnexionControl(UInt32 message, SInt32 param, SInt32 *result) __attribute__((weak_import)); - - -#endif // WITH_INPUT_NDOF - -#endif // #include guard diff --git a/intern/ghost/intern/GHOST_NDOFManagerCocoa.h b/intern/ghost/intern/GHOST_NDOFManagerCocoa.h index 2a1b492..464ba48 100644 --- a/intern/ghost/intern/GHOST_NDOFManagerCocoa.h +++ b/intern/ghost/intern/GHOST_NDOFManagerCocoa.h @@ -26,22 +26,7 @@ #ifdef WITH_INPUT_NDOF - -extern "C" { -#include <ConnexionClientAPI.h> -#include <stdio.h> -} - - #include "GHOST_NDOFManager.h" -extern "C" OSErr GHOST_NDOFManager3Dconnexion_available(void); -extern "C" OSErr GHOST_NDOFManager3Dconnexion_oldDRV(void); -extern "C" OSErr GHOST_NDOFManager3Dconnexion_InstallConnexionHandlers(ConnexionMessageHandlerProc messageHandler, ConnexionAddedHandlerProc addedHandler, ConnexionRemovedHandlerProc removedHandler); -extern "C" void GHOST_NDOFManager3Dconnexion_CleanupConnexionHandlers(void); -extern "C" UInt16 GHOST_NDOFManager3Dconnexion_RegisterConnexionClient(UInt32 signature, UInt8 *name, UInt16 mode, UInt32 mask); -extern "C" void GHOST_NDOFManager3Dconnexion_SetConnexionClientButtonMask(UInt16 clientID, UInt32 buttonMask); -extern "C" void GHOST_NDOFManager3Dconnexion_UnregisterConnexionClient(UInt16 clientID); -extern "C" OSErr GHOST_NDOFManager3Dconnexion_ConnexionControl(UInt32 message, SInt32 param, SInt32 *result); // Event capture is handled within the NDOF mana @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs