diff --git a/autobuild.xml b/autobuild.xml
index ce18891b9a..0ac237681f 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -136,54 +136,6 @@
- leap-motion
-
SDL
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index fb2792d0e3..4521a0e00c 100755
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -82,7 +82,6 @@ set(cmake_SOURCE_FILES
LLVFS.cmake
LLWindow.cmake
LLXML.cmake
- LeapMotion.cmake
# We'll be fine without you -> LScript.cmake
Linking.cmake
MediaPluginBase.cmake
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index b49e36d4b2..f037d155a7 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -74,16 +74,6 @@ if(WINDOWS)
endif( NOT ND_BUILD64BIT_ARCH )
endif (FMODEX)
- if (LEAPMOTION)
- if( NOT ND_BUILD64BIT_ARCH )
- set(debug_files ${debug_files} x86/Leapd.dll)
- set(release_files ${release_files} x86/Leap.dll)
- else( NOT ND_BUILD64BIT_ARCH )
- set(debug_files ${debug_files} x64/Leapd.dll)
- set(release_files ${release_files} x64/Leap.dll)
- endif( NOT ND_BUILD64BIT_ARCH )
- endif (LEAPMOTION)
-
#*******************************
# Copy MS C runtime dlls, required for packaging.
# *TODO - Adapt this to support VC9
@@ -209,10 +199,6 @@ elseif(DARWIN)
set(release_files ${release_files} libfmodex.dylib)
endif (FMODEX)
- if (LEAPMOTION)
- set(release_files ${release_files} libLeap.dylib)
- endif (LEAPMOTION)
-
elseif(LINUX)
# linux is weird, multiple side by side configurations aren't supported
# and we don't seem to have any debug shared libs built yet anyways...
@@ -279,14 +265,6 @@ elseif(LINUX)
set(release_files ${release_files} "libfmodex.so")
endif (FMODEX)
- if (LEAPMOTION)
- if( NOT ND_BUILD64BIT_ARCH )
- set(release_files ${release_files} x86/libLeap.so)
- else( NOT ND_BUILD64BIT_ARCH )
- set(release_files ${release_files} x64/libLeap.so)
- endif( NOT ND_BUILD64BIT_ARCH )
- endif (LEAPMOTION)
-
else(WINDOWS)
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
diff --git a/indra/cmake/LeapMotion.cmake b/indra/cmake/LeapMotion.cmake
deleted file mode 100644
index 0a08dd016b..0000000000
--- a/indra/cmake/LeapMotion.cmake
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- cmake -*-
-
-include(Linking)
-
-if (INSTALL_PROPRIETARY)
- set(LEAPMOTION ON CACHE BOOL "Building with Leap Motion Controller support.")
-endif (INSTALL_PROPRIETARY)
-
-if( LEAPMOTION )
- if (USESYSTEMLIBS)
- # *TODO: Standalone support
- else (USESYSTEMLIBS)
- include(Prebuilt)
- use_prebuilt_binary(leap-motion)
- if (DARWIN)
- set(LEAP_MOTION_LIBRARY libLeap.dylib)
- elseif (WINDOWS)
- if (ND_BUILD64BIT_ARCH)
- set(LEAP_MOTION_LIBRARY
- debug ${LIBS_PREBUILT_DIR}/lib/debug/x64/Leapd.lib
- optimized ${LIBS_PREBUILT_DIR}/lib/release/x64/Leap.lib)
- else (ND_BUILD64BIT_ARCH)
- set(LEAP_MOTION_LIBRARY
- debug ${LIBS_PREBUILT_DIR}/lib/debug/x86/Leapd.lib
- optimized ${LIBS_PREBUILT_DIR}/lib/release/x86/Leap.lib)
- endif (ND_BUILD64BIT_ARCH)
- elseif (LINUX)
- if (ND_BUILD64BIT_ARCH)
- set(LEAP_MOTION_LIBRARY ${LIBS_PREBUILT_DIR}/lib/release/x64/libLeap.so)
- else (ND_BUILD64BIT_ARCH)
- set(LEAP_MOTION_LIBRARY ${LIBS_PREBUILT_DIR}/lib/release/x86/libLeap.so)
- endif (ND_BUILD64BIT_ARCH)
- endif()
- set(LEAP_MOTION_INCLUDE_DIR ${LIBS_OPEN_DIR}/leap-motion)
- endif (USESYSTEMLIBS)
-endif( LEAPMOTION )
\ No newline at end of file
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 9fb6f91935..86ff9cc55a 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -36,7 +36,6 @@ include(LLUI)
include(LLVFS)
include(LLWindow)
include(LLXML)
-include(LeapMotion)
# Nope -> include(LScript)
include(Linking)
include(NDOF)
@@ -72,11 +71,6 @@ if(FMODEX)
include_directories(${FMODEX_INCLUDE_DIR})
endif(FMODEX)
-if(LEAPMOTION)
- add_definitions(-DUSE_LEAPMOTION=1)
- include_directories(${LEAP_MOTION_INCLUDE_DIR})
-endif(LEAPMOTION)
-
include_directories(
${DBUSGLIB_INCLUDE_DIRS}
${JSONCPP_INCLUDE_DIR}
@@ -1623,14 +1617,6 @@ set_source_files_properties(
# COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
)
-LIST(APPEND viewer_SOURCE_FILES llleapmotioncontroller.cpp)
-LIST(APPEND viewer_HEADER_FILES llleapmotioncontroller.h)
-
-if (LEAPMOTION)
- LIST(APPEND viewer_SOURCE_FILES fsleaptool.cpp fsleapexampletool.cpp fsleapmaniptool.cpp )
- LIST(APPEND viewer_HEADER_FILES fsleaptool.h fsleapexampletool.h fsleapmaniptool.h )
-endif (LEAPMOTION)
-
if (DARWIN)
LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm)
@@ -2144,14 +2130,7 @@ if (WINDOWS)
${SHARED_LIB_STAGING_DIR}/Debug/fmodexL.dll
)
endif (FMODEX)
-
- if (LEAPMOTION)
- list(APPEND COPY_INPUT_DEPENDENCIES
- ${SHARED_LIB_STAGING_DIR}/Release/Leap.dll
- ${SHARED_LIB_STAGING_DIR}/Debug/Leapd.dll
- )
- endif (LEAPMOTION)
-
+
add_custom_command(
OUTPUT ${CMAKE_CFG_INTDIR}/copy_touched.bat
COMMAND ${PYTHON_EXECUTABLE}
@@ -2351,12 +2330,6 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${GROWL_LIBRARY}
)
-if (LEAPMOTION)
- target_link_libraries(${VIEWER_BINARY_NAME}
- ${LEAP_MOTION_LIBRARY}
- )
-endif (LEAPMOTION)
-
if (WINDOWS)
target_link_libraries(${VIEWER_BINARY_NAME}
${GROWL_LIBRARY}
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index eba04af6e4..e735d32d2e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7526,17 +7526,6 @@
Value
2
- LeapMotionTestMode
-
- Comment
- Test mode for Leap Motion gesture controller
- Persist
- 1
- Type
- S32
- Value
- 0
-
LeftClickShowMenu
Comment
diff --git a/indra/newview/fsleapexampletool.cpp b/indra/newview/fsleapexampletool.cpp
deleted file mode 100644
index f8cfffe515..0000000000
--- a/indra/newview/fsleapexampletool.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include
-
-#include "fsleapexampletool.h"
-
-namespace nd
-{
- namespace leap
- {
- std::string ExampleTool::getName()
- {
- return "Example tool";
- }
-
- std::string ExampleTool::getDebugString()
- {
- std::stringstream strm;
- strm << mHands << " hands deteced; " << mFingers << " fingers in total";
- return strm.str();
- }
-
- S32 ExampleTool::getId()
- {
- return 111;
- }
-
- void ExampleTool::onLeapFrame( Leap::Frame const &aFrame )
- {
- mHands = aFrame.hands().count();
- mFingers = 0;
- for( int i = 0; i < mHands; ++ i )
- mFingers += aFrame.hands()[ i ].fingers().count();
- }
-
- void ExampleTool::onRenderFrame( Leap::Frame const &aFrame )
- {
- }
-
- void ExampleTool::render()
- {
- }
- }
-}
\ No newline at end of file
diff --git a/indra/newview/fsleapexampletool.h b/indra/newview/fsleapexampletool.h
deleted file mode 100644
index 2459f4eb1c..0000000000
--- a/indra/newview/fsleapexampletool.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-
-#ifndef NDLEAPEXAMPLETOOL_H
-#define NDLEAPEXAMPLETOOL_H
-
-#pragma once
-
-#include "fsleaptool.h"
-
-class LLViewerObject;
-
-namespace nd
-{
- namespace leap
- {
- class ExampleTool: public Tool
- {
- int mHands;
- int mFingers;
- public:
- virtual ~ExampleTool(){}
-
- virtual void onLeapFrame( Leap::Frame const& );
- virtual void onRenderFrame( Leap::Frame const& );
- virtual void render();
- virtual std::string getDebugString();
- virtual std::string getName();
- virtual S32 getId();
- };
- }
-}
-
-#endif
diff --git a/indra/newview/fsleapmaniptool.cpp b/indra/newview/fsleapmaniptool.cpp
deleted file mode 100644
index 60b9e87d45..0000000000
--- a/indra/newview/fsleapmaniptool.cpp
+++ /dev/null
@@ -1,572 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include
-
-#include "fsleapmaniptool.h"
-
-#include "llviewerwindow.h"
-#include "llviewerobject.h"
-#include "lldrawable.h"
-#include "pipeline.h"
-#include "llvoavatarself.h"
-#include "llviewershadermgr.h"
-#include "llselectmgr.h"
-
-namespace nd
-{
- namespace leap
- {
- struct Finger
- {
- Finger( )
- {
- clear();
- }
-
- void clear()
- {
- memset( this, 0, sizeof( Finger ) );
- }
-
- bool isValid( ) const
- { return mTimestamp > 0; }
-
- U64 mId;
- U64 mTimestamp;
-
- float mTip[3];
- float mDir[3];
- float mFromLast[3];
- float mLenFromLast;
- float mWidth;
- float mLength;
- U16 mPartner;
- LLViewerObject *mSelected;
- };
-
- struct Fingers
- {
- Fingers( )
- {
- clear();
- }
-
- void clear()
- {
- mTimestamp = 0;
- for( int i = 0; i < eMaxFingers; ++i )
- mFingers[ i ].clear();
- mStoredFingers = 0;
- }
-
- Finger* getFinger( U64 aId )
- {
- for( int i = 0; i < mStoredFingers; ++i )
- {
- if( aId == mFingers[ i ].mId )
- return mFingers + i;
- }
-
- return 0;
- }
-
- Finger* at( U16 aIndex )
- {
- return &mFingers[ aIndex ];
- }
-
- enum MAXFIGERS { eMaxFingers = 10 };
-
- U64 mTimestamp;
- U16 mStoredFingers;
- Finger mFingers[eMaxFingers];
- };
-
-
- /* Do the rotation:
- | 0 0 -1 | | x |
- | -1 0 0 | * | y |
- | 0 1 0 | | z |
-
- in this case it's just value flipping.
- */
- static LLVector3 toAgentCS( float aX, float aY, float aZ )
- {
- return LLVector3( -aZ, -aX, aY );
- }
-
- static float scaleY( float aIn )
- {
- return aIn - 150.f;
- }
-
- static LLVector3 scaleToSL( LLVector3 const &aIn )
- {
- return aIn * 1.f/25.f;
- }
-
- static void copy( Leap::Vector const &aFrom, float *aTo )
- {
- aTo[0] = aFrom[0];
- aTo[1] = aFrom[1];
- aTo[2] = aFrom[2];
- }
-
- static float length( float const *aVec )
- {
- return sqrt( aVec[0]*aVec[0] + aVec[1]*aVec[1] + aVec[2]*aVec[2] );
- }
-
- static float normalize( float *aVec )
- {
- float len = length( aVec );
- if( fabs( len ) > 0.0001f )
- {
- aVec[0] /= len;
- aVec[1] /= len;
- aVec[2] /= len;
- }
- else
- {
- len = aVec[0] = aVec[1] = aVec[2] = 0.f;
- }
- return len;
- }
-
- static float dot( float const *aVec1, float const *aVec2, bool aUnitVectors = true )
- {
- float alpha = aVec1[0]*aVec2[0] + aVec1[1]*aVec2[1] + aVec1[2]*aVec2[2];
-
- if( !aUnitVectors )
- alpha /= ( length( aVec1 )*length(aVec2) );
-
- return acos( alpha );
- }
-
- static void subtract( float const *aLeft, float const *aRight, float *aOut )
- {
- aOut[0] = aLeft[0] - aRight[0];
- aOut[1] = aLeft[1] - aRight[1];
- aOut[2] = aLeft[2] - aRight[2];
- }
-
- static void move( float const *aStart, float const *aDirecton, float aScale, float *aOut )
- {
- aOut[0] = aStart[0] + aDirecton[0]*aScale;
- aOut[1] = aStart[1] + aDirecton[1]*aScale;
- aOut[2] = aStart[2] + aDirecton[2]*aScale;
-
- }
-
- ManipTool::ManipTool()
- {
- mLastExaminedFrame = 0;
- mLastStoredFrame = 0;
- mNextRenderedFrame = 0;
- mTotalStoredFrames = 0;
- mFingersPerFrame = new Fingers[ eMaxKeptFrames ];
- }
-
- ManipTool::~ManipTool()
- {
- delete []mFingersPerFrame;
- }
-
- std::string ManipTool::getName()
- {
- return "Manipulation tool";
- }
-
- std::string ManipTool::getDebugString()
- {
- return "";
- }
-
- S32 ManipTool::getId()
- {
- return 11;
- }
-
- void ManipTool::clearSelection()
- {
- //for( std::vector< LLViewerObject* >::iterator itr = mHighlighted.begin(); itr != mHighlighted.end(); ++itr )
- //{
- // LLViewerObject *pO = *itr;
- // LLSelectMgr::getInstance()->unhighlightObjectOnly( pO );
- //}
- //mHighlighted.clear();
-
- LLSelectMgr::getInstance()->unhighlightAll();
-
- }
-
- void ManipTool::onLeapFrame( Leap::Frame const &aFrame )
- {
- if( (aFrame.timestamp() - mLastExaminedFrame ) < 16*1000 )
- return;
-
- if( aFrame.hands().count() > 2 )
- return;
-
- mLastExaminedFrame = aFrame.timestamp();
- U16 curFrame = getNextFrameNo( mLastStoredFrame );
- Fingers &curFingers = mFingersPerFrame[ curFrame ];
- U16 curFinger = 0;
- curFingers.clear();
- curFingers.mTimestamp = mLastExaminedFrame;
-
- Leap::HandList hands = aFrame.hands();
- for( int i = 0; i < hands.count(); ++i )
- {
- for( int j = 0; j < hands[i].fingers().count(); ++j )
- {
- Leap::Finger oFinger( hands[i].fingers()[j] );
-
- Finger &oF = curFingers.mFingers[ curFinger++ ];
-
- oF.mId = oFinger.id();
- oF.mTimestamp = mLastExaminedFrame;
- copy( oFinger.direction(), oF.mDir );
- copy( oFinger.tipPosition(), oF.mTip );
- oF.mWidth = oFinger.width();
- oF.mLength = oFinger.length();
- }
- }
-
- curFingers.mStoredFingers = curFinger;
-
- if( mTotalStoredFrames > 0 )
- {
- Fingers &prevFingers = mFingersPerFrame[ mLastStoredFrame ];
-
- for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
- {
- Finger &curFinger = curFingers.mFingers[i];
- Finger const *prevFinger = prevFingers.getFinger( curFinger.mId );
- if( !prevFinger )
- continue;
-
- subtract( curFinger.mTip, prevFinger->mTip, curFinger.mFromLast );
- curFinger.mLenFromLast = normalize( curFinger.mFromLast );
- }
- }
-
- mLastStoredFrame = curFrame;
- ++mTotalStoredFrames;
- }
-
- void ManipTool::onRenderFrame( Leap::Frame const &aFrame )
- {
- clearSelection();
- doSelect( );
- }
-
- void ManipTool::findPartner( U16 aIndex )
- {
- Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
- Finger &curFinger = curFingers.mFingers[ aIndex ];
-
- if( !curFinger.mSelected )
- return;
-
- for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
- {
- if( curFingers.mFingers[i].mSelected == curFinger.mSelected )
- {
- if( !curFingers.mFingers[i].mPartner )
- {
- curFingers.mFingers[i].mPartner = aIndex;
- curFinger.mPartner = i;
- }
- else
- curFinger.mSelected = 0;
-
- break;
- }
- }
- }
-
- void ManipTool::selectWithFinger( U16 aIndex )
- {
- Finger &oFinger = mFingersPerFrame[ mNextRenderedFrame ].mFingers[ aIndex ];
- GLfloat x( oFinger.mTip[0] );
- GLfloat y( scaleY( oFinger.mTip[1] ) );
- GLfloat z( oFinger.mTip[2] );
- LLVector3 oV1( scaleToSL( toAgentCS( x, y, z) ) );
-
- x += oFinger.mDir[0] * oFinger.mLength;
- y += oFinger.mDir[1] * oFinger.mLength;
- z += oFinger.mDir[2] * oFinger.mLength;
-
- LLVector3 oV2( scaleToSL( toAgentCS( x, y, z ) ) );
-
- oV1 *= gAgentAvatarp->getRotationRegion();
- oV2 *= gAgentAvatarp->getRotationRegion();
-
- oV1 += gAgentAvatarp->getPositionAgent( );
- oV2 += gAgentAvatarp->getPositionAgent( );
-
- LLVector4a oF1,oF2;
- oF1.load3( oV1.mV );
- oF2.load3( oV2.mV );
-
- S32 nFace(0);
- LLViewerObject *pHit = gPipeline.lineSegmentIntersectInWorld( oF1,oF2, FALSE, TRUE, &nFace );
-
- if( pHit )
- oFinger.mSelected = pHit;
-
- findPartner( aIndex );
- }
-
- void ManipTool::doSelect()
- {
- Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
- for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
- selectWithFinger( i );
-
- for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
- {
- Finger &curFinger = curFingers.mFingers[ i ];
- if( curFinger.mPartner < i )
- continue;
-
- if( !curFinger.mSelected )
- continue;
-
- LLColor4 oCol( 0.f, 0.f, 1.f );
- if( curFinger.mPartner )
- oCol.set( 0.f, 1.f, 0.f );
-
- LLSelectMgr::getInstance()->highlightObjectOnly( curFinger.mSelected, oCol );
- }
- }
-
- void ManipTool::renderCone( Finger const &aFinger )
- {
- GLfloat x( aFinger.mTip[0] );
- GLfloat y( scaleY( aFinger.mTip[1] ) );
- GLfloat z( aFinger.mTip[2] );
-
- LLVector3 oTip( scaleToSL( toAgentCS( x, y, z ) ) );
-
- float dist = aFinger.mWidth*2;
- x -= aFinger.mDir[0] *dist;
- y -= aFinger.mDir[1] *dist;
- z -= aFinger.mDir[2] *dist;
-
- LLVector3 oM( scaleToSL( toAgentCS( x, y, z) ) );
- float r = 0.25;
- int slices = 16;
- float alpha = (F_PI*2)/slices;
-
- for( int i = 0; i < slices; ++i )
- {
- GLfloat cx = cos( alpha*i )*r;
- GLfloat cy = sin( alpha*i )*r;
-
- GLfloat cx2 = cos( alpha*(i+1) )*r;
- GLfloat cy2 = sin( alpha*(i+1) )*r;
-
- LLVector3 oV1( oM );
- LLVector3 oV2( oM );
-
- oV1 += LLVector3( 0, cy, -cx );
- oV2 += LLVector3( 0, cy2, -cx2 );
-
- gGL.vertex3fv( oTip.mV );
- gGL.vertex3fv( oV1.mV );
-
- gGL.vertex3fv( oV1.mV );
- gGL.vertex3fv( oV2.mV );
-
- gGL.vertex3fv( oV2.mV );
- gGL.vertex3fv( oTip.mV );
- }
- }
-
- void ManipTool::renderMovementDirection( Finger const &aFinger )
- {
- float lenDir = aFinger.mLenFromLast;
- U16 prevFrame = getPrevFrameNo( mNextRenderedFrame );
- Finger *prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
-
- while( prevFinger && prevFinger->mTimestamp < aFinger.mTimestamp && (aFinger.mTimestamp - prevFinger->mTimestamp ) < getMaxBacktrackMicroseconds() )
- {
- float alpha = dot( aFinger.mFromLast, prevFinger->mFromLast );
- if( alpha > F_PI/18 )
- break;
-
- lenDir += prevFinger->mLenFromLast;
-
- prevFrame = getPrevFrameNo( prevFrame );
- prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
- }
-#if 0
- float vec[3];
- bool haveVec( false );
- while( aFinger.mTimestamp > mFingersPerFrame[ prevFrame ].mTimestamp &&
- (aFinger.mTimestamp > mFingersPerFrame[ prevFrame ].mTimestamp) < getMaxBacktrackMicroseconds() )
- {
- Finger *pFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
-
- if( pFinger )
- {
- if( !haveVec )
- {
- subtract( aFinger.mTip, pFinger->mTip, vec );
- lenDir = normalize( vec );
- haveVec = true;
- }
- else
- {
- float vec2[3];
-
- subtract( aFinger.mTip, pFinger->mTip, vec2 );
- float lenDir2 = normalize( vec );
-
- float alpha = dot( vec, vec2 );
- if( alpha > F_PI/18 )
- break;
- lenDir += lenDir2;
- }
- }
- prevFrame = getPrevFrameNo( prevFrame );
- }
-#endif
-
- if( lenDir > 0 )
- {
- GLfloat x( aFinger.mTip[0] );
- GLfloat y( scaleY( aFinger.mTip[1] ) );
- GLfloat z( aFinger.mTip[2] );
-
- LLVector3 oStart( scaleToSL( toAgentCS( x, y, z ) ) );
-
- x -= aFinger.mFromLast[0] *lenDir;
- y -= aFinger.mFromLast[1] *lenDir;
- z -= aFinger.mFromLast[2] *lenDir;
-
- LLVector3 oEnd( scaleToSL( toAgentCS( x, y, z) ) );
- gGL.vertex3fv( oStart.mV );
- gGL.vertex3fv( oEnd.mV );
- }
- }
-
- void ManipTool::renderMovementAngle( Finger const &aFinger, U16 aIndex )
- {
- if( !aFinger.mPartner || aFinger.mPartner < aIndex )
- return;
-
- U16 prevFrame = getPrevFrameNo( mNextRenderedFrame );
- Finger *prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
- U16 startFrame(mNextRenderedFrame);
-
- while( prevFinger &&
- prevFinger->mTimestamp < aFinger.mTimestamp && (aFinger.mTimestamp - prevFinger->mTimestamp ) < getMaxBacktrackMicroseconds() &&
- prevFinger->mPartner )
- {
- startFrame = prevFrame;
- prevFrame = getPrevFrameNo( prevFrame );
- prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
- }
-
- if( mNextRenderedFrame == startFrame )
- return;
-
- Finger const *startFinger( mFingersPerFrame[ startFrame ].getFinger( aFinger.mId ) );
- Finger const *startPartner( mFingersPerFrame[ startFrame ].at( startFinger->mPartner ) );
-
- Finger const *endFinger( &aFinger );
- Finger const *endPartner( mFingersPerFrame[ startFrame ].at( endFinger->mPartner ) );
-
- float vecStart[3], vecEnd[3];
- subtract( startFinger->mTip, startPartner->mTip, vecStart );
- subtract( endFinger->mTip, endPartner->mTip, vecEnd );
-
- float lenStart = normalize( vecStart );
- float lenEnd = normalize( vecEnd );
-
- float radius = lenStart>lenEnd?lenStart:lenEnd;
-
- float alpha = dot( vecStart, vecEnd );
-
- float ptStart[3], ptEnd[3];
- move( startFinger->mTip, vecStart, radius/2, ptStart );
-
- ptEnd[0] = ptStart[0]*cos(alpha) - ptStart[1]*sin(alpha);
- ptEnd[1] = ptStart[1]*cos(alpha) + ptStart[0]*sin(alpha);
- ptEnd[2] = ptStart[2];
-
- gGL.vertex3fv( ptStart );
- gGL.vertex3fv( ptEnd );
- }
-
- void ManipTool::renderFinger( Finger const &aFinger, U16 aIndex )
- {
- if( aFinger.mPartner )
- gGL.diffuseColor4f( 0.f, 1.0f, 0.0f, 1.f);
- else if( aFinger.mSelected )
- gGL.diffuseColor4f( 0.f, 0.0f, 1.0f, 1.f);
- else
- gGL.diffuseColor4f( 1.f, 1.0f, 1.0f, 1.f);
-
- renderCone( aFinger );
- renderMovementDirection( aFinger );
- renderMovementAngle( aFinger, aIndex );
- }
-
- void ManipTool::render()
- {
- LLGLEnable blend(GL_BLEND);
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
- gGL.matrixMode(LLRender::MM_MODELVIEW);
- gGL.pushMatrix();
- gGL.begin(LLRender::LINES);
-
- LLQuaternion rot = gAgentAvatarp->getRotationRegion();
- LLVector3 pos = gAgentAvatarp->getPositionAgent();
-
- gGL.translatef( pos.mV[0], pos.mV[1], pos.mV[2] );
- gGL.multMatrix( (GLfloat*) gAgentAvatarp->getRotationRegion().getMatrix4().mMatrix );
-
- gGL.begin(LLRender::LINES);
-
- Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
- for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
- {
- Finger &curFinger = curFingers.mFingers[ i ];
- renderFinger( curFinger, i );
- }
-
- gGL.end();
-
- gGL.popMatrix();
- mNextRenderedFrame = mLastStoredFrame;
- }
- }
-}
diff --git a/indra/newview/fsleapmaniptool.h b/indra/newview/fsleapmaniptool.h
deleted file mode 100644
index 3988fe21b2..0000000000
--- a/indra/newview/fsleapmaniptool.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-
-#ifndef NDLEAPMANIPTOOL_H
-#define NDLEAPMANIPTOOL_H
-
-#pragma once
-
-#include "fsleaptool.h"
-#include
-
-class LLViewerObject;
-
-namespace nd
-{
- namespace leap
- {
- struct Finger;
- struct Fingers;
- class ManipTool: public Tool
- {
- enum EMAXKEPTFRAMES{ eMaxKeptFrames = 120 };
-
- inline U16 getNextFrameNo( U16 aFrame ) const
- { return aFrame==eMaxKeptFrames-1?0:aFrame+1; }
- inline U16 getPrevFrameNo( U16 aFrame ) const
- { return aFrame==0?eMaxKeptFrames-1:aFrame-1; }
-
- inline U32 getMaxBacktrackMicroseconds() const
- { return 1500*1000; }
-
- U64 mLastExaminedFrame;
- U16 mLastStoredFrame;
- U16 mNextRenderedFrame;
- U64 mTotalStoredFrames;
-
- Fingers *mFingersPerFrame;
-
- void clearSelection();
- void doSelect();
-
- void selectWithFinger( U16 aIndex );
- void findPartner( U16 aIndex );
-
- void renderCone( Finger const & );
- void renderMovementDirection( Finger const & );
- void renderMovementAngle( Finger const &, U16 aIndex );
- void renderFinger( Finger const&, U16 aIndex );
-
- public:
- ManipTool();
- virtual ~ManipTool();
-
- virtual void onLeapFrame( Leap::Frame const& );
- virtual void onRenderFrame( Leap::Frame const& );
- virtual void render();
- virtual std::string getDebugString();
- virtual std::string getName();
- virtual S32 getId();
- };
- }
-}
-
-#endif
diff --git a/indra/newview/fsleaptool.cpp b/indra/newview/fsleaptool.cpp
deleted file mode 100644
index 6714a46370..0000000000
--- a/indra/newview/fsleaptool.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-#include "llviewerprecompiledheaders.h"
-
-#include "fsleaptool.h"
-#include "fsleapexampletool.h"
-#include "fsleapmaniptool.h"
-
-nd::leap::Tool* nd::leap::constructTool( S32 aTool )
-{
- if( 111 == aTool )
- return new nd::leap::ExampleTool();
- if( 11 == aTool )
- return new nd::leap::ManipTool();
-
- return 0;
-}
\ No newline at end of file
diff --git a/indra/newview/fsleaptool.h b/indra/newview/fsleaptool.h
deleted file mode 100644
index 8cab0161ee..0000000000
--- a/indra/newview/fsleaptool.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
- * Phoenix Firestorm Viewer Source Code
- * Copyright (C) 2014, Nicky Dasmijn
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
- * http://www.firestormviewer.org
- * $/LicenseInfo$
- */
-
-#ifndef NDLEAPTOOL_H
-#define NDLEAPTOOL_H
-
-#pragma once
-
-namespace Leap
-{
- class HandList;
- class Frame;
-}
-
-namespace nd
-{
- namespace leap
- {
- class Tool
- {
- public:
- virtual ~Tool(){}
-
- virtual void onLeapFrame( Leap::Frame const& ) = 0;
- virtual void onRenderFrame( Leap::Frame const& ) = 0;
- virtual void render() = 0;
- virtual std::string getDebugString() = 0;
- virtual std::string getName() = 0;
- virtual S32 getId() = 0;
- };
-
- Tool *constructTool( S32 aTool );
- }
-}
-
-#endif
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index f2d1c26d14..082471e66b 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -250,7 +250,6 @@
#include "llviewereventrecorder.h"
-#include "llleapmotioncontroller.h"
#if HAS_GROWL
#include "growlmanager.h"
#endif
@@ -1531,10 +1530,6 @@ bool LLAppViewer::mainLoop()
joystick = LLViewerJoystick::getInstance();
joystick->setNeedsReset(true);
-// [FS:CR]
- gestureController = LLLeapMotionController::getInstance();
-// [/FS:CR]
-
#ifdef LL_DARWIN
// Ensure that this section of code never gets called again on OS X.
mMainLoopInitialized = true;
@@ -1729,10 +1724,6 @@ bool LLAppViewer::mainLoop()
}
}
-// [FS:CR] Run any LeapMotion devices
- if (gestureController)
- gestureController->stepFrame();
-
pingMainloopTimeout("Main:Sleep");
pauseMainloopTimeout();
@@ -1979,8 +1970,6 @@ void LLAppViewer::flushVFSIO()
bool LLAppViewer::cleanup()
{
- LLLeapMotionController::getInstance()->cleanup(); // shutdown leap support
-
//ditch LLVOAvatarSelf instance
gAgentAvatarp = NULL;
@@ -5976,14 +5965,6 @@ void LLAppViewer::idle()
{
gAgentPilot.moveCamera();
}
-// Leap Motion flycam
-#ifdef USE_LEAPMOTION
- else if(gestureController && gestureController->getOverrideCamera())
- {
- gestureController->moveFlycam();
- }
-#endif //USE_LEAPMOTION
-//
else if (LLViewerJoystick::getInstance()->getOverrideCamera())
{
LLViewerJoystick::getInstance()->moveFlycam();
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 1438153873..a5f168d13e 100755
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -42,7 +42,6 @@ class LLTextureFetch;
class LLWatchdogTimeout;
class LLUpdaterService;
class LLViewerJoystick;
-class LLLeapMotionController; // [FS:CR]
extern LLTrace::BlockTimerStatHandle FTM_FRAME;
@@ -295,10 +294,6 @@ private:
bool mMainLoopInitialized;
LLViewerJoystick* joystick;
-// [FS:CR]
- LLLeapMotionController* gestureController;
-// [/FS:CR]
-
bool mSavedFinalSnapshot;
bool mSavePerAccountSettings; // only save per account settings if login succeeded
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 2898316cc2..231b54eef0 100755
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -57,8 +57,6 @@
// void drawBoxOutline(const LLVector3& pos,const LLVector3& size); // llspatialpartition.cpp
//
-#include "llleapmotioncontroller.h"
-
static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK;
static U32 sBufferUsage = GL_STREAM_DRAW_ARB;
static U32 sShaderLevel = 0;
@@ -1250,11 +1248,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
return;
}
- // Leap motion visualizer
- if( avatarp->isSelf() && 1 == pass )
- LLLeapMotionController::getInstance()->render();
- //
-
// Add avatar hitbox debug
static LLCachedControl render_hitbox(gSavedSettings,"DebugRenderHitboxes",false);
diff --git a/indra/newview/llleapmotioncontroller.cpp b/indra/newview/llleapmotioncontroller.cpp
deleted file mode 100644
index 447476c909..0000000000
--- a/indra/newview/llleapmotioncontroller.cpp
+++ /dev/null
@@ -1,863 +0,0 @@
-/**
- * @file llleapmotioncontroller.cpp
- * @brief LLLeapMotionController class implementation
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * Copyright (C) 2013, Cinder Roxley
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llleapmotioncontroller.h"
-
-#ifdef USE_LEAPMOTION
-
-#include "llagent.h"
-#include "llagentcamera.h"
-#include "llgesturemgr.h"
-#include "llmath.h"
-#include "llstartup.h"
-#include "lltimer.h"
-#include "llviewercontrol.h"
-#include "fsnearbychathub.h"
-#include "fsleaptool.h"
-
-#include
-
-// Leap Motion flycam
-#include "llmoveview.h"
-#include "llquaternion.h"
-#include "llviewercamera.h"
-#include "llviewerjoystick.h"
-//
-
-const F32 LM_DEAD_ZONE = 20.f; // Dead zone in the middle of the space
-const F32 LM_ORBIT_RATE_FACTOR = 80.f; // Number for camera orbit magic factor
-
-class LLLMImpl : public Leap::Listener
-{
-public:
- LLLMImpl();
- ~LLLMImpl();
-
- // LeapMotion callbacks
- virtual void onInit(const Leap::Controller&);
- virtual void onConnect(const Leap::Controller&);
- virtual void onDisconnect(const Leap::Controller&);
- virtual void onFrame(const Leap::Controller&);
-
- // Called from viewer main loop
- void stepFrame();
-
- Leap::Controller * mLMController; // Leapmotion's object
- bool mLMConnected; // true if device is connected
- bool mFrameAvailable; // true if there is a new frame of data available
- int64_t mCurrentFrameID; // Id of the most recent frame of data
-
- LLTimer mYawTimer; // Avoid turning left / right too fast
-
- // Hacky demo code - send controller data to in-world objects via chat
- LLTimer mChatMsgTimer; // Throttle sending LM controller data to region local chat
-
- LLTimer mGestureTimer; // Throttle invoking SL gestures
-
- std::string getDebugString();
- void render();
-
-private:
- nd::leap::Tool *mTool;
-
- // Various controller modes
- void modeFlyingControlTest(Leap::HandList & hands);
- void modeStreamDataToSL(Leap::HandList & hands);
- void modeGestureDetection1(Leap::HandList & hands);
- void modeMoveAndCamTest1(Leap::HandList & hands);
- void modeDumpDebugInfo(Leap::HandList & hands);
-
-// Leap Motion flycam
-public:
- // returns true when in leapmotion flycam mode
- bool getOverrideCamera();
- // called once per frame when in flycam mode
- void moveFlycam();
-
-private:
- Leap::Vector mHandCenterPos; // point where the hand entered flycam
-
- void modeFlycam(Leap::HandList & hands);
-
- bool mOverrideCamera; // true when in leapmotion flycam mode
-
- LLVector3 mFlycamDelta; // next movement delta for flycam
- LLVector3 mFlycamFeatheredDelta; // feathered positional data
- LLVector3 mFlycamPos; // current flycam position
- LLQuaternion mFlycamInitialRot; // initial flycam rotation
- LLVector3 mFlycamRot; // current flycam rotation as vector
- LLVector3 mFlycamFeatheredRot; // current feathered rotation as vector
-//
-};
-
-const F32 LLLEAP_YAW_INTERVAL = 0.075f;
-
-// Time between spamming chat messages. Server-side throttle is 200 msgs in 10 seconds
-const F32 LLLEAP_CHAT_MSG_INTERVAL = 0.200f; // Send 5/second
-
-const F32 LLLEAP_GESTURE_INTERVAL = 3.f; // 3 seconds in between SL gestures
-
-
-LLLMImpl::LLLMImpl() : mLMController(NULL)
-, mLMConnected(false)
-, mFrameAvailable(false)
-, mCurrentFrameID(0)
-, mOverrideCamera(false) // Leap Motion flycam
-, mTool(0)
-{
- mLMController = new Leap::Controller(*this);
- mYawTimer.setTimerExpirySec(LLLEAP_YAW_INTERVAL);
- mChatMsgTimer.setTimerExpirySec(LLLEAP_CHAT_MSG_INTERVAL);
- mGestureTimer.setTimerExpirySec(LLLEAP_GESTURE_INTERVAL);
-}
-
-LLLMImpl::~LLLMImpl()
-{
- delete mLMController;
- delete mTool;
-}
-
-void LLLMImpl::onInit(const Leap::Controller& controller)
-{
- LL_INFOS("LeapMotion") << "Initialized" << LL_ENDL;
-}
-
-void LLLMImpl::onConnect(const Leap::Controller& controller)
-{
- LL_INFOS("LeapMotion") << "Connected" << LL_ENDL;
- mLMConnected = true;
- mCurrentFrameID = 0;
-}
-
-void LLLMImpl::onDisconnect(const Leap::Controller& controller)
-{
- LL_INFOS("LeapMotion") << "Disconnected" << LL_ENDL;
- mLMConnected = false;
-}
-
-// Callback from Leapmotion code when a new frame is available. It simply
-// sets a flag so stepFrame() can pick up new controller data
-void LLLMImpl::onFrame(const Leap::Controller& controller)
-{
- if (mLMConnected)
- {
- // Get the most recent frame and report some basic information
- const Leap::Frame frame = controller.frame();
- int64_t frame_id = frame.id();
- if (frame_id != mCurrentFrameID)
- { // Just record the ID and set flag indicating data is available
- mCurrentFrameID = frame_id;
- mFrameAvailable = true;
- }
-
- if( mTool )
- mTool->onLeapFrame( frame);
- }
-}
-
-std::string LLLMImpl::getDebugString()
-{
- if( mTool )
- return mTool->getDebugString();
-
- return "";
-}
-
-void LLLMImpl::render()
-{
- if( mTool )
- return mTool->render();
-}
-
-// This is called every SL viewer frame
-void LLLMImpl::stepFrame()
-{
- if (mLMController
- && mFrameAvailable
- && mLMConnected)
- {
- mFrameAvailable = false;
-
- // Get the most recent frame and report some basic information
- const Leap::Frame frame = mLMController->frame();
- Leap::HandList hands = frame.hands();
-
- static LLCachedControl sControllerMode(gSavedSettings, "LeapMotionTestMode", 0);
-
- if( !mTool || mTool->getId() != sControllerMode )
- {
- delete mTool;
- mTool = nd::leap::constructTool( sControllerMode );
- }
-
- if( mTool )
- mTool->onRenderFrame( frame );
- else
- {
- switch (sControllerMode)
- {
- case 1:
- modeFlyingControlTest(hands);
- break;
- case 2:
- modeStreamDataToSL(hands);
- break;
- case 3:
- modeGestureDetection1(hands);
- break;
- case 4:
- modeMoveAndCamTest1(hands);
- break;
- // Leap Motion flycam
- case 10:
- modeFlycam(hands);
- break;
- //
- case 411:
- modeDumpDebugInfo(hands);
- break;
- default:
- // Do nothing
- break;
- }
- }
- }
-}
-
-// This controller mode is used to fly the avatar, going up, down, forward and turning.
-void LLLMImpl::modeFlyingControlTest(Leap::HandList & hands)
-{
- static S32 sLMFlyingHysteresis = 0;
-
- S32 numHands = hands.count();
- BOOL agent_is_flying = gAgent.getFlying();
-
- if (numHands == 0
- && agent_is_flying
- && sLMFlyingHysteresis > 0)
- {
- sLMFlyingHysteresis--;
- if (sLMFlyingHysteresis == 0)
- {
- LL_INFOS("LeapMotion") << "LM stop flying - look ma, no hands!" << LL_ENDL;
- gAgent.setFlying(FALSE);
- }
- }
- else if (numHands == 1)
- {
- // Get the first hand
- Leap::Hand hand = hands[0];
-
- // Check if the hand has any fingers
- Leap::FingerList finger_list = hand.fingers();
- S32 num_fingers = finger_list.count();
-
- Leap::Vector palm_pos = hand.palmPosition();
- Leap::Vector palm_normal = hand.palmNormal();
-
- F32 ball_radius = (F32) hand.sphereRadius();
- Leap::Vector ball_center = hand.sphereCenter();
-
- // Number of fingers controls flying on / off
- if (num_fingers == 0 && // To do - add hysteresis or data smoothing?
- agent_is_flying)
- {
- if (sLMFlyingHysteresis > 0)
- {
- sLMFlyingHysteresis--;
- }
- else
- {
- LL_INFOS("LeapMotion") << "LM stop flying" << LL_ENDL;
- gAgent.setFlying(FALSE);
- }
- }
- else if (num_fingers > 2 &&
- !agent_is_flying)
- {
- LL_INFOS("LeapMotion") << "LM start flying" << LL_ENDL;
- gAgent.setFlying(TRUE);
- sLMFlyingHysteresis = 5;
- }
-
- // Radius of ball controls forward motion
- if (agent_is_flying)
- {
-
- if (ball_radius > 110.f)
- { // Open hand, move fast
- gAgent.setControlFlags(AGENT_CONTROL_AT_POS | AGENT_CONTROL_FAST_AT);
- }
- else if (ball_radius > 85.f)
- { // Partially open, move slow
- gAgent.setControlFlags(AGENT_CONTROL_AT_POS);
- }
- else
- { // Closed - stop
- gAgent.clearControlFlags(AGENT_CONTROL_AT_POS);
- }
-
- // Height of palm controls moving up and down
- if (palm_pos.y > 260.f)
- { // Go up fast
- gAgent.setControlFlags(AGENT_CONTROL_UP_POS | AGENT_CONTROL_FAST_UP);
- }
- else if (palm_pos.y > 200.f)
- { // Go up
- gAgent.setControlFlags(AGENT_CONTROL_UP_POS);
- }
- else if (palm_pos.y < 60.f)
- { // Go down fast
- gAgent.setControlFlags(AGENT_CONTROL_FAST_UP | AGENT_CONTROL_UP_NEG);
- }
- else if (palm_pos.y < 120.f)
- { // Go down
- gAgent.setControlFlags(AGENT_CONTROL_UP_NEG);
- }
- else
- { // Clear up / down
- gAgent.clearControlFlags(AGENT_CONTROL_FAST_UP | AGENT_CONTROL_UP_POS | AGENT_CONTROL_UP_NEG);
- }
-
- // Palm normal going left / right controls direction
- if (mYawTimer.checkExpirationAndReset(LLLEAP_YAW_INTERVAL))
- {
- if (palm_normal.x > 0.4f)
- { // Go left fast
- gAgent.moveYaw(1.f);
- }
- else if (palm_normal.x < -0.4f)
- { // Go right fast
- gAgent.moveYaw(-1.f);
- }
- }
-
- } // end flying controls
- }
-}
-
-
-// This experimental mode sends chat messages into SL on a back channel for LSL scripts
-// to intercept with a listen() event. This is experimental and not sustainable for
-// a production feature ... many avatars using this would flood the chat system and
-// hurt server performance. Depending on how useful this proves to be, a better
-// mechanism should be designed to stream data from the viewer into SL scripts.
-void LLLMImpl::modeStreamDataToSL(Leap::HandList & hands)
-{
- S32 numHands = hands.count();
- if (numHands == 1 &&
- mChatMsgTimer.checkExpirationAndReset(LLLEAP_CHAT_MSG_INTERVAL))
- {
- // Get the first (and only) hand
- Leap::Hand hand = hands[0];
-
- Leap::Vector palm_pos = hand.palmPosition();
- Leap::Vector palm_normal = hand.palmNormal();
-
- F32 ball_radius = (F32) hand.sphereRadius();
- Leap::Vector ball_center = hand.sphereCenter();
-
- // Chat message looks like "/2343 LM1,,,,"
- LLVector3 vec;
- std::stringstream status_chat_msg;
- status_chat_msg << "/2343 LM,";
- status_chat_msg << "<" << palm_pos.x << "," << palm_pos.y << "," << palm_pos.z << ">,";
- status_chat_msg << "<" << palm_normal.x << "," << palm_normal.y << "," << palm_normal.z << ">,";
- status_chat_msg << "<" << ball_center.x << "," << ball_center.y << "," << ball_center.z << ">," << ball_radius;
-
- FSNearbyChat::instance().sendChatFromViewer(status_chat_msg.str(), CHAT_TYPE_SHOUT, FALSE);
- }
-}
-
-// This mode tries to detect simple hand motion and either triggers an avatar gesture or
-// sends a chat message into SL in response. It is very rough, hard-coded for detecting
-// a hand wave (a SL gesture) or the wiggling-thumb gun trigger (a chat message sent to a
-// special version of the popgun).
-void LLLMImpl::modeGestureDetection1(Leap::HandList & hands)
-{
- static S32 trigger_direction = -1;
-
- S32 numHands = hands.count();
- if (numHands == 1)
- {
- // Get the first hand
- Leap::Hand hand = hands[0];
-
- // Check if the hand has any fingers
- Leap::FingerList finger_list = hand.fingers();
- S32 num_fingers = finger_list.count();
- static S32 last_num_fingers = 0;
-
- if (num_fingers == 1)
- { // One finger ... possibly reset the
- Leap::Finger finger = finger_list[0];
- Leap::Vector finger_dir = finger.direction();
-
- // Negative Z is into the screen - check that it's the largest component
- S32 abs_z_dir = llabs(finger_dir.z);
- if (finger_dir.z < -0.5 &&
- abs_z_dir > llabs(finger_dir.x) &&
- abs_z_dir > llabs(finger_dir.y))
- {
- Leap::Vector finger_pos = finger.tipPosition();
- Leap::Vector finger_vel = finger.tipVelocity();
- LL_INFOS("LeapMotion") << "finger direction is " << finger_dir.x << ", " << finger_dir.y << ", " << finger_dir.z
- << ", position " << finger_pos.x << ", " << finger_pos.y << ", " << finger_pos.z
- << ", velocity " << finger_vel.x << ", " << finger_vel.y << ", " << finger_vel.z
- << LL_ENDL;
- }
-
- if (trigger_direction != -1)
- {
- LL_INFOS("LeapMotion") << "Reset trigger_direction - one finger" << LL_ENDL;
- trigger_direction = -1;
- }
- }
- else if (num_fingers == 2)
- {
- Leap::Finger barrel_finger = finger_list[0];
- Leap::Vector barrel_finger_dir = barrel_finger.direction();
-
- // Negative Z is into the screen - check that it's the largest component
- F32 abs_z_dir = llabs(barrel_finger_dir.z);
- if (barrel_finger_dir.z < -0.5f &&
- abs_z_dir > llabs(barrel_finger_dir.x) &&
- abs_z_dir > llabs(barrel_finger_dir.y))
- {
- Leap::Finger thumb_finger = finger_list[1];
- Leap::Vector thumb_finger_dir = thumb_finger.direction();
- Leap::Vector thumb_finger_pos = thumb_finger.tipPosition();
- Leap::Vector thumb_finger_vel = thumb_finger.tipVelocity();
-
- if ((thumb_finger_dir.x < barrel_finger_dir.x) )
- { // Trigger gunfire
- if (trigger_direction < 0 && // Haven't fired
- thumb_finger_vel.x > 50.f && // Moving into screen
- thumb_finger_vel.z < -50.f &&
- mChatMsgTimer.checkExpirationAndReset(LLLEAP_CHAT_MSG_INTERVAL))
- {
- // Chat message looks like "/2343 LM2 gunfire"
- std::string gesture_chat_msg("/2343 LM2 gunfire");
- //LLNearbyChatBar::sendChatFromViewer(gesture_chat_msg, CHAT_TYPE_SHOUT, FALSE);
- trigger_direction = 1;
- LL_INFOS("LeapMotion") << "Sent gunfire chat" << LL_ENDL;
- }
- else if (trigger_direction > 0 && // Have fired, need to pull thumb back
- thumb_finger_vel.x < -50.f &&
- thumb_finger_vel.z > 50.f) // Moving out of screen
- {
- trigger_direction = -1;
- LL_INFOS("LeapMotion") << "Reset trigger_direction" << LL_ENDL;
- }
- }
- }
- else if (trigger_direction != -1)
- {
- LL_INFOS("LeapMotion") << "Reset trigger_direction - hand pos" << LL_ENDL;
- trigger_direction = -1;
- }
- }
- else if (num_fingers == 5 &&
- num_fingers == last_num_fingers)
- {
- if (mGestureTimer.checkExpirationAndReset(LLLEAP_GESTURE_INTERVAL))
- {
- // figure out a gesture to trigger
- std::string gestureString("/overhere");
- LLGestureMgr::instance().triggerAndReviseString( gestureString );
- }
- }
-
- last_num_fingers = num_fingers;
- }
-}
-
-
-// This mode tries to move the avatar and camera in Second Life. It's pretty rough and needs a lot of work
-void LLLMImpl::modeMoveAndCamTest1(Leap::HandList & hands)
-{
- S32 numHands = hands.count();
- if (numHands == 1)
- {
- // Get the first hand
- Leap::Hand hand = hands[0];
-
- // Check if the hand has any fingers
- Leap::FingerList finger_list = hand.fingers();
- S32 num_fingers = finger_list.count();
-
- F32 orbit_rate = 0.f;
-
- Leap::Vector pos(0, 0, 0);
- for (size_t i = 0; i < num_fingers; ++i)
- {
- Leap::Finger finger = finger_list[i];
- pos += finger.tipPosition();
- }
- pos = Leap::Vector(pos.x/num_fingers, pos.y/num_fingers, pos.z/num_fingers);
-
- if (num_fingers == 1)
- { // 1 finger - move avatar
- if (pos.x < -LM_DEAD_ZONE)
- { // Move left
- gAgent.moveLeftNudge(1.f);
- }
- else if (pos.x > LM_DEAD_ZONE)
- {
- gAgent.moveLeftNudge(-1.f);
- }
-
- /*
- if (pos.z < -LM_DEAD_ZONE)
- {
- gAgent.moveAtNudge(1.f);
- }
- else if (pos.z > LM_DEAD_ZONE)
- {
- gAgent.moveAtNudge(-1.f);
- } */
-
- if (pos.y < -LM_DEAD_ZONE)
- {
- gAgent.moveYaw(-1.f);
- }
- else if (pos.y > LM_DEAD_ZONE)
- {
- gAgent.moveYaw(1.f);
- }
- } // end 1 finger
- else if (num_fingers == 2)
- { // 2 fingers - move camera around
- // X values run from about -170 to +170
- if (pos.x < -LM_DEAD_ZONE)
- { // Camera rotate left
- gAgentCamera.unlockView();
- orbit_rate = (llabs(pos.x) - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitLeftKey(orbit_rate);
- }
- else if (pos.x > LM_DEAD_ZONE)
- {
- gAgentCamera.unlockView();
- orbit_rate = (pos.x - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitRightKey(orbit_rate);
- }
- if (pos.z < -LM_DEAD_ZONE)
- { // Camera zoom in
- gAgentCamera.unlockView();
- orbit_rate = (llabs(pos.z) - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitInKey(orbit_rate);
- }
- else if (pos.z > LM_DEAD_ZONE)
- { // Camera zoom out
- gAgentCamera.unlockView();
- orbit_rate = (pos.z - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitOutKey(orbit_rate);
- }
-
- if (pos.y < -LM_DEAD_ZONE)
- { // Camera zoom in
- gAgentCamera.unlockView();
- orbit_rate = (llabs(pos.y) - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitUpKey(orbit_rate);
- }
- else if (pos.y > LM_DEAD_ZONE)
- { // Camera zoom out
- gAgentCamera.unlockView();
- orbit_rate = (pos.y - LM_DEAD_ZONE) / LM_ORBIT_RATE_FACTOR;
- gAgentCamera.setOrbitDownKey(orbit_rate);
- }
- } // end 2 finger
- }
-}
-
-
-// This controller mode just dumps out a bunch of the Leap Motion device data, which can then be
-// analyzed for other use.
-void LLLMImpl::modeDumpDebugInfo(Leap::HandList & hands)
-{
- S32 numHands = hands.count();
- if (numHands == 1)
- {
- // Get the first hand
- Leap::Hand hand = hands[0];
-
- // Check if the hand has any fingers
- Leap::FingerList finger_list = hand.fingers();
- S32 num_fingers = finger_list.count();
-
- if (num_fingers >= 1)
- { // Calculate the hand's average finger tip position
- Leap::Vector pos(0, 0, 0);
- Leap::Vector direction(0, 0, 0);
- for (size_t i = 0; i < num_fingers; ++i)
- {
- Leap::Finger finger = finger_list[i];
- pos += finger.tipPosition();
- direction += finger.direction();
-
- // Lots of log spam
- LL_INFOS("LeapMotion") << "Finger " << i << " string is " << finger.toString() << LL_ENDL;
- }
- pos = Leap::Vector(pos.x/num_fingers, pos.y/num_fingers, pos.z/num_fingers);
- direction = Leap::Vector(direction.x/num_fingers, direction.y/num_fingers, direction.z/num_fingers);
-
- LL_INFOS("LeapMotion") << "Hand has " << num_fingers << " fingers with average tip position"
- << " (" << pos.x << ", " << pos.y << ", " << pos.z << ")"
- << " direction (" << direction.x << ", " << direction.y << ", " << direction.z << ")"
- << LL_ENDL;
-
- }
-
- Leap::Vector palm_pos = hand.palmPosition();
- Leap::Vector palm_normal = hand.palmNormal();
- LL_INFOS("LeapMotion") << "Palm pos " << palm_pos.x
- << ", " << palm_pos.y
- << ", " << palm_pos.z
- << ". Normal: " << palm_normal.x
- << ", " << palm_normal.y
- << ", " << palm_normal.z
- << LL_ENDL;
-
- F32 ball_radius = (F32) hand.sphereRadius();
- Leap::Vector ball_center = hand.sphereCenter();
- LL_INFOS("LeapMotion") << "Ball pos " << ball_center.x
- << ", " << ball_center.y
- << ", " << ball_center.z
- << ", radius " << ball_radius
- << LL_ENDL;
- } // dump_out_data
-}
-
-
-// --------------------------------------------------------------------------------
-// The LLLeapMotionController class is a thin public glue layer into the LLLMImpl
-// class, which does all the interesting work.
-
-// One controller instance to rule them all
-LLLeapMotionController::LLLeapMotionController()
-{
- mController = new LLLMImpl();
-}
-
-
-LLLeapMotionController::~LLLeapMotionController()
-{
- cleanup();
-}
-
-void LLLeapMotionController::cleanup()
-{
- delete mController;
- mController = NULL;
-}
-
-// Called every viewer frame
-void LLLeapMotionController::stepFrame()
-{
- if (mController &&
- STATE_STARTED == LLStartUp::getStartupState())
- {
- mController->stepFrame();
- }
-}
-
-// Leap Motion flycam
-bool LLLMImpl::getOverrideCamera()
-{
- return mOverrideCamera;
-}
-
-// This controller mode is used to fly around with the camera
-void LLLMImpl::modeFlycam(Leap::HandList& hands)
-{
- static bool old_joystick_enabled=false;
-
- S32 numHands=hands.count();
- if(numHands!=1)
- {
- if(mOverrideCamera)
- {
- mOverrideCamera=false;
-
- gSavedSettings.setBOOL("JoystickEnabled",old_joystick_enabled);
- gSavedSettings.setBOOL("JoystickFlycamEnabled",false);
-
- LLPanelStandStopFlying::clearStandStopFlyingMode(LLPanelStandStopFlying::SSFM_FLYCAM);
-
- // make sure to keep the camera where we left it when we switch off flycam
- LLViewerJoystick::instance().setCameraNeedsUpdate(false);
- }
- }
- else
- {
- // Get the first hand
- Leap::Hand hand=hands[0];
-
- // Check if the hand has at least 3 fingers
- Leap::FingerList finger_list=hand.fingers();
- S32 num_fingers=finger_list.count();
-
- static F32 y_rot=0.0f;
- static F32 z_rot=0.0f;
-
- if(!mOverrideCamera)
- {
- mOverrideCamera=true;
-
- old_joystick_enabled=gSavedSettings.getBOOL("JoystickEnabled");
-
- gSavedSettings.setBOOL("JoystickEnabled",true);
- gSavedSettings.setBOOL("JoystickFlycamEnabled",true);
-
- mFlycamPos=LLViewerCamera::instance().getOrigin();
- mFlycamDelta=LLVector3::zero;
- mFlycamFeatheredDelta=LLVector3::zero;
- mFlycamInitialRot=LLViewerCamera::instance().getQuaternion();
- mFlycamRot=LLVector3::zero;
- mFlycamFeatheredRot=LLVector3::zero;
- y_rot=0.0f;
- z_rot=0.0f;
-
- LLPanelStandStopFlying::setStandStopFlyingMode(LLPanelStandStopFlying::SSFM_FLYCAM);
- }
-
- Leap::Vector palm_pos=hand.palmPosition();
- Leap::Vector palm_normal=hand.palmNormal();
-
- if(num_fingers<3)
- {
- mFlycamDelta=LLVector3::zero;
- mHandCenterPos=hand.palmPosition();
-
- // auto leveling (not quite perfect yet)
- mFlycamRot=LLVector3(0.0f,y_rot,z_rot);
- }
- else
- {
- F32 delta=palm_pos.z-mHandCenterPos.z;
- if(fabsf(delta)>5.0f)
- {
- mFlycamDelta.mV[VX]=-delta*fabsf(delta)/1000.0f;
- }
-
- delta=palm_pos.y-mHandCenterPos.y;
- if(fabsf(delta)>5.0f)
- {
- mFlycamDelta.mV[VZ]=delta*fabsf(delta)/1000.0f;
- }
-
- delta=palm_pos.x-mHandCenterPos.x;
- if(fabsf(delta)>5.0f)
- {
- mFlycamDelta.mV[VY]=-delta*fabsf(delta)/1000.0f;
- }
-
- y_rot=palm_normal.z*150.0f;
- if(fabsf(palm_normal.x)>0.2f)
- {
- z_rot+=(palm_normal.x*fabsf(palm_normal.x)*50.0f);
- }
-
- // palm_normal.z = pitch
- // palm_normal.x = roll
- mFlycamRot=LLVector3(-palm_normal.x*60.0f,y_rot,z_rot);
- }
- }
-}
-
-void LLLMImpl::moveFlycam()
-{
- if(!mOverrideCamera)
- {
- return;
- }
-
- // simple feathering of the positional data
- mFlycamFeatheredDelta+=(mFlycamDelta-mFlycamFeatheredDelta)/10.0f;
-
- // simple feathering of the rotational data
- mFlycamFeatheredRot+=(mFlycamRot-mFlycamFeatheredRot)/10.0f;
-
- LLQuaternion final_flycam_rot=mayaQ(
- mFlycamFeatheredRot.mV[VX],
- mFlycamFeatheredRot.mV[VY],
- mFlycamFeatheredRot.mV[VZ],
- LLQuaternion::XYZ
- );
-
- final_flycam_rot=final_flycam_rot*mayaQ(
- 0.0f,
- 0.0f,
- mFlycamFeatheredRot.mV[VZ],
- LLQuaternion::XYZ
- );
-
- final_flycam_rot=final_flycam_rot*mFlycamInitialRot;
-
- mFlycamPos+=mFlycamFeatheredDelta*final_flycam_rot;
-
- LLViewerCamera::instance().setView(LLViewerCamera::instance().getView());
- LLViewerCamera::instance().setOrigin(mFlycamPos);
-
- LLMatrix3 mat(final_flycam_rot);
- LLViewerCamera::instance().mXAxis=LLVector3(mat.mMatrix[0]);
- LLViewerCamera::instance().mYAxis=LLVector3(mat.mMatrix[1]);
- LLViewerCamera::instance().mZAxis=LLVector3(mat.mMatrix[2]);
-}
-
-bool LLLeapMotionController::getOverrideCamera()
-{
- return mController->getOverrideCamera();
-}
-
-void LLLeapMotionController::moveFlycam()
-{
- if(mController->getOverrideCamera())
- {
- mController->moveFlycam();
- }
-}
-//
-
-std::string LLLeapMotionController::getDebugString()
-{
- if( !mController || STATE_STARTED != LLStartUp::getStartupState())
- return "";
-
- return mController->getDebugString();
-}
-
-void LLLeapMotionController::render()
-{
- if( !mController || STATE_STARTED != LLStartUp::getStartupState())
- return;
-
- return mController->render();
-}
-#endif
diff --git a/indra/newview/llleapmotioncontroller.h b/indra/newview/llleapmotioncontroller.h
deleted file mode 100644
index fb089c927e..0000000000
--- a/indra/newview/llleapmotioncontroller.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * @file llleapmotioncontroller.h
- * @brief LLLeapMotionController class definition
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLLEAPMOTIONCONTROLLER_H
-#define LL_LLLEAPMOTIONCONTROLLER_H
-
-#include "llsingleton.h"
-
-class LLLMImpl;
-
-class LLLeapMotionController : public LLSingleton
-{
- friend class LLSingleton;
-public:
- LLLeapMotionController();
- ~LLLeapMotionController();
-
- void cleanup();
-
- // Called every viewer frame
- void stepFrame();
-
- std::string getDebugString();
-
- void render();
-
-protected:
- LLLMImpl * mController;
-
-// Leap Motion flycam
-public:
- // returns true if in leapmotion flycam mode
- bool getOverrideCamera();
-
- // Called every viewer frame when in flycam mode
- void moveFlycam();
-//
-};
-
-#ifndef USE_LEAPMOTION
-inline LLLeapMotionController::LLLeapMotionController()
-{
-}
-
-inline LLLeapMotionController::~LLLeapMotionController()
-{
-}
-
-inline void LLLeapMotionController::cleanup()
-{
-}
-
-inline void LLLeapMotionController::stepFrame()
-{
-}
-
-inline std::string LLLeapMotionController::getDebugString()
-{
- return "";
-}
-
-inline void LLLeapMotionController::render()
-{
-}
-
-#endif
-
-#endif // LL_LLLEAPMOTIONCONTROLLER_H
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index eccce66d1f..116c210eb9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -232,7 +232,6 @@
#include "llnetmap.h"
#include "lggcontactsets.h"
-#include "llleapmotioncontroller.h"
#include "lltracerecording.h"
//
@@ -922,12 +921,6 @@ public:
if( LLImageBase::getAllocationErrors() )
addText( xpos, ypos, llformat( "# textures discarded due to insufficient memory %ld", LLImageBase::getAllocationErrors() ) );
//
-
- // Add some fancy leap debug text
- std::string strLeapDebug( LLLeapMotionController::getInstance()->getDebugString() );
- if( strLeapDebug.size() )
- addText( xpos, ypos, strLeapDebug );
- //
}
void draw()
diff --git a/scripts/configure_firestorm.sh b/scripts/configure_firestorm.sh
index c0750603e3..94400bb4e0 100755
--- a/scripts/configure_firestorm.sh
+++ b/scripts/configure_firestorm.sh
@@ -17,7 +17,6 @@ FALSE=1
# -DINSTALL_PROPRIETARY=FALSE
# -DUSE_KDU=TRUE
# -DFMODEX:BOOL=ON
-# -DLEAPMOTION:BOOL=OFF
# -DOPENSIM:BOOL=ON
# -DUSE_AVX_OPTIMIZATION:BOOL=OFF
# -DLL_TESTS:BOOL=OFF
@@ -34,7 +33,6 @@ WANTS_PACKAGE=$FALSE
WANTS_VERSION=$FALSE
WANTS_KDU=$FALSE
WANTS_FMODEX=$FALSE
-WANTS_LEAPMOTION=$FALSE
WANTS_OPENSIM=$TRUE
WANTS_AVX=$FALSE
WANTS_BUILD=$FALSE
@@ -99,7 +97,6 @@ getArgs()
;;
kdu) WANTS_KDU=$TRUE;;
fmodex) WANTS_FMODEX=$TRUE;;
- leapmotion) WANTS_LEAPMOTION=$TRUE;;
opensim) WANTS_OPENSIM=$TRUE;;
no-opensim) WANTS_OPENSIM=$FALSE;;
avx) WANTS_AVX=$TRUE;;
@@ -276,7 +273,6 @@ echo -e "configure_firestorm.py" > $LOG
echo -e " PLATFORM: '$PLATFORM'" | tee -a $LOG
echo -e " KDU: `b2a $WANTS_KDU`" | tee -a $LOG
echo -e " FMODEX: `b2a $WANTS_FMODEX`" | tee -a $LOG
-echo -e " LEAPMOTION: `b2a $WANTS_LEAPMOTION`" | tee -a $LOG
echo -e " OPENSIM: `b2a $WANTS_OPENSIM`" | tee -a $LOG
echo -e " AVX: `b2a $WANTS_AVX` " | tee -a $LOG
echo -e " PACKAGE: `b2a $WANTS_PACKAGE`" | tee -a $LOG
@@ -374,11 +370,6 @@ if [ $WANTS_CONFIG -eq $TRUE ] ; then
else
FMODEX="-DFMODEX:BOOL=OFF"
fi
- if [ $WANTS_LEAPMOTION -eq $TRUE ] ; then
- LEAPMOTION="-DLEAPMOTION:BOOL=ON"
- else
- LEAPMOTION="-DLEAPMOTION:BOOL=OFF"
- fi
if [ $WANTS_OPENSIM -eq $TRUE ] ; then
OPENSIM="-DOPENSIM:BOOL=ON"
else
@@ -444,7 +435,7 @@ if [ $WANTS_CONFIG -eq $TRUE ] ; then
UNATTENDED="-DUNATTENDED=ON"
fi
- cmake -G "$TARGET" ../indra $CHANNEL $FMODEX $KDU $LEAPMOTION $OPENSIM $AVX_OPTIMIZATION $PACKAGE $UNATTENDED -DLL_TESTS:BOOL=OFF -DWORD_SIZE:STRING=$WORD_SIZE -DCMAKE_BUILD_TYPE:STRING=$BTYPE \
+ cmake -G "$TARGET" ../indra $CHANNEL $FMODEX $KDU $OPENSIM $AVX_OPTIMIZATION $PACKAGE $UNATTENDED -DLL_TESTS:BOOL=OFF -DWORD_SIZE:STRING=$WORD_SIZE -DCMAKE_BUILD_TYPE:STRING=$BTYPE \
-DNDTARGET_ARCH:STRING="${TARGET_ARCH}" -DROOT_PROJECT_NAME:STRING=Firestorm $LL_ARGS_PASSTHRU | tee $LOG
if [ $PLATFORM == "win32" ] ; then