From Torben Dannhauer, "I extended the attached CMAKE module to search for the collada libraries of my VS2008 3rdParty package if no other library is found.

No CMAKE should recognize all libraries of the VS2008 3rdParty Package."
This commit is contained in:
Robert Osfield
2010-09-09 10:44:11 +00:00
parent 2f14255dd7
commit 78cb15fdf8
3 changed files with 111 additions and 24 deletions

View File

@@ -13,7 +13,16 @@
#
# Created by Robert Osfield.
SET(COLLADA_DOM_ROOT "$ENV{COLLADA_DIR}/dom" CACHE PATH "Location of Collada DOM directory")
# Check if COLLADA_DIR is set, otherwise use ACTUAL_3DPARTY_DIR:
SET( COLLADA_ENV_VAR_AVAILABLE $ENV{COLLADA_DIR} )
IF ( COLLADA_ENV_VAR_AVAILABLE )
SET(COLLADA_DOM_ROOT "$ENV{COLLADA_DIR}/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
ELSE ( COLLADA_ENV_VAR_AVAILABLE )
SET(COLLADA_DOM_ROOT "${ACTUAL_3DPARTY_DIR}/include/1.4/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
ENDIF( COLLADA_ENV_VAR_AVAILABLE )
IF(APPLE)
SET(COLLADA_BUILDNAME "mac")
@@ -41,6 +50,7 @@ FIND_PATH(COLLADA_INCLUDE_DIR dae.h
/opt/csw/include # Blastwave
/opt/include
/usr/freeware/include
${ACTUAL_3DPARTY_DIR}/include
)
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
@@ -62,6 +72,7 @@ FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
@@ -83,6 +94,7 @@ FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_STATIC_LIBRARY
@@ -104,6 +116,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
@@ -125,13 +138,14 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
${ACTUAL_3DPARTY_DIR}/lib
)
# find extra libraries that the static linking requires
FIND_PACKAGE(LibXml2)
IF (LIBXML2_FOUND)
SET(COLLADA_LIBXML_LIBRARY ${LIBXML2_LIBRARIES})
SET(COLLADA_LIBXML_LIBRARY "${LIBXML2_LIBRARIES}" CACHE FILEPATH "" FORCE)
ELSE(LIBXML2_FOUND)
IF(WIN32)
FIND_LIBRARY(COLLADA_LIBXML_LIBRARY
@@ -139,13 +153,14 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
PATHS
${COLLADA_DOM_ROOT}/external-libs/libxml2/win32/lib
${COLLADA_DOM_ROOT}/external-libs/libxml2/mingw/lib
${ACTUAL_3DPARTY_DIR}/lib
)
ENDIF(WIN32)
ENDIF(LIBXML2_FOUND)
FIND_PACKAGE(ZLIB)
IF (ZLIB_FOUND)
SET(COLLADA_ZLIB_LIBRARY ${ZLIB_LIBRARY})
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
ELSE(ZLIB_FOUND)
IF(WIN32)
FIND_LIBRARY(COLLADA_ZLIB_LIBRARY
@@ -153,6 +168,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
PATHS
${COLLADA_DOM_ROOT}/external-libs/libxml2/win32/lib
${COLLADA_DOM_ROOT}/external-libs/libxml2/mingw/lib
${ACTUAL_3DPARTY_DIR}/lib
)
ENDIF(WIN32)
ENDIF(ZLIB_FOUND)
@@ -163,14 +179,16 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mac
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_PCRECPP_LIBRARY_DEBUG
NAMES pcrecpp-d
NAMES pcrecpp-d pcrecppd
PATHS
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mac
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_PCRE_LIBRARY
@@ -179,14 +197,16 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mac
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_PCRE_LIBRARY_DEBUG
NAMES pcre-d
NAMES pcre-d pcred
PATHS
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mac
${COLLADA_DOM_ROOT}/external-libs/pcre/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_MINIZIP_LIBRARY
@@ -194,41 +214,47 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
PATHS
${COLLADA_DOM_ROOT}/external-libs/minizip/win32/lib
${COLLADA_DOM_ROOT}/external-libs/minizip/mac
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_MINIZIP_LIBRARY_DEBUG
NAMES minizip-d
NAMES minizip-d minizipD
PATHS
${COLLADA_DOM_ROOT}/external-libs/minizip/win32/lib
${COLLADA_DOM_ROOT}/external-libs/minizip/mac
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY
NAMES libboost_filesystem boost_filesystem
NAMES libboost_filesystem boost_filesystem libboost_filesystem-vc90-mt
PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG
NAMES libboost_filesystem-d boost_filesystem-d
NAMES libboost_filesystem-d boost_filesystem-d libboost_filesystem-vc90-mt-gd
PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY
NAMES libboost_system boost_system
NAMES libboost_system boost_system libboost_system-vc90-mt
PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)
FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG
NAMES libboost_system-d boost_system-d
NAMES libboost_system-d boost_system-d libboost_system-vc90-mt-gd
PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
${ACTUAL_3DPARTY_DIR}/lib
)

View File

@@ -135,7 +135,8 @@ class OSGVIEWER_EXPORT GraphicsWindowWin32 : public osgViewer::GraphicsWindow, p
bool setPixelFormat();
void adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask );
// return true if it handled the key, otherwise return false so that we know it is WM_CHAR job to handle it
bool adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask );
void transformMouseXY(float& x, float& y);
@@ -179,6 +180,9 @@ class OSGVIEWER_EXPORT GraphicsWindowWin32 : public osgViewer::GraphicsWindow, p
std::map<MouseCursor,HCURSOR> _mouseCursorMap;
std::map<int, bool> _keyMap;
bool _keypresshandled;
int _lastkeysymbol;
std::map<int, int> _scancode_unicode_Map;
bool _applyWorkaroundForMultimonitorMultithreadNVidiaWin32Issues;
};

View File

@@ -2212,7 +2212,7 @@ void GraphicsWindowWin32::setSyncToVBlank( bool on )
#endif
}
void GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask )
bool GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask )
{
modifierMask = 0;
@@ -2224,7 +2224,7 @@ void GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol
if (virtualKey==0 || !::GetKeyboardState(keyState))
{
keySymbol = 0;
return;
return true;
}
switch (virtualKey)
@@ -2280,10 +2280,15 @@ void GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol
}
else if ((keySymbol & 0xff00)==0)
{
char asciiKey[2];
int numChars = ::ToAscii(wParam, (lParam>>16)&0xff, keyState, reinterpret_cast<WORD*>(asciiKey), 0);
if (numChars>0) keySymbol = asciiKey[0];
// store the raw key so to be used later in WM_CHAR event
keySymbol = ::MapVirtualKeyEx(HIWORD(lParam), 2, ::GetKeyboardLayout(0));
// might be an unicode key or dead key so need to be handled by WM_CHAR
return false;
}
// it was a special key so event is handled
return true;
}
void GraphicsWindowWin32::transformMouseXY( float& x, float& y )
@@ -2434,6 +2439,36 @@ LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, W
}
}
break;
/////////////////
case WM_CHAR :
/////////////////
{
// if event was not handled by WM_KEYDOWN then we take care of it here
// this method gives directly the utf16 char back so just need to add it as it is
if(!_keypresshandled)
{
// first check if key is already registered on the map
std::map<int, int>::iterator it = _scancode_unicode_Map.find(_lastkeysymbol);
if(it != _scancode_unicode_Map.end())
{
// map already exist -> key already pressed and not yet released
if((it->second != -1) && (it->second != wParam))
{
// was a different char stored - probably a dead key combinaison
// -> we need to release it first
_keyMap[it->second] = false;
getEventQueue()->keyRelease(it->second, eventTime);
}
}
// store the raw key in map so that we know what to release later in WM_KEYUP event
_scancode_unicode_Map[_lastkeysymbol] = wParam;
_keyMap[wParam] = true;
getEventQueue()->keyPress(wParam, eventTime);
}
}
break;
////////////////////
case WM_KEYDOWN :
@@ -2443,10 +2478,19 @@ LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, W
{
int keySymbol = 0;
unsigned int modifierMask = 0;
adaptKey(wParam, lParam, keySymbol, modifierMask);
_keyMap[keySymbol] = true;
//getEventQueue()->getCurrentEventState()->setModKeyMask(modifierMask);
getEventQueue()->keyPress(keySymbol, eventTime);
if(adaptKey(wParam, lParam, keySymbol, modifierMask))
{
// was a special key, we handled it
_keypresshandled = true;
_keyMap[keySymbol] = true;
getEventQueue()->keyPress(keySymbol, eventTime);
}
else
{
// was no special key, let WM_CHAR handle it
_keypresshandled = false;
_lastkeysymbol = keySymbol;
}
}
break;
@@ -2458,10 +2502,23 @@ LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, W
{
int keySymbol = 0;
unsigned int modifierMask = 0;
adaptKey(wParam, lParam, keySymbol, modifierMask);
_keyMap[keySymbol] = false;
//getEventQueue()->getCurrentEventState()->setModKeyMask(modifierMask);
getEventQueue()->keyRelease(keySymbol, eventTime);
if(!adaptKey(wParam, lParam, keySymbol, modifierMask))
{
// was not a special key - this mean we need to release the unicode key
// -> fetch it from the map
std::map<int, int>::iterator it = _scancode_unicode_Map.find(keySymbol);
if(it != _scancode_unicode_Map.end())
{
keySymbol = it->second;
it->second = -1; // clean the release key from the map
}
}
if(keySymbol >= 0)
{
_keyMap[keySymbol] = false;
getEventQueue()->keyRelease(keySymbol, eventTime);
}
}
break;