diff options
206 files changed, 3141 insertions, 453 deletions
| diff --git a/.gitignore b/.gitignore index d9b0b9eb20..aa530af67b 100755 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@  CMakeCache.txt  cmake_install.cmake  LICENSES +build/  build-darwin-*  build-linux-*  debian/files @@ -5,7 +5,7 @@  </picture>  **[Second Life][] is a free 3D virtual world where users can create, connect and chat with others from around the -world.** This repository contains the source code for the official client. +world.** This repository contains a fork of the source code for the official client.  ## Open Source @@ -28,9 +28,47 @@ Third party maintained forks, which include Linux compatible builds, are indexed  [Windows](https://wiki.secondlife.com/wiki/Build_the_Viewer_on_Windows) -[Mac](https://wiki.secondlife.com/wiki/Build_the_Viewer_on_macOS) +### macOS -[Linux](https://wiki.secondlife.com/wiki/Build_the_Viewer_on_Linux) +``` +# port install git cmake pkgconfig apr-util boost collada-dom freealut hunspell jsoncpp libsdl2 uriparser VLC +$ export LL_BUILD="-DLL_DARWIN=1 -DPIC -fPIC -gdwarf-2 -stdlib=libc++ -iwithsysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1" +``` + +### GNU/Linux + +``` +# apt install git cmake pkg-config libalut-dev libaprutil-dev libboost-fiber-dev libboost-program-options-dev libboost-regex-dev libcollada-dom-dev libcurl4-openssl-dev libexpat1-dev libglu1-mesa-dev libgtk2.0-dev libhunspell-dev libjsoncpp-dev libmeshoptimizer-dev libnghttp2-dev libopenjp2-dev libsdl2-dev liburiparser-dev libvlc-dev libvlccore-dev libvorbis-dev libxmlrpc-epi-dev libxxhash-dev +$ export LL_BUILD="-DLL_LINUX=1 -fPIC" +``` + +### FreeBSD + +``` +# portmaster devel/git devel/cmake devel/pkgconf devel/apr1 devel/collada-dom devel/sdl20 devel/xxhash audio/freealut audio/libvorbis graphics/openjpeg misc/meshoptimizer multimedia/vlc net/uriparser net/xmlrpc-epi textproc/hunspell x11-toolkits/gtk20 +$ setenv LL_BUILD "-DLL_FREEBSD=1 -fPIC" +``` + +### Common + +``` +$ cd viewer +$ git remote add megapahit https://megapahit.org/viewer.git +$ git fetch megapahit +$ git checkout megapahit/main +$ mkdir -p build +$ cd build +$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:INTERNAL=64 -DUSESYSTEMLIBS:BOOL=ON -DUSE_OPENAL:BOOL=ON -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=OFF -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=megapahit -DBUILD_SHARED_LIBS:BOOL=ON -DPACKAGE:BOOL=OFF -DINSTALL:BOOL=ON ../indra +$ make -j12 +$ sudo make install +$ megapahit +``` + +## Example + + + +Running natively on FreeBSD (not with Linux binary compatibility).  ## Contribute diff --git a/doc/freebsd.jpg b/doc/freebsd.jpgBinary files differ new file mode 100644 index 0000000000..23c2c53925 --- /dev/null +++ b/doc/freebsd.jpg diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 205ce402a0..1b13ae4843 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -24,6 +24,10 @@ if( USE_CONAN )      set( USE_AUTOBUILD_3P OFF )      conan_basic_setup(TARGETS NO_OUTPUT_DIRS)      add_compile_definitions(LL_USESYSTEMLIBS USE_CONAN NO_AUTOBUILD_3P) +elseif( USESYSTEMLIBS ) +    set( USE_CONAN OFF ) +    set( USE_AUTOBUILD_3P OFF ) +    add_compile_definitions(LL_USESYSTEMLIBS)  else()    set( USE_CONAN OFF )    set( USE_AUTOBUILD_3P ON ) @@ -120,7 +124,7 @@ else (USE_BUGSPLAT)  endif (USE_BUGSPLAT)  add_subdirectory(${VIEWER_PREFIX}newview) -add_dependencies(viewer secondlife-bin) +add_dependencies(viewer ${VIEWER_BINARY_NAME})  add_subdirectory(${VIEWER_PREFIX}doxygen EXCLUDE_FROM_ALL) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index a93c5d06e8..66f1a03454 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -110,7 +110,7 @@ if (WINDOWS)  endif (WINDOWS) -if (LINUX) +if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")    set(CMAKE_SKIP_RPATH TRUE)     # EXTERNAL_TOS @@ -138,9 +138,12 @@ if (LINUX)            -pthread            -Wno-parentheses            -Wno-deprecated -          -fvisibility=hidden    ) +  if (NOT BUILD_SHARED_LIBS) +    add_compile_options(-fvisibility=hidden) +  endif (NOT BUILD_SHARED_LIBS) +    if (ADDRESS_SIZE EQUAL 32)      add_compile_options(-march=pentium4)    endif (ADDRESS_SIZE EQUAL 32) @@ -151,7 +154,7 @@ if (LINUX)    set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")    set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}") -endif (LINUX) +endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")  if (DARWIN) diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 8a0939c92c..29efa634c1 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -5,6 +5,15 @@ include_guard()  add_library( ll::apr INTERFACE IMPORTED ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  include(FindPkgConfig) +  pkg_check_modules(Apr REQUIRED apr-1 apr-util-1) +  target_include_directories(ll::apr SYSTEM INTERFACE ${Apr_INCLUDE_DIRS}) +  target_link_directories(ll::apr INTERFACE ${Apr_LIBRARY_DIRS}) +  target_link_libraries(ll::apr INTERFACE ${Apr_LIBRARIES}) +  return () +endif () +  use_system_binary( apr apr-util )  use_prebuilt_binary(apr_suite) diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake index 38547bb017..4c1a141dc5 100644 --- a/indra/cmake/Audio.cmake +++ b/indra/cmake/Audio.cmake @@ -4,6 +4,15 @@ include(Prebuilt)  include_guard()  add_library( ll::vorbis INTERFACE IMPORTED ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  include(FindPkgConfig) +  pkg_check_modules(Vorbis REQUIRED ogg vorbis vorbisenc vorbisfile) +  target_include_directories(ll::vorbis SYSTEM INTERFACE ${Vorbis_INCLUDE_DIRS}) +  target_link_directories(ll::vorbis INTERFACE ${Vorbis_LIBRARY_DIRS}) +  target_link_libraries(ll::vorbis INTERFACE ${Vorbis_LIBRARIES}) +  return () +endif () +  use_system_binary(vorbis)  use_prebuilt_binary(ogg_vorbis)  target_include_directories( ll::vorbis SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include ) diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake index 601a23a86d..0c5abd885c 100644 --- a/indra/cmake/Boost.cmake +++ b/indra/cmake/Boost.cmake @@ -8,6 +8,21 @@ if( USE_CONAN )    target_link_libraries( ll::boost INTERFACE CONAN_PKG::boost )    target_compile_definitions( ll::boost INTERFACE BOOST_ALLOW_DEPRECATED_HEADERS BOOST_BIND_GLOBAL_PLACEHOLDERS )    return() +elseif( NOT USE_AUTOBUILD_3P ) +  find_package( Boost REQUIRED ) +  target_compile_definitions( ll::boost INTERFACE BOOST_BIND_GLOBAL_PLACEHOLDERS ) +  if (DARWIN) +    set(sfx "-mt") +  endif() +  target_link_libraries( ll::boost INTERFACE +	  boost_context${sfx} +	  boost_fiber${sfx} +	  boost_filesystem${sfx} +	  boost_program_options${sfx} +	  boost_regex${sfx} +	  boost_system${sfx} +	  boost_thread${sfx}) +  return()  endif()  use_prebuilt_binary(boost) diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake index b531f29ee2..a56829bf14 100644 --- a/indra/cmake/BuildVersion.cmake +++ b/indra/cmake/BuildVersion.cmake @@ -55,4 +55,10 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n          "LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"          "LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\""          ) +if (PACKAGE) +	include(CPack) +	set(CPACK_PACKAGE_VERSION +		${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION} +		CACHE STRING "Viewer major.minor.patch.revision versions.") +endif (PACKAGE)  endif (NOT DEFINED VIEWER_SHORT_VERSION) diff --git a/indra/cmake/ConfigurePkgConfig.cmake b/indra/cmake/ConfigurePkgConfig.cmake index 55d865392e..a2d5b31e25 100644 --- a/indra/cmake/ConfigurePkgConfig.cmake +++ b/indra/cmake/ConfigurePkgConfig.cmake @@ -14,7 +14,7 @@ IF("$ENV{PKG_CONFIG_LIBDIR}" STREQUAL "")    else (ADDRESS_SIZE EQUAL 32)      SET(PKG_CONFIG_NO_MULTI_GUESS /usr/lib64 /usr/lib)      SET(PKG_CONFIG_NO_MULTI_LOCAL_GUESS /usr/local/lib64 /usr/local/lib) -    SET(PKG_CONFIG_MULTI_GUESS /usr/local/lib/x86_64-linux-gnu) +    SET(PKG_CONFIG_MULTI_GUESS /usr/lib/x86_64-linux-gnu)      SET(PKG_CONFIG_MULTI_LOCAL_GUESS /usr/local/lib/x86_64-linux-gnu)    endif (ADDRESS_SIZE EQUAL 32) diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake index 77140af641..fbf188d100 100644 --- a/indra/cmake/FreeType.cmake +++ b/indra/cmake/FreeType.cmake @@ -4,6 +4,15 @@ include(Prebuilt)  include_guard()  add_library( ll::freetype INTERFACE IMPORTED ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  include(FindPkgConfig) +  pkg_check_modules(Freetype REQUIRED freetype2) +  target_include_directories( ll::freetype SYSTEM INTERFACE ${Freetype_INCLUDE_DIRS} ) +  target_link_directories( ll::freetype INTERFACE ${Freetype_LIBRARY_DIRS} ) +  target_link_libraries( ll::freetype INTERFACE ${Freetype_LIBRARIES} ) +  return () +endif () +  use_system_binary(freetype)  use_prebuilt_binary(freetype)  target_include_directories( ll::freetype SYSTEM INTERFACE  ${LIBS_PREBUILT_DIR}/include/freetype2/) diff --git a/indra/cmake/GLEXT.cmake b/indra/cmake/GLEXT.cmake index a780966f0c..ea349237d3 100644 --- a/indra/cmake/GLEXT.cmake +++ b/indra/cmake/GLEXT.cmake @@ -3,7 +3,10 @@ include(Prebuilt)  include(GLH)  add_library( ll::glext INTERFACE IMPORTED ) -use_system_binary(glext) -use_prebuilt_binary(glext) +if (USESYSTEMLIBS) +  return () +endif () +use_system_binary(glext) +use_prebuilt_binary(glext) diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake index 0cefc3543a..09f7d568be 100644 --- a/indra/cmake/GLH.cmake +++ b/indra/cmake/GLH.cmake @@ -3,5 +3,11 @@ include(Prebuilt)  add_library( ll::glh_linear INTERFACE IMPORTED ) +if (USESYSTEMLIBS) +	target_include_directories(ll::glh_linear SYSTEM INTERFACE +		${CMAKE_SYSROOT}/usr/local/include) +	return () +endif () +  use_system_binary( glh_linear )  use_prebuilt_binary(glh_linear) diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake index bb037c0237..96c75ad262 100644 --- a/indra/cmake/Hunspell.cmake +++ b/indra/cmake/Hunspell.cmake @@ -2,7 +2,9 @@  include(Prebuilt)  include_guard() +if (USE_AUTOBUILD_3P OR USE_CONAN)  use_prebuilt_binary(dictionaries) +endif ()  add_library( ll::hunspell INTERFACE IMPORTED )  use_system_binary(hunspell) diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 36821447c9..b2151dc781 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -26,6 +26,9 @@ if (HAVOK)  elseif (HAVOK_TPV)     use_prebuilt_binary(llphysicsextensions_tpv)     target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions_tpv) +elseif (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +   target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensionsstub) +   return ()  else (HAVOK)     use_prebuilt_binary(llphysicsextensions_stub)     set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/stub) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index 3d8499cbc3..387cae61d8 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -11,6 +11,16 @@ add_library( ll::minizip-ng INTERFACE IMPORTED )  add_library( ll::libxml INTERFACE IMPORTED )  add_library( ll::colladadom INTERFACE IMPORTED ) +if ( NOT (USE_AUTOBUILD_3P OR USE_CONAN) ) +  include(FindPkgConfig) +  pkg_check_modules(Colladadom REQUIRED collada-dom) +  target_compile_definitions( ll::colladadom INTERFACE COLLADA_DOM_SUPPORT141 ) +  target_include_directories( ll::colladadom SYSTEM INTERFACE ${Colladadom_INCLUDE_DIRS} ${Colladadom_INCLUDE_DIRS}/1.4 ) +  target_link_directories( ll::colladadom INTERFACE ${Colladadom_LIBRARY_DIRS} ) +  target_link_libraries( ll::colladadom INTERFACE ${Colladadom_LIBRARIES} ) +  return () +endif () +  # ND, needs fixup in collada conan pkg  if( USE_CONAN )    target_include_directories( ll::colladadom SYSTEM INTERFACE diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index b36e970560..8cb383d718 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -7,6 +7,19 @@ include(Prebuilt)  include_guard()  add_library( ll::SDL INTERFACE IMPORTED ) +if (USESYSTEMLIBS) +  include(FindPkgConfig) +  pkg_check_modules(Sdl2 REQUIRED sdl2) +  target_compile_definitions( ll::SDL INTERFACE LL_SDL=1) +  target_include_directories(ll::SDL SYSTEM INTERFACE ${Sdl2_INCLUDE_DIRS}) +  target_link_directories(ll::SDL INTERFACE ${Sdl2_LIBRARY_DIRS}) +  if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") +    list(APPEND Sdl2_LIBRARIES X11) +  endif () +  target_link_libraries(ll::SDL INTERFACE ${Sdl2_LIBRARIES}) +  return () +endif () +  if (LINUX)    #Must come first as use_system_binary can exit this file early diff --git a/indra/cmake/LibVLCPlugin.cmake b/indra/cmake/LibVLCPlugin.cmake index 599ce02844..f4ec34ec1b 100644 --- a/indra/cmake/LibVLCPlugin.cmake +++ b/indra/cmake/LibVLCPlugin.cmake @@ -5,9 +5,26 @@ include(Prebuilt)  include_guard()  add_library( ll::libvlc INTERFACE IMPORTED ) +if (USE_AUTOBUILD_3P OR USE_CONAN)  use_prebuilt_binary(vlc-bin)  set(LIBVLCPLUGIN ON CACHE BOOL          "LIBVLCPLUGIN support for the llplugin/llmedia test apps.") +else () +    include(FindPkgConfig) +    if (DARWIN) +        set(CMAKE_PREFIX_PATH "/opt/local/libexec/vlc3/lib/pkgconfig") +        pkg_check_modules(Libvlc REQUIRED libvlc) +        target_link_libraries( ll::libvlc INTERFACE vlccore ) +    else () +        pkg_check_modules(Libvlc REQUIRED libvlc vlc-plugin) +    endif () +    target_include_directories( ll::libvlc SYSTEM INTERFACE ${Libvlc_INCLUDE_DIRS} ) +    target_link_directories( ll::libvlc INTERFACE ${Libvlc_LIBRARY_DIRS} ) +    target_link_libraries( ll::libvlc INTERFACE ${Libvlc_LIBRARIES} ) +    set(LIBVLCPLUGIN ON CACHE BOOL +            "LIBVLCPLUGIN support for the llplugin/llmedia test apps.") +    return() +endif ()  if (WINDOWS)      target_link_libraries( ll::libvlc INTERFACE diff --git a/indra/cmake/LibraryInstall.cmake b/indra/cmake/LibraryInstall.cmake new file mode 100644 index 0000000000..01838fe42e --- /dev/null +++ b/indra/cmake/LibraryInstall.cmake @@ -0,0 +1,6 @@ +list(REMOVE_ITEM ${PROJECT_NAME}_HEADER_FILES CMakeLists.txt) +#install(FILES ${${PROJECT_NAME}_HEADER_FILES} +#	DESTINATION include/${PROJECT_NAME}) +if (BUILD_SHARED_LIBS) +	install(TARGETS ${PROJECT_NAME} DESTINATION lib) +endif () diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 4a501f420b..14b5e76877 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -64,7 +64,7 @@ elseif (WINDOWS)            dbghelp            legacy_stdio_definitions            ) -else() +elseif (DARWIN)    include(CMakeFindFrameworks)    find_library(COREFOUNDATION_LIBRARY CoreFoundation)    find_library(CARBON_LIBRARY Carbon) diff --git a/indra/cmake/Meshoptimizer.cmake b/indra/cmake/Meshoptimizer.cmake index fd144d2b97..70b3a2c088 100644 --- a/indra/cmake/Meshoptimizer.cmake +++ b/indra/cmake/Meshoptimizer.cmake @@ -6,6 +6,12 @@ include(Prebuilt)  include_guard()  add_library( ll::meshoptimizer INTERFACE IMPORTED ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  target_include_directories( ll::meshoptimizer SYSTEM INTERFACE ${CMAKE_SYSROOT}/usr/local/include ) +  target_link_libraries( ll::meshoptimizer INTERFACE meshoptimizer) +  return () +endif () +  use_system_binary(meshoptimizer)  use_prebuilt_binary(meshoptimizer) diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index 0b6a7c2853..cc7deac2d9 100644 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -18,6 +18,17 @@ endif()  if (USE_OPENAL)    add_library( ll::openal INTERFACE IMPORTED ) + +  if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +    target_compile_definitions( ll::openal INTERFACE LL_OPENAL=1) +    include(FindPkgConfig) +    pkg_check_modules(Openal REQUIRED freealut) +    target_include_directories(ll::openal SYSTEM INTERFACE ${Openal_INCLUDE_DIRS}) +    target_link_directories(ll::openal INTERFACE ${Openal_LIBRARY_DIRS}) +    target_link_libraries(ll::openal INTERFACE ${Openal_LIBRARIES}) +    return () +  endif () +    target_include_directories( ll::openal SYSTEM INTERFACE "${LIBS_PREBUILT_DIR}/include/AL")    target_compile_definitions( ll::openal INTERFACE LL_OPENAL=1)    use_prebuilt_binary(openal) diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake index c4aab2e9e5..83b959e140 100644 --- a/indra/cmake/OpenJPEG.cmake +++ b/indra/cmake/OpenJPEG.cmake @@ -4,8 +4,17 @@ include(Prebuilt)  include_guard()  add_library( ll::openjpeg INTERFACE IMPORTED ) -use_system_binary(openjpeg) -use_prebuilt_binary(openjpeg) +#if (USESYSTEMLIBS) +#  include(FindPkgConfig) +#  pkg_check_modules(Openjpeg REQUIRED libopenjp2) +#  target_include_directories(ll::openjpeg SYSTEM INTERFACE ${Openjpeg_INCLUDE_DIRS}) +#  target_link_directories(ll::openjpeg INTERFACE ${Openjpeg_LIBRARY_DIRS}) +#  target_link_libraries(ll::openjpeg INTERFACE ${Openjpeg_LIBRARIES}) +#  return () +#endif () + +#use_system_binary(openjpeg) +#use_prebuilt_binary(openjpeg)  target_link_libraries(ll::openjpeg INTERFACE openjp2 )  target_include_directories( ll::openjpeg SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/openjpeg) diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake index 3387c74f45..c9147f1d5e 100644 --- a/indra/cmake/OpenSSL.cmake +++ b/indra/cmake/OpenSSL.cmake @@ -4,8 +4,11 @@ include(Prebuilt)  include_guard()  add_library( ll::openssl INTERFACE IMPORTED ) +if (USE_AUTOBUILD_3P OR USE_CONAN)  use_system_binary(openssl)  use_prebuilt_binary(openssl) +endif () +  if (WINDOWS)    target_link_libraries(ll::openssl INTERFACE libssl libcrypto)  elseif (LINUX) @@ -13,5 +16,6 @@ elseif (LINUX)  else()    target_link_libraries(ll::openssl INTERFACE ssl crypto)  endif (WINDOWS) +if (USE_AUTOBUILD_3P OR USE_CONAN)  target_include_directories( ll::openssl SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include) - +endif () diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake index 634cc15c21..b0acae279b 100644 --- a/indra/cmake/Prebuilt.cmake +++ b/indra/cmake/Prebuilt.cmake @@ -67,6 +67,22 @@ macro ( use_system_binary package )        endif()      endforeach()      return() +  elseif( NOT USE_AUTOBUILD_3P ) +    include(FindPkgConfig) +    pkg_check_modules(${package} ${package}) +    if( ${package}_FOUND ) +      target_link_directories( ll::${package} INTERFACE ${${package}_LIBRARY_DIRS} ) +    else() +      pkg_check_modules(${package} lib${package}) +      if( ${package}_FOUND ) +        target_link_directories( ll::${package} INTERFACE ${${package}_LIBRARY_DIRS} ) +      else() +        find_package( ${package} REQUIRED ) +      endif() +    endif() +    target_include_directories( ll::${package} SYSTEM INTERFACE ${${package}_INCLUDE_DIRS} ) +    target_link_libraries( ll::${package} INTERFACE ${${package}_LIBRARIES} ) +    return()    endif()  endmacro() diff --git a/indra/cmake/TinyGLTF.cmake b/indra/cmake/TinyGLTF.cmake index bb731637a0..58ba5620bf 100644 --- a/indra/cmake/TinyGLTF.cmake +++ b/indra/cmake/TinyGLTF.cmake @@ -1,7 +1,11 @@  # -*- cmake -*-  include(Prebuilt) +if (NOT USESYSTEMLIBS) +  use_prebuilt_binary(tinygltf)  set(TINYGLTF_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/tinygltf)  +endif (NOT USESYSTEMLIBS) + diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake index 8b70192efc..03bdf4e434 100644 --- a/indra/cmake/UI.cmake +++ b/indra/cmake/UI.cmake @@ -4,12 +4,19 @@ include(FreeType)  add_library( ll::uilibraries INTERFACE IMPORTED ) -if (LINUX) +if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")    target_compile_definitions(ll::uilibraries INTERFACE LL_GTK=1 LL_X11=1 )    if( USE_CONAN )      target_link_libraries( ll::uilibraries INTERFACE CONAN_PKG::gtk )      return() +  elseif( NOT USE_AUTOBUILD_3P ) +    include(FindPkgConfig) +    pkg_check_modules(Gtk2 REQUIRED gtk+-2.0) +    target_include_directories( ll::uilibraries SYSTEM INTERFACE ${Gtk2_INCLUDE_DIRS} ) +    target_link_directories( ll::uilibraries INTERFACE ${Gtk2_LIBRARY_DIRS} ) +    target_link_libraries( ll::uilibraries INTERFACE ${Gtk2_LIBRARIES} ) +    return()    endif()    use_prebuilt_binary(gtk-atk-pango-glib) @@ -30,7 +37,7 @@ if (LINUX)            Xinerama            ll::freetype            ) -endif (LINUX) +endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")  if( WINDOWS )    target_link_libraries( ll::uilibraries INTERFACE            opengl32 @@ -48,7 +55,9 @@ if( WINDOWS )            )  endif() +if (USE_AUTOBUILD_3P OR USE_CONAN)  target_include_directories( ll::uilibraries SYSTEM INTERFACE          ${LIBS_PREBUILT_DIR}/include          ) +endif () diff --git a/indra/cmake/UnixInstall.cmake b/indra/cmake/UnixInstall.cmake index 139be0a008..55b6889836 100644 --- a/indra/cmake/UnixInstall.cmake +++ b/indra/cmake/UnixInstall.cmake @@ -6,7 +6,7 @@ set(INSTALL OFF CACHE BOOL      "Generate install target.")  if (INSTALL) -  set(INSTALL_PREFIX /usr CACHE PATH +  set(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH        "Top-level installation directory.")    if (EXISTS /lib64) @@ -21,11 +21,15 @@ if (INSTALL)    set(INSTALL_SHARE_DIR ${INSTALL_PREFIX}/share CACHE PATH        "Installation directory for read-only shared files.") -  set(APP_BINARY_DIR ${INSTALL_LIBRARY_DIR}/secondlife-${viewer_VERSION} +  set(APP_BINARY_DIR ${INSTALL_PREFIX}/bin        CACHE PATH        "Installation directory for binaries.") -  set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}/secondlife-${viewer_VERSION} +  set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}/${VIEWER_BINARY_NAME}        CACHE PATH        "Installation directory for read-only data files.") + +  set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/libexec/${VIEWER_BINARY_NAME} +      CACHE PATH +      "Installation directory for non-manual executables.")  endif (INSTALL) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 00f8b77106..52128414c9 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -1,6 +1,12 @@  # -*- cmake -*-  include(Prebuilt) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  add_library( ll::fontconfig INTERFACE IMPORTED ) +  use_system_binary(fontconfig) +  return () +endif () +  if (LINUX)    #use_prebuilt_binary(libuuid)    add_library( ll::fontconfig INTERFACE IMPORTED ) diff --git a/indra/cmake/VulkanGltf.cmake b/indra/cmake/VulkanGltf.cmake index 94541d5307..d7083a33c9 100644 --- a/indra/cmake/VulkanGltf.cmake +++ b/indra/cmake/VulkanGltf.cmake @@ -1,5 +1,7 @@  # -*- cmake -*-  include(Prebuilt) +if (NOT USESYSTEMLIBS)  use_prebuilt_binary(vulkan_gltf) +endif () diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake index 6409f9d6e2..994df3d128 100644 --- a/indra/cmake/XmlRpcEpi.cmake +++ b/indra/cmake/XmlRpcEpi.cmake @@ -4,8 +4,20 @@ include(Prebuilt)  include_guard()  add_library( ll::xmlrpc-epi INTERFACE IMPORTED ) +if (USE_AUTOBUILD_3P OR USE_CONAN)  use_system_binary( xmlrpc-epi )  use_prebuilt_binary(xmlrpc-epi) +endif () +  target_link_libraries(ll::xmlrpc-epi INTERFACE xmlrpc-epi ) + +if (USE_AUTOBUILD_3P OR USE_CONAN)  target_include_directories( ll::xmlrpc-epi SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include) +elseif (LINUX) +	target_include_directories( ll::xmlrpc-epi SYSTEM INTERFACE +		${CMAKE_SYSROOT}/usr/include/xmlrpc-epi) +elseif (DARWIN) +	target_include_directories( ll::xmlrpc-epi SYSTEM INTERFACE /usr/local/include) +	target_link_directories( ll::xmlrpc-epi INTERFACE /usr/local/lib) +endif () diff --git a/indra/cmake/ZLIBNG.cmake b/indra/cmake/ZLIBNG.cmake index 5d99cd9709..60164116dd 100644 --- a/indra/cmake/ZLIBNG.cmake +++ b/indra/cmake/ZLIBNG.cmake @@ -8,6 +8,12 @@ add_library( ll::zlib-ng INTERFACE IMPORTED )  if(USE_CONAN )    target_link_libraries( ll::zlib-ng INTERFACE CONAN_PKG::zlib )    return() +elseif(NOT USE_AUTOBUILD_3P) +  pkg_check_modules(Zlib REQUIRED zlib) +  target_include_directories( ll::zlib-ng SYSTEM INTERFACE ${Zlib_INCLUDE_DIRS}) +  target_link_directories( ll::zlib-ng INTERFACE ${Zlib_LIBRARY_DIRS} ) +  target_link_libraries( ll::zlib-ng INTERFACE ${Zlib_LIBRARIES}) +  return()  endif()  use_prebuilt_binary(zlib-ng) diff --git a/indra/cmake/xxHash.cmake b/indra/cmake/xxHash.cmake index a7c1cba62c..2dcab005ba 100644 --- a/indra/cmake/xxHash.cmake +++ b/indra/cmake/xxHash.cmake @@ -5,4 +5,11 @@ endif (XXHASH_CMAKE_INCLUDED)  set (XXHASH_CMAKE_INCLUDED TRUE)  include(Prebuilt) + +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +  include(FindPkgConfig) +  pkg_check_modules(Xxhash REQUIRED libxxhash) +  return () +endif () +  use_prebuilt_binary(xxhash) diff --git a/indra/llappearance/CMakeLists.txt b/indra/llappearance/CMakeLists.txt index 75c0e276eb..e6ca2d753a 100644 --- a/indra/llappearance/CMakeLists.txt +++ b/indra/llappearance/CMakeLists.txt @@ -86,3 +86,5 @@ if (BUILD_HEADLESS)            llcommon        )  endif (BUILD_HEADLESS) + +include(LibraryInstall) diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index ff894eeed3..f9c7cb191d 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -1443,7 +1443,9 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC                          gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, 0);                      } +#if GL_VERSION_1_1                      glGetTexImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGBA, GL_UNSIGNED_BYTE, temp); +#endif                      U8* alpha_cursor = alpha_data;                      U8* pixel        = temp; diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt index 4f469b9bb5..f36da83c69 100644 --- a/indra/llaudio/CMakeLists.txt +++ b/indra/llaudio/CMakeLists.txt @@ -69,3 +69,5 @@ endif()  if( TARGET ll::fmodstudio )      target_link_libraries( llaudio ll::fmodstudio )  endif() + +include(LibraryInstall) diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index a133898969..c045d18c42 100755 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -30,6 +30,7 @@  #include <list>  #include <map> +#include <array>  #include "v3math.h"  #include "v3dmath.h" diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp index 0a79614424..bd262f253b 100644 --- a/indra/llaudio/llaudioengine_openal.cpp +++ b/indra/llaudio/llaudioengine_openal.cpp @@ -119,6 +119,11 @@ std::string LLAudioEngine_OpenAL::getDriverName(bool verbose)  	return version.str();  } +LLStreamingAudioInterface *LLAudioEngine_OpenAL::createDefaultStreamingAudioImpl() const +{ +	return NULL; +} +  // virtual  void LLAudioEngine_OpenAL::allocateListener()  { diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h index a3cab97cd2..49ff484809 100644 --- a/indra/llaudio/llaudioengine_openal.h +++ b/indra/llaudio/llaudioengine_openal.h @@ -42,6 +42,7 @@ class LLAudioEngine_OpenAL : public LLAudioEngine          virtual bool init(void *user_data, const std::string &app_title);          virtual std::string getDriverName(bool verbose); +        virtual LLStreamingAudioInterface* createDefaultStreamingAudioImpl() const;  		virtual void allocateListener();  		virtual void shutdown(); diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt index bc45eb474a..7c158c4ff9 100644 --- a/indra/llcharacter/CMakeLists.txt +++ b/indra/llcharacter/CMakeLists.txt @@ -70,3 +70,5 @@ target_link_libraries(          llfilesystem          llxml      ) + +include(LibraryInstall) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index fa9c6eaa79..45b1bcb932 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -9,7 +9,9 @@ include(Linking)  include(Boost)  include(LLSharedLibs)  include(JsonCpp) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(Copy3rdPartyLibs) +endif ()  include(ZLIBNG)  include(URIPARSER)  include(Tracy) @@ -158,6 +160,7 @@ set(llcommon_HEADER_FILES      lleventdispatcher.h      lleventfilter.h      llevents.h +    lleventtimer.h      lleventemitter.h      llexception.h      llfasttimer.h @@ -182,12 +185,14 @@ set(llcommon_HEADER_FILES      llliveappconfig.h      lllivefile.h      llmainthreadtask.h +    llmake.h      llmd5.h      llmemory.h      llmemorystream.h      llmetrics.h      llmetricperformancetester.h      llmortician.h +    llmutex.h      llnametable.h      llpointer.h      llprofiler.h @@ -244,7 +249,9 @@ set(llcommon_HEADER_FILES      llwin32headerslean.h      llworkerthread.h      hbxxh.h +    is_approx_equal_fraction.h      lockstatic.h +    mutex.h      stdtypes.h      stringize.h      threadpool.h @@ -281,7 +288,24 @@ target_link_libraries(  target_include_directories(llcommon INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})  target_include_directories(llcommon PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +if (USE_AUTOBUILD_3P OR USE_CONAN)  add_dependencies(llcommon stage_third_party_libs) +else () +	target_compile_options(${PROJECT_NAME} PUBLIC -Wno-deprecated-declarations) +	if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") +		set_source_files_properties( +			llapp.cpp +			llsdutil.cpp +			PROPERTIES COMPILE_FLAGS -Wno-stringop-truncation) +		set_source_files_properties(llevent.cpp PROPERTIES +			COMPILE_FLAGS -Wno-nonnull) +	elseif (LINUX AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") +		set_source_files_properties(llsys.cpp PROPERTIES +			COMPILE_FLAGS -Wno-unused-but-set-variable) +	endif() +endif () + +include(LibraryInstall)  if (LL_TESTS)    include(LLAddBuildTest) diff --git a/indra/llcommon/hbxxh.cpp b/indra/llcommon/hbxxh.cpp index 388269d6c8..84d215d468 100644 --- a/indra/llcommon/hbxxh.cpp +++ b/indra/llcommon/hbxxh.cpp @@ -34,7 +34,11 @@  // in your build, in which case the latter would be used instead. For ARM64  // builds, this would also automatically enable NEON vectorization.  #define XXH_INLINE_ALL +#if LL_USESYSTEMLIBS +#include <xxhash.h> +#else  #include "xxhash/xxhash.h" +#endif  #include "hbxxh.h" diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp index 2612d0f07c..b30bb110c9 100644 --- a/indra/llcommon/llfasttimer.cpp +++ b/indra/llcommon/llfasttimer.cpp @@ -43,7 +43,7 @@  #if LL_WINDOWS  #include "lltimer.h" -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  #include <sys/time.h>  #include <sched.h>  #include "lltimer.h" diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index 9bd93d7240..9a5789d719 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -128,7 +128,7 @@ public:  #endif -#if (LL_LINUX) && !(defined(__i386__) || defined(__amd64__)) +#if (LL_LINUX || LL_DARWIN) && !(defined(__i386__) || defined(__amd64__))  	//  	// Linux implementation of CPU clock - non-x86.  	// This is accurate but SLOW!  Only use out of desperation. @@ -159,7 +159,7 @@ public:  #endif // (LL_LINUX) && !(defined(__i386__) || defined(__amd64__)) -#if (LL_LINUX || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) +#if (LL_LINUX || LL_DARWIN || LL_FREEBSD) && (defined(__i386__) || defined(__amd64__))  	//  	// Mac+Linux FAST x86 implementation of CPU clock  	static U32 getCPUClockCount32() diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index ac6c969d70..dd9867c9b3 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -52,7 +52,7 @@ class LLMutex ;  #define LL_DEFAULT_HEAP_ALIGN 8  #elif LL_DARWIN  #define LL_DEFAULT_HEAP_ALIGN 16 -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  #define LL_DEFAULT_HEAP_ALIGN 8  #endif @@ -71,7 +71,11 @@ LL_COMMON_API void ll_assert_aligned_func(uintptr_t ptr,U32 alignment);  #define ll_assert_aligned(ptr,alignment)  #endif +#if defined(__i386__) || defined(__x86_64__)  #include <xmmintrin.h> +#else +#include <sse2neon.h> +#endif  template <typename T> T* LL_NEXT_ALIGNED_ADDRESS(T* address)   {  @@ -85,7 +89,7 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)  		(uintptr_t(address) + 0x3F) & ~0x3F);  } -#if LL_LINUX || LL_DARWIN +#if LL_LINUX || LL_DARWIN || LL_FREEBSD  #define			LL_ALIGN_PREFIX(x)  #define			LL_ALIGN_POSTFIX(x)		__attribute__((aligned(x))) diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index dc586b0008..3c05fd32da 100644 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -32,9 +32,11 @@  #ifdef LL_LINUX  #define __ENABLE_WSTRING  #include <endian.h> +#elif defined(LL_FREEBSD) +#include <sys/endian.h>  #endif	//	LL_LINUX -#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__))) +#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_FREEBSD) && (_BYTE_ORDER == _LITTLE_ENDIAN)))  #define LL_LITTLE_ENDIAN 1  #else  #define LL_BIG_ENDIAN 1 @@ -80,7 +82,7 @@  #endif  // Deal with minor differences on Unixy OSes. -#if LL_DARWIN || LL_LINUX +#if LL_DARWIN || LL_LINUX || LL_FREEBSD  	// Different name, same functionality.  	#define stricmp strcasecmp  	#define strnicmp strncasecmp diff --git a/indra/llcommon/llprocess.h b/indra/llcommon/llprocess.h index e3386ad88e..9555df9bba 100644 --- a/indra/llcommon/llprocess.h +++ b/indra/llcommon/llprocess.h @@ -40,7 +40,7 @@  #if LL_WINDOWS  #include "llwin32headerslean.h"	// for HANDLE -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  #if defined(Status)  #undef Status  #endif diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp index 4a1a81f083..dab1c5bde1 100644 --- a/indra/llcommon/llprocessor.cpp +++ b/indra/llcommon/llprocessor.cpp @@ -742,12 +742,14 @@ private:  				 : "0" (level))  	#endif +#if __i386__ || __x86_64__  		unsigned int eax, ebx, ecx, edx;  		__cpuid(0x1, eax, ebx, ecx, edx);  		if(feature_infos[0] != (S32)edx)  		{  			LL_ERRS() << "machdep.cpu.feature_bits doesn't match expected cpuid result!" << LL_ENDL;  		}  +#endif // __i386__ || __x86_64__  #endif // LL_RELEASE_FOR_DOWNLOAD 	 @@ -792,6 +794,100 @@ private:  	}  }; +#elif LL_FREEBSD + +#include <sys/sysctl.h> +class LLProcessorInfoFreeBSDImpl : public LLProcessorInfoImpl +{ +public: +	LLProcessorInfoFreeBSDImpl() +	{ +		size_t len = 0; +		using std::string; + +		char cpu_brand_string[0x40]; +		len = sizeof cpu_brand_string; +		memset(cpu_brand_string, '\0', len); +		sysctlbyname("hw.model", (void *)cpu_brand_string, &len, +				NULL, 0); +		cpu_brand_string[0x3f] = '\0'; +		setInfo(eBrandName, cpu_brand_string); + +		uint64_t cpu_frequency = 0; +		len = sizeof cpu_frequency; +		sysctlbyname("hw.clockrate", (void *)&cpu_frequency, &len, +				NULL, 0); +		setInfo(eFrequency, (F64)cpu_frequency); + +		auto dmesgboot = LLFile::fopen("/var/run/dmesg.boot", "rb"); +		std::ostringstream s; +		if (dmesgboot) { +			char line[MAX_STRING]; +			memset(line, 0, MAX_STRING); +			while (fgets(line, MAX_STRING, dmesgboot)) { +				line[strlen(line) - 1] = ' '; +				s << line; +				s << std::endl; +			} +			fclose(dmesgboot); +			s << std::endl; +		} + +		auto dmesgboot_str = s.str(); +		int decimal; + +		auto idx1 = dmesgboot_str.find_first_of("\"") + 1; +		auto idx2 = (idx1 != string::npos) +			? dmesgboot_str.find_first_of("\"", idx1) +			: string::npos; +		auto vendor = dmesgboot_str.substr(idx1, idx2 - idx1); +		if (vendor.length() > 0) setInfo(eVendor, vendor.c_str()); + +		idx1 = dmesgboot_str.find_first_of("=", idx2); +		idx1 = dmesgboot_str.find_first_of("=", idx1 + 1) + 3; +		idx2 = dmesgboot_str.find_first_of(" ", idx1); +		auto family = dmesgboot_str.substr(idx1, idx2 - idx1); +		std::istringstream(family) >> std::hex >> decimal; +		setInfo(eFamily, decimal); +		setInfo(eFamilyName, compute_CPUFamilyName(vendor.c_str(), +					decimal, 0)); + +		idx1 = dmesgboot_str.find_first_of("=", idx2) + 3; +		idx2 = dmesgboot_str.find_first_of(" ", idx1); +		auto model = dmesgboot_str.substr(idx1, idx2 - idx1); +		std::istringstream(model) >> std::hex >> decimal; +		setInfo(eModel, decimal); + +		idx1 = dmesgboot_str.find_first_of("=", idx2) + 1; +		idx2 = dmesgboot_str.find_first_of("\n", idx1); +		auto stepping = dmesgboot_str.substr(idx1, idx2 - idx1); +		setInfo(eStepping, std::stoi(stepping)); + +		if (dmesgboot_str.find(",SSE,") != string::npos) +			setExtension(cpu_feature_names[eSSE_Ext]); + +		if (dmesgboot_str.find(",SSE2,") != string::npos) +			setExtension(cpu_feature_names[eSSE2_Ext]); + +		if (dmesgboot_str.find("<SSE3,") != string::npos) +			setExtension(cpu_feature_names[eSSE3_Features]); + +		if (dmesgboot_str.find(",SSSE3,") != string::npos) +			setExtension(cpu_feature_names[eSSE3S_Features]); + +		if (dmesgboot_str.find(",SSE4.1,") != string::npos) +			setExtension(cpu_feature_names[eSSE4_1_Features]); + +		if (dmesgboot_str.find(",SSE4.2,") != string::npos) +			setExtension(cpu_feature_names[eSSE4_2_Features]); + +		if (dmesgboot_str.find(",SSE4A,") != string::npos) +			setExtension(cpu_feature_names[eSSE4a_Features]); +	} + +	virtual ~LLProcessorInfoFreeBSDImpl() {} +}; +  #elif LL_LINUX  const char CPUINFO_FILE[] = "/proc/cpuinfo"; @@ -867,7 +963,7 @@ private:  		LLPI_SET_INFO_INT(eModel, "model"); -		S32 family;							  +		S32 family = 0;  		if (!cpuinfo["cpu family"].empty()   			&& LLStringUtil::convertToS32(cpuinfo["cpu family"], family))	  		{  @@ -972,6 +1068,9 @@ LLProcessorInfo::LLProcessorInfo() : mImpl(NULL)  #elif LL_DARWIN  		static LLProcessorInfoDarwinImpl the_impl;   		mImpl = &the_impl; +#elif LL_FREEBSD +		static LLProcessorInfoFreeBSDImpl the_impl; +		mImpl = &the_impl;  #else  		static LLProcessorInfoLinuxImpl the_impl;   		mImpl = &the_impl;		 diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp index f70bee9903..512f630cdc 100644 --- a/indra/llcommon/llsdutil.cpp +++ b/indra/llcommon/llsdutil.cpp @@ -36,7 +36,7 @@  #	include <winsock2.h>	// for htonl  #elif LL_LINUX  #	include <netinet/in.h> -#elif LL_DARWIN +#elif LL_DARWIN || LL_FREEBSD  #	include <arpa/inet.h>  #endif diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 938685bae6..1e0a9e815f 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -82,8 +82,13 @@ using namespace llsd;  #	include <sys/sysinfo.h>  #   include <stdexcept>  const char MEMINFO_FILE[] = "/proc/meminfo"; +#ifdef __GNU__  #   include <gnu/libc-version.h>  #endif +#elif LL_FREEBSD +#	include <sys/sysctl.h> +#	include <sys/utsname.h> +#endif  LLCPUInfo gSysCPU; @@ -350,6 +355,7 @@ LLOSInfo::LLOSInfo() :  	boost::regex os_version_parse(OS_VERSION_MATCH_EXPRESSION);  	boost::smatch matched; +#ifdef __GNU__  	std::string glibc_version(gnu_get_libc_version());  	if ( ll_regex_match(glibc_version, matched, os_version_parse) )  	{ @@ -408,6 +414,7 @@ LLOSInfo::LLOSInfo() :  	{  		LL_WARNS("AppInit") << "glibc version '" << glibc_version << "' cannot be parsed to three numbers; using all zeros" << LL_ENDL;  	} +#endif // __GNU__  #else @@ -435,6 +442,14 @@ LLOSInfo::LLOSInfo() :  			if (simple.length() > 0)  				mOSStringSimple = simple;  		} +		else if (ostype == "FreeBSD") +		{ +			// Only care about major and minor FreeBSD versions, truncate at first '-' +			std::string simple = mOSStringSimple.substr(0, +					mOSStringSimple.find_first_of("-", 0)); +			if (simple.length() > 0) +				mOSStringSimple = simple; +		}  	}  	else  	{ @@ -771,13 +786,17 @@ static U32Kilobytes LLMemoryAdjustKBResult(U32Kilobytes inKB)  }  #endif -#if LL_DARWIN +#if LL_DARWIN || LL_FREEBSD  // static  U32Kilobytes LLMemoryInfo::getHardwareMemSize()  {      // This might work on Linux as well.  Someone check...      uint64_t phys = 0; +#if LL_DARWIN      int mib[2] = { CTL_HW, HW_MEMSIZE }; +#else +    int mib[2] = { CTL_HW, HW_PHYSMEM }; +#endif      size_t len = sizeof(phys);      sysctl(mib, 2, &phys, &len, NULL, 0); @@ -791,7 +810,7 @@ U32Kilobytes LLMemoryInfo::getPhysicalMemoryKB() const  #if LL_WINDOWS  	return LLMemoryAdjustKBResult(U32Kilobytes(mStatsMap["Total Physical KB"].asInteger())); -#elif LL_DARWIN +#elif LL_DARWIN || LL_FREEBSD      return getHardwareMemSize();  #elif LL_LINUX diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h index 08d4abffa2..d37e0d42df 100644 --- a/indra/llcommon/llsys.h +++ b/indra/llcommon/llsys.h @@ -130,7 +130,7 @@ public:  	void stream(std::ostream& s) const;	///< output text info to s  	U32Kilobytes getPhysicalMemoryKB() const; -#if LL_DARWIN +#if LL_DARWIN || LL_FREEBSD      static U32Kilobytes getHardwareMemSize(); // Because some Mac linkers won't let us reference extern gSysMemory from a different lib.  #endif diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h index f396a71e6f..3ffba7b377 100644 --- a/indra/llcommon/llthreadsafequeue.h +++ b/indra/llcommon/llthreadsafequeue.h @@ -452,7 +452,11 @@ ElementT LLThreadSafeQueue<ElementT, QueueT>::pop(void)          // so we can finish draining the queue.          pop_result popped = pop_(lock1, value);          if (popped == POPPED) +#if LL_LINUX +            return value; +#else              return std::move(value); +#endif          // Once the queue is DONE, there will never be any more coming.          if (popped == DONE) diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index 1a99ac2886..e96927e9c1 100644 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -35,7 +35,7 @@  #if LL_WINDOWS  #	include "llwin32headerslean.h" -#elif LL_LINUX || LL_DARWIN +#elif LL_LINUX || LL_DARWIN || LL_FREEBSD  #   include <errno.h>  #	include <sys/time.h>  #else  @@ -115,7 +115,7 @@ void ms_sleep(U32 ms)  #endif -#elif LL_LINUX || LL_DARWIN +#elif LL_LINUX || LL_DARWIN || LL_FREEBSD  static void _sleep_loop(struct timespec& thiswait)  {  	struct timespec nextwait; @@ -233,7 +233,7 @@ F64 calc_clock_frequency()  #endif // LL_WINDOWS -#if LL_LINUX || LL_DARWIN +#if LL_LINUX || LL_DARWIN || LL_FREEBSD  // Both Linux and Mac use gettimeofday for accurate time  F64 calc_clock_frequency()  { diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp index 200add404f..ae67188242 100644 --- a/indra/llcommon/lluuid.cpp +++ b/indra/llcommon/lluuid.cpp @@ -522,7 +522,7 @@ S32	LLUUID::getNodeID(unsigned char* node_id)  #include <net/if.h>  #include <net/if_types.h>  #include <net/if_dl.h> -#include <net/route.h> +//#include <net/route.h>  #include <ifaddrs.h>   // static @@ -606,7 +606,7 @@ S32 LLUUID::getNodeID(unsigned char* node_id)  #define HAVE_NETINET_IN_H  #ifdef HAVE_NETINET_IN_H  #include <netinet/in.h> -#if !LL_DARWIN +#if !LL_DARWIN && !LL_FREEBSD  #include <linux/sockios.h>  #endif  #endif diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h index 0b43d7ad4b..463e1e832b 100644 --- a/indra/llcommon/stdtypes.h +++ b/indra/llcommon/stdtypes.h @@ -29,6 +29,7 @@  #include <cassert>  #include <cfloat>  #include <climits> +#include <cstddef>  #include <limits>  #include <type_traits> @@ -71,7 +72,7 @@ typedef unsigned __int64		U64;  #else  typedef long long int			S64;  typedef long long unsigned int		U64; -#if LL_DARWIN || LL_LINUX +#if LL_DARWIN || LL_LINUX || LL_FREEBSD  #define S64L(a)				(a##LL)  #define U64L(a)				(a##ULL)  #endif @@ -113,6 +114,10 @@ typedef U32				TPACKETID;  #define FALSE			(0)  #endif +#if LL_FREEBSD +#undef NULL +#endif +  #ifndef NULL  #define NULL			(0)  #endif diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index 87796abd3c..01ccdc048a 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -3,15 +3,21 @@  project(llcorehttp)  include(00-Common) +if (LL_TESTS)  include(GoogleMock) +endif ()  include(CURL)  include(OpenSSL)  include(NGHTTP2)  include(ZLIBNG)  include(LLCoreHttp) +if (LL_TESTS)  include(LLAddBuildTest) +endif ()  include(LLCommon) +if (LL_TESTS)  include(Tut) +endif ()  include(bugsplat)  set(llcorehttp_SOURCE_FILES @@ -93,6 +99,8 @@ target_include_directories( llcorehttp INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})  # lead to circular dependencies (or in case of cmake, the first project declaring it's dependencies wins)  target_include_directories( llcorehttp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../llmessage) +include(LibraryInstall) +  # tests  set(LLCOREHTTP_TESTS ON CACHE BOOL      "Build and run llcorehttp integration tests specifically") diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index d60eb6c95f..b13e7a44ea 100644 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -513,7 +513,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  	check_curl_easy_setopt(mCurlHandle, CURLOPT_NOPROGRESS, 1);  	check_curl_easy_setopt(mCurlHandle, CURLOPT_URL, mReqURL.c_str());  	check_curl_easy_setopt(mCurlHandle, CURLOPT_PRIVATE, getHandle()); -	check_curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, ""); +	//check_curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, "");  	check_curl_easy_setopt(mCurlHandle, CURLOPT_AUTOREFERER, 1);  	check_curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, HTTP_REDIRECTS_DEFAULT); @@ -603,7 +603,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  	case HOR_POST:  		{  			check_curl_easy_setopt(mCurlHandle, CURLOPT_POST, 1); -			check_curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, ""); +			//check_curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, "");  			long data_size(0);  			if (mReqBody)  			{ diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp index 61ba83594e..856602e50b 100644 --- a/indra/llcorehttp/httpcommon.cpp +++ b/indra/llcorehttp/httpcommon.cpp @@ -289,8 +289,10 @@ CURL *getCurlTemplateHandle()              check_curl_code(result, CURLOPT_NOSIGNAL);              result = curl_easy_setopt(curlpTemplateHandle, CURLOPT_NOPROGRESS, 1);              check_curl_code(result, CURLOPT_NOPROGRESS); +	    /*              result = curl_easy_setopt(curlpTemplateHandle, CURLOPT_ENCODING, "");              check_curl_code(result, CURLOPT_ENCODING); +	    */              result = curl_easy_setopt(curlpTemplateHandle, CURLOPT_AUTOREFERER, 1);              check_curl_code(result, CURLOPT_AUTOREFERER);              result = curl_easy_setopt(curlpTemplateHandle, CURLOPT_FOLLOWLOCATION, 1); diff --git a/indra/llcrashlogger/CMakeLists.txt b/indra/llcrashlogger/CMakeLists.txt index 6ac73c0d32..3506a35c1e 100644 --- a/indra/llcrashlogger/CMakeLists.txt +++ b/indra/llcrashlogger/CMakeLists.txt @@ -21,3 +21,5 @@ list(APPEND llcrashlogger_SOURCE_FILES ${llcrashlogger_HEADER_FILES})  add_library(llcrashlogger ${llcrashlogger_SOURCE_FILES})  target_link_libraries( llcrashlogger llcommon llmessage llcorehttp llxml llfilesystem ) + +include(LibraryInstall) diff --git a/indra/llfilesystem/CMakeLists.txt b/indra/llfilesystem/CMakeLists.txt index 9f24f75eab..9a69a833c0 100644 --- a/indra/llfilesystem/CMakeLists.txt +++ b/indra/llfilesystem/CMakeLists.txt @@ -30,17 +30,17 @@ if (DARWIN)    LIST(APPEND llfilesystem_HEADER_FILES lldir_mac.h)  endif (DARWIN) -if (LINUX) +if (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")    LIST(APPEND llfilesystem_SOURCE_FILES lldir_linux.cpp)    LIST(APPEND llfilesystem_HEADER_FILES lldir_linux.h)    if (INSTALL)      set_source_files_properties(lldir_linux.cpp                                  PROPERTIES COMPILE_FLAGS -                                "-DAPP_RO_DATA_DIR=\\\"${APP_SHARE_DIR}\\\"" +                                "-DAPP_RO_DATA_DIR=\\\"${APP_SHARE_DIR}\\\" -DAPP_LIBEXEC_DIR=\\\"${APP_LIBEXEC_DIR}\\\""                                  )    endif (INSTALL) -endif (LINUX) +endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")  if (WINDOWS)    LIST(APPEND llfilesystem_SOURCE_FILES lldir_win32.cpp) @@ -56,6 +56,8 @@ target_link_libraries(llfilesystem      )  target_include_directories( llfilesystem  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) +include(LibraryInstall) +  # Add tests  if (LL_TESTS)      include(LLAddBuildTest) diff --git a/indra/llfilesystem/lldir_linux.cpp b/indra/llfilesystem/lldir_linux.cpp index 80ad05345a..7e8fe157ba 100644 --- a/indra/llfilesystem/lldir_linux.cpp +++ b/indra/llfilesystem/lldir_linux.cpp @@ -83,7 +83,11 @@ LLDir_Linux::LLDir_Linux()  	mExecutableFilename = "";  	mExecutablePathAndName = ""; +#ifdef APP_LIBEXEC_DIR +	mExecutableDir = APP_LIBEXEC_DIR; +#else  	mExecutableDir = tmp_str; +#endif  	mWorkingDir = tmp_str;  #ifdef APP_RO_DATA_DIR  	mAppRODataDir = APP_RO_DATA_DIR; @@ -205,7 +209,7 @@ void LLDir_Linux::initAppDirs(const std::string &app_name,  		LL_WARNS() << "Couldn't create LL_PATH_CACHE dir " << getExpandedFilename(LL_PATH_CACHE,"") << LL_ENDL;  	} -	mCAFile = getExpandedFilename(LL_PATH_EXECUTABLE, "ca-bundle.crt"); +	mCAFile = add(mAppRODataDir, "ca-bundle.crt");  }  U32 LLDir_Linux::countFilesInDir(const std::string &dirname, const std::string &mask) diff --git a/indra/llfilesystem/lldir_linux.h b/indra/llfilesystem/lldir_linux.h index e83a020ba4..8c4d42f025 100644 --- a/indra/llfilesystem/lldir_linux.h +++ b/indra/llfilesystem/lldir_linux.h @@ -24,7 +24,7 @@   * $/LicenseInfo$   */ -#if !LL_LINUX +#if !LL_LINUX && !LL_FREEBSD  #error This header must not be included when compiling for any target other than Linux. Consider including lldir.h instead.  #endif // !LL_LINUX diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt index cc75c463bc..a6c98d9bd7 100644 --- a/indra/llimage/CMakeLists.txt +++ b/indra/llimage/CMakeLists.txt @@ -8,9 +8,13 @@ include(LLImage)  include(JPEG)  include(LLKDU)  include(ZLIBNG) +if (LL_TESTS)  include(LLAddBuildTest) +endif ()  include(bugsplat) +if (LL_TESTS)  include(Tut) +endif ()  set(llimage_SOURCE_FILES      llimagebmp.cpp @@ -63,6 +67,14 @@ target_link_libraries(llimage          ll::libjpeg      ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +	if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") +		set_source_files_properties(llimageworker.cpp PROPERTIES COMPILE_FLAGS -Wno-int-in-bool-context) +	endif() +endif () + +include(LibraryInstall) +  # Add tests  if (LL_TESTS)    SET(llimage_TEST_SOURCE_FILES diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt index 93e85668dd..5a2aac9e84 100644 --- a/indra/llimagej2coj/CMakeLists.txt +++ b/indra/llimagej2coj/CMakeLists.txt @@ -21,9 +21,11 @@ list(APPEND llimagej2coj_SOURCE_FILES ${llimagej2coj_HEADER_FILES})  add_library (llimagej2coj ${llimagej2coj_SOURCE_FILES}) +include_directories( ${CMAKE_SOURCE_DIR}/llimage )  target_link_libraries( llimagej2coj          llcommon -        llimage +        #llimage          ll::openjpeg      ) +include(LibraryInstall) diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp index 6c06c6de38..6d180e233d 100644 --- a/indra/llimagej2coj/llimagej2coj.cpp +++ b/indra/llimagej2coj/llimagej2coj.cpp @@ -28,9 +28,15 @@  #include "llimagej2coj.h"  // this is defined so that we get static linking. +#ifdef LL_USESYSTEMLIBS +#include <openjpeg-2.5/openjpeg.h> +#include <openjpeg-2.5/event.h> +#include <openjpeg-2.5/cio.h> +#else  #include "openjpeg.h"  #include "event.h"  #include "cio.h" +#endif  #define MAX_ENCODED_DISCARD_LEVELS 5 diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt index 93a586759f..88a2c33ae0 100644 --- a/indra/llinventory/CMakeLists.txt +++ b/indra/llinventory/CMakeLists.txt @@ -59,6 +59,8 @@ add_library (llinventory ${llinventory_SOURCE_FILES})  target_link_libraries( llinventory llcommon llmath llmessage llxml )  target_include_directories( llinventory  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) +include(LibraryInstall) +  #add unit tests  if (LL_TESTS)      INCLUDE(LLAddBuildTest) diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp index bcf8bf6264..c3f379a908 100644 --- a/indra/llinventory/llsettingsbase.cpp +++ b/indra/llinventory/llsettingsbase.cpp @@ -395,6 +395,7 @@ bool LLSettingsBase::validate()  LLSD LLSettingsBase::settingValidation(LLSD &settings, validation_list_t &validations, bool partial)  { +    using boost::placeholders::_1, boost::placeholders::_2;      static Validator  validateName(SETTING_NAME, false, LLSD::TypeString, boost::bind(&Validator::verifyStringLength, _1, _2, 63));      static Validator  validateId(SETTING_ID, false, LLSD::TypeUUID);      static Validator  validateHash(SETTING_HASH, false, LLSD::TypeInteger); diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index fedbed2990..f382588b50 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -149,6 +149,7 @@ const F32 LLSettingsSky::DOME_RADIUS(15000.f);  namespace  { +    using boost::placeholders::_1, boost::placeholders::_2;  LLSettingsSky::validation_list_t legacyHazeValidationList()  { diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index 348848b29a..451f3044be 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -223,6 +223,7 @@ LLSettingsWater::validation_list_t LLSettingsWater::validationList()      if (validation.empty())      { +        using boost::placeholders::_1, boost::placeholders::_2;          validation.push_back(Validator(SETTING_BLUR_MULTIPLIER, true, LLSD::TypeReal,              boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(-0.5f, 0.5f))));          validation.push_back(Validator(SETTING_FOG_COLOR, true, LLSD::TypeArray, diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index eb29df245a..c85d9c75c7 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -59,6 +59,7 @@ set(llmath_HEADER_FILES      llmath.h      llmatrix3a.h      llmatrix3a.inl +    llmatrix4a.h      llmodularmath.h      lloctree.h      llperlin.h @@ -102,6 +103,13 @@ add_library (llmath ${llmath_SOURCE_FILES})  target_link_libraries(llmath llcommon llmeshoptimizer)  target_include_directories( llmath  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) +if (USESYSTEMLIBS AND CMAKE_CXX_COMPILER_ID MATCHES "GNU") +  set_source_files_properties(llcalc.cpp PROPERTIES +    COMPILE_FLAGS -Wno-dangling-pointer) +endif () + +include(LibraryInstall) +  # Add tests  if (LL_TESTS)    include(LLAddBuildTest) diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h index dff5bf3af3..e4656d2376 100644 --- a/indra/llmath/llcalcparser.h +++ b/indra/llmath/llcalcparser.h @@ -131,14 +131,14 @@ struct LLCalcParser : grammar<LLCalcParser>  			power =  				unary_expr[power.value = arg1] >> -				*('^' >> assert_syntax(unary_expr[power.value = phoenix::bind(&powf)(power.value, arg1)])) +				*('^' >> assert_syntax(unary_expr[power.value = phoenix::bind<float, float, float>(&powf)(power.value, arg1)]))  			;  			term =  				power[term.value = arg1] >>  				*(('*' >> assert_syntax(power[term.value *= arg1])) |  				  ('/' >> assert_syntax(power[term.value /= arg1])) | -				  ('%' >> assert_syntax(power[term.value = phoenix::bind(&fmodf)(term.value, arg1)])) +				  ('%' >> assert_syntax(power[term.value = phoenix::bind<float, float, float>(&fmodf)(term.value, arg1)]))  				)  			; diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h index 54a275633f..a6f57d1853 100644 --- a/indra/llmath/llsimdmath.h +++ b/indra/llmath/llsimdmath.h @@ -31,7 +31,7 @@  #error "Please include llmath.h before this file."  #endif -#if ( ( LL_DARWIN || LL_LINUX ) && !(__SSE2__) ) || ( LL_WINDOWS && ( _M_IX86_FP < 2 && ADDRESS_SIZE == 32 ) ) +#if ( ( LL_DARWIN || LL_LINUX ) && !(__SSE2__ || __ARM_NEON) ) || ( LL_WINDOWS && ( _M_IX86_FP < 2 && ADDRESS_SIZE == 32 ) )  #error SSE2 not enabled. LLVector4a and related class will not compile.  #endif @@ -39,8 +39,12 @@  #include <stdint.h>  #endif +#if defined(__i386__) || defined(__x86_64__)  #include <xmmintrin.h>  #include <emmintrin.h> +#else +#include <sse2neon.h> +#endif  #include "llmemory.h"  #include "llsimdtypes.h" diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 6d36daa92a..f6abc7eadd 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -56,7 +56,11 @@  #include "mikktspace/mikktspace.h"  #include "mikktspace/mikktspace.c" // insert mikktspace implementation into llvolume object file +#if LL_USESYSTEMLIBS +#include <meshoptimizer.h> +#else  #include "meshoptimizer/meshoptimizer.h" +#endif  #define DEBUG_SILHOUETTE_BINORMALS 0  #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette diff --git a/indra/llmeshoptimizer/CMakeLists.txt b/indra/llmeshoptimizer/CMakeLists.txt index dfac44c296..100e4448cb 100644 --- a/indra/llmeshoptimizer/CMakeLists.txt +++ b/indra/llmeshoptimizer/CMakeLists.txt @@ -25,10 +25,12 @@ list(APPEND llmeshoptimizer_SOURCE_FILES ${llmeshoptimizer_HEADER_FILES})  add_library (llmeshoptimizer ${llmeshoptimizer_SOURCE_FILES})  target_include_directories( llmeshoptimizer INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_SOURCE_DIR}/llmath)  target_link_libraries(llmeshoptimizer          llcommon -        llmath          ll::meshoptimizer) +include(LibraryInstall) +  # Add tests diff --git a/indra/llmeshoptimizer/llmeshoptimizer.cpp b/indra/llmeshoptimizer/llmeshoptimizer.cpp index c178348968..ce2b9f99b1 100644 --- a/indra/llmeshoptimizer/llmeshoptimizer.cpp +++ b/indra/llmeshoptimizer/llmeshoptimizer.cpp @@ -291,6 +291,9 @@ U64 LLMeshOptimizer::simplifyU32(U32 *destination,              vertex_positions_stride,              target_index_count,              target_error, +#ifdef LL_USESYSTEMLIBS +            0, +#endif              result_error              );      } @@ -332,6 +335,9 @@ U64 LLMeshOptimizer::simplify(U16 *destination,              vertex_positions_stride,              target_index_count,              target_error, +#ifdef LL_USESYSTEMLIBS +            0, +#endif              result_error              );      } diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index e44309476b..258d32a045 100644 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -3,13 +3,19 @@  project(llmessage)  include(00-Common) +if (LL_TESTS)  include(GoogleMock)  include(LLAddBuildTest) +endif ()  include(LLCommon)  include(LLCoreHttp) +if (LL_TESTS)  include(LLAddBuildTest) +endif ()  include(Python) +if (LL_TESTS)  include(Tut) +endif ()  include(Python)  include(JsonCpp) @@ -132,6 +138,7 @@ set(llmessage_HEADER_FILES      llmessagebuilder.h      llmessageconfig.h      llmessagereader.h +    llmessagesenderinterface.h      llmessagetemplate.h      llmessagetemplateparser.h      llmessagethrottle.h @@ -199,6 +206,15 @@ target_link_libraries(  )  target_include_directories( llmessage  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +	if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") +		set_source_files_properties(llnamevalue.cpp PROPERTIES +			COMPILE_FLAGS -Wno-stringop-truncation) +	endif() +endif () + +include(LibraryInstall) +  # tests  if (LL_TESTS)    SET(llmessage_TEST_SOURCE_FILES diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index 14a69afe6e..19ce47d357 100644 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -46,3 +46,4 @@ target_include_directories( llplugin  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR})  target_link_libraries( llplugin llcommon llmath llrender llmessage )  add_subdirectory(slplugin) +include(LibraryInstall) diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 3e72710366..e0b3f6ef56 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -33,7 +33,9 @@  #include "llpluginmessageclasses.h"  #include "llcontrol.h" +#ifndef LL_USESYSTEMLIBS  extern LLControlGroup gSavedSettings; +#endif  #if LL_DARWIN  extern BOOL gHiDPISupport;  #endif @@ -934,8 +936,10 @@ void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path_cache      message.setValue("username", username); // cef shares cache between users but creates user-based contexts  	message.setValue("cef_log_file", user_data_path_cef_log); +#ifndef LL_USESYSTEMLIBS  	bool cef_verbose_log = gSavedSettings.getBOOL("CefVerboseLog");  	message.setValueBoolean("cef_verbose_log", cef_verbose_log); +#endif  	sendMessage(message);  } diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp index 63ff5085c6..3204bbd715 100644 --- a/indra/llplugin/llpluginsharedmemory.cpp +++ b/indra/llplugin/llpluginsharedmemory.cpp @@ -45,8 +45,12 @@  	#define USE_WIN32_SHARED_MEMORY 1  #elif LL_DARWIN  	#define USE_SHM_OPEN_SHARED_MEMORY 1 +#elif _POSIX_SHARED_MEMORY_OBJECTS == -1 +	#define USE_APR_SHARED_MEMORY 1  #elif LL_LINUX  	#define USE_SHM_OPEN_SHARED_MEMORY 1 +#elif LL_FREEBSD +	#define USE_SHM_OPEN_SHARED_MEMORY 1  #endif diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt index 0ea6495eac..e86ddd8a32 100644 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -60,6 +60,15 @@ if (DARWIN)    )  endif (DARWIN) +if (BUILD_SHARED_LIBS) +  set_target_properties(SLPlugin PROPERTIES LINK_FLAGS_RELEASE +    "${LINK_FLAGS_RELEASE} -Wl,--allow-shlib-undefined") +endif () + +if (INSTALL) +  install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME}) +endif () +  if (LL_TESTS)    ll_deploy_sharedlibs_command(SLPlugin)  endif (LL_TESTS) diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 5c54705c71..3e9dc8cd31 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -46,7 +46,7 @@ using namespace std;  	#include "slplugin-objc.h"  #endif -#if LL_DARWIN || LL_LINUX +#if LL_DARWIN || LL_LINUX || LL_FREEBSD  	#include <signal.h>  #endif @@ -64,7 +64,7 @@ using namespace std;  	Now that SLPlugin is a bundled app on the Mac, this is no longer necessary (it can just use a regular Info.plist file), but I'm leaving this comment in for posterity.  */ -#if LL_DARWIN || LL_LINUX +#if LL_DARWIN || LL_LINUX || LL_FREEBSD  // Signal handlers to make crashes not show an OS dialog...  static void crash_handler(int sig)  { @@ -182,7 +182,7 @@ int main(int argc, char **argv)  	// display a crash message if something bad happens. The host app will  	// see the missing heartbeat and log appropriately.  	initExceptionHandler(); -#elif LL_DARWIN || LL_LINUX +#elif LL_DARWIN || LL_LINUX || LL_FREEBSD  	if(argc < 2)  	{  		LL_ERRS("slplugin") << "usage: " << argv[0] << " launcher_port" << LL_ENDL; diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt index 76d261ab3e..9db0895108 100644 --- a/indra/llprimitive/CMakeLists.txt +++ b/indra/llprimitive/CMakeLists.txt @@ -72,6 +72,14 @@ target_link_libraries(llprimitive          ll::glh_linear          ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +	set_source_files_properties(lldaeloader.cpp PROPERTIES COMPILE_FLAGS +		-std=c++14) +	add_subdirectory(llphysicsextensions) +endif () + +include(LibraryInstall) +  #add unit tests  if (LL_TESTS)      INCLUDE(LLAddBuildTest) diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index 46e1cb4922..3e29125fa1 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -943,12 +943,20 @@ bool LLDAELoader::OpenFile(const std::string& filename)  	domCOLLADA* dom;  	if (mPreprocessDAE)  	{ +#ifdef LL_USESYSTEMLIBS +		dom = static_cast<domCOLLADA *>(dae.openFromMemory(uri_filename, preprocessDAE(filename).c_str())); +#else  		dom = dae.openFromMemory(uri_filename, preprocessDAE(filename).c_str()); +#endif  	}  	else  	{  		LL_INFOS() << "Skipping dae preprocessing" << LL_ENDL; +#ifdef LL_USESYSTEMLIBS +		dom = static_cast<domCOLLADA *>(dae.open(uri_filename)); +#else  		dom = dae.open(uri_filename); +#endif  	}  	if (!dom) diff --git a/indra/llprimitive/lldaeloader.h b/indra/llprimitive/lldaeloader.h index 52ad908870..00305d0229 100644 --- a/indra/llprimitive/lldaeloader.h +++ b/indra/llprimitive/lldaeloader.h @@ -29,6 +29,7 @@  #include "llmodelloader.h" +#ifndef LL_USESYSTEMLIBS  class DAE;  class daeElement;  class domProfile_COMMON; @@ -38,6 +39,7 @@ class domTranslate;  class domController;  class domSkin;  class domMesh; +#endif  class LLDAELoader : public LLModelLoader  { diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h index ca27507707..c947ab551d 100644 --- a/indra/llprimitive/llgltfmaterial.h +++ b/indra/llprimitive/llgltfmaterial.h @@ -35,6 +35,7 @@  #include "hbxxh.h"  #include <string> +#include <array>  namespace tinygltf  { diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 4505d6b3b9..6a4a4927b6 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -35,8 +35,10 @@  #include <boost/align/aligned_allocator.hpp> +#ifndef LL_USESYSTEMLIBS  class daeElement;  class domMesh; +#endif  #define MAX_MODEL_FACES 8 diff --git a/indra/llprimitive/llphysicsextensions/CMakeLists.txt b/indra/llprimitive/llphysicsextensions/CMakeLists.txt new file mode 100644 index 0000000000..fb15e7b782 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/CMakeLists.txt @@ -0,0 +1,94 @@ +# -*- cmake -*- + +project(llphysicsextensions) + +include(00-Common) +include(Variables) +include(LLCommon) +include(LLMath) + +set(LLPHYSICSEXTENSIONS_LIB_NAME     llphysicsextensions) + +if (WINDOWS) +   set(LLPHYSICSEXTENSIONS_LIBRARIES ${LLPHYSICSEXTENSIONS_LIB_NAME}.lib) +else (WINDOWS) +   set(LLPHYSICSEXTENSIONS_LIBRARIES ${LLPHYSICSEXTENSIONS_LIB_NAME}.a) +endif (WINDOWS) + +set(LLPHYSICSEXTENSIONS_INCLUDE_DIR +    ${CMAKE_CURRENT_SOURCE_DIR}) + +set(LLPHYSICSEXTENSIONS_DEBUG_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug) +set(LLPHYSICSEXTENSIONS_RELEASE_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release) + +#set(LLPHYSICSEXTENSIONS_LIBRARIES_LIBRARIES +#    debug     ${LLPHYSICSEXTENSIONS_DEBUG_LIB} +#    optimized ${LLPHYSICSEXTENTIONS_RELEASE_LIB} +#) + +if (LINUX) +    list(INSERT LLPHYSICSEXTENSIONS_LIBRARIES 0 -Wl,--start-group) +    list(APPEND LLPHYSICSEXTENSIONS_LIBRARIES -Wl,--end-group) +endif (LINUX) + +#include_directories( +#    ${CMAKE_SOURCE_DIR}/llphysicsextensions +#    ${LLPHYSICSEXTENSIONS_INCLUDE_DIR} +#    ${LLCOMMON_INCLUDE_DIRS} +#    ${LLMATH_INCLUDE_DIRS} +#    ) + +set(llphysicsextensions_SOURCE_FILES +    llpathinglib.cpp +    LLPathingLibStubImpl.cpp +    llconvexdecomposition.cpp +    LLConvexDecompositionStubImpl.cpp +    llphysicsextensions.cpp +    LLPhysicsExtensionsStubImpl.cpp +    ) +     +set(llphysicsextensions_HEADER_FILES + +    ${LLPHYSICSEXTENSIONS_INCLUDE_DIR}/llpathinglib.h +    ${LLPHYSICSEXTENSIONS_INCLUDE_DIR}/llconvexdecomposition.h +    ${LLPHYSICSEXTENSIONS_INCLUDE_DIR}/llphysicsextensions.h +    LLPathingLibStubImpl.h +    LLConvexDecompositionStubImpl.h +    LLPhysicsExtensionsStubImpl.h +    ) + +if (WINDOWS) +   list(APPEND llphysicsextensions_HEADER_FILES  +               ${LLPHYSICSEXTENSIONS_INCLUDE_DIR}/windowsincludes.h) +endif (WINDOWS) + +set_source_files_properties(${llphysicsextensions_HEADER_FILES} +                            PROPERTIES HEADER_FILE_ONLY TRUE) + +# some of the include files contain compile-time switches based on these +set_source_files_properties(${llphysicsextensions_SOURCE_FILES} +                            PROPERTIES COMPILE_DEFINITIONS "LL_PATHING_LIB_STUB;LL_CONVEX_DECOMP_STUB;LL_PHYSICS_EXTENSIONS_STUB") + +list(APPEND llphysicsextensionsstub_SOURCE_FILES ${llphysicsextensions_HEADER_FILES}) + +add_library(${PROJECT_NAME}stub ${${PROJECT_NAME}_SOURCE_FILES}) +target_include_directories(${PROJECT_NAME}stub INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) +target_link_libraries(${PROJECT_NAME}stub llmath llcommon) +list(REMOVE_ITEM ${PROJECT_NAME}_HEADER_FILES +	LLPathingLibStubImpl.h +	LLConvexDecompositionStubImpl.h +	LLPhysicsExtensionsStubImpl.h) +#install(FILES ${${PROJECT_NAME}_HEADER_FILES} DESTINATION include/${PROJECT_NAME}) +if (BUILD_SHARED_LIBS) +	install(TARGETS ${PROJECT_NAME}stub DESTINATION lib) +endif () + +if (LINUX) +    IF(CMAKE_BUILD_TYPE MATCHES Release) +    SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/release) +    ENDIF(CMAKE_BUILD_TYPE MATCHES Release) +    IF(CMAKE_BUILD_TYPE MATCHES Debug) +    SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/debug) +    ENDIF(CMAKE_BUILD_TYPE MATCHES Debug) + +endif (LINUX) diff --git a/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.cpp b/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.cpp new file mode 100644 index 0000000000..b1214a7f31 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.cpp @@ -0,0 +1,143 @@ +/** +* @file   LLConvexDecompositionStubImpl.cpp +* @author falcon@lindenlab.com +* @brief  A stub implementation of LLConvexDecomposition +* +* $LicenseInfo:firstyear=2011&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 20112010, 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$ +*/ + +#include <string.h> +#include <memory> +#include "LLConvexDecompositionStubImpl.h" + +LLConvexDecomposition* LLConvexDecompositionImpl::getInstance() +{ +	return NULL; +} + +LLCDResult LLConvexDecompositionImpl::initSystem() +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::initThread() +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::quitThread() +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::quitSystem() +{ +	return LLCD_NOT_IMPLEMENTED; +} + +void LLConvexDecompositionImpl::genDecomposition(int& decomp) +{ +	decomp = -1; +} + +void LLConvexDecompositionImpl::deleteDecomposition(int decomp) +{ + +} + +void LLConvexDecompositionImpl::bindDecomposition(int decomp) +{ + +} + +LLCDResult LLConvexDecompositionImpl::setParam(const char* name, float val) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::setParam(const char* name, bool val) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::setParam(const char* name, int val) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::setMeshData( const LLCDMeshData* data, bool vertex_based ) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::registerCallback(int stage, llcdCallbackFunc callback ) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::executeStage(int stage) +{ +	return LLCD_NOT_IMPLEMENTED; +} + +int LLConvexDecompositionImpl::getNumHullsFromStage(int stage) +{ +	return 0; +} + +LLCDResult LLConvexDecompositionImpl::getSingleHull( LLCDHull* hullOut ) +{ +	memset( hullOut, 0, sizeof(LLCDHull) ); +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::getHullFromStage( int stage, int hull, LLCDHull* hullOut ) +{ +	memset( hullOut, 0, sizeof(LLCDHull) ); +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::getMeshFromStage( int stage, int hull, LLCDMeshData* meshDataOut ) +{ +	memset( meshDataOut, 0, sizeof(LLCDMeshData) ); +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult	LLConvexDecompositionImpl::getMeshFromHull( LLCDHull* hullIn, LLCDMeshData* meshOut ) +{ +	memset( meshOut, 0, sizeof(LLCDMeshData) ); +	return LLCD_NOT_IMPLEMENTED; +} + +LLCDResult LLConvexDecompositionImpl::generateSingleHullMeshFromMesh(LLCDMeshData* meshIn, LLCDMeshData* meshOut) +{ +	memset( meshOut, 0, sizeof(LLCDMeshData) ); +	return LLCD_NOT_IMPLEMENTED; +} + +void LLConvexDecompositionImpl::loadMeshData(const char* fileIn, LLCDMeshData** meshDataOut) +{ +	static LLCDMeshData meshData; +	memset( &meshData, 0, sizeof(LLCDMeshData) ); +	*meshDataOut = &meshData; +} + diff --git a/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.h b/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.h new file mode 100644 index 0000000000..9ae879efb4 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLConvexDecompositionStubImpl.h @@ -0,0 +1,92 @@ +/** +* @file   LLConvexDecompositionStubImpl.h +* @author falcon@lindenlab.com +* @brief  A stub implementation of LLConvexDecomposition +* +* $LicenseInfo:firstyear=2011&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 20112010, 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_CONVEX_DECOMP_UTIL_H +#define LL_CONVEX_DECOMP_UTIL_H + +#include "llconvexdecomposition.h" + +class LLConvexDecompositionImpl : public LLConvexDecomposition +{ +	public: + +		virtual ~LLConvexDecompositionImpl() {} + +		static LLConvexDecomposition* getInstance(); +		static LLCDResult initSystem(); +		static LLCDResult initThread(); +		static LLCDResult quitThread(); +		static LLCDResult quitSystem(); + +		void genDecomposition(int& decomp); +		void deleteDecomposition(int decomp); +		void bindDecomposition(int decomp); + +		// Sets *paramsOut to the address of the LLCDParam array and returns +		// the length of the array +		int getParameters(const LLCDParam** paramsOut) +		{ +			*paramsOut = NULL; +			return 0; +		} + +		int getStages(const LLCDStageData** stagesOut) +		{ +			*stagesOut = NULL; +			return 0; +		} + +		// Set a parameter by name. Returns false if out of bounds or unsupported parameter +		LLCDResult	setParam(const char* name, float val); +		LLCDResult	setParam(const char* name, int val); +		LLCDResult	setParam(const char* name, bool val); +		LLCDResult	setMeshData( const LLCDMeshData* data, bool vertex_based ); +		LLCDResult	registerCallback(int stage, llcdCallbackFunc callback ); + +		LLCDResult	executeStage(int stage); + +		int getNumHullsFromStage(int stage); + +		LLCDResult	getHullFromStage( int stage, int hull, LLCDHull* hullOut ); +		LLCDResult  getSingleHull( LLCDHull* hullOut ) ; + +		// TODO: Implement lock of some kind to disallow this call if data not yet ready +		LLCDResult	getMeshFromStage( int stage, int hull, LLCDMeshData* meshDataOut); +		LLCDResult	getMeshFromHull( LLCDHull* hullIn, LLCDMeshData* meshOut ); + +		// For visualizing convex hull shapes in the viewer physics shape display +		LLCDResult generateSingleHullMeshFromMesh( LLCDMeshData* meshIn, LLCDMeshData* meshOut); + +		/// Debug +		void loadMeshData(const char* fileIn, LLCDMeshData** meshDataOut); + +	private: +		LLConvexDecompositionImpl() {} +}; + +#endif //LL_CONVEX_DECOMP_UTIL_H + diff --git a/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.cpp b/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.cpp new file mode 100644 index 0000000000..8ad13532f2 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.cpp @@ -0,0 +1,107 @@ +/** +* @file   LLPathingLibStubImpl.cpp +* @author prep@lindenlab.com +* @brief  A stubbed implementation of LLPathingLib +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 20112010, 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$ +*/ + +#include "llpathinglib.h" +#include "LLPathingLibStubImpl.h" + +#include "llsd.h" + +//============================================================================= +LLPathingLibImpl::LLPathingLibImpl() +{ +} + +LLPathingLibImpl::~LLPathingLibImpl() +{ + +} + +LLPathingLib* LLPathingLibImpl::getInstance() +{ +	return NULL; +} + + +LLPathingLib::LLPLResult LLPathingLibImpl::initSystem() +{ +	return LLPL_NOT_IMPLEMENTED; +} + +LLPathingLib::LLPLResult LLPathingLibImpl::quitSystem() +{ +	return LLPL_NOT_IMPLEMENTED; +} + +LLPathingLib::LLPLResult LLPathingLibImpl::extractNavMeshSrcFromLLSD( const LLSD::Binary& dataBlock, int dir ) +{ +	return LLPL_NOT_IMPLEMENTED; +} + +void LLPathingLibImpl::processNavMeshData() +{ +} + +LLPathingLibImpl::LLPLResult LLPathingLibImpl::generatePath( const PathingPacket& pathingPacket ) +{ +	return LLPL_NOT_IMPLEMENTED; +} + +void LLPathingLibImpl::setNavMeshMaterialType( LLPLCharacterType materialType ) +{ +} + +void LLPathingLibImpl::setNavMeshColors( const NavMeshColors& color ) +{ +} + +void LLPathingLibImpl::renderNavMesh() +{ +} + +void LLPathingLibImpl::renderNavMeshEdges() +{ +} + +void LLPathingLibImpl::renderNavMeshShapesVBO( U32 shapeRenderFlags ) +{ +} + +void LLPathingLibImpl::renderPath() +{ +} + +void LLPathingLibImpl::renderPathBookend( LLRender& gl, LLPathingLib::LLPLPathBookEnd type ) +{ +} + +void LLPathingLibImpl::cleanupVBOManager() +{ +} + +void LLPathingLibImpl::cleanupResidual() +{ +} diff --git a/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.h b/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.h new file mode 100644 index 0000000000..75fdb3fa0f --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLPathingLibStubImpl.h @@ -0,0 +1,78 @@ +/** +* @file   LLPathingLibSubImpl.h +* @author prep@lindenlab.com +* @brief  A stubbed implementation of LLPathingLib +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2012, 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_PATHING_LIB_H +#define LL_PATHING_LIB_H + +#include "llpathinglib.h" + +class LLSD; + +//============================================================================= +class LLPathingLibImpl : public LLPathingLib +{ +public: +	LLPathingLibImpl(); +	virtual ~LLPathingLibImpl(); + +	// Obtain a pointer to the actual implementation +	static LLPathingLib* getInstance(); +	static LLPathingLib::LLPLResult initSystem(); +	static LLPathingLib::LLPLResult quitSystem(); + +	//Extract and store navmesh data from the llsd datablock sent down by the server +	virtual LLPLResult extractNavMeshSrcFromLLSD( const LLSD::Binary& dataBlock, int dir ); +	//Stitch any stored navmeshes together +	virtual void processNavMeshData(); + +	//Method used to generate and visualize a path on the viewers navmesh +	virtual LLPLResult generatePath( const PathingPacket& pathingPacket ); + +	//Set the material type for the heatmap type +	virtual void setNavMeshMaterialType( LLPLCharacterType materialType ); +	//Set the various navmesh colors +	virtual void setNavMeshColors( const NavMeshColors& color ); + +	//The entry method to rendering the client side navmesh +	virtual void renderNavMesh(); +	//The entry method to rendering the client side navmesh edges +	virtual void renderNavMeshEdges(); +	//The entry method to render the client navmesh shapes VBO +	virtual void renderNavMeshShapesVBO( U32 shapeRenderFlags ); +	//The entry method to render the clients designated path +	virtual void renderPath(); +	//The entry method to render the capsule bookends for the clients designated path +	virtual void renderPathBookend( LLRender& gl, LLPathingLib::LLPLPathBookEnd type ); + +	//Method to delete any vbo's that are currently being managed by the pathing library +	virtual void cleanupVBOManager(); +	//Method to cleanup any allocations within the implementation +	virtual void cleanupResidual(); +}; + +#endif //LL_PATHING_LIB_H + diff --git a/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.cpp b/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.cpp new file mode 100644 index 0000000000..2c432f94e3 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.cpp @@ -0,0 +1,49 @@ +/** +* @file   LLPhysicsExtensionsStubImpl.cpp +* @author prep@lindenlab.com +* @brief  A stubbed implementation of LLPhysicsExtensions +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2012, 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$ +*/ + +#include "llphysicsextensions.h" +#include "LLPhysicsExtensionsStubImpl.h" + +//============================================================================= +LLPhysicsExtensionsImpl::LLPhysicsExtensionsImpl() +{ +} + +LLPhysicsExtensionsImpl::~LLPhysicsExtensionsImpl() +{ +} + +bool LLPhysicsExtensionsImpl::initSystem() +{ +	return false; +} + +bool LLPhysicsExtensionsImpl::quitSystem() +{ +	return false; +} + diff --git a/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.h b/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.h new file mode 100644 index 0000000000..ac14da1ac3 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/LLPhysicsExtensionsStubImpl.h @@ -0,0 +1,46 @@ +/** +* @file   LLPhysicsExtensionsSubImpl.h +* @author prep@lindenlab.com +* @brief  A stubbed implementation of LLPhysicsExtensions +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2012, 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_PHYSICS_EXTENSIONS_STUB_IMPL_H +#define LL_PHYSICS_EXTENSIONS_STUB_IMPL_H + +#include "llphysicsextensions.h" + +//============================================================================= +class LLPhysicsExtensionsImpl : public LLPhysicsExtensions +{ +	public: + +		LLPhysicsExtensionsImpl(); +		virtual ~LLPhysicsExtensionsImpl(); + +		static bool initSystem(); +		static bool quitSystem(); +}; + +#endif //LL_PHYSICS_EXTENSIONS_STUB_IMPL_H + diff --git a/indra/llprimitive/llphysicsextensions/llconvexdecomposition.cpp b/indra/llprimitive/llphysicsextensions/llconvexdecomposition.cpp new file mode 100644 index 0000000000..f7caf7f676 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llconvexdecomposition.cpp @@ -0,0 +1,102 @@ +/** +* @file   llconvexdecomposition.cpp +* @author falcon@lindenlab.com +* @brief  A Havok implementation of LLConvexDecomposition interface +* +* $LicenseInfo:firstyear=2011&license=lgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2011, 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$ +*/ + +#if defined(_WINDOWS) +#	include "windowsincludes.h" +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#if !defined(LL_CONVEX_DECOMP_STUB) +#	include "LLConvexDecompositionImpl.h" +#else +#	include "LLConvexDecompositionStubImpl.h" +#endif + +#include "llconvexdecomposition.h" + + +/*static */bool LLConvexDecomposition::s_isInitialized = false; + +/*static*/bool LLConvexDecomposition::isFunctional() +{ +#if !defined(LL_CONVEX_DECOMP_STUB) +	return true; +#else +	return false; +#endif +} + +#if !defined(LL_CONVEX_DECOMP_STUB) && defined(HK_COMPILER_CLANG) + //have to specialize before use so that generalized one not auto gen-d +HK_SINGLETON_SPECIALIZATION_DECL(LLConvexDecompositionImpl); +#endif + +/*static*/LLConvexDecomposition* LLConvexDecomposition::getInstance() +{ +	if ( !s_isInitialized ) +	{ +		return NULL; +	} +	else +	{ +#if !defined(LL_CONVEX_DECOMP_STUB) +		return &hkSingleton<LLConvexDecompositionImpl>::getInstance(); +#else +		return LLConvexDecompositionImpl::getInstance(); +#endif +	} +} + +/*static */LLCDResult LLConvexDecomposition::initSystem() +{ +	LLCDResult result = LLConvexDecompositionImpl::initSystem(); +	if ( result == LLCD_OK ) +	{ +		s_isInitialized = true; +	} +	return result; +} + +/*static */LLCDResult LLConvexDecomposition::initThread() +{ +	return LLConvexDecompositionImpl::initThread(); +} + +/*static */LLCDResult LLConvexDecomposition::quitThread() +{ +	return LLConvexDecompositionImpl::quitThread(); +} + +/*static */LLCDResult LLConvexDecomposition::quitSystem() +{ +	return LLConvexDecompositionImpl::quitSystem(); +} + + diff --git a/indra/llprimitive/llphysicsextensions/llconvexdecomposition.h b/indra/llprimitive/llphysicsextensions/llconvexdecomposition.h new file mode 100644 index 0000000000..10c6d55315 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llconvexdecomposition.h @@ -0,0 +1,231 @@ +/** + * @file llconvexdecomposition.cpp + * @brief LLConvexDecomposition interface definition + * + * $LicenseInfo:firstyear=2011&license=lgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, 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_CONVEX_DECOMPOSITION +#define LL_CONVEX_DECOMPOSITION + +typedef int bool32; + +#if defined(_WIN32) || defined(_WIN64) +#define LLCD_CALL __cdecl +#else +#define LLCD_CALL +#endif + +struct LLCDParam +{ +	enum LLCDParamType +	{ +		LLCD_INVALID = 0, +		LLCD_INTEGER, +		LLCD_FLOAT, +		LLCD_BOOLEAN, +		LLCD_ENUM +	}; + +	struct LLCDEnumItem +	{ +		const char*	mName; +		int			mValue; +	}; + +	union LLCDValue +	{ +		float	mFloat; +		int		mIntOrEnumValue; +		bool32	mBool; +	}; + +	union LLCDParamDetails +	{ +		struct { +			LLCDValue mLow; +			LLCDValue mHigh; +			LLCDValue mDelta; +		} mRange; + +		struct { +			int				mNumEnums; +			LLCDEnumItem*	mEnumsArray; +		} mEnumValues; +	}; + +	const char*					mName; +	const char*					mDescription; +	LLCDParamType				mType; +	LLCDParamDetails			mDetails; +	LLCDValue					mDefault; +	int							mStage; + +	// WARNING: Only the LLConvexDecomposition implementation +	// should change this value +	int							mReserved; +}; + +struct LLCDStageData +{ +	const char*	mName; +	const char* mDescription; +	bool32 mSupportsCallback; +}; + +struct LLCDMeshData +{ +	enum IndexType +	{ +		INT_16, +		INT_32 +	}; + +	const float*	mVertexBase; +	int				mVertexStrideBytes; +	int				mNumVertices; +	const void*		mIndexBase; +	IndexType		mIndexType; +	int				mIndexStrideBytes; +	int				mNumTriangles; +}; + +struct LLCDHull +{ +	const float*	mVertexBase; +	int				mVertexStrideBytes; +	int				mNumVertices; +}; + +enum LLCDResult +{ +	LLCD_OK = 0, +	LLCD_UNKOWN_ERROR, +	LLCD_NULL_PTR, +	LLCD_INVALID_STAGE, +	LLCD_UNKNOWN_PARAM, +	LLCD_BAD_VALUE, +	LLCD_REQUEST_OUT_OF_RANGE, +	LLCD_INVALID_MESH_DATA, +	LLCD_INVALID_HULL_DATA, +	LLCD_STAGE_NOT_READY, +	LLCD_INVALID_THREAD, +	LLCD_NOT_IMPLEMENTED +}; + +// This callback will receive a string describing the current subtask being performed +// as well as a pair of numbers indicating progress. (The values should not be interpreted +// as a completion percentage as 'current' may be greater than 'final'.) +// If the callback returns zero, the decomposition will be terminated +typedef int				(LLCD_CALL *llcdCallbackFunc)(const char* description, int current, int final); + +class LLConvexDecomposition +{ +public: +	// Obtain a pointer to the actual implementation +	static LLConvexDecomposition* getInstance(); + +	/// @returns false if this is the stub +	static bool isFunctional(); +	 +	static LLCDResult initSystem(); +	static LLCDResult initThread(); +	static LLCDResult quitThread(); +	static LLCDResult quitSystem(); + +	// Generate a decomposition object handle +	virtual void genDecomposition(int& decomp) = 0; +	// Delete decomposition object handle +	virtual void deleteDecomposition(int decomp) = 0; +	// Bind given decomposition handle +	// Commands operate on currently bound decomposition +	virtual void bindDecomposition(int decomp) = 0; + +	// Sets *paramsOut to the address of the LLCDParam array and returns +	// the number of parameters +	virtual int getParameters(const LLCDParam** paramsOut) = 0; + + +	// Sets *stagesOut to the address of the LLCDStageData array and returns +	// the number of stages +	virtual int getStages(const LLCDStageData** stagesOut) = 0; + + +	// Set a parameter by name. Pass enum values as integers. +	virtual LLCDResult	setParam(const char* name, float val)	= 0; +	virtual LLCDResult	setParam(const char* name, int val)		= 0; +	virtual LLCDResult	setParam(const char* name, bool val)	= 0; + + +	// Set incoming mesh data. Data is copied to local buffers and will +	// persist until the next setMeshData call +	virtual LLCDResult	setMeshData( const LLCDMeshData* data, bool vertex_based ) = 0; + + +	// Register a callback to be called periodically during the specified stage +	// See the typedef above for more information +	virtual LLCDResult	registerCallback( int stage, llcdCallbackFunc callback ) = 0; + + +	// Execute the specified decomposition stage +	virtual LLCDResult	executeStage(int stage) = 0; +	virtual LLCDResult  buildSingleHull() = 0 ; + + +	// Gets the number of hulls generated by the specified decompositions stage +	virtual int getNumHullsFromStage(int stage) = 0; + + +	// Populates hullOut to reference the internal copy of the requested hull +	// The data will persist only until the next executeStage call for that stage. +	virtual LLCDResult	getHullFromStage( int stage, int hull, LLCDHull* hullOut ) = 0; + +	virtual LLCDResult  getSingleHull( LLCDHull* hullOut ) = 0 ; + + +	// TODO: Implement lock of some kind to disallow this call if data not yet ready +	// Populates the meshDataOut to reference the utility's copy of the mesh geometry +	// for the hull and stage specified. +	// You must copy this data if you want to continue using it after the next executeStage +	// call +	virtual LLCDResult	getMeshFromStage( int stage, int hull, LLCDMeshData* meshDataOut) = 0; + + +	// Creates a mesh from hullIn and temporarily stores it internally in the utility. +	// The mesh data persists only until the next call to getMeshFromHull +	virtual LLCDResult	getMeshFromHull( LLCDHull* hullIn, LLCDMeshData* meshOut ) = 0; + +	// Takes meshIn, generates a single convex hull from it, converts that to a mesh +	// stored internally, and populates meshOut to reference the internally stored data. +	// The data is persistent only until the next call to generateSingleHullMeshFromMesh +	virtual LLCDResult generateSingleHullMeshFromMesh( LLCDMeshData* meshIn, LLCDMeshData* meshOut) = 0; + +	// +	/// Debug +	virtual void loadMeshData(const char* fileIn, LLCDMeshData** meshDataOut) = 0; + +private: +	static bool s_isInitialized; +}; + +#endif //LL_CONVEX_DECOMPOSITION + diff --git a/indra/llprimitive/llphysicsextensions/llpathinglib.cpp b/indra/llprimitive/llphysicsextensions/llpathinglib.cpp new file mode 100644 index 0000000000..1a6017c4b8 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llpathinglib.cpp @@ -0,0 +1,110 @@ +/** +* @file   llpathinglib.cpp +* @author prep@lindenlab.com +* @brief  LLPathingLib core creation methods +* +* $LicenseInfo:firstyear=2012&license=lgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2011, 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$ +*/ + +#if defined(_WINDOWS) +#	include "windowsincludes.h" +#endif + +#ifndef NULL +#define NULL 0 +#endif + + +#if !defined(LL_PATHING_LIB_STUB) +#	include "LLPathingLibImpl.h" +#else +#	include "LLPathingLibStubImpl.h" +#endif + +#include "llpathinglib.h" + +//disable the undefined symbol optimization +//#pragma warning (disable : 4221) + +//============================================================================= + +/*static */bool LLPathingLib::s_isInitialized = false; + +//============================================================================= + + +/*static*/bool LLPathingLib::isFunctional() +{ +#if !defined(LL_PATHING_LIB_STUB) +	return true; +#else +	return false; +#endif +} + +#if !defined(LL_PATHING_LIB_STUB) && defined(HK_COMPILER_CLANG) + //have to specialize before use so that generalized one not auto gen-d +HK_SINGLETON_SPECIALIZATION_DECL(LLPathingLibImpl); +#endif + +/*static*/LLPathingLib* LLPathingLib::getInstance() +{ +	if ( !s_isInitialized ) +	{ +		return NULL; +	} +	else +	{ +#if !defined(LL_PATHING_LIB_STUB) +		return &hkSingleton<LLPathingLibImpl>::getInstance(); +#else +		return LLPathingLibImpl::getInstance(); +#endif +	} +} + +//============================================================================= + +/*static */LLPathingLib::LLPLResult LLPathingLib::initSystem() +{ +	if ( LLPathingLibImpl::initSystem() == LLPL_OK ) +	{ +		s_isInitialized = true; +		return LLPL_OK; +	} +	return LLPL_UNKOWN_ERROR; +} +//============================================================================= +/*static */LLPathingLib::LLPLResult LLPathingLib::quitSystem() +{ +	LLPLResult quitResult = LLPL_UNKOWN_ERROR; + +	if (s_isInitialized) +	{ +		quitResult = LLPathingLibImpl::quitSystem(); +		s_isInitialized = false; +	} + +	return quitResult; +} +//============================================================================= + diff --git a/indra/llprimitive/llphysicsextensions/llpathinglib.h b/indra/llprimitive/llphysicsextensions/llpathinglib.h new file mode 100644 index 0000000000..c8c7410797 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llpathinglib.h @@ -0,0 +1,187 @@ +/** + * @file llpathinglib.cpp + * @author prep@lindenlab.com + * @brief LLPathingLib interface definition + * + * $LicenseInfo:firstyear=2012&license=lgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, 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_PATHING_LIBRARY +#define LL_PATHING_LIBRARY + +#include "llpreprocessor.h" +#include "llsd.h" +#include "v3dmath.h" +#include "v4math.h" + +#include "v4color.h" +#include "v4coloru.h" +#include "llphysicsextensions.h" + +typedef int bool32; + +#if defined(_WIN32) || defined(_WIN64) +#define LLCD_CALL __cdecl +#else +#define LLCD_CALL +#endif + +class LLRender; + +//============================================================================= +class LLPathingLib +{ + +public: +	enum LLShapeType +	{ +		LLST_WalkableObjects = 0, +		LLST_ObstacleObjects, +		LLST_MaterialPhantoms, +		LLST_ExclusionPhantoms,		 +		LLST_MaxShapeTypes  = LLST_ExclusionPhantoms+1, +		LLST_None			= LLST_MaxShapeTypes+2, +		LLST_SimpleBox		= LLST_None+1, +		LLST_SimpleCapsule  = LLST_SimpleBox+1, +	}; + +	enum LLShapeTypeFlag +	{ +		LLSTB_WalkableObjects   = 0x1 << 1, +		LLSTB_ObstacleObjects   = 0x1 << 2, +		LLSTB_MaterialPhantoms  = 0x1 << 3, +		LLSTB_ExclusionPhantoms = 0x1 << 4, +		LLSTB_None			    = 0x1 << 5 + 	}; + +	enum LLPLPathBookEnd +	{ +		LLPL_START = 0, +		LLPL_END, +	}; + +	enum LLPLResult +	{ +		LLPL_OK = 0, +		LLPL_NOTSET, +		LLPL_ERROR, +		LLPL_NO_NAVMESH, +		LLPL_UNKOWN_ERROR, +		LLPL_NO_PATH, +		LLPL_PATH_GENERATED_OK, +		LLPL_NOT_IMPLEMENTED, +	}; + +	enum LLPLCharacterType +	{ +		LLPL_CHARACTER_TYPE_A    = 4, +		LLPL_CHARACTER_TYPE_B    = 3, +		LLPL_CHARACTER_TYPE_C    = 2, +		LLPL_CHARACTER_TYPE_D    = 1, +		LLPL_CHARACTER_TYPE_NONE = 0 +	}; + +	struct PathingPacket +	{ +		PathingPacket() : mHasPointA(false), mHasPointB(false), mCharacterWidth(0.0f), mCharacterType(LLPL_CHARACTER_TYPE_NONE) {} +		bool              mHasPointA; +		LLVector3         mStartPointA; +		LLVector3         mEndPointA; +		bool              mHasPointB; +		LLVector3         mStartPointB; +		LLVector3         mEndPointB; +		F32               mCharacterWidth; +		LLPLCharacterType mCharacterType; +	}; + +	struct NavMeshColors +	{ +		LLColor4U	  mWalkable; +		LLColor4U	  mObstacle; +		LLColor4U	  mMaterial; +		LLColor4U	  mExclusion; +		LLColor4U	  mConnectedEdge; +		LLColor4U	  mBoundaryEdge; +		LLColor4	  mHeatColorBase; +		LLColor4	  mHeatColorMax; +		LLColor4U	  mFaceColor;	 +		LLColor4U	  mStarValid;	 +		LLColor4U	  mStarInvalid;	 +		LLColor4U	  mTestPath;	 +		LLColor4U	  mWaterColor; +	}; + +public: +	//Ctor +	LLPathingLib() {} +	virtual ~LLPathingLib() {} + +	/// @returns false if this is the stub +	static bool isFunctional(); +	 +	// Obtain a pointer to the actual implementation +	static LLPathingLib* getInstance(); +	static LLPathingLib::LLPLResult initSystem(); +	static LLPathingLib::LLPLResult quitSystem(); + +	//Extract and store navmesh data from the llsd datablock sent down by the server +	virtual LLPLResult extractNavMeshSrcFromLLSD( const LLSD::Binary& dataBlock, int dir )  = 0; +	//Stitch any stored navmeshes together +	virtual void processNavMeshData( ) = 0; + +	//Method used to generate and visualize a path on the viewers navmesh +	virtual LLPLResult generatePath( const PathingPacket& pathingPacket ) = 0; + +	//Set the material type for the heatmap type +	virtual void setNavMeshMaterialType( LLPLCharacterType materialType ) = 0; +	//Set the various navmesh colors +	virtual void setNavMeshColors( const NavMeshColors& color ) = 0; + +	//The entry method to rendering the client side navmesh +	virtual void renderNavMesh()  = 0; +	//The entry method to rendering the client side navmesh edges +	virtual void renderNavMeshEdges()  = 0; +	//The entry method to render the client navmesh shapes VBO +	virtual void renderNavMeshShapesVBO( U32 shapeRenderFlags )  = 0; +	//The entry method to render the clients designated path +	virtual void renderPath() = 0; +	//The entry method to render the capsule bookends for the clients designated path +	virtual void renderPathBookend( LLRender& gl, LLPathingLib::LLPLPathBookEnd type ) = 0; +	//Renders all of the generated simple shapes (using their default transforms) +	virtual void renderSimpleShapes( LLRender& gl, F32 regionsWaterHeight ) = 0; + +	//Method called from second life to create a capsule from properties of a character +	virtual void createPhysicsCapsuleRep( F32 length, F32 radius,  BOOL horizontal, const LLUUID& id ) = 0; +	//Removes any cached physics capsule using a list of cached uuids +	virtual void cleanupPhysicsCapsuleRepResiduals() = 0; +	//Renders a selected uuids physics rep +	virtual void renderSimpleShapeCapsuleID( LLRender& gl, const LLUUID& id, const LLVector3& pos, const LLQuaternion& rot  ) = 0; + +	//Method to delete any vbo's that are currently being managed by the pathing library +	virtual void cleanupVBOManager( ) = 0; +	//Method to cleanup any allocations within the implementation +	virtual void cleanupResidual( ) = 0; +private: +	static bool s_isInitialized; +}; + +#endif //LL_PATHING_LIBRARY diff --git a/indra/llprimitive/llphysicsextensions/llphysicsextensions.cpp b/indra/llprimitive/llphysicsextensions/llphysicsextensions.cpp new file mode 100644 index 0000000000..9bb4522a23 --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llphysicsextensions.cpp @@ -0,0 +1,103 @@ +/** +* @file   llphysicsextensions.cpp +* @author nyx@lindenlab.com +* @brief  LLPhysicsExtensions core initialization methods +* +* $LicenseInfo:firstyear=2012&license=lgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2011, 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$ +*/ + +#if defined(_WINDOWS) +#	include "windowsincludes.h" +#endif + +#ifndef NULL +#define NULL 0 +#endif + + +#include "llphysicsextensions.h" + +#if !defined(LL_PHYSICS_EXTENSIONS_STUB) +#	include "LLPhysicsExtensionsImpl.h" +#else +#	include "LLPhysicsExtensionsStubImpl.h" +#endif + + +//disable the undefined symbol optimization +//#pragma warning (disable : 4221) + +//============================================================================= + +/*static */bool LLPhysicsExtensions::s_isInitialized = false; + + +/*static*/bool LLPhysicsExtensions::isFunctional() +{ +#if !defined(LL_PHYSICS_EXTENSIONS_STUB) +	return true; +#else +	return false; +#endif +} + +//============================================================================= + +#if !defined(LL_PHYSICS_EXTENSIONS_STUB) && defined(HK_COMPILER_CLANG) + //have to specialize before use so that generalized one not auto gen-d +HK_SINGLETON_SPECIALIZATION_DECL(LLPhysicsExtensionsImpl); +#endif + +/*static*/LLPhysicsExtensions* LLPhysicsExtensions::getInstance() +{ +	if ( !s_isInitialized ) +	{ +		return NULL; +	} +	else +	{ +#if !defined(LL_PHYSICS_EXTENSIONS_STUB) +		return &hkSingleton<LLPhysicsExtensionsImpl>::getInstance(); +#else +		return LLPhysicsExtensionsImpl::getInstance(); +#endif +	} +} + +//============================================================================= + +/*static */bool LLPhysicsExtensions::initSystem() +{ +	bool result = LLPhysicsExtensionsImpl::initSystem(); +	if ( result ) +	{ +		s_isInitialized = true; +	} +	return result; +} +//============================================================================= +/*static */bool LLPhysicsExtensions::quitSystem() +{ +	return LLPhysicsExtensionsImpl::quitSystem(); +} +//============================================================================= + diff --git a/indra/llprimitive/llphysicsextensions/llphysicsextensions.h b/indra/llprimitive/llphysicsextensions/llphysicsextensions.h new file mode 100644 index 0000000000..be479f5d8a --- /dev/null +++ b/indra/llprimitive/llphysicsextensions/llphysicsextensions.h @@ -0,0 +1,59 @@ +/** +* @file   llphysicsextensions.h +* @author nyx@lindenlab.com +* @brief  LLPhysicsExtensions core shared initialization +*         routines +*  +* $LicenseInfo:firstyear=2012&license=lgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2011, 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_PHYSICS_EXTENSIONS +#define LL_PHYSICS_EXTENSIONS + +#include "llpreprocessor.h" +#include "llsd.h" +#include "v3dmath.h" + +#define LLPHYSICSEXTENSIONS_VERSION "1.0" + +typedef int bool32; + +class LLPhysicsExtensions +{ + +public: +	// Obtain a pointer to the actual implementation +	static LLPhysicsExtensions* getInstance(); + +	/// @returns false if this is the stub +	static bool isFunctional(); + +	static bool initSystem(); +	static bool quitSystem(); + +private: +    static bool s_isInitialized; +}; + +#endif //LL_PATHING_LIBRARY + + diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index 5dfce4ae16..5396203317 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -272,7 +272,7 @@ void  LLPrimitive::setAllTETextures(const LLUUID &tex_id)  //===============================================================  void LLPrimitive::setTE(const U8 index, const LLTextureEntry& te)  { -	if(mTextureList.copyTexture(index, te) != TEM_CHANGE_NONE && te.getBumpmap() > 0) +	if(mTextureList.copyTexture(index, &te) != TEM_CHANGE_NONE && te.getBumpmap() > 0)  	{  		mNumBumpmapTEs++;  	} @@ -751,7 +751,7 @@ void LLPrimitive::copyTEs(const LLPrimitive *primitivep)  	}  	for (i = 0; i < num_tes; i++)  	{ -		mTextureList.copyTexture(i, *(primitivep->getTE(i))); +		mTextureList.copyTexture(i, primitivep->getTE(i));  	}  } diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp index f4f08248b8..b50c541488 100644 --- a/indra/llprimitive/llprimtexturelist.cpp +++ b/indra/llprimitive/llprimtexturelist.cpp @@ -125,7 +125,7 @@ void LLPrimTextureList::take(LLPrimTextureList& other_list)  // virtual   // copies LLTextureEntry 'te'  // returns TEM_CHANGE_TEXTURE if successful, otherwise TEM_CHANGE_NONE -S32 LLPrimTextureList::copyTexture(const U8 index, const LLTextureEntry& te) +S32 LLPrimTextureList::copyTexture(const U8 index, const LLTextureEntry* te)  {  	if (S32(index) >= mEntryList.size())  	{ @@ -137,9 +137,9 @@ S32 LLPrimTextureList::copyTexture(const U8 index, const LLTextureEntry& te)  		// we're changing an existing entry  	llassert(mEntryList[index]);  	delete (mEntryList[index]); -	if  (&te) +	if  (te)  	{ -		mEntryList[index] = te.newCopy(); +		mEntryList[index] = te->newCopy();  	}  	else  	{ diff --git a/indra/llprimitive/llprimtexturelist.h b/indra/llprimitive/llprimtexturelist.h index 49c636e40f..a5f32bada6 100644 --- a/indra/llprimitive/llprimtexturelist.h +++ b/indra/llprimitive/llprimtexturelist.h @@ -71,7 +71,7 @@ public:  	// copies LLTextureEntry 'te'  	// returns TEM_CHANGE_TEXTURE if successful, otherwise TEM_CHANGE_NONE -	S32 copyTexture(const U8 index, const LLTextureEntry& te); +	S32 copyTexture(const U8 index, const LLTextureEntry* te);  	// takes ownership of LLTextureEntry* 'te'  	// returns TEM_CHANGE_TEXTURE if successful, otherwise TEM_CHANGE_NONE diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt index 9454943dc5..2bb75d3f37 100644 --- a/indra/llrender/CMakeLists.txt +++ b/indra/llrender/CMakeLists.txt @@ -102,3 +102,4 @@ target_link_libraries(llrender          OpenGL::GLU          ) +include(LibraryInstall) diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp index 254288a86e..bc5efbfce8 100644 --- a/indra/llrender/llcubemap.cpp +++ b/indra/llrender/llcubemap.cpp @@ -211,7 +211,9 @@ void LLCubeMap::initEnvironmentMap(const std::vector<LLPointer<LLImageRaw> >& ra      enableTexture(0);      bind();      mImages[0]->setFilteringOption(LLTexUnit::TFO_ANISOTROPIC); +#if GL_VERSION_3_2      glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); +#endif      glGenerateMipmap(GL_TEXTURE_CUBE_MAP);      gGL.getTexUnit(0)->disable();      disable(); diff --git a/indra/llrender/llcubemaparray.cpp b/indra/llrender/llcubemaparray.cpp index 7d3a92237b..74c2161aa7 100644 --- a/indra/llrender/llcubemaparray.cpp +++ b/indra/llrender/llcubemaparray.cpp @@ -128,8 +128,10 @@ void LLCubeMapArray::allocate(U32 resolution, U32 components, U32 count, BOOL us      while (resolution >= 1)      { +#if GL_VERSION_4_0          glTexImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, mip, format, resolution, resolution, count * 6, 0,              GL_RGBA, GL_UNSIGNED_BYTE, nullptr); +#endif          if (!use_mips)          { diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 4c7c8e6f5c..ac592d0889 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -72,7 +72,7 @@ static const std::string HEADLESS_VERSION_STRING("1.0");  llofstream gFailLog; -#if GL_ARB_debug_output +#if GL_ARB_debug_output || GL_KHR_debug  #ifndef APIENTRY  #define APIENTRY @@ -146,7 +146,11 @@ void APIENTRY gl_debug_callback(GLenum source,      if (ubo != 0)      {          glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_SIZE, &ubo_size); +#if GL_EXT_buffer_storage +        glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_IMMUTABLE_STORAGE_EXT, &ubo_immutable); +#else          glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_IMMUTABLE_STORAGE, &ubo_immutable); +#endif      }      if (severity == GL_DEBUG_SEVERITY_HIGH) @@ -222,6 +226,8 @@ PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = nullptr;  #endif +/* +  // GL_VERSION_1_2  //PFNGLDRAWRANGEELEMENTSPROC  glDrawRangeElements = nullptr;  //PFNGLTEXIMAGE3DPROC         glTexImage3D = nullptr; @@ -966,6 +972,7 @@ PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC    glMultiDrawArraysIndirectCount = nullpt  PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC  glMultiDrawElementsIndirectCount = nullptr;  PFNGLPOLYGONOFFSETCLAMPPROC              glPolygonOffsetClamp = nullptr; +*/  #endif  LLGLManager gGLManager; @@ -1119,6 +1126,7 @@ bool LLGLManager::initGL()  #endif  	} +#if GL_VERSION_1_3  	if (mGLVersion >= 2.1f && LLImageGL::sCompressTextures)  	{ //use texture compression  		glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST); @@ -1127,6 +1135,7 @@ bool LLGLManager::initGL()  	{ //GL version is < 3.0, always disable texture compression  		LLImageGL::sCompressTextures = false;  	} +#endif  	// Trailing space necessary to keep "nVidia Corpor_ati_on" cards  	// from being recognized as ATI. @@ -1143,7 +1152,7 @@ bool LLGLManager::initGL()  		mIsNVIDIA = TRUE;  	}  	else if (mGLVendor.find("INTEL") != std::string::npos -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  		 // The Mesa-based drivers put this in the Renderer string,  		 // not the Vendor string.  		 || mGLRenderer.find("INTEL") != std::string::npos @@ -1221,15 +1230,17 @@ bool LLGLManager::initGL()  	}  	glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &mNumTextureImageUnits); +#if GL_VERSION_3_2  	glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &mMaxColorTextureSamples);  	glGetIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &mMaxDepthTextureSamples);  	glGetIntegerv(GL_MAX_INTEGER_SAMPLES, &mMaxIntegerSamples);  	glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords); +#endif      glGetIntegerv(GL_MAX_SAMPLES, &mMaxSamples);      if (mGLVersion >= 4.59f)      { -        glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &mMaxAnisotropy); +        glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &mMaxAnisotropy);      }  	initGLStates(); @@ -1399,6 +1410,7 @@ void LLGLManager::initExtensions()      mInited = TRUE; +/*  #if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS  	LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL; @@ -2239,6 +2251,7 @@ void LLGLManager::initExtensions()      glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)GLH_EXT_GET_PROC_ADDRESS("glPolygonOffsetClamp");  #endif +*/  }  void rotate_quat(LLQuaternion& rotation) @@ -2265,12 +2278,14 @@ void log_glerror()  	error = glGetError();  	while (LL_UNLIKELY(error))  	{ +#if GLU_VERSION_1_1  		GLubyte const * gl_error_msg = gluErrorString(error);  		if (NULL != gl_error_msg)  		{  			LL_WARNS() << "GL Error: " << error << " GL Error String: " << gl_error_msg << LL_ENDL ;			  		}  		else +#endif // GLU_VERSION_1_1  		{  			// gluErrorString returns NULL for some extensions' error codes.  			// you'll probably have to grep for the number in glext.h. @@ -2289,6 +2304,7 @@ void do_assert_glerror()  	if (LL_UNLIKELY(error))  	{  		quit = TRUE; +#if GLU_VERSION_1_1  		GLubyte const * gl_error_msg = gluErrorString(error);  		if (NULL != gl_error_msg)  		{ @@ -2301,6 +2317,7 @@ void do_assert_glerror()  			}  		}  		else +#endif // GLU_VERSION_1_1  		{  			// gluErrorString returns NULL for some extensions' error codes.  			// you'll probably have to grep for the number in glext.h. @@ -2375,8 +2392,10 @@ void LLGLState::initClass()  	// sStateMap[GL_TEXTURE_2D] = GL_TRUE;  	//make sure multisample defaults to disabled -	sStateMap[GL_MULTISAMPLE] = GL_FALSE; -	glDisable(GL_MULTISAMPLE); +#if GL_EXT_multisample || GL_EXT_multisampled_compatibility +	sStateMap[GL_MULTISAMPLE_EXT] = GL_FALSE; +	glDisable(GL_MULTISAMPLE_EXT); +#endif  }  //static @@ -2391,6 +2410,7 @@ void LLGLState::restoreGL()  void LLGLState::resetTextureStates()  {  	gGL.flush(); +#if GL_VERSION_1_3  	GLint maxTextureUnits;  	glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits); @@ -2400,6 +2420,7 @@ void LLGLState::resetTextureStates()  		glClientActiveTexture(GL_TEXTURE0+j);  		j == 0 ? gGL.getTexUnit(j)->enable(LLTexUnit::TT_TEXTURE) : gGL.getTexUnit(j)->disable();  	} +#endif  }  void LLGLState::dumpStates()  diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h index b80680a3d2..29dfb451c3 100644 --- a/indra/llrender/llglheaders.h +++ b/indra/llrender/llglheaders.h @@ -27,7 +27,7 @@  #ifndef LL_LLGLHEADERS_H  #define LL_LLGLHEADERS_H -#if LL_MESA +#if LL_MESA || LL_LINUX || LL_FREEBSD  //----------------------------------------------------------------------------  // MESA headers  // quotes so we get libraries/.../GL/ version @@ -825,8 +825,12 @@ extern PFNGLPOLYGONOFFSETCLAMPPROC              glPolygonOffsetClamp;  #define GL_GLEXT_PROTOTYPES  #include "GL/glext.h" +#define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED +#include <OpenGL/gl3.h> +  #include "GL/glh_extensions.h" +/*  // These symbols don't exist on 10.3.9, so they have to be declared weak.  Redeclaring them here fixes the problem.  // Note that they also must not be called on 10.3.9.  This should be taken care of by a runtime check for the existence of the GL extension.  #include <AvailabilityMacros.h> @@ -941,7 +945,7 @@ extern "C" {  #ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ +// GL types for handling large vertex buffer objects  typedef intptr_t GLintptr;  typedef intptr_t GLsizeiptr;  #endif @@ -957,7 +961,7 @@ typedef GLboolean (* glIsBufferARBProcPtr) (GLuint buffer);  typedef void (* glBufferDataARBProcPtr) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);  typedef void (* glBufferSubDataARBProcPtr) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);  typedef void (* glGetBufferSubDataARBProcPtr) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (* glMapBufferARBProcPtr) (GLenum target, GLenum access);	/* Flawfinder: ignore */ +typedef GLvoid* (* glMapBufferARBProcPtr) (GLenum target, GLenum access);	// Flawfinder: ignore  typedef GLboolean (* glUnmapBufferARBProcPtr) (GLenum target);  typedef void (* glGetBufferParameterivARBProcPtr) (GLenum target, GLenum pname, GLint *params);  typedef void (* glGetBufferPointervARBProcPtr) (GLenum target, GLenum pname, GLvoid* *params); @@ -973,7 +977,7 @@ extern GLvoid* glMapBufferARB (GLenum, GLenum);  extern GLboolean glUnmapBufferARB (GLenum);  extern void glGetBufferParameterivARB (GLenum, GLenum, GLint *);  extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_FUNCTION_POINTERS */ +#endif // GL_GLEXT_FUNCTION_POINTERS  #endif  #ifndef GL_ARB_texture_rg @@ -1020,7 +1024,7 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);  // extern void glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);  // extern void glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);  // extern void glGetCompressedTexImage (GLenum, GLint, GLvoid*); -// #endif /* GL_GLEXT_FUNCTION_POINTERS */ +// #endif // GL_GLEXT_FUNCTION_POINTERS  // #endif  #ifdef __cplusplus @@ -1028,6 +1032,7 @@ extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);  #endif  #include <OpenGL/gl.h> +*/  #endif // LL_MESA / LL_WINDOWS / LL_DARWIN diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index ccfb8f69be..c0485d3b97 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -233,12 +233,16 @@ void LLGLSLShader::placeProfileQuery(bool for_runtime)              glGenQueries(1, &mPrimitivesQuery);          } -        glBeginQuery(GL_TIME_ELAPSED, mTimerQuery); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +        glBeginQuery(GL_TIME_ELAPSED_EXT, mTimerQuery); +#endif          if (!for_runtime)          { -            glBeginQuery(GL_SAMPLES_PASSED, mSamplesQuery); +            glBeginQuery(GL_ANY_SAMPLES_PASSED, mSamplesQuery); +#if GL_VERSION_3_0              glBeginQuery(GL_PRIMITIVES_GENERATED, mPrimitivesQuery); +#endif          }      }  } @@ -249,19 +253,28 @@ bool LLGLSLShader::readProfileQuery(bool for_runtime, bool force_read)      {          if (!mProfilePending)          { -            glEndQuery(GL_TIME_ELAPSED); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +            glEndQuery(GL_TIME_ELAPSED_EXT); +#endif              if (!for_runtime)              { -                glEndQuery(GL_SAMPLES_PASSED); +                glEndQuery(GL_ANY_SAMPLES_PASSED); +#if GL_VERSION_3_0                  glEndQuery(GL_PRIMITIVES_GENERATED); +#endif              }              mProfilePending = for_runtime;          }          if (mProfilePending && for_runtime && !force_read)          { +#if GL_ARB_timer_query              GLuint64 result = 0;              glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#else +            GLuint result = 0; +            glGetQueryObjectuiv(mTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#endif              if (result != GL_TRUE)              { @@ -269,18 +282,31 @@ bool LLGLSLShader::readProfileQuery(bool for_runtime, bool force_read)              }          } +#if GL_ARB_timer_query          GLuint64 time_elapsed = 0;          glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#else +        GLuint time_elapsed = 0; +        glGetQueryObjectuiv(mTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#endif          mTimeElapsed += time_elapsed;          mProfilePending = false;          if (!for_runtime)          { +#if GL_ARB_timer_query              GLuint64 samples_passed = 0;              glGetQueryObjectui64v(mSamplesQuery, GL_QUERY_RESULT, &samples_passed); -            U64 primitives_generated = 0; +            GLuint64 primitives_generated = 0;              glGetQueryObjectui64v(mPrimitivesQuery, GL_QUERY_RESULT, &primitives_generated); +#else +            GLuint samples_passed = 0; +            glGetQueryObjectuiv(mSamplesQuery, GL_QUERY_RESULT, &samples_passed); + +            GLuint primitives_generated = 0; +            glGetQueryObjectuiv(mPrimitivesQuery, GL_QUERY_RESULT, &primitives_generated); +#endif              sTotalTimeElapsed += time_elapsed;              sTotalSamplesDrawn += samples_passed; @@ -693,10 +719,14 @@ void LLGLSLShader::mapUniform(GLint index, const vector<LLStaticHashedString>* u          case GL_FLOAT_VEC2: size *= 2; break;          case GL_FLOAT_VEC3: size *= 3; break;          case GL_FLOAT_VEC4: size *= 4; break; +#if GL_VERSION_1_1          case GL_DOUBLE: size *= 2; break; +#if GL_VERSION_4_0          case GL_DOUBLE_VEC2: size *= 2; break;          case GL_DOUBLE_VEC3: size *= 6; break;          case GL_DOUBLE_VEC4: size *= 8; break; +#endif // GL_VERSION_4_0 +#endif // GL_VERSION_1_1          case GL_INT_VEC2: size *= 2; break;          case GL_INT_VEC3: size *= 3; break;          case GL_INT_VEC4: size *= 4; break; @@ -715,6 +745,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<LLStaticHashedString>* u          case GL_FLOAT_MAT3x4: size *= 12; break;          case GL_FLOAT_MAT4x2: size *= 8; break;          case GL_FLOAT_MAT4x3: size *= 12; break; +#if GL_VERSION_4_0          case GL_DOUBLE_MAT2: size *= 8; break;          case GL_DOUBLE_MAT3: size *= 18; break;          case GL_DOUBLE_MAT4: size *= 32; break; @@ -724,6 +755,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<LLStaticHashedString>* u          case GL_DOUBLE_MAT3x4: size *= 24; break;          case GL_DOUBLE_MAT4x2: size *= 16; break;          case GL_DOUBLE_MAT4x3: size *= 24; break; +#endif // GL_VERSION_4_0          }          mTotalUniformSize += size;      } @@ -798,7 +830,10 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type, GLint  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; -    if ((type >= GL_SAMPLER_1D && type <= GL_SAMPLER_2D_RECT_SHADOW) || +    if ( +#if GL_VERSION_2_0 +    (type >= GL_SAMPLER_1D && type <= GL_SAMPLER_2D_RECT_SHADOW) || +#endif          type == GL_SAMPLER_2D_MULTISAMPLE ||          type == GL_SAMPLER_CUBE_MAP_ARRAY)      {   //this here is a texture diff --git a/indra/llrender/llglstates.h b/indra/llrender/llglstates.h index 930c5e3ed7..bef8556348 100644 --- a/indra/llrender/llglstates.h +++ b/indra/llrender/llglstates.h @@ -166,6 +166,7 @@ public:  //---------------------------------------------------------------------------- +#if GL_VERSION_1_1  class LLGLSSpecular  {  public: @@ -190,6 +191,7 @@ public:  		}  	}  }; +#endif  //---------------------------------------------------------------------------- diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index c6fd824c4e..bd24200029 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -271,23 +271,31 @@ S32 LLImageGL::dataFormatBits(S32 dataformat)  {      switch (dataformat)      { +#if GL_EXT_texture_compression_s3tc || GL_EXT_texture_compression_dxt1      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:	        return 4; -    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:    return 4;      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:	        return 8; -    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:    return 8;      case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:	        return 8; +#endif +#if GL_EXT_texture_sRGB || GL_EXT_texture_compression_s3tc_srgb +    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:    return 4; +    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:    return 8;      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:    return 8; +#endif      case GL_LUMINANCE:						        return 8;      case GL_ALPHA:							        return 8;      case GL_RED:                                    return 8; +#if GL_VERSION_1_1      case GL_COLOR_INDEX:						    return 8; +#endif      case GL_LUMINANCE_ALPHA:					    return 16;      case GL_RGB:								    return 24;      case GL_SRGB:								    return 24;      case GL_RGB8:								    return 24;      case GL_RGBA:								    return 32; +#if GL_VERSION_2_1      case GL_SRGB_ALPHA:						        return 32;      case GL_BGRA:								    return 32;		// Used for QuickTime media textures on the Mac +#endif      case GL_DEPTH_COMPONENT:                        return 24;      default:          LL_ERRS() << "LLImageGL::Unknown format: " << dataformat << LL_ENDL; @@ -300,6 +308,8 @@ S64 LLImageGL::dataFormatBytes(S32 dataformat, S32 width, S32 height)  {      switch (dataformat)      { +#if GL_EXT_texture_compression_s3tc || GL_EXT_texture_compression_dxt1 \ +	    || GL_EXT_texture_sRGB || GL_EXT_texture_compression_s3tc_srgb      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: @@ -309,6 +319,7 @@ S64 LLImageGL::dataFormatBytes(S32 dataformat, S32 width, S32 height)          if (width < 4) width = 4;          if (height < 4) height = 4;          break; +#endif      default:          break;      } @@ -322,22 +333,30 @@ S32 LLImageGL::dataFormatComponents(S32 dataformat)  {  	switch (dataformat)  	{ +#if GL_EXT_texture_compression_s3tc || GL_EXT_texture_compression_dxt1  	  case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:	return 3; -	  case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: return 3;  	  case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:	return 4; -	  case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: return 4;  	  case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:	return 4; +#endif +#if GL_EXT_texture_sRGB || GL_EXT_texture_compression_s3tc_srgb +	  case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: return 3; +	  case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: return 4;  	  case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: return 4; +#endif  	  case GL_LUMINANCE:						return 1;  	  case GL_ALPHA:							return 1;        case GL_RED:                              return 1; +#if GL_VERSION_1_1  	  case GL_COLOR_INDEX:						return 1; +#endif  	  case GL_LUMINANCE_ALPHA:					return 2;  	  case GL_RGB:								return 3;  	  case GL_SRGB:								return 3;  	  case GL_RGBA:								return 4; +#if GL_VERSION_2_1  	  case GL_SRGB_ALPHA:						return 4;  	  case GL_BGRA:								return 4;		// Used for QuickTime media textures on the Mac +#endif  	  default:  		LL_ERRS() << "LLImageGL::Unknown format: " << dataformat << LL_ENDL;  		return 0; @@ -791,11 +810,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  				}  				else  				{ +#if GL_VERSION_1_1  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  						stop_glerror();  					} +#endif  					LLImageGL::setManualImage(mTarget, gl_level, mFormatInternal, w, h, mFormatPrimary, GL_UNSIGNED_BYTE, (GLvoid*)data_in, mAllowCompression);  					if (gl_level == 0) @@ -804,11 +825,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  					}  					updatePickMask(w, h, data_in); +#if GL_VERSION_1_1  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  						stop_glerror();  					} +#endif  					stop_glerror();  				} @@ -821,11 +844,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  			{  				stop_glerror();  				{ +#if GL_VERSION_1_1  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  						stop_glerror();  					} +#endif  					S32 w = getWidth(mCurrentDiscardLevel);  					S32 h = getHeight(mCurrentDiscardLevel); @@ -835,10 +860,12 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  					//use legacy mipmap generation mode (note: making this condional can cause rendering issues)  					// -- but making it not conditional triggers deprecation warnings when core profile is enabled  					//		(some rendering issues while core profile is enabled are acceptable at this point in time) +#if GL_VERSION_1_4  					if (!LLRender::sGLCoreProfile)  					{  						glTexParameteri(mTarget, GL_GENERATE_MIPMAP, GL_TRUE);  					} +#endif                      LLImageGL::setManualImage(mTarget, 0, mFormatInternal,  								 w, h,  @@ -849,11 +876,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  					updatePickMask(w, h, data_in); +#if GL_VERSION_1_1  					if(mFormatSwapBytes)  					{  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  						stop_glerror();  					} +#endif  					if (LLRender::sGLCoreProfile)  					{ @@ -938,11 +967,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  					llassert(w > 0 && h > 0 && cur_mip_data);  					(void)cur_mip_data;  					{ +#if GL_VERSION_1_1  						if(mFormatSwapBytes)  						{  							glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  							stop_glerror();  						} +#endif                          LLImageGL::setManualImage(mTarget, m, mFormatInternal, w, h, mFormatPrimary, mFormatType, cur_mip_data, mAllowCompression);  						if (m == 0) @@ -955,11 +986,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  							updatePickMask(w, h, cur_mip_data);  						} +#if GL_VERSION_1_1  						if(mFormatSwapBytes)  						{  							glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  							stop_glerror();  						} +#endif  					}  					if (prev_mip_data && prev_mip_data != data_in)  					{ @@ -994,11 +1027,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  		}  		else  		{ +#if GL_VERSION_1_1  			if(mFormatSwapBytes)  			{  				glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  				stop_glerror();  			} +#endif  			LLImageGL::setManualImage(mTarget, 0, mFormatInternal, w, h,  						 mFormatPrimary, mFormatType, (GLvoid *)data_in, mAllowCompression); @@ -1008,11 +1043,13 @@ BOOL LLImageGL::setImage(const U8* data_in, BOOL data_hasmips /* = FALSE */, S32  			stop_glerror(); +#if GL_VERSION_1_1  			if(mFormatSwapBytes)  			{  				glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  				stop_glerror();  			} +#endif  		}  	} @@ -1057,13 +1094,17 @@ BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)          {              case 1:                  // Use luminance alpha (for fonts) +#if GL_VERSION_1_1                  mFormatInternal = GL_LUMINANCE8; +#endif                  mFormatPrimary  = GL_LUMINANCE;                  mFormatType     = GL_UNSIGNED_BYTE;                  break;              case 2:                  // Use luminance alpha (for fonts) +#if GL_VERSION_1_1                  mFormatInternal = GL_LUMINANCE8_ALPHA8; +#endif                  mFormatPrimary  = GL_LUMINANCE_ALPHA;                  mFormatType     = GL_UNSIGNED_BYTE;                  break; @@ -1091,22 +1132,26 @@ BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)  	glPixelStorei(GL_UNPACK_ROW_LENGTH, raw_image->getWidth());  	stop_glerror(); +#if GL_VERSION_1_1  	if(mFormatSwapBytes)  	{  		glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  		stop_glerror();  	} +#endif  	return TRUE ;  }  void LLImageGL::postAddToAtlas()  { +#if GL_VERSION_1_1  	if(mFormatSwapBytes)  	{  		glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  		stop_glerror();  	} +#endif  	glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);  	gGL.getTexUnit(0)->setTextureFilteringOption(mFilterOption);	 @@ -1120,7 +1165,9 @@ U32 type_width_from_pixtype(U32 pixtype)      {      case GL_UNSIGNED_BYTE:      case GL_BYTE: +#if GL_VERSION_1_2      case GL_UNSIGNED_INT_8_8_8_8_REV: +#endif          type_width = 1;          break;      case GL_UNSIGNED_SHORT: @@ -1235,11 +1282,13 @@ BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S3  		glPixelStorei(GL_UNPACK_ROW_LENGTH, data_width);  		stop_glerror(); +#if GL_VERSION_1_1  		if(mFormatSwapBytes)  		{  			glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);  			stop_glerror();  		} +#endif  		const U8* sub_datap = datap + (y_pos * data_width + x_pos) * getComponents();  		// Update the GL texture @@ -1263,11 +1312,13 @@ BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S3  		gGL.getTexUnit(0)->disable();  		stop_glerror(); +#if GL_VERSION_1_1  		if(mFormatSwapBytes)  		{  			glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  			stop_glerror();  		} +#endif  		glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);  		stop_glerror(); @@ -1432,35 +1483,57 @@ void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 widt          {          case GL_RGB:          case GL_RGB8: +#if GL_VERSION_1_3              intformat = GL_COMPRESSED_RGB; +#endif              break;          case GL_SRGB:          case GL_SRGB8: +#if GL_VERSION_2_1              intformat = GL_COMPRESSED_SRGB; +#endif              break;          case GL_RGBA:          case GL_RGBA8: +#if GL_VERSION_1_3              intformat = GL_COMPRESSED_RGBA; +#endif              break; -        case GL_SRGB_ALPHA:          case GL_SRGB8_ALPHA8: +#if GL_VERSION_2_1 +        case GL_SRGB_ALPHA:              intformat = GL_COMPRESSED_SRGB_ALPHA; +#endif              break;          case GL_LUMINANCE: +#if GL_VERSION_1_1          case GL_LUMINANCE8: +#endif +#if GL_VERSION_1_3              intformat = GL_COMPRESSED_LUMINANCE; +#endif              break;          case GL_LUMINANCE_ALPHA: +#if GL_VERSION_1_1          case GL_LUMINANCE8_ALPHA8: +#endif +#if GL_VERSION_1_3              intformat = GL_COMPRESSED_LUMINANCE_ALPHA; +#endif              break;          case GL_ALPHA: +#if GL_VERSION_1_1          case GL_ALPHA8: +#endif +#if GL_VERSION_1_3              intformat = GL_COMPRESSED_ALPHA; +#endif              break;          case GL_RED:          case GL_R8: +#if GL_VERSION_3_0              intformat = GL_COMPRESSED_RED; +#endif              break;          default:              LL_WARNS() << "Could not compress format: " << std::hex << intformat << LL_ENDL; @@ -1599,13 +1672,21 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S          {          case 1:              // Use luminance alpha (for fonts) +#if GL_VERSION_1_1              mFormatInternal = GL_LUMINANCE8; +#else +            mFormatInternal = GL_LUMINANCE; +#endif              mFormatPrimary = GL_LUMINANCE;              mFormatType = GL_UNSIGNED_BYTE;              break;          case 2:              // Use luminance alpha (for fonts) +#if GL_VERSION_1_1              mFormatInternal = GL_LUMINANCE8_ALPHA8; +#else +            mFormatInternal = GL_LUMINANCE_ALPHA; +#endif              mFormatPrimary = GL_LUMINANCE_ALPHA;              mFormatType = GL_UNSIGNED_BYTE;              break; @@ -1887,6 +1968,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre  	}  	//----------------------------------------------------------------------------------------------- +#if GL_VERSION_1_3  	if (is_compressed)  	{  		LLGLint glbytes; @@ -1913,6 +1995,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre  		glGetTexImage(GL_TEXTURE_2D, gl_discard, mFormatPrimary, mFormatType, (GLvoid*)(imageraw->getData()));		  		//stop_glerror();  	} +#endif // GL_VERSION_1_3  	//-----------------------------------------------------------------------------------------------  	if((error = glGetError()) != GL_NO_ERROR) @@ -2001,11 +2084,13 @@ BOOL LLImageGL::getIsResident(BOOL test_now)  {  	if (test_now)  	{ +#if GL_VERSION_1_1  		if (mTexName != 0)  		{  			glAreTexturesResident(1, (GLuint*)&mTexName, &mIsResident);  		}  		else +#endif  		{  			mIsResident = FALSE;  		} @@ -2135,12 +2220,16 @@ void LLImageGL::calcAlphaChannelOffsetAndStride()          mIsMask = FALSE;          return; //no alpha channel.      case GL_RGBA: +#if GL_VERSION_2_1      case GL_SRGB_ALPHA: +#endif          mAlphaStride = 4;          break; +#if GL_EXT_bgra      case GL_BGRA_EXT:          mAlphaStride = 4;          break; +#endif      default:          break;      } @@ -2150,6 +2239,7 @@ void LLImageGL::calcAlphaChannelOffsetAndStride()  	{  		mAlphaOffset = mAlphaStride - 1 ;  	} +#if GL_VERSION_1_2  	else if(is_little_endian())  	{  		if (mFormatType == GL_UNSIGNED_INT_8_8_8_8) @@ -2172,10 +2262,15 @@ void LLImageGL::calcAlphaChannelOffsetAndStride()  			mAlphaOffset = 0 ;  		}  	} +#endif // GL_VERSION_1_2  	if( mAlphaStride < 1 || //unsupported format -		mAlphaOffset < 0 || //unsupported type -		(mFormatPrimary == GL_BGRA_EXT && mFormatType != GL_UNSIGNED_BYTE)) //unknown situation +		mAlphaOffset < 0 //unsupported type +#if GL_EXT_bgra +		|| +		(mFormatPrimary == GL_BGRA_EXT && mFormatType != GL_UNSIGNED_BYTE) //unknown situation +#endif +	  )  	{  		LL_WARNS() << "Cannot analyze alpha for image with format type " << std::hex << mFormatType << std::dec << LL_ENDL; @@ -2321,6 +2416,8 @@ bool LLImageGL::isCompressed()      bool is_compressed = false;      switch (mFormatPrimary)      { +#if GL_EXT_texture_compression_s3tc || GL_EXT_texture_compression_dxt1 \ +	    || GL_EXT_texture_sRGB || GL_EXT_texture_compression_s3tc_srgb      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: @@ -2329,6 +2426,7 @@ bool LLImageGL::isCompressed()      case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:          is_compressed = true;          break; +#endif      default:          break;      } @@ -2347,7 +2445,10 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)      if (mFormatType != GL_UNSIGNED_BYTE ||          ((mFormatPrimary != GL_RGBA) -      && (mFormatPrimary != GL_SRGB_ALPHA))) +#if GL_VERSION_2_1 +      && (mFormatPrimary != GL_SRGB_ALPHA) +#endif +      ))      {          //cannot generate a pick mask for this texture          return; diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp index 0f8655132b..aea82e9414 100644 --- a/indra/llrender/llpostprocess.cpp +++ b/indra/llrender/llpostprocess.cpp @@ -296,8 +296,10 @@ void LLPostProcess::getShaderUniforms(glslUniforms & uniforms, GLuint & prog)  void LLPostProcess::doEffects(void)  {  	/// Save GL State +#if GL_VERSION_1_1  	glPushAttrib(GL_ALL_ATTRIB_BITS);  	glPushClientAttrib(GL_ALL_ATTRIB_BITS); +#endif  	/// Copy the screen buffer to the render texture  	{ @@ -322,15 +324,19 @@ void LLPostProcess::doEffects(void)  	viewPerspective();	  	/// Reset GL State +#if GL_VERSION_1_1  	glPopClientAttrib();  	glPopAttrib(); +#endif  	checkError();  }  void LLPostProcess::copyFrameBuffer(U32 & texture, unsigned int width, unsigned int height)  {  	gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, texture); +#if GL_VERSION_3_1  	glCopyTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA, 0, 0, width, height, 0); +#endif  }  void LLPostProcess::drawOrthoQuad(unsigned int width, unsigned int height, QuadType type) @@ -371,7 +377,9 @@ void LLPostProcess::createTexture(LLPointer<LLImageGL>& texture, unsigned int wi  	if(texture->createGLTexture())  	{  		gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, texture->getTexName()); +#if GL_VERSION_3_1  		glTexImage2D(GL_TEXTURE_RECTANGLE, 0, 4, width, height, 0, +#endif  			GL_RGBA, GL_UNSIGNED_BYTE, &data[0]);  		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);  		gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); @@ -406,18 +414,22 @@ bool LLPostProcess::checkError(void)      while (glErr != GL_NO_ERROR)      {  		// shaderErrorLog << (const char *) gluErrorString(glErr) << std::endl; +#if GLU_VERSION_1_1  		char const * err_str_raw = (const char *) gluErrorString(glErr);  		if(err_str_raw == NULL)  		{ +#endif  			std::ostringstream err_builder;  			err_builder << "unknown error number " << glErr;  			mShaderErrorString = err_builder.str(); +#if GLU_VERSION_1_1  		}  		else  		{  			mShaderErrorString = err_str_raw;  		} +#endif          retCode = true;          glErr = glGetError(); diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index ee66122774..05a98bff1b 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -81,10 +81,16 @@ static std::unordered_map<U64, LLVBCache> sVBCache;  static const GLenum sGLTextureType[] =  {  	GL_TEXTURE_2D, +#if GL_VERSION_3_1  	GL_TEXTURE_RECTANGLE, +#endif  	GL_TEXTURE_CUBE_MAP, +#if GL_VERSION_4_0      GL_TEXTURE_CUBE_MAP_ARRAY, +#endif +#if GL_VERSION_3_2  	GL_TEXTURE_2D_MULTISAMPLE, +#endif      GL_TEXTURE_3D  }; @@ -522,17 +528,18 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio  	{  		if (LLImageGL::sGlobalUseAnisotropic && option == TFO_ANISOTROPIC)  		{ -			glTexParameterf(sGLTextureType[mCurrTexType], GL_TEXTURE_MAX_ANISOTROPY, gGLManager.mMaxAnisotropy); +			glTexParameterf(sGLTextureType[mCurrTexType], GL_TEXTURE_MAX_ANISOTROPY_EXT, gGLManager.mMaxAnisotropy);  		}  		else  		{ -			glTexParameterf(sGLTextureType[mCurrTexType], GL_TEXTURE_MAX_ANISOTROPY, 1.f); +			glTexParameterf(sGLTextureType[mCurrTexType], GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.f);  		}  	}  }  GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)  { +#if GL_VERSION_1_3  	switch(src)  	{  		// All four cases should return the same value. @@ -547,8 +554,10 @@ GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)  		case TBS_TEX_ALPHA:  		case TBS_ONE_MINUS_TEX_COLOR:  		case TBS_ONE_MINUS_TEX_ALPHA: +#endif  			return GL_TEXTURE; +#if GL_VERSION_1_3  		// All four cases should return the same value.  		case TBS_VERT_COLOR:  		case TBS_VERT_ALPHA: @@ -567,6 +576,7 @@ GLint LLTexUnit::getTextureSource(eTextureBlendSrc src)  			LL_WARNS() << "Unknown eTextureBlendSrc: " << src << ".  Using Vertex Color instead." << LL_ENDL;  			return GL_PRIMARY_COLOR;  	} +#endif  }  GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha) @@ -613,7 +623,9 @@ void LLTexUnit::setColorScale(S32 scale)  	{  		mCurrColorScale = scale;  		gGL.flush(); +#if GL_VERSION_1_1  		glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale ); +#endif  	}  } @@ -623,7 +635,9 @@ void LLTexUnit::setAlphaScale(S32 scale)  	{  		mCurrAlphaScale = scale;  		gGL.flush(); +#if GL_VERSION_1_1  		glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale ); +#endif  	}  } @@ -877,7 +891,9 @@ void LLRender::init(bool needs_vertex_buffer)      glCullFace(GL_BACK);      // necessary for reflection maps +#if GL_VERSION_3_2      glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); +#endif      { //bind a dummy vertex array object so we're core profile compliant          U32 ret; @@ -2060,10 +2076,12 @@ void LLRender::diffuseColor3f(F32 r, F32 g, F32 b)  	{  		shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, r,g,b,1.f);  	} +#if GL_VERSION_1_1  	else  	{  		glColor3f(r,g,b);  	} +#endif  }  void LLRender::diffuseColor3fv(const F32* c) @@ -2075,10 +2093,12 @@ void LLRender::diffuseColor3fv(const F32* c)  	{  		shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, c[0], c[1], c[2], 1.f);  	} +#if GL_VERSION_1_1  	else  	{  		glColor3fv(c);  	} +#endif  }  void LLRender::diffuseColor4f(F32 r, F32 g, F32 b, F32 a) @@ -2090,10 +2110,12 @@ void LLRender::diffuseColor4f(F32 r, F32 g, F32 b, F32 a)  	{  		shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, r,g,b,a);  	} +#if GL_VERSION_1_1  	else  	{  		glColor4f(r,g,b,a);  	} +#endif  }  void LLRender::diffuseColor4fv(const F32* c) @@ -2105,10 +2127,12 @@ void LLRender::diffuseColor4fv(const F32* c)  	{  		shader->uniform4fv(LLShaderMgr::DIFFUSE_COLOR, 1, c);  	} +#if GL_VERSION_1_1  	else  	{  		glColor4fv(c);  	} +#endif  }  void LLRender::diffuseColor4ubv(const U8* c) @@ -2120,10 +2144,12 @@ void LLRender::diffuseColor4ubv(const U8* c)  	{  		shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, c[0]/255.f, c[1]/255.f, c[2]/255.f, c[3]/255.f);  	} +#if GL_VERSION_1_1  	else  	{  		glColor4ubv(c);  	} +#endif  }  void LLRender::diffuseColor4ub(U8 r, U8 g, U8 b, U8 a) @@ -2135,10 +2161,12 @@ void LLRender::diffuseColor4ub(U8 r, U8 g, U8 b, U8 a)  	{  		shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, r/255.f, g/255.f, b/255.f, a/255.f);  	} +#if GL_VERSION_1_1  	else  	{  		glColor4ub(r,g,b,a);  	} +#endif  } diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 98141d71f5..9660f7913a 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -34,6 +34,7 @@  //#include "linden_common.h" +#include <array>  #include "v2math.h"  #include "v3math.h"  #include "v4coloru.h" diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index 52869406d2..4600b848ac 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -1514,10 +1514,12 @@ void LLRender2D::setLineWidth(F32 width)      // If outside the allowed range, glLineWidth fails with "invalid value".      // On Darwin, the range is [1, 1].      static GLfloat range[2]{0.0}; +#if GL_VERSION_1_2      if (range[1] == 0)      {          glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, range);      } +#endif      width *= lerp(LLRender::sUIGLScaleFactor.mV[VX], LLRender::sUIGLScaleFactor.mV[VY], 0.5f);      glLineWidth(llclamp(width, range[0], range[1]));  } diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index 88c48e5166..ffe028c087 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -430,7 +430,8 @@ void LLRenderTarget::bindTarget()      if (mTex.empty())      { //no color buffer to draw to -        glDrawBuffer(GL_NONE); +        GLenum drawbuffers[] = {GL_NONE}; +        glDrawBuffers(0, drawbuffers);          glReadBuffer(GL_NONE);      } @@ -498,7 +499,9 @@ void LLRenderTarget::bindTexture(U32 index, S32 channel, LLTexUnit::eTextureFilt      {          case GL_SRGB:          case GL_SRGB8: +#if GL_VERSION_2_1          case GL_SRGB_ALPHA: +#endif          case GL_SRGB8_ALPHA8:              isSRGB = true;              break; diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt index 9108c6143c..06416df09b 100644 --- a/indra/llui/CMakeLists.txt +++ b/indra/llui/CMakeLists.txt @@ -266,6 +266,8 @@ target_link_libraries(llui          llcommon      ) +include(LibraryInstall) +  # Add tests  if(LL_TESTS)    include(LLAddBuildTest) diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 7b1430c67c..1e3c517483 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -51,7 +51,7 @@ set(llwindow_LINK_LIBRARIES          llcommon          llimage          llmath -        llrender +        #llrender          llfilesystem          llxml          ll::glh_linear @@ -59,9 +59,12 @@ set(llwindow_LINK_LIBRARIES          ll::uilibraries          ll::SDL          ) + +include_directories(${CMAKE_SOURCE_DIR}/llrender) +  # Libraries on which this library depends, needed for Linux builds  # Sort by high-level to low-level -if (LINUX) +if (USESYSTEMLIBS)    list(APPEND viewer_SOURCE_FILES          llkeyboardsdl.cpp          llwindowsdl.cpp @@ -84,9 +87,9 @@ if (LINUX)          )    endif (BUILD_HEADLESS) -endif (LINUX) +endif (USESYSTEMLIBS) -if (DARWIN) +if (DARWIN AND (NOT USESYSTEMLIBS))    list(APPEND llwindow_SOURCE_FILES      llkeyboardmacosx.cpp      llwindowmacosx.cpp @@ -108,7 +111,7 @@ if (DARWIN)        PROPERTIES        COMPILE_FLAGS "-Wno-deprecated-declarations -fpascal-strings"        ) -endif (DARWIN) +endif (DARWIN AND (NOT USESYSTEMLIBS))  if (WINDOWS) @@ -180,8 +183,10 @@ endif (SDL_FOUND)    target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})    target_include_directories(llwindow INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) -if (DARWIN) +if (DARWIN AND (NOT USESYSTEMLIBS))    include(CMakeFindFrameworks)    find_library(CARBON_LIBRARY Carbon)    target_link_libraries(llwindow ${CARBON_LIBRARY}) -endif (DARWIN) +endif (DARWIN AND (NOT USESYSTEMLIBS)) + +include(LibraryInstall) diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp index e65cc7563e..ac8c97d34e 100644 --- a/indra/llwindow/llkeyboard.cpp +++ b/indra/llwindow/llkeyboard.cpp @@ -195,9 +195,9 @@ void LLKeyboard::resetKeys()  } -BOOL LLKeyboard::translateKey(const U16 os_key, KEY *out_key) +BOOL LLKeyboard::translateKey(const U32 os_key, KEY *out_key)  { -	std::map<U16, KEY>::iterator iter; +	std::map<U32, KEY>::iterator iter;  	// Only translate keys in the map, ignore all other keys for now  	iter = mTranslateKeyMap.find(os_key); @@ -215,9 +215,9 @@ BOOL LLKeyboard::translateKey(const U16 os_key, KEY *out_key)  } -U16 LLKeyboard::inverseTranslateKey(const KEY translated_key) +U32 LLKeyboard::inverseTranslateKey(const KEY translated_key)  { -	std::map<KEY, U16>::iterator iter; +	std::map<KEY, U32>::iterator iter;  	iter = mInvTranslateKeyMap.find(translated_key);  	if (iter == mInvTranslateKeyMap.end())  	{ diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h index fb1ae10f50..0cfba78c5b 100644 --- a/indra/llwindow/llkeyboard.h +++ b/indra/llwindow/llkeyboard.h @@ -67,16 +67,16 @@ public:  	BOOL			getKeyDown(const KEY key) { return mKeyLevel[key]; }  	BOOL			getKeyRepeated(const KEY key) { return mKeyRepeated[key]; } -	BOOL			translateKey(const U16 os_key, KEY *translated_key); -	U16				inverseTranslateKey(const KEY translated_key); +	BOOL			translateKey(const U32 os_key, KEY *translated_key); +	U32				inverseTranslateKey(const KEY translated_key);  	BOOL			handleTranslatedKeyUp(KEY translated_key, U32 translated_mask);		// Translated into "Linden" keycodes  	BOOL			handleTranslatedKeyDown(KEY translated_key, U32 translated_mask);	// Translated into "Linden" keycodes -	virtual BOOL	handleKeyUp(const U16 key, MASK mask) = 0; -	virtual BOOL	handleKeyDown(const U16 key, MASK mask) = 0; +	virtual BOOL	handleKeyUp(const U32 key, MASK mask) = 0; +	virtual BOOL	handleKeyDown(const U32 key, MASK mask) = 0; -#ifdef LL_DARWIN +#if defined(LL_DARWIN) && !defined(LL_SDL)  	// We only actually use this for OS X.  	virtual void	handleModifier(MASK mask) = 0;  #endif // LL_DARWIN @@ -109,8 +109,8 @@ protected:  	void 			addKeyName(KEY key, const std::string& name);  protected: -	std::map<U16, KEY>	mTranslateKeyMap;		// Map of translations from OS keys to Linden KEYs -	std::map<KEY, U16>	mInvTranslateKeyMap;	// Map of translations from Linden KEYs to OS keys +	std::map<U32, KEY>	mTranslateKeyMap;		// Map of translations from OS keys to Linden KEYs +	std::map<KEY, U32>	mInvTranslateKeyMap;	// Map of translations from Linden KEYs to OS keys  	LLWindowCallbacks *mCallbacks;  	LLTimer			mKeyLevelTimer[KEY_COUNT];	// Time since level was set diff --git a/indra/llwindow/llkeyboardheadless.cpp b/indra/llwindow/llkeyboardheadless.cpp index a1b6b294e0..3ca421f9f9 100644 --- a/indra/llwindow/llkeyboardheadless.cpp +++ b/indra/llwindow/llkeyboardheadless.cpp @@ -35,11 +35,11 @@ void LLKeyboardHeadless::resetMaskKeys()  { } -BOOL LLKeyboardHeadless::handleKeyDown(const U16 key, const U32 mask) +BOOL LLKeyboardHeadless::handleKeyDown(const U32 key, const U32 mask)  { return FALSE; } -BOOL LLKeyboardHeadless::handleKeyUp(const U16 key, const U32 mask) +BOOL LLKeyboardHeadless::handleKeyUp(const U32 key, const U32 mask)  { return FALSE; }  MASK LLKeyboardHeadless::currentMask(BOOL for_mouse_event) diff --git a/indra/llwindow/llkeyboardheadless.h b/indra/llwindow/llkeyboardheadless.h index 8ed28ace90..929751586c 100644 --- a/indra/llwindow/llkeyboardheadless.h +++ b/indra/llwindow/llkeyboardheadless.h @@ -35,8 +35,8 @@ public:  	LLKeyboardHeadless();  	/*virtual*/ ~LLKeyboardHeadless() {}; -	/*virtual*/ BOOL	handleKeyUp(const U16 key, MASK mask); -	/*virtual*/ BOOL	handleKeyDown(const U16 key, MASK mask); +	/*virtual*/ BOOL	handleKeyUp(const U32 key, MASK mask); +	/*virtual*/ BOOL	handleKeyDown(const U32 key, MASK mask);  	/*virtual*/ void	resetMaskKeys();  	/*virtual*/ MASK	currentMask(BOOL for_mouse_event);  	/*virtual*/ void	scanKeyboard(); diff --git a/indra/llwindow/llkeyboardsdl.cpp b/indra/llwindow/llkeyboardsdl.cpp index 7c9aa1d340..872b58e2ec 100644 --- a/indra/llwindow/llkeyboardsdl.cpp +++ b/indra/llwindow/llkeyboardsdl.cpp @@ -29,7 +29,7 @@  #include "linden_common.h"  #include "llkeyboardsdl.h"  #include "llwindowcallbacks.h" -#include "SDL/SDL.h" +#include "SDL2/SDL.h"  LLKeyboardSDL::LLKeyboardSDL()  { @@ -40,7 +40,7 @@ LLKeyboardSDL::LLKeyboardSDL()  	// Virtual key mappings from SDL_keysym.h ...  	// SDL maps the letter keys to the ASCII you'd expect, but it's lowercase... -	U16 cur_char; +	U32 cur_char;  	for (cur_char = 'A'; cur_char <= 'Z'; cur_char++)  	{  		mTranslateKeyMap[cur_char] = cur_char; @@ -57,16 +57,16 @@ LLKeyboardSDL::LLKeyboardSDL()  	// These ones are translated manually upon keydown/keyup because  	// SDL doesn't handle their numlock transition. -	//mTranslateKeyMap[SDLK_KP4] = KEY_PAD_LEFT; -	//mTranslateKeyMap[SDLK_KP6] = KEY_PAD_RIGHT; -	//mTranslateKeyMap[SDLK_KP8] = KEY_PAD_UP; -	//mTranslateKeyMap[SDLK_KP2] = KEY_PAD_DOWN; +	//mTranslateKeyMap[SDLK_KP_4] = KEY_PAD_LEFT; +	//mTranslateKeyMap[SDLK_KP_6] = KEY_PAD_RIGHT; +	//mTranslateKeyMap[SDLK_KP_8] = KEY_PAD_UP; +	//mTranslateKeyMap[SDLK_KP_2] = KEY_PAD_DOWN;  	//mTranslateKeyMap[SDLK_KP_PERIOD] = KEY_DELETE; -	//mTranslateKeyMap[SDLK_KP7] = KEY_HOME; -	//mTranslateKeyMap[SDLK_KP1] = KEY_END; -	//mTranslateKeyMap[SDLK_KP9] = KEY_PAGE_UP; -	//mTranslateKeyMap[SDLK_KP3] = KEY_PAGE_DOWN; -	//mTranslateKeyMap[SDLK_KP0] = KEY_INSERT; +	//mTranslateKeyMap[SDLK_KP_7] = KEY_HOME; +	//mTranslateKeyMap[SDLK_KP_1] = KEY_END; +	//mTranslateKeyMap[SDLK_KP_9] = KEY_PAGE_UP; +	//mTranslateKeyMap[SDLK_KP_3] = KEY_PAGE_DOWN; +	//mTranslateKeyMap[SDLK_KP_0] = KEY_INSERT;  	mTranslateKeyMap[SDLK_SPACE] = ' ';  	mTranslateKeyMap[SDLK_RETURN] = KEY_RETURN; @@ -124,23 +124,23 @@ LLKeyboardSDL::LLKeyboardSDL()  	mTranslateKeyMap[SDLK_QUOTE] = '\'';  	// Build inverse map -	std::map<U16, KEY>::iterator iter; +	std::map<U32, KEY>::iterator iter;  	for (iter = mTranslateKeyMap.begin(); iter != mTranslateKeyMap.end(); iter++)  	{  		mInvTranslateKeyMap[iter->second] = iter->first;  	}  	// numpad map -	mTranslateNumpadMap[SDLK_KP0] = KEY_PAD_INS; -	mTranslateNumpadMap[SDLK_KP1] = KEY_PAD_END; -	mTranslateNumpadMap[SDLK_KP2] = KEY_PAD_DOWN; -	mTranslateNumpadMap[SDLK_KP3] = KEY_PAD_PGDN; -	mTranslateNumpadMap[SDLK_KP4] = KEY_PAD_LEFT; -	mTranslateNumpadMap[SDLK_KP5] = KEY_PAD_CENTER; -	mTranslateNumpadMap[SDLK_KP6] = KEY_PAD_RIGHT; -	mTranslateNumpadMap[SDLK_KP7] = KEY_PAD_HOME; -	mTranslateNumpadMap[SDLK_KP8] = KEY_PAD_UP; -	mTranslateNumpadMap[SDLK_KP9] = KEY_PAD_PGUP; +	mTranslateNumpadMap[SDLK_KP_0] = KEY_PAD_INS; +	mTranslateNumpadMap[SDLK_KP_1] = KEY_PAD_END; +	mTranslateNumpadMap[SDLK_KP_2] = KEY_PAD_DOWN; +	mTranslateNumpadMap[SDLK_KP_3] = KEY_PAD_PGDN; +	mTranslateNumpadMap[SDLK_KP_4] = KEY_PAD_LEFT; +	mTranslateNumpadMap[SDLK_KP_5] = KEY_PAD_CENTER; +	mTranslateNumpadMap[SDLK_KP_6] = KEY_PAD_RIGHT; +	mTranslateNumpadMap[SDLK_KP_7] = KEY_PAD_HOME; +	mTranslateNumpadMap[SDLK_KP_8] = KEY_PAD_UP; +	mTranslateNumpadMap[SDLK_KP_9] = KEY_PAD_PGUP;  	mTranslateNumpadMap[SDLK_KP_PERIOD] = KEY_PAD_DEL;  	// build inverse numpad map @@ -154,7 +154,7 @@ LLKeyboardSDL::LLKeyboardSDL()  void LLKeyboardSDL::resetMaskKeys()  { -	SDLMod mask = SDL_GetModState(); +	SDL_Keymod mask = SDL_GetModState();  	// MBW -- XXX -- This mirrors the operation of the Windows version of resetMaskKeys().  	//    It looks a bit suspicious, as it won't correct for keys that have been released. @@ -201,34 +201,34 @@ MASK LLKeyboardSDL::updateModifiers(const U32 mask)  } -static U16 adjustNativekeyFromUnhandledMask(const U16 key, const U32 mask) +static U32 adjustNativekeyFromUnhandledMask(const U32 key, const U32 mask)  {  	// SDL doesn't automatically adjust the keysym according to  	// whether NUMLOCK is engaged, so we massage the keysym manually. -	U16 rtn = key; +	U32 rtn = key;  	if (!(mask & KMOD_NUM))  	{  		switch (key)  		{  		case SDLK_KP_PERIOD: rtn = SDLK_DELETE; break; -		case SDLK_KP0: rtn = SDLK_INSERT; break; -		case SDLK_KP1: rtn = SDLK_END; break; -		case SDLK_KP2: rtn = SDLK_DOWN; break; -		case SDLK_KP3: rtn = SDLK_PAGEDOWN; break; -		case SDLK_KP4: rtn = SDLK_LEFT; break; -		case SDLK_KP6: rtn = SDLK_RIGHT; break; -		case SDLK_KP7: rtn = SDLK_HOME; break; -		case SDLK_KP8: rtn = SDLK_UP; break; -		case SDLK_KP9: rtn = SDLK_PAGEUP; break; +		case SDLK_KP_0: rtn = SDLK_INSERT; break; +		case SDLK_KP_1: rtn = SDLK_END; break; +		case SDLK_KP_2: rtn = SDLK_DOWN; break; +		case SDLK_KP_3: rtn = SDLK_PAGEDOWN; break; +		case SDLK_KP_4: rtn = SDLK_LEFT; break; +		case SDLK_KP_6: rtn = SDLK_RIGHT; break; +		case SDLK_KP_7: rtn = SDLK_HOME; break; +		case SDLK_KP_8: rtn = SDLK_UP; break; +		case SDLK_KP_9: rtn = SDLK_PAGEUP; break;  		}  	}  	return rtn;  } -BOOL LLKeyboardSDL::handleKeyDown(const U16 key, const U32 mask) +BOOL LLKeyboardSDL::handleKeyDown(const U32 key, const U32 mask)  { -	U16     adjusted_nativekey; +	U32     adjusted_nativekey;  	KEY	translated_key = 0;  	U32	translated_mask = MASK_NONE;  	BOOL	handled = FALSE; @@ -246,9 +246,9 @@ BOOL LLKeyboardSDL::handleKeyDown(const U16 key, const U32 mask)  } -BOOL LLKeyboardSDL::handleKeyUp(const U16 key, const U32 mask) +BOOL LLKeyboardSDL::handleKeyUp(const U32 key, const U32 mask)  { -	U16     adjusted_nativekey; +	U32     adjusted_nativekey;  	KEY	translated_key = 0;  	U32	translated_mask = MASK_NONE;  	BOOL	handled = FALSE; @@ -268,7 +268,7 @@ BOOL LLKeyboardSDL::handleKeyUp(const U16 key, const U32 mask)  MASK LLKeyboardSDL::currentMask(BOOL for_mouse_event)  {  	MASK result = MASK_NONE; -	SDLMod mask = SDL_GetModState(); +	SDL_Keymod mask = SDL_GetModState();  	if (mask & KMOD_SHIFT)			result |= MASK_SHIFT;  	if (mask & KMOD_CTRL)			result |= MASK_CONTROL; @@ -277,7 +277,7 @@ MASK LLKeyboardSDL::currentMask(BOOL for_mouse_event)  	// For keyboard events, consider Meta keys equivalent to Control  	if (!for_mouse_event)  	{ -		if (mask & KMOD_META) result |= MASK_CONTROL; +		if (mask & KMOD_GUI) result |= MASK_CONTROL;  	}  	return result; @@ -310,12 +310,12 @@ void LLKeyboardSDL::scanKeyboard()  } -BOOL LLKeyboardSDL::translateNumpadKey( const U16 os_key, KEY *translated_key) +BOOL LLKeyboardSDL::translateNumpadKey( const U32 os_key, KEY *translated_key)  {  	return translateKey(os_key, translated_key);	  } -U16 LLKeyboardSDL::inverseTranslateNumpadKey(const KEY translated_key) +U32 LLKeyboardSDL::inverseTranslateNumpadKey(const KEY translated_key)  {  	return inverseTranslateKey(translated_key);  } diff --git a/indra/llwindow/llkeyboardsdl.h b/indra/llwindow/llkeyboardsdl.h index 02a71425f1..43f8e1ccb4 100644 --- a/indra/llwindow/llkeyboardsdl.h +++ b/indra/llwindow/llkeyboardsdl.h @@ -28,7 +28,10 @@  #define LL_LLKEYBOARDSDL_H  #include "llkeyboard.h" -#include "SDL/SDL.h" +#if !defined(__i386__) && !defined(__x86_64__) +#define SDL_DISABLE_IMMINTRIN_H +#endif +#include "SDL2/SDL.h"  class LLKeyboardSDL : public LLKeyboard  { @@ -36,8 +39,8 @@ public:  	LLKeyboardSDL();  	/*virtual*/ ~LLKeyboardSDL() {}; -	/*virtual*/ BOOL	handleKeyUp(const U16 key, MASK mask); -	/*virtual*/ BOOL	handleKeyDown(const U16 key, MASK mask); +	/*virtual*/ BOOL	handleKeyUp(const U32 key, MASK mask); +	/*virtual*/ BOOL	handleKeyDown(const U32 key, MASK mask);  	/*virtual*/ void	resetMaskKeys();  	/*virtual*/ MASK	currentMask(BOOL for_mouse_event);  	/*virtual*/ void	scanKeyboard(); @@ -45,11 +48,11 @@ public:  protected:  	MASK	updateModifiers(const U32 mask);  	void	setModifierKeyLevel( KEY key, BOOL new_state ); -	BOOL	translateNumpadKey( const U16 os_key, KEY *translated_key ); -	U16	inverseTranslateNumpadKey(const KEY translated_key); +	BOOL	translateNumpadKey( const U32 os_key, KEY *translated_key ); +	U32	inverseTranslateNumpadKey(const KEY translated_key);  private: -	std::map<U16, KEY> mTranslateNumpadMap;  // special map for translating OS keys to numpad keys -	std::map<KEY, U16> mInvTranslateNumpadMap; // inverse of the above +	std::map<U32, KEY> mTranslateNumpadMap;  // special map for translating OS keys to numpad keys +	std::map<KEY, U32> mInvTranslateNumpadMap; // inverse of the above  };  #endif diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index 9e281dfc99..b4fd7c6387 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -33,8 +33,10 @@  #include "llwindowsdl.h"  #elif LL_WINDOWS  #include "llwindowwin32.h" +/*  #elif LL_DARWIN  #include "llwindowmacosx.h" +*/  #endif  #include "llerror.h" @@ -74,12 +76,12 @@ S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type)  #if LL_MESA_HEADLESS // !!! *FIX: (?)  	LL_WARNS() << "OSMessageBox: " << text << LL_ENDL;  	return OSBTN_OK; +#elif LL_SDL +	result = OSMessageBoxSDL(text, caption, type);  #elif LL_WINDOWS  	result = OSMessageBoxWin32(text, caption, type);  #elif LL_DARWIN  	result = OSMessageBoxMacOSX(text, caption, type); -#elif LL_SDL -	result = OSMessageBoxSDL(text, caption, type);  #else  #error("OSMessageBox not implemented for this platform!")  #endif @@ -259,12 +261,12 @@ BOOL LLWindow::copyTextToPrimary(const LLWString &src)  // static  std::vector<std::string> LLWindow::getDynamicFallbackFontList()  { -#if LL_WINDOWS +#if LL_SDL +	return LLWindowSDL::getDynamicFallbackFontList(); +#elif LL_WINDOWS  	return LLWindowWin32::getDynamicFallbackFontList();  #elif LL_DARWIN  	return LLWindowMacOSX::getDynamicFallbackFontList(); -#elif LL_SDL -	return LLWindowSDL::getDynamicFallbackFontList();  #else  	return std::vector<std::string>();  #endif @@ -273,12 +275,12 @@ std::vector<std::string> LLWindow::getDynamicFallbackFontList()  // static  std::vector<std::string> LLWindow::getDisplaysResolutionList()  { -#if LL_WINDOWS +#ifdef LL_SDL +	return std::vector<std::string>(); +#elif LL_WINDOWS  	return LLWindowWin32::getDisplaysResolutionList();  #elif LL_DARWIN  	return LLWindowMacOSX::getDisplaysResolutionList(); -#else -	return std::vector<std::string>();  #endif  } @@ -359,11 +361,13 @@ void LLSplashScreen::show()  {  	if (!gSplashScreenp)  	{ +#if !LL_SDL  #if LL_WINDOWS && !LL_MESA_HEADLESS  		gSplashScreenp = new LLSplashScreenWin32;  #elif LL_DARWIN  		gSplashScreenp = new LLSplashScreenMacOSX;  #endif +#endif // !LL_SDL  		if (gSplashScreenp)  		{  			gSplashScreenp->showImpl(); @@ -412,7 +416,7 @@ LLWindow* LLWindowManager::createWindow(      U32 max_vram,      F32 max_gl_version)  { -	LLWindow* new_window; +	LLWindow* new_window = nullptr;  	if (use_gl)  	{ diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 7ea87f5884..7f70c2ae5f 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -51,7 +51,7 @@ extern "C" {  # include "fontconfig/fontconfig.h"  } -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  // not necessarily available on random SDL platforms, so #if LL_LINUX  // for execv(), waitpid(), fork()  # include <unistd.h> @@ -66,6 +66,37 @@ const S32 MAX_NUM_RESOLUTIONS = 200;  // static variable for ATI mouse cursor crash work-around:  static bool ATIbug = false;  +#if LL_DARWIN + +BOOL gHiDPISupport = TRUE; + +namespace +{ +	struct NativeKeyEventData { +		enum EventType { +			KEYUNKNOWN, +			KEYUP, +			KEYDOWN, +			KEYCHAR +		}; + +		EventType   mKeyEvent = KEYUNKNOWN; +		uint32_t    mEventType = 0; +		uint32_t    mEventModifiers = 0; +		uint32_t    mEventKeyCode = 0; +		uint32_t    mEventChars = 0; +		uint32_t    mEventUnmodChars = 0; +		bool        mEventRepeat = false; +	} *mRawKeyEvent = NULL; +} +// +// LLWindowMacOSX +// + +BOOL LLWindowSDL::sUseMultGL = FALSE; + +#endif +  //  // LLWindowSDL  // @@ -119,7 +150,9 @@ bool LLWindowSDL::ll_try_gtk_init(void)  	if (!tried_gtk_init)  	{  		tried_gtk_init = TRUE; +#ifndef LL_USESYSTEMLIBS  		if (!g_thread_supported ()) g_thread_init (NULL); +#endif  		maybe_lock_display();  		gtk_is_good = gtk_init_check(NULL, NULL);  		maybe_unlock_display(); @@ -430,44 +463,25 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  		<< int(c_sdl_version.major) << "."  		<< int(c_sdl_version.minor) << "."  		<< int(c_sdl_version.patch) << LL_ENDL; -	const SDL_version *r_sdl_version; -	r_sdl_version = SDL_Linked_Version(); +	SDL_version r_sdl_version; +	SDL_GetVersion(&r_sdl_version);  	LL_INFOS() << " Running against SDL " -		<< int(r_sdl_version->major) << "." -		<< int(r_sdl_version->minor) << "." -		<< int(r_sdl_version->patch) << LL_ENDL; +		<< int(r_sdl_version.major) << "." +		<< int(r_sdl_version.minor) << "." +		<< int(r_sdl_version.patch) << LL_ENDL; -	const SDL_VideoInfo *video_info = SDL_GetVideoInfo( ); -	if (!video_info) +	SDL_DisplayMode display_mode; +	if (SDL_GetDesktopDisplayMode(0, &display_mode) < 0)  	{  		LL_INFOS() << "SDL_GetVideoInfo() failed! " << SDL_GetError() << LL_ENDL;  		setupFailure("SDL_GetVideoInfo() failed, Window creation error", "Error", OSMB_OK);  		return FALSE;  	} -	if (video_info->current_h > 0) +	if (display_mode.h > 0)  	{ -		mOriginalAspectRatio = (float)video_info->current_w / (float)video_info->current_h; -		LL_INFOS() << "Original aspect ratio was " << video_info->current_w << ":" << video_info->current_h << "=" << mOriginalAspectRatio << LL_ENDL; -	} - -	SDL_EnableUNICODE(1); -	SDL_WM_SetCaption(mWindowTitle.c_str(), mWindowTitle.c_str()); - -	// Set the application icon. -	SDL_Surface *bmpsurface; -	bmpsurface = Load_BMP_Resource("ll_icon.BMP"); -	if (bmpsurface) -	{ -		// This attempts to give a black-keyed mask to the icon. -		SDL_SetColorKey(bmpsurface, -				SDL_SRCCOLORKEY, -				SDL_MapRGB(bmpsurface->format, 0,0,0) ); -		SDL_WM_SetIcon(bmpsurface, NULL); -		// The SDL examples cheerfully avoid freeing the icon -		// surface, but I'm betting that's leaky. -		SDL_FreeSurface(bmpsurface); -		bmpsurface = NULL; +		mOriginalAspectRatio = (float)display_mode.w / (float)display_mode.h; +		LL_INFOS() << "Original aspect ratio was " << display_mode.w << ":" << display_mode.h << "=" << mOriginalAspectRatio << LL_ENDL;  	}  	// note: these SetAttributes make Tom's 9600-on-AMD64 fail to @@ -487,7 +501,13 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  	mFullscreen = fullscreen; -	int sdlflags = SDL_OPENGL | SDL_RESIZABLE | SDL_ANYFORMAT; +	int sdlflags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;// | SDL_ANYFORMAT; + +#if LL_DARWIN +	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); +	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); +	SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); +#endif  	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); @@ -551,19 +571,24 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  			height = 768;  		} -		mWindow = SDL_SetVideoMode(width, height, bits, sdlflags | SDL_FULLSCREEN); +		mWindow = SDL_CreateWindow(mWindowTitle.c_str(), +				SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, +				width, height, sdlflags | SDL_WINDOW_FULLSCREEN);  		if (!mWindow && bits > 16)  		{  			SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); -			mWindow = SDL_SetVideoMode(width, height, bits, sdlflags | SDL_FULLSCREEN); +			mWindow = SDL_CreateWindow(mWindowTitle.c_str(), +					SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, +					width, height, sdlflags | SDL_WINDOW_FULLSCREEN);  		}  		if (mWindow)  		{ +			SDL_GL_CreateContext(mWindow);  			mFullscreen = TRUE; -			mFullscreenWidth   = mWindow->w; -			mFullscreenHeight  = mWindow->h; -			mFullscreenBits    = mWindow->format->BitsPerPixel; +			SDL_GetWindowSize(mWindow, +					&mFullscreenWidth, &mFullscreenHeight); +			//mFullscreenBits    = mWindow->format->BitsPerPixel;  			mFullscreenRefresh = -1;  			LL_INFOS() << "Running at " << mFullscreenWidth @@ -595,11 +620,15 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  		    width = 768;  		LL_INFOS() << "createContext: creating window " << width << "x" << height << "x" << bits << LL_ENDL; -		mWindow = SDL_SetVideoMode(width, height, bits, sdlflags); +		mWindow = SDL_CreateWindow(mWindowTitle.c_str(), +					SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, +					width, height, sdlflags);  		if (!mWindow && bits > 16)  		{  			SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); -			mWindow = SDL_SetVideoMode(width, height, bits, sdlflags); +			mWindow = SDL_CreateWindow(mWindowTitle.c_str(), +					SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, +					width, height, sdlflags);  		}  		if (!mWindow) @@ -608,10 +637,30 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  			setupFailure("Window creation error", "Error", OSMB_OK);  			return FALSE;  		} +		SDL_GL_CreateContext(mWindow);  	} else if (!mFullscreen && (mWindow != NULL))  	{  		LL_INFOS() << "createContext: SKIPPING - !fullscreen, but +mWindow " << width << "x" << height << "x" << bits << LL_ENDL;  	} + +	//SDL_EnableUNICODE(1); +	SDL_SetWindowTitle(mWindow, mWindowTitle.c_str()); + +	// Set the application icon. +	SDL_Surface *bmpsurface; +	bmpsurface = Load_BMP_Resource("ll_icon.BMP"); +	if (bmpsurface) +	{ +		// This attempts to give a black-keyed mask to the icon. +		SDL_SetColorKey(bmpsurface, +				SDL_TRUE, +				SDL_MapRGB(bmpsurface->format, 0,0,0) ); +		SDL_SetWindowIcon(mWindow, bmpsurface); +		// The SDL examples cheerfully avoid freeing the icon +		// surface, but I'm betting that's leaky. +		SDL_FreeSurface(bmpsurface); +		bmpsurface = NULL; +	}  	// Detect video memory size.  # if LL_X11 @@ -622,6 +671,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  	} else  # endif // LL_X11  	{ +		/*  		// fallback to letting SDL detect VRAM.  		// note: I've not seen SDL's detection ever actually find  		// VRAM != 0, but if SDL *does* detect it then that's a bonus. @@ -630,6 +680,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  		{  			LL_INFOS() << "SDL detected " << gGLManager.mVRAM << "MB VRAM." << LL_ENDL;  		} +		*/  	}  	// If VRAM is not detected, that is handled later @@ -693,15 +744,17 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  	/* Grab the window manager specific information */  	SDL_SysWMinfo info;  	SDL_VERSION(&info.version); -	if ( SDL_GetWMInfo(&info) ) +	if ( SDL_GetWindowWMInfo(mWindow, &info) )  	{  		/* Save the information for later use */  		if ( info.subsystem == SDL_SYSWM_X11 )  		{  			mSDL_Display = info.info.x11.display; -			mSDL_XWindowID = info.info.x11.wmwindow; +			mSDL_XWindowID = info.info.x11.window; +			/*  			Lock_Display = info.info.x11.lock_func;  			Unlock_Display = info.info.x11.unlock_func; +			*/  		}  		else  		{ @@ -718,12 +771,16 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B  	//make sure multisampling is disabled by default +#if GL_VERSION_1_3  	glDisable(GL_MULTISAMPLE_ARB); +#endif  	// We need to do this here, once video is init'd +	/*  	if (-1 == SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,  				      SDL_DEFAULT_REPEAT_INTERVAL))  	    LL_WARNS() << "Couldn't enable key-repeat: " << SDL_GetError() <<LL_ENDL; +	    */  	// Don't need to get the current gamma, since there's a call that restores it to the system defaults.  	return TRUE; @@ -896,8 +953,7 @@ BOOL LLWindowSDL::getSize(LLCoordScreen *size)  {      if (mWindow)      { -        size->mX = mWindow->w; -        size->mY = mWindow->h; +        SDL_GetWindowSize(mWindow, &size->mX, &size->mY);  	return (TRUE);      } @@ -908,8 +964,7 @@ BOOL LLWindowSDL::getSize(LLCoordWindow *size)  {      if (mWindow)      { -        size->mX = mWindow->w; -        size->mY = mWindow->h; +        SDL_GetWindowSize(mWindow, &size->mX, &size->mY);  	return (TRUE);      } @@ -934,9 +989,10 @@ BOOL LLWindowSDL::setSizeImpl(const LLCoordScreen size)  		// Push a resize event onto SDL's queue - we'll handle it  		// when it comes out again.  		SDL_Event event; -		event.type = SDL_VIDEORESIZE; -		event.resize.w = size.mX; -		event.resize.h = size.mY; +		event.type = SDL_WINDOWEVENT; +		event.window.event = SDL_WINDOWEVENT_RESIZED; +		event.window.data1 = size.mX; +		event.window.data2 = size.mY;  		SDL_PushEvent(&event); // copied into queue  		return TRUE; @@ -952,9 +1008,10 @@ BOOL LLWindowSDL::setSizeImpl(const LLCoordWindow size)  		// Push a resize event onto SDL's queue - we'll handle it  		// when it comes out again.  		SDL_Event event; -		event.type = SDL_VIDEORESIZE; -		event.resize.w = size.mX; -		event.resize.h = size.mY; +		event.type = SDL_WINDOWEVENT; +		event.window.event = SDL_WINDOWEVENT_RESIZED; +		event.window.data1 = size.mX; +		event.window.data2 = size.mY;  		SDL_PushEvent(&event); // copied into queue  		return TRUE; @@ -968,7 +1025,7 @@ void LLWindowSDL::swapBuffers()  {  	if (mWindow)  	{	 -		SDL_GL_SwapBuffers(); +		SDL_GL_SwapWindow(mWindow);  	}  } @@ -990,7 +1047,9 @@ F32 LLWindowSDL::getGamma()  BOOL LLWindowSDL::restoreGamma()  {  	//CGDisplayRestoreColorSyncSettings(); -    SDL_SetGamma(1.0f, 1.0f, 1.0f); +	Uint16 ramp; +	SDL_CalculateGammaRamp(1.0f, &ramp); +	SDL_SetWindowGammaRamp(mWindow, &ramp, &ramp, &ramp);  	return true;  } @@ -999,7 +1058,9 @@ BOOL LLWindowSDL::setGamma(const F32 gamma)  	mGamma = gamma;  	if (mGamma == 0) mGamma = 0.1f;  	mGamma = 1/mGamma; -	SDL_SetGamma(mGamma, mGamma, mGamma); +	Uint16 ramp; +	SDL_CalculateGammaRamp(mGamma, &ramp); +	SDL_SetWindowGammaRamp(mWindow, &ramp, &ramp, &ramp);  	return true;  } @@ -1035,6 +1096,27 @@ void LLWindowSDL::setMinSize(U32 min_width, U32 min_height, bool enforce_immedia  #endif  } +void *LLWindowSDL::createSharedContext() +{ +    // *FIX: What to do with SDL? +    return nullptr; +} + +void LLWindowSDL::makeContextCurrent(void* context) +{ +    // *FIX: What to do with SDL? +} + +void LLWindowSDL::destroySharedContext(void* context) +{ +    // *FIX: What to do with SDL? +} + +void LLWindowSDL::toggleVSync(bool enable_vsync) +{ +    // *FIX: What to do with SDL? +} +  BOOL LLWindowSDL::setCursorPosition(const LLCoordWindow position)  {  	BOOL result = TRUE; @@ -1048,7 +1130,7 @@ BOOL LLWindowSDL::setCursorPosition(const LLCoordWindow position)  	//LL_INFOS() << "setCursorPosition(" << screen_pos.mX << ", " << screen_pos.mY << ")" << LL_ENDL;  	// do the actual forced cursor move. -	SDL_WarpMouse(screen_pos.mX, screen_pos.mY); +	SDL_WarpMouseGlobal(screen_pos.mX, screen_pos.mY);  	//LL_INFOS() << llformat("llcw %d,%d -> scr %d,%d", position.mX, position.mY, screen_pos.mX, screen_pos.mY) << LL_ENDL; @@ -1125,6 +1207,12 @@ F32 LLWindowSDL::getPixelAspectRatio()  	return pixel_aspect;  } +U32 LLWindowSDL::getAvailableVRAMMegabytes() +{ +    static const U32 mb = 1024*1024; +    static const U32 total_factor = 2; +    return gGLManager.mVRAM - (LLImageGL::getTextureBytesAllocated() * total_factor/mb); +}  // This is to support 'temporarily windowed' mode so that  // dialogs are still usable in fullscreen. @@ -1146,7 +1234,7 @@ void LLWindowSDL::beforeDialog()  			// it only works in X11  			if (running_x11 && mWindow)  			{ -				SDL_WM_ToggleFullScreen(mWindow); +				SDL_SetWindowFullscreen(mWindow, SDL_WINDOW_FULLSCREEN);  			}  		}  	} @@ -1188,7 +1276,7 @@ void LLWindowSDL::afterDialog()  		// in X11  		if (running_x11 && mWindow)  		{ -			SDL_WM_ToggleFullScreen(mWindow); +			SDL_SetWindowFullscreen(mWindow, SDL_WINDOW_FULLSCREEN);  		}  	}  } @@ -1368,6 +1456,7 @@ LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_reso  		mSupportedResolutions = new LLWindowResolution[MAX_NUM_RESOLUTIONS];  		mNumSupportedResolutions = 0; +		/*          SDL_Rect **modes = SDL_ListModes(NULL, SDL_OPENGL | SDL_FULLSCREEN);          if ( (modes != NULL) && (modes != ((SDL_Rect **) -1)) )          { @@ -1382,8 +1471,14 @@ LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_reso              {                  modes--;                  SDL_Rect *r = *modes; -                int w = r->w; -                int h = r->h; +		*/ +            static int display_in_use = 0; // Only using first display +            auto display_mode_count = SDL_GetNumDisplayModes(display_in_use); +            SDL_DisplayMode mode; +            for (int i = 0; i < display_mode_count; ++i) { +                SDL_GetDisplayMode(display_in_use, i, &mode); +                int w = mode.w; +                int h = mode.h;                  if ((w >= 800) && (h >= 600))                  {                      // make sure we don't add the same resolution multiple times! @@ -1397,7 +1492,7 @@ LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_reso                      }                  }              } -        } +        //}  	}  	num_resolutions = mNumSupportedResolutions; @@ -1409,8 +1504,10 @@ BOOL LLWindowSDL::convertCoords(LLCoordGL from, LLCoordWindow *to)      if (!to)          return FALSE; -	to->mX = from.mX; -	to->mY = mWindow->h - from.mY - 1; +    to->mX = from.mX; +    int h; +    SDL_GetWindowSize(mWindow, nullptr, &h); +    to->mY = h - from.mY - 1;  	return TRUE;  } @@ -1420,8 +1517,10 @@ BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordGL* to)      if (!to)          return FALSE; -	to->mX = from.mX; -	to->mY = mWindow->h - from.mY - 1; +    to->mX = from.mX; +    int h; +    SDL_GetWindowSize(mWindow, nullptr, &h); +    to->mY = h - from.mY - 1;  	return TRUE;  } @@ -1482,13 +1581,13 @@ BOOL LLWindowSDL::SDLReallyCaptureInput(BOOL capture)  	else  		mReallyCapturedCount = 0; -	SDL_GrabMode wantmode, newmode; +	SDL_bool wantmode, newmode;  	if (mReallyCapturedCount <= 0) // uncapture  	{ -		wantmode = SDL_GRAB_OFF; +		wantmode = SDL_FALSE;  	} else // capture  	{ -		wantmode = SDL_GRAB_ON; +		wantmode = SDL_TRUE;  	}  	if (mReallyCapturedCount < 0) // yuck, imbalance. @@ -1512,7 +1611,7 @@ BOOL LLWindowSDL::SDLReallyCaptureInput(BOOL capture)  			   *keyboard* input from the window manager, which was  			   frustrating users. */  			int result; -			if (wantmode == SDL_GRAB_ON) +			if (wantmode == SDL_TRUE)  			{  				//LL_INFOS() << "X11 POINTER GRABBY" << LL_ENDL;  				//newmode = SDL_WM_GrabInput(wantmode); @@ -1523,13 +1622,13 @@ BOOL LLWindowSDL::SDLReallyCaptureInput(BOOL capture)  						      None, None, CurrentTime);  				maybe_unlock_display();  				if (GrabSuccess == result) -					newmode = SDL_GRAB_ON; +					newmode = SDL_TRUE;  				else -					newmode = SDL_GRAB_OFF; -			} else if (wantmode == SDL_GRAB_OFF) +					newmode = SDL_FALSE; +			} else if (wantmode == SDL_FALSE)  			{  				//LL_INFOS() << "X11 POINTER UNGRABBY" << LL_ENDL; -				newmode = SDL_GRAB_OFF; +				newmode = SDL_FALSE;  				//newmode = SDL_WM_GrabInput(SDL_GRAB_OFF);  				maybe_lock_display(); @@ -1539,7 +1638,7 @@ BOOL LLWindowSDL::SDLReallyCaptureInput(BOOL capture)  				maybe_unlock_display();  			} else  			{ -				newmode = SDL_GRAB_QUERY; // neutral +				//newmode = SDL_GRAB_QUERY; // neutral  			}  		} else // not actually running on X11, for some reason  			newmode = wantmode; @@ -1550,11 +1649,11 @@ BOOL LLWindowSDL::SDLReallyCaptureInput(BOOL capture)  	}  	// return boolean success for whether we ended up in the desired state -	return (capture && SDL_GRAB_ON==newmode) || -		(!capture && SDL_GRAB_OFF==newmode); +	return (capture && SDL_TRUE==newmode) || +		(!capture && SDL_FALSE==newmode);  } -U32 LLWindowSDL::SDLCheckGrabbyKeys(SDLKey keysym, BOOL gain) +U32 LLWindowSDL::SDLCheckGrabbyKeys(SDL_Keycode keysym, BOOL gain)  {  	/* part of the fix for SL-13243: Some popular window managers like  	   to totally eat alt-drag for the purposes of moving windows.  We @@ -1755,7 +1854,6 @@ void LLWindowSDL::gatherInput()              case SDL_KEYDOWN:  		    mKeyScanCode = event.key.keysym.scancode; -		    mKeyVirtualKey = event.key.keysym.unicode;  		    mKeyModifiers = event.key.keysym.mod;  		    gKeyboard->handleKeyDown(event.key.keysym.sym, event.key.keysym.mod); @@ -1763,16 +1861,21 @@ void LLWindowSDL::gatherInput()  		    if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0)  			    SDLReallyCaptureInput(TRUE); -		    if (event.key.keysym.unicode) +		    if (event.key.keysym.sym < SDLK_SPACE)  		    { -			    handleUnicodeUTF16(event.key.keysym.unicode, +			    handleUnicodeUTF16(event.key.keysym.sym,  					       gKeyboard->currentMask(FALSE));  		    }                  break; +            case SDL_TEXTINPUT: +		    mKeyVirtualKey = *event.text.text; +		    handleUnicodeUTF16(mKeyVirtualKey, +				    gKeyboard->currentMask(FALSE)); +                break; +              case SDL_KEYUP:  		    mKeyScanCode = event.key.keysym.scancode; -		    mKeyVirtualKey = event.key.keysym.unicode;  		    mKeyModifiers = event.key.keysym.mod;  		    if (SDLCheckGrabbyKeys(event.key.keysym.sym, FALSE) == 0) @@ -1837,14 +1940,17 @@ void LLWindowSDL::gatherInput()  				{  				    mCallbacks->handleMiddleMouseDown(this, openGlCoord, mask);  				} -                else if (event.button.button == 4)  // mousewheel up...thanks to X11 for making SDL consider these "buttons". -					mCallbacks->handleScrollWheel(this, -1); -                else if (event.button.button == 5)  // mousewheel down...thanks to X11 for making SDL consider these "buttons". -					mCallbacks->handleScrollWheel(this, 1);                  break;              } +            case SDL_MOUSEWHEEL: +                if (event.wheel.y > 0)  // mousewheel up +					mCallbacks->handleScrollWheel(this, -1); +                else if (event.wheel.y < 0)  // mousewheel down +					mCallbacks->handleScrollWheel(this, 1); +                break; +              case SDL_MOUSEBUTTONUP:              {                  LLCoordWindow winCoord(event.button.x, event.button.y); @@ -1863,19 +1969,22 @@ void LLWindowSDL::gatherInput()                  break;              } -            case SDL_VIDEOEXPOSE:  // VIDEOEXPOSE doesn't specify the damage, but hey, it's OpenGL...repaint the whole thing! -			    mCallbacks->handlePaint(this, 0, 0, mWindow->w, mWindow->h); -                break; - -            case SDL_VIDEORESIZE:  // *FIX: handle this? +            case SDL_WINDOWEVENT:              { -		LL_INFOS() << "Handling a resize event: " << event.resize.w << -			"x" << event.resize.h << LL_ENDL; - -		S32 width = llmax(event.resize.w, (S32)mMinWindowWidth); -		S32 height = llmax(event.resize.h, (S32)mMinWindowHeight); - +		if (event.window.event == SDL_WINDOWEVENT_EXPOSED) { // VIDEOEXPOSE doesn't specify the damage, but hey, it's OpenGL...repaint the whole thing! +			int w, h; +			SDL_GetWindowSize(mWindow, &w, &h); +			mCallbacks->handlePaint(this, 0, 0, w, h); +		} else if (event.window.event == SDL_WINDOWEVENT_RESIZED) { +		LL_INFOS() << "Handling a resize event: " << event.window.data1 << +			"x" << event.window.data2 << LL_ENDL; + +		S32 width = llmax(event.window.data1, (S32)mMinWindowWidth); +		S32 height = llmax(event.window.data2, (S32)mMinWindowHeight); + +		// *FIX: handle this?  		// *FIX: I'm not sure this is necessary! +		/*  		mWindow = SDL_SetVideoMode(width, height, 32, mSDLFlags);  		if (!mWindow)  		{ @@ -1889,10 +1998,13 @@ void LLWindowSDL::gatherInput()      			}                  break;  		} +		*/  		mCallbacks->handleResize(this, width, height); +		}                  break;              } +	    /*              case SDL_ACTIVEEVENT:                  if (event.active.state & SDL_APPINPUTFOCUS)                  { @@ -1929,6 +2041,7 @@ void LLWindowSDL::gatherInput()  			}                  }                  break; +		*/              case SDL_QUIT:  			    if(mCallbacks->handleCloseRequest(this)) @@ -2467,9 +2580,55 @@ BOOL LLWindowSDL::dialogColorPicker( F32 *r, F32 *g, F32 *b)  {  	return (FALSE);  } + +#if LL_DARWIN + +LLSD LLWindowSDL::getNativeKeyData() +{ +	LLSD result = LLSD::emptyMap(); + +	if(mRawKeyEvent) +	{ +        result["event_type"] = LLSD::Integer(mRawKeyEvent->mEventType); +        result["event_modifiers"] = LLSD::Integer(mRawKeyEvent->mEventModifiers); +        result["event_keycode"] = LLSD::Integer(mRawKeyEvent->mEventKeyCode); +        result["event_chars"] = (mRawKeyEvent->mEventChars) ? LLSD(LLSD::Integer(mRawKeyEvent->mEventChars)) : LLSD(); +        result["event_umodchars"] = (mRawKeyEvent->mEventUnmodChars) ? LLSD(LLSD::Integer(mRawKeyEvent->mEventUnmodChars)) : LLSD(); +        result["event_isrepeat"] = LLSD::Boolean(mRawKeyEvent->mEventRepeat); +	} + +	LL_DEBUGS() << "native key data is: " << result << LL_ENDL; + +	return result; +} + +#else + +LLSD LLWindowSDL::getNativeKeyData() +{ +        LLSD result = LLSD::emptyMap(); + +	U32 modifiers = 0; +	modifiers |= (mKeyModifiers & KMOD_LSHIFT) ? 0x0001 : 0; +	modifiers |= (mKeyModifiers & KMOD_RSHIFT) ? 0x0001 : 0; +	modifiers |= (mKeyModifiers & KMOD_CAPS)   ? 0x0002 : 0; +	modifiers |= (mKeyModifiers & KMOD_LCTRL)  ? 0x0004 : 0; +	modifiers |= (mKeyModifiers & KMOD_RCTRL)  ? 0x0004 : 0; +	modifiers |= (mKeyModifiers & KMOD_LALT)   ? 0x0008 : 0; +	modifiers |= (mKeyModifiers & KMOD_RALT)   ? 0x0008 : 0; + +        result["scan_code"] = (S32)mKeyScanCode; +        result["virtual_key"] = (S32)mKeyVirtualKey; +	result["modifiers"] = (S32)modifiers; + +        return result; +} + +#endif // LL_DARWIN +  #endif // LL_GTK -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  // extracted from spawnWebBrowser for clarity and to eliminate  //  compiler confusion regarding close(int fd) vs. LLWindow::close()  void exec_cmd(const std::string& cmd, const std::string& arg) @@ -2525,7 +2684,7 @@ void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url, bool async)  	LL_INFOS() << "spawn_web_browser: " << escaped_url << LL_ENDL; -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  # if LL_X11  	if (mSDL_Display)  	{ @@ -2537,9 +2696,13 @@ void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url, bool async)  # endif // LL_X11  	std::string cmd, arg; +#ifdef LL_USESYSTEMLIBS +	cmd  = gDirUtilp->getExecutableDir(); +#else  	cmd  = gDirUtilp->getAppRODataDir();  	cmd += gDirUtilp->getDirDelimiter();  	cmd += "etc"; +#endif  	cmd += gDirUtilp->getDirDelimiter();  	cmd += "launch_url.sh";  	arg = escaped_url; diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 7193e6f45a..17bdc16bf6 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -32,12 +32,15 @@  #include "llwindow.h"  #include "lltimer.h" -#include "SDL/SDL.h" -#include "SDL/SDL_endian.h" +#if !defined(__i386__) && !defined(__x86_64__) +#define SDL_DISABLE_IMMINTRIN_H +#endif +#include "SDL2/SDL.h" +#include "SDL2/SDL_endian.h"  #if LL_X11  // get X11-specific headers for use in low-level stuff like copy-and-paste support -#include "SDL/SDL_syswm.h" +#include "SDL2/SDL_syswm.h"  #endif  // AssertMacros.h does bad things. @@ -49,80 +52,86 @@  class LLWindowSDL : public LLWindow  {  public: -	/*virtual*/ void show(); -	/*virtual*/ void hide(); -	/*virtual*/ void close(); -	/*virtual*/ BOOL getVisible(); -	/*virtual*/ BOOL getMinimized(); -	/*virtual*/ BOOL getMaximized(); -	/*virtual*/ BOOL maximize(); -	/*virtual*/ void minimize(); -	/*virtual*/ void restore(); +	void show() override; +	void hide() override; +	void close() override; +	BOOL getVisible() override; +	BOOL getMinimized() override; +	BOOL getMaximized() override; +	BOOL maximize() override; +	void minimize() override; +	void restore() override;  	/*virtual*/ BOOL getFullscreen(); -	/*virtual*/ BOOL getPosition(LLCoordScreen *position); -	/*virtual*/ BOOL getSize(LLCoordScreen *size); -	/*virtual*/ BOOL getSize(LLCoordWindow *size); -	/*virtual*/ BOOL setPosition(LLCoordScreen position); -	/*virtual*/ BOOL setSizeImpl(LLCoordScreen size); -	/*virtual*/ BOOL setSizeImpl(LLCoordWindow size); -	/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL); -	/*virtual*/ BOOL setCursorPosition(LLCoordWindow position); -	/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position); -	/*virtual*/ void showCursor(); -	/*virtual*/ void hideCursor(); -	/*virtual*/ void showCursorFromMouseMove(); -	/*virtual*/ void hideCursorUntilMouseMove(); -	/*virtual*/ BOOL isCursorHidden(); -	/*virtual*/ void updateCursor(); -	/*virtual*/ void captureMouse(); -	/*virtual*/ void releaseMouse(); -	/*virtual*/ void setMouseClipping( BOOL b ); -	/*virtual*/	void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true); - -	/*virtual*/ BOOL isClipboardTextAvailable(); -	/*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst); -	/*virtual*/ BOOL copyTextToClipboard(const LLWString & src); - -	/*virtual*/ BOOL isPrimaryTextAvailable(); -	/*virtual*/ BOOL pasteTextFromPrimary(LLWString &dst); -	/*virtual*/ BOOL copyTextToPrimary(const LLWString & src); +	BOOL getPosition(LLCoordScreen *position) override; +	BOOL getSize(LLCoordScreen *size) override; +	BOOL getSize(LLCoordWindow *size) override; +	BOOL setPosition(LLCoordScreen position) override; +	BOOL setSizeImpl(LLCoordScreen size) override; +	BOOL setSizeImpl(LLCoordWindow size) override; +	BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL enable_vsync, const LLCoordScreen * const posp = NULL) override; +	void* createSharedContext() override; +	void makeContextCurrent(void* context) override; +	void destroySharedContext(void* context) override; +	void toggleVSync(bool enable_vsync) override; +	BOOL setCursorPosition(LLCoordWindow position) override; +	BOOL getCursorPosition(LLCoordWindow *position) override; +	void showCursor() override; +	void hideCursor() override; +	void showCursorFromMouseMove() override; +	void hideCursorUntilMouseMove() override; +	BOOL isCursorHidden() override; +	void updateCursor() override; +	void captureMouse() override; +	void releaseMouse() override; +	void setMouseClipping( BOOL b ) override; +	void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true) override; + +	BOOL isClipboardTextAvailable() override; +	BOOL pasteTextFromClipboard(LLWString &dst) override; +	BOOL copyTextToClipboard(const LLWString & src) override; + +	BOOL isPrimaryTextAvailable() override; +	BOOL pasteTextFromPrimary(LLWString &dst) override; +	BOOL copyTextToPrimary(const LLWString & src) override; -	/*virtual*/ void flashIcon(F32 seconds); -	/*virtual*/ F32 getGamma(); -	/*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma -	/*virtual*/ U32 getFSAASamples(); -	/*virtual*/ void setFSAASamples(const U32 samples); -	/*virtual*/ BOOL restoreGamma();			// Restore original gamma table (before updating gamma) -	/*virtual*/ ESwapMethod getSwapMethod() { return mSwapMethod; } -	/*virtual*/ void processMiscNativeEvents(); -	/*virtual*/ void gatherInput(); -	/*virtual*/ void swapBuffers(); +	void flashIcon(F32 seconds) override; +	F32 getGamma() override; +	BOOL setGamma(const F32 gamma) override; +	U32 getFSAASamples() override; +	void setFSAASamples(const U32 fsaa_samples) override; +	BOOL restoreGamma() override; +	ESwapMethod getSwapMethod() override { return mSwapMethod; } +	void processMiscNativeEvents() override; +	void gatherInput() override; +	void swapBuffers() override;  	/*virtual*/ void restoreGLContext() {}; -	/*virtual*/ void delayInputProcessing() { }; +	void delayInputProcessing() override {};  	// handy coordinate space conversion routines -	/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to); -	/*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to); -	/*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to); -	/*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordWindow *to); -	/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordGL *to); -	/*virtual*/ BOOL convertCoords(LLCoordGL from, LLCoordScreen *to); +	BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) override; +	BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) override; +	BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) override; +	BOOL convertCoords(LLCoordGL from, LLCoordWindow *to) override; +	BOOL convertCoords(LLCoordScreen from, LLCoordGL *to) override; +	BOOL convertCoords(LLCoordGL from, LLCoordScreen *to) override; + +	LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) override; +	F32 getNativeAspectRatio() override; +	F32 getPixelAspectRatio() override; +	void setNativeAspectRatio(F32 ratio) override { mOverrideAspectRatio = ratio; } -	/*virtual*/ LLWindowResolution* getSupportedResolutions(S32 &num_resolutions); -	/*virtual*/ F32	getNativeAspectRatio(); -	/*virtual*/ F32 getPixelAspectRatio(); -	/*virtual*/ void setNativeAspectRatio(F32 ratio) { mOverrideAspectRatio = ratio; } +	U32 getAvailableVRAMMegabytes() override; -	/*virtual*/ void beforeDialog(); -	/*virtual*/ void afterDialog(); +	void beforeDialog() override; +	void afterDialog() override; -	/*virtual*/ BOOL dialogColorPicker(F32 *r, F32 *g, F32 *b); +	BOOL dialogColorPicker(F32 *r, F32 *g, F32 *b) override; -	/*virtual*/ void *getPlatformWindow(); -	/*virtual*/ void bringToFront(); +	void *getPlatformWindow() override; +	void bringToFront() override; -	/*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async); +	void spawnWebBrowser(const std::string& escaped_url, bool async) override;  	static std::vector<std::string> getDynamicFallbackFontList(); @@ -145,6 +154,10 @@ public:  	static Display* get_SDL_Display(void);  #endif // LL_X11	 +#if LL_DARWIN +	static BOOL sUseMultGL; +#endif +  protected:  	LLWindowSDL(LLWindowCallbacks* callbacks,  		const std::string& title, int x, int y, int width, int height, U32 flags, @@ -152,8 +165,8 @@ protected:  		BOOL ignore_pixel_depth, U32 fsaa_samples);  	~LLWindowSDL(); -	/*virtual*/ BOOL	isValid(); -	/*virtual*/ LLSD    getNativeKeyData(); +	BOOL	isValid() override; +	LLSD getNativeKeyData() override;  	void	initCursors();  	void	quitCursors(); @@ -177,7 +190,7 @@ protected:  	void destroyContext();  	void setupFailure(const std::string& text, const std::string& caption, U32 type);  	void fixWindowSize(void); -	U32 SDLCheckGrabbyKeys(SDLKey keysym, BOOL gain); +	U32 SDLCheckGrabbyKeys(SDL_Keycode keysym, BOOL gain);  	BOOL SDLReallyCaptureInput(BOOL capture);  	// @@ -185,7 +198,7 @@ protected:  	//  	U32             mGrabbyKeyFlags;  	int			mReallyCapturedCount; -	SDL_Surface *	mWindow; +	SDL_Window *	mWindow;  	std::string mWindowTitle;  	double		mOriginalAspectRatio;  	BOOL		mNeedsResize;		// Constructor figured out the window is too big, it needs a resize. @@ -211,7 +224,7 @@ private:  	U32 mKeyScanCode;          U32 mKeyVirtualKey; -	SDLMod mKeyModifiers; +	Uint16 mKeyModifiers;  }; diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt index 508c2b919b..748e3e8b61 100644 --- a/indra/llxml/CMakeLists.txt +++ b/indra/llxml/CMakeLists.txt @@ -34,6 +34,7 @@ target_link_libraries( llxml      )  target_include_directories( llxml  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) +include(LibraryInstall)  # tests diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt index 972bb7dd2d..726ccf90ed 100644 --- a/indra/media_plugins/CMakeLists.txt +++ b/indra/media_plugins/CMakeLists.txt @@ -2,6 +2,12 @@  add_subdirectory(base) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +    add_subdirectory(libvlc) +    add_subdirectory(example) +    return() +endif () +  if (LINUX)      #add_subdirectory(gstreamer010)      add_subdirectory(example) diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt index 64b6a4228d..593aa982f1 100644 --- a/indra/media_plugins/base/CMakeLists.txt +++ b/indra/media_plugins/base/CMakeLists.txt @@ -31,6 +31,7 @@ set(media_plugin_base_HEADER_FILES  )  add_library(media_plugin_base +    STATIC      ${media_plugin_base_SOURCE_FILES}          ) diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt index a3c1c4ef99..84fac1634c 100644 --- a/indra/media_plugins/libvlc/CMakeLists.txt +++ b/indra/media_plugins/libvlc/CMakeLists.txt @@ -55,3 +55,8 @@ if (DARWIN)    )  endif (DARWIN) + +if (INSTALL) +	install(TARGETS ${PROJECT_NAME} DESTINATION +		libexec/${VIEWER_BINARY_NAME}/llplugin) +endif () diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d413c12de9..ff5569bbdd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -9,20 +9,28 @@ include(Linking)  include(Boost)  include(bugsplat) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(BuildPackagesInfo) +endif ()  include(BuildVersion)  include(CMakeCopyIfDifferent) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(CubemapToEquirectangularJS)  include(DBusGlib) +endif ()  include(DragDrop)  include(EXPAT)  include(FMODSTUDIO)  include(Hunspell) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(JPEGEncoderBasic) +endif ()  include(JsonCpp)  include(LLAppearance)  include(LLAudio) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(LLCA) +endif ()  include(LLCommon)  include(LLCoreHttp)  include(LLImage) @@ -37,18 +45,24 @@ include(OpenGL)  include(OpenSSL)  include(PNG)  include(TemplateCheck) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(ThreeJS) +endif ()  include(Tracy)  include(UI)  include(ViewerMiscLibs) +if (USE_AUTOBUILD_3P OR USE_CONAN)  include(ViewerManager) +endif ()  include(VisualLeakDetector)  include(VulkanGltf)  include(ZLIBNG)  include(URIPARSER)  include(LLPrimitive) +include(LibVLCPlugin) +include(UnixInstall) -if (NOT HAVOK_TPV) +if ((USE_AUTOBUILD_3P OR USE_CONAN) AND NOT HAVOK_TPV)     # When using HAVOK_TPV, the library is precompiled, so no need for this     # Stub and probably havok lib itself is a hack, autobuild loads a 3p that really is a source tarball @@ -69,7 +83,7 @@ if (NOT HAVOK_TPV)          target_compile_options( llphysicsextensions  PRIVATE -Wno-unused-local-typedef)        endif (DARWIN)     endif() -endif (NOT HAVOK_TPV) +endif ((USE_AUTOBUILD_3P OR USE_CONAN) AND NOT HAVOK_TPV)  set(viewer_SOURCE_FILES @@ -1373,12 +1387,15 @@ set_source_files_properties(     )  if (DARWIN) +  if (NOT USESYSTEMLIBS)    LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)    LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm)    LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.h) +  endif (NOT USESYSTEMLIBS)    LIST(APPEND viewer_SOURCE_FILES llfilepicker_mac.mm)    LIST(APPEND viewer_HEADER_FILES llfilepicker_mac.h) +  if (NOT USESYSTEMLIBS)    # This should be compiled with the viewer.    LIST(APPEND viewer_SOURCE_FILES llappdelegate-objc.mm)    set_source_files_properties( @@ -1393,6 +1410,7 @@ if (DARWIN)      # warnings.      COMPILE_FLAGS "-fmodules -fcxx-modules -Wno-nullability-completeness"      ) +  endif (NOT USESYSTEMLIBS)    # Add resource files to the project.    set(viewer_RESOURCE_FILES @@ -1412,17 +1430,19 @@ if (DARWIN)    list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})  endif (DARWIN) -if (LINUX) +if (USESYSTEMLIBS)      LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)      set_source_files_properties(        llappviewerlinux.cpp        PROPERTIES        COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}"        ) -    LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp) +    #LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp) +    if (NOT (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang"))      SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed") +    endif () -endif (LINUX) +endif (USESYSTEMLIBS)  if (WINDOWS)      list(APPEND viewer_SOURCE_FILES @@ -1624,6 +1644,10 @@ set(viewer_APPSETTINGS_FILES      featuretable_mac.txt      ) +if (NOT (USE_AUTOBUILD_3P OR USE_CONAN)) +	list(REMOVE_ITEM viewer_APPSETTINGS_FILES packages-info.txt) +endif () +  source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES})  set_source_files_properties(${viewer_APPSETTINGS_FILES} @@ -1918,6 +1942,8 @@ target_link_libraries(${VIEWER_BINARY_NAME}          ${LLPHYSICSEXTENSIONS_LIBRARIES}          ll::bugsplat          ll::tracy +        ll::libvlc +        ll::fontconfig          )  if( TARGET ll::intel_memops ) @@ -1931,6 +1957,24 @@ endif()  set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH      "Path to artwork files.") +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") +	set_source_files_properties(llappviewerlinux.cpp PROPERTIES +		COMPILE_FLAGS -Wno-dangling-gsl +	) +elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU") +	set_source_files_properties( +		llface.cpp +		llhttpretrypolicy.cpp +		llmodelpreview.cpp +		llpanelface.cpp +		lltexturefetch.cpp +		PROPERTIES COMPILE_FLAGS -Wno-maybe-uninitialized) +	set_source_files_properties(llurl.cpp PROPERTIES COMPILE_FLAGS +		-Wno-stringop-truncation) +endif () + +if (NOT USESYSTEMLIBS) +  if (LINUX)    set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}) @@ -2008,6 +2052,8 @@ if (LINUX)    endif (PACKAGE)  endif (LINUX) +endif (NOT USESYSTEMLIBS) +  if (DARWIN)    # These all get set with PROPERTIES. It's not that the property names are    # magically known to CMake -- it's that these names are referenced in the @@ -2016,12 +2062,12 @@ if (DARWIN)    set(MACOSX_EXECUTABLE_NAME "${VIEWER_CHANNEL}")    set(MACOSX_BUNDLE_INFO_STRING "${VIEWER_CHANNEL}")    set(MACOSX_BUNDLE_ICON_FILE "secondlife.icns") -  set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.secondlife.indra.viewer") +  set(MACOSX_BUNDLE_GUI_IDENTIFIER "net.megapahit.viewer")    set(MACOSX_BUNDLE_LONG_VERSION_STRING "${VIEWER_CHANNEL} ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") -  set(MACOSX_BUNDLE_BUNDLE_NAME "SecondLife") +  set(MACOSX_BUNDLE_BUNDLE_NAME "Megapahit")    set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")    set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}") -  set(MACOSX_BUNDLE_COPYRIGHT "Copyright © Linden Research, Inc. 2020") +  set(MACOSX_BUNDLE_COPYRIGHT "Copyright © Megapahit. 2023")    set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "SecondLife.nib")    set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication") @@ -2076,7 +2122,11 @@ if (DARWIN)        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py      ) +  if (USE_AUTOBUILD_3P OR USE_CONAN)    add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc media_plugin_cef) +  else () +    add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc) +  endif ()    if (ENABLE_SIGNING)        set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}") diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 041b8cea0b..58be86579c 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -1,7 +1,7 @@  /* Localized versions of Info.plist keys */ -CFBundleName = "Second Life"; +CFBundleName = "Megapahit"; -CFBundleShortVersionString = "Second Life version %%VERSION%%"; -CFBundleGetInfoString = "Second Life version %%VERSION%%, Copyright 2004 Linden Research, Inc."; +CFBundleShortVersionString = "Megapahit version %%VERSION%%"; +CFBundleGetInfoString = "Megapahit version %%VERSION%%, Copyright 2023 Megapahit."; diff --git a/indra/newview/SecondLife.xib b/indra/newview/SecondLife.xib index fbff8fe307..8302392f5d 100644 --- a/indra/newview/SecondLife.xib +++ b/indra/newview/SecondLife.xib @@ -42,7 +42,7 @@  				<array class="NSMutableArray" key="NSMenuItems">  					<object class="NSMenuItem" id="694149608">  						<reference key="NSMenu" ref="649796088"/> -						<string key="NSTitle">Second Life</string> +						<string key="NSTitle">Megapahit</string>  						<string key="NSKeyEquiv"/>  						<int key="NSMnemonicLoc">2147483647</int>  						<object class="NSCustomResource" key="NSOnImage" id="353210768"> @@ -55,11 +55,11 @@  						</object>  						<string key="NSAction">submenuAction:</string>  						<object class="NSMenu" key="NSSubmenu" id="110575045"> -							<string key="NSTitle">Second Life</string> +							<string key="NSTitle">Megapahit</string>  							<array class="NSMutableArray" key="NSMenuItems">  								<object class="NSMenuItem" id="238522557">  									<reference key="NSMenu" ref="110575045"/> -									<string key="NSTitle">About Second Life</string> +									<string key="NSTitle">About Megapahit</string>  									<string key="NSKeyEquiv"/>  									<int key="NSMnemonicLoc">2147483647</int>  									<reference key="NSOnImage" ref="353210768"/> @@ -120,7 +120,7 @@  								</object>  								<object class="NSMenuItem" id="755159360">  									<reference key="NSMenu" ref="110575045"/> -									<string key="NSTitle">Hide Second Life</string> +									<string key="NSTitle">Hide Megapahit</string>  									<string key="NSKeyEquiv">h</string>  									<int key="NSKeyEquivModMask">1048576</int>  									<int key="NSMnemonicLoc">2147483647</int> @@ -156,7 +156,7 @@  								</object>  								<object class="NSMenuItem" id="632727374">  									<reference key="NSMenu" ref="110575045"/> -									<string key="NSTitle">Quit Second Life</string> +									<string key="NSTitle">Quit Megapahit</string>  									<string key="NSKeyEquiv">q</string>  									<int key="NSKeyEquivModMask">1048576</int>  									<int key="NSMnemonicLoc">2147483647</int> @@ -323,7 +323,7 @@  				<int key="NSWindowBacking">2</int>  				<string key="NSWindowRect">{{196, 240}, {1024, 600}}</string>  				<int key="NSWTFlags">74974208</int> -				<string key="NSWindowTitle">Second Life</string> +				<string key="NSWindowTitle">Megapahit</string>  				<string key="NSWindowClass">LLNSWindow</string>  				<nil key="NSViewClass"/>  				<nil key="NSUserInterfaceItemIdentifier"/> @@ -338,7 +338,7 @@  				</object>  				<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>  				<string key="NSMaxSize">{10000000000000, 10000000000000}</string> -				<string key="NSFrameAutosaveName">Second Life</string> +				<string key="NSFrameAutosaveName">Megapahit</string>  				<int key="NSWindowCollectionBehavior">128</int>  				<bool key="NSWindowIsRestorable">NO</bool>  			</object> diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake index ac2247c815..ffc18ac984 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -1,28 +1,42 @@  install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME} -        DESTINATION ${APP_BINARY_DIR} +        DESTINATION bin          ) -install(DIRECTORY skins app_settings linux_tools -        DESTINATION ${APP_SHARE_DIR} +install(PROGRAMS linux_tools/launch_url.sh +        DESTINATION libexec/${VIEWER_BINARY_NAME} +        ) + +install(DIRECTORY skins app_settings fonts +        DESTINATION share/${VIEWER_BINARY_NAME}          PATTERN ".svn" EXCLUDE          ) +install(DIRECTORY icons/hicolor +        DESTINATION share/icons +        ) +  find_file(IS_ARTWORK_PRESENT NAMES have_artwork_bundle.marker            PATHS ${VIEWER_DIR}/newview/res)  if (IS_ARTWORK_PRESENT)    install(DIRECTORY res res-sdl character -          DESTINATION ${APP_SHARE_DIR} +          DESTINATION share/${VIEWER_BINARY_NAME}            PATTERN ".svn" EXCLUDE            )  else (IS_ARTWORK_PRESENT)    message(STATUS "WARNING: Artwork is not present, and will not be installed")  endif (IS_ARTWORK_PRESENT) -install(FILES featuretable_linux.txt featuretable_solaris.txt -        DESTINATION ${APP_SHARE_DIR} +install(FILES featuretable_linux.txt +        #featuretable_solaris.txt +        ${AUTOBUILD_INSTALL_DIR}/ca-bundle.crt +        DESTINATION share/${VIEWER_BINARY_NAME}          )  install(FILES ${SCRIPTS_DIR}/messages/message_template.msg -        DESTINATION ${APP_SHARE_DIR}/app_settings +        DESTINATION share/${VIEWER_BINARY_NAME}/app_settings +        ) + +install(FILES linux_tools/${VIEWER_BINARY_NAME}.desktop +        DESTINATION share/applications          ) diff --git a/indra/newview/icons/hicolor/128x128/apps/megapahit.png b/indra/newview/icons/hicolor/128x128/apps/megapahit.pngBinary files differ new file mode 100644 index 0000000000..216179ffdb --- /dev/null +++ b/indra/newview/icons/hicolor/128x128/apps/megapahit.png diff --git a/indra/newview/icons/hicolor/256x256/apps/megapahit.png b/indra/newview/icons/hicolor/256x256/apps/megapahit.pngBinary files differ new file mode 100644 index 0000000000..cf60e8b52a --- /dev/null +++ b/indra/newview/icons/hicolor/256x256/apps/megapahit.png diff --git a/indra/newview/icons/hicolor/48x48/apps/megapahit.png b/indra/newview/icons/hicolor/48x48/apps/megapahit.pngBinary files differ new file mode 100644 index 0000000000..4a997584aa --- /dev/null +++ b/indra/newview/icons/hicolor/48x48/apps/megapahit.png diff --git a/indra/newview/icons/hicolor/64x64/apps/megapahit.png b/indra/newview/icons/hicolor/64x64/apps/megapahit.pngBinary files differ new file mode 100644 index 0000000000..ec4f4d86f7 --- /dev/null +++ b/indra/newview/icons/hicolor/64x64/apps/megapahit.png diff --git a/indra/newview/icons/hicolor/96x96/apps/megapahit.png b/indra/newview/icons/hicolor/96x96/apps/megapahit.pngBinary files differ new file mode 100644 index 0000000000..40f85d99ea --- /dev/null +++ b/indra/newview/icons/hicolor/96x96/apps/megapahit.png diff --git a/indra/newview/linux_tools/launch_url.sh b/indra/newview/linux_tools/launch_url.sh index 404ea36f26..7c4ebf2291 100755 --- a/indra/newview/linux_tools/launch_url.sh +++ b/indra/newview/linux_tools/launch_url.sh @@ -61,6 +61,7 @@ fi  # will be tried first, which is a debian alternative.  BROWSER_COMMANDS="      \      x-www-browser       \ +    chrome              \      firefox             \      mozilla-firefox     \      iceweasel           \ diff --git a/indra/newview/linux_tools/megapahit.desktop b/indra/newview/linux_tools/megapahit.desktop new file mode 100755 index 0000000000..05e5d0175a --- /dev/null +++ b/indra/newview/linux_tools/megapahit.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Megapahit +Comment=A fork of the Second Life viewer +Exec=megapahit +Icon=megapahit +Terminal=false +Type=Application +Categories=Application;Network; +StartupNotify=true +X-Desktop-File-Install-Version=3.0" diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 37494b87b6..832e2dac7a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -132,13 +132,15 @@  #include "stringize.h"  #include "llcoros.h"  #include "llexception.h" -#if !LL_LINUX +//#if !LL_LINUX +#ifndef LL_USESYSTEMLIBS  #include "cef/dullahan_version.h" +#endif  #include "vlc/libvlc_version.h" -#endif // LL_LINUX +//#endif // LL_LINUX  #if LL_DARWIN -#include "llwindowmacosx.h" +#include "llwindowsdl.h"  #endif  // Third party library includes @@ -263,7 +265,7 @@ using namespace LL;  // define a self-registering event API object  #include "llappviewerlistener.h" -#if LL_LINUX && LL_GTK +#if (LL_LINUX || LL_FREEBSD) && LL_GTK  #include "glib.h"  #endif // (LL_LINUX) && LL_GTK @@ -309,6 +311,8 @@ S32 gLastExecDuration = -1; // (<0 indicates unknown)  #   define LL_PLATFORM_KEY "mac"  #elif LL_LINUX  #   define LL_PLATFORM_KEY "lnx" +#elif LL_FREEBSD +#   define LL_PLATFORM_KEY "bsd"  #else  #   error "Unknown Platform"  #endif @@ -566,7 +570,7 @@ static void settings_to_globals()      LLWorldMapView::setScaleSetting(gSavedSettings.getF32("MapScale"));  #if LL_DARWIN -    LLWindowMacOSX::sUseMultGL = gSavedSettings.getBOOL("RenderAppleUseMultGL"); +    LLWindowSDL::sUseMultGL = gSavedSettings.getBOOL("RenderAppleUseMultGL");  	gHiDPISupport = gSavedSettings.getBOOL("RenderHiDPI");  #endif  } @@ -891,7 +895,7 @@ bool LLAppViewer::init()  	std::string mime_types_name;  #if LL_DARWIN  	mime_types_name = "mime_types_mac.xml"; -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  	mime_types_name = "mime_types_linux.xml";  #else  	mime_types_name = "mime_types.xml"; @@ -1731,7 +1735,7 @@ bool LLAppViewer::cleanup()  	// one because it happens just after mFastTimerLogThread is deleted. This  	// comment is in case we guessed wrong, so we can move it here instead. -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  	// remove any old breakpad minidump files from the log directory  	if (! isError())  	{ @@ -3358,7 +3362,8 @@ LLSD LLAppViewer::getViewerInfo() const  		info["VOICE_VERSION"] = LLTrans::getString("NotConnected");  	} -#if !LL_LINUX +//#if !LL_LINUX && !LL_FREEBSD && !LL_DARWIN +#ifndef LL_USESYSTEMLIBS  	std::ostringstream cef_ver_codec;  	cef_ver_codec << "Dullahan: ";  	cef_ver_codec << DULLAHAN_VERSION_MAJOR; @@ -3388,7 +3393,7 @@ LLSD LLAppViewer::getViewerInfo() const  	info["LIBCEF_VERSION"] = "Undefined";  #endif -#if !LL_LINUX +//#if !LL_LINUX  	std::ostringstream vlc_ver_codec;  	vlc_ver_codec << LIBVLC_VERSION_MAJOR;  	vlc_ver_codec << "."; @@ -3396,9 +3401,11 @@ LLSD LLAppViewer::getViewerInfo() const  	vlc_ver_codec << ".";  	vlc_ver_codec << LIBVLC_VERSION_REVISION;  	info["LIBVLC_VERSION"] = vlc_ver_codec.str(); +/*  #else  	info["LIBVLC_VERSION"] = "Undefined";  #endif +*/  	S32 packets_in = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN);  	if (packets_in > 0) @@ -5401,7 +5408,7 @@ void LLAppViewer::forceErrorBreakpoint()     	LL_WARNS() << "Forcing a deliberate breakpoint" << LL_ENDL;  #ifdef LL_WINDOWS      DebugBreak(); -#else +#elif __i386__ || __x86_64__      asm ("int $3");  #endif      return; diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index 9f58f90326..deb876e24d 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -120,7 +120,9 @@ bool LLAppViewerLinux::init()  	// before any mutexes are held, *and* some of our third-party  	// libraries likes to use glib functions; in short, do this here  	// really early in app startup! +#ifndef LL_USESYSTEMLIBS  	if (!g_thread_supported ()) g_thread_init (NULL); +#endif  	bool success = LLAppViewer::init(); @@ -328,11 +330,13 @@ void LLAppViewerLinux::initCrashReporting(bool reportFreeze)  {  	std::string cmd =gDirUtilp->getExecutableDir();  	cmd += gDirUtilp->getDirDelimiter(); -#if LL_LINUX +//#if LL_LINUX  	cmd += "linux-crash-logger.bin"; +/*  #else  # error Unknown platform  #endif +*/      std::stringstream pid_str;      pid_str <<  LLApp::getPid(); diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h index 0289c43043..14e481f054 100644 --- a/indra/newview/llappviewerlinux.h +++ b/indra/newview/llappviewerlinux.h @@ -27,9 +27,11 @@  #ifndef LL_LLAPPVIEWERLINUX_H  #define LL_LLAPPVIEWERLINUX_H +#if LL_GTK  extern "C" {  # include <glib.h>  } +#endif  #if LL_DBUS_ENABLED  extern "C" { diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 43dc10ef5f..01b1dd7a88 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -1188,7 +1188,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style  	LLChatHistoryHeader* header = LLChatHistoryHeader::createInstance(mMessageHeaderFilename);      if (header)          header->setup(chat, style_params, args); -	return header; +    return header;  }  void LLChatHistory::onClickMoreText() diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp index 97b16a5e93..4f30ccfa07 100644 --- a/indra/newview/llconversationloglist.cpp +++ b/indra/newview/llconversationloglist.cpp @@ -93,8 +93,8 @@ BOOL LLConversationLogList::handleRightMouseDown(S32 x, S32 y, MASK mask)  	LLToggleableMenu* context_menu = mContextMenu.get();  	{  		context_menu->buildDrawLabels(); -	if (context_menu && size()) -		context_menu->updateParent(LLMenuGL::sMenuContainer); +		if (context_menu && size()) +			context_menu->updateParent(LLMenuGL::sMenuContainer);  		LLMenuGL::showPopup(this, context_menu, x, y);  	} diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp index 01790ad19e..f2a027f174 100644 --- a/indra/newview/lldirpicker.cpp +++ b/indra/newview/lldirpicker.cpp @@ -37,7 +37,7 @@  #include "llviewercontrol.h"  #include "llwin32headerslean.h" -#if LL_LINUX || LL_DARWIN +#if LL_LINUX || LL_DARWIN || LL_FREEBSD  # include "llfilepicker.h"  #endif @@ -187,7 +187,7 @@ std::string LLDirPicker::getDirName()  	return mFilePicker->getFirstFile();  } -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  LLDirPicker::LLDirPicker() :  	mFileName(NULL), diff --git a/indra/newview/lldirpicker.h b/indra/newview/lldirpicker.h index 52febe4523..be37e8f369 100644 --- a/indra/newview/lldirpicker.h +++ b/indra/newview/lldirpicker.h @@ -78,7 +78,7 @@ private:  	void buildDirname( void );  	bool check_local_file_access_enabled(); -#if LL_LINUX || LL_DARWIN +#if LL_LINUX || LL_DARWIN || LL_FREEBSD  	// On Linux we just implement LLDirPicker on top of LLFilePicker  	LLFilePicker *mFilePicker;  #endif diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index fca0f1c978..cb5bd30dfe 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -357,7 +357,9 @@ void LLFacePool::LLOverrideFaceColor::setColor(const LLColor4& color)  void LLFacePool::LLOverrideFaceColor::setColor(const LLColor4U& color)  { +#if GL_VERSION_1_1  	glColor4ubv(color.mV); +#endif  }  void LLFacePool::LLOverrideFaceColor::setColor(F32 r, F32 g, F32 b, F32 a) diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index a0ce0ef6cf..b377f9235b 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -1047,7 +1047,11 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  			if (!LLPipeline::sRenderDeferred)  			{ +#if GL_VERSION_1_1  				bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); +#else +				bump->setExplicitFormat(GL_ALPHA8_EXT, GL_ALPHA); +#endif  #if LL_BUMPLIST_MULTITHREADED                  auto tex_queue = LLImageGLThread::sEnabledTextures ? sTexUpdateQueue.lock() : nullptr; diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 77189dceae..21d5ed5a1d 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -369,6 +369,7 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(0)->activate();  	gGL.getTexUnit(0)->bind(detail_texture0p); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -376,6 +377,7 @@ void LLDrawPoolTerrain::renderFull4TU()  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	//  	// Stage 1: Generate alpha ramp for detail0/detail1 transition @@ -392,12 +394,14 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(2)->enable(LLTexUnit::TT_TEXTURE);  	gGL.getTexUnit(2)->activate(); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	//  	// Stage 3: Modulate with primary (vertex) color for lighting @@ -419,12 +423,14 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(0)->activate();  	gGL.getTexUnit(0)->bind(detail_texture3p); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	//  	// Stage 1: Generate alpha ramp for detail2/detail3 transition @@ -445,12 +451,14 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(2)->enable(LLTexUnit::TT_TEXTURE);  	gGL.getTexUnit(2)->activate(); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	//  	// Stage 3: Generate alpha ramp for detail1/detail2 transition @@ -485,8 +493,10 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(2)->disable();  	gGL.getTexUnit(2)->activate(); +#if GL_VERSION_1_1  	glDisable(GL_TEXTURE_GEN_S);  	glDisable(GL_TEXTURE_GEN_T); +#endif  	gGL.matrixMode(LLRender::MM_TEXTURE);  	gGL.loadIdentity();  	gGL.matrixMode(LLRender::MM_MODELVIEW); @@ -509,8 +519,10 @@ void LLDrawPoolTerrain::renderFull4TU()  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); +#if GL_VERSION_1_1  	glDisable(GL_TEXTURE_GEN_S);  	glDisable(GL_TEXTURE_GEN_T); +#endif  	gGL.matrixMode(LLRender::MM_TEXTURE);  	gGL.loadIdentity();  	gGL.matrixMode(LLRender::MM_MODELVIEW); @@ -544,6 +556,7 @@ void LLDrawPoolTerrain::renderFull2TU()  	// Stage 0: Render detail 0 into base  	//  	gGL.getTexUnit(0)->bind(detail_texture0p); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); @@ -551,6 +564,7 @@ void LLDrawPoolTerrain::renderFull2TU()  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	drawLoop(); @@ -562,8 +576,10 @@ void LLDrawPoolTerrain::renderFull2TU()  	//  	gGL.getTexUnit(0)->bind(m2DAlphaRampImagep); +#if GL_VERSION_1_1  	glDisable(GL_TEXTURE_GEN_S);  	glDisable(GL_TEXTURE_GEN_T); +#endif  	//  	// Stage 1: Write detail1 @@ -572,12 +588,14 @@ void LLDrawPoolTerrain::renderFull2TU()  	gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);  	gGL.getTexUnit(1)->activate(); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	gGL.getTexUnit(0)->activate();  	{ @@ -605,12 +623,14 @@ void LLDrawPoolTerrain::renderFull2TU()  	gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);  	gGL.getTexUnit(1)->activate(); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	{  		LLGLEnable blend(GL_BLEND); @@ -636,12 +656,14 @@ void LLDrawPoolTerrain::renderFull2TU()  	gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);  	gGL.getTexUnit(1)->activate(); +#if GL_VERSION_1_1  	glEnable(GL_TEXTURE_GEN_S);  	glEnable(GL_TEXTURE_GEN_T);  	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);  	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);  	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); +#endif  	gGL.getTexUnit(0)->activate();  	{ @@ -658,8 +680,10 @@ void LLDrawPoolTerrain::renderFull2TU()  	gGL.getTexUnit(1)->disable();  	gGL.getTexUnit(1)->activate(); +#if GL_VERSION_1_1  	glDisable(GL_TEXTURE_GEN_S);  	glDisable(GL_TEXTURE_GEN_T); +#endif  	gGL.matrixMode(LLRender::MM_TEXTURE);  	gGL.loadIdentity();  	gGL.matrixMode(LLRender::MM_MODELVIEW); @@ -670,8 +694,10 @@ void LLDrawPoolTerrain::renderFull2TU()  	gGL.getTexUnit(0)->activate();  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); +#if GL_VERSION_1_1  	glDisable(GL_TEXTURE_GEN_S);  	glDisable(GL_TEXTURE_GEN_T); +#endif  	gGL.matrixMode(LLRender::MM_TEXTURE);  	gGL.loadIdentity();  	gGL.matrixMode(LLRender::MM_MODELVIEW); diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h index 82bfc4ec51..3d2ce08a13 100644 --- a/indra/newview/llenvironment.h +++ b/indra/newview/llenvironment.h @@ -27,6 +27,8 @@  #ifndef LL_ENVIRONMENT_H  #define LL_ENVIRONMENT_H +#include <array> +  #include "llsingleton.h"  #include "llmemory.h"  #include "llsd.h" diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index c1776705f9..9a3fb1e4c9 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -548,15 +548,21 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)  					gGL.multMatrix((F32*) volume->getRelativeXform().mMatrix);  					const LLVolumeFace& vol_face = rigged->getVolumeFace(getTEOffset());  					LLVertexBuffer::unbind(); +#if GL_VERSION_1_1  					glVertexPointer(3, GL_FLOAT, 16, vol_face.mPositions); +#endif  					if (vol_face.mTexCoords)  					{ +#if GL_VERSION_1_1  						glEnableClientState(GL_TEXTURE_COORD_ARRAY);  						glTexCoordPointer(2, GL_FLOAT, 8, vol_face.mTexCoords); +#endif  					}  					gGL.syncMatrices();  					glDrawElements(GL_TRIANGLES, vol_face.mNumIndices, GL_UNSIGNED_SHORT, vol_face.mIndices); +#if GL_VERSION_1_1  					glDisableClientState(GL_TEXTURE_COORD_ARRAY); +#endif  				}  			}  #endif @@ -636,10 +642,14 @@ void LLFace::renderOneWireframe(const LLColor4 &color, F32 fogCfx, bool wirefram              glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);          } +#if GL_VERSION_1_1          LLGLEnable offset(GL_POLYGON_OFFSET_LINE); +#endif          glPolygonOffset(3.f, 3.f);          glLineWidth(5.f); +#if GL_VERSION_1_1          glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif          renderFace(mDrawablep, this);      }  } @@ -839,7 +849,7 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,  		//VECTORIZE THIS  		LLMatrix4a mat_vert;  		mat_vert.loadu(mat_vert_in); -        LLVector4a new_extents[2]; +        //LLVector4a new_extents[2];  		llassert(less_than_max_mag(face.mExtents[0]));  		llassert(less_than_max_mag(face.mExtents[1])); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index f482d5a37d..64b133aeee 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -62,7 +62,7 @@  #if LL_DARWIN  const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt"; -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  const char FEATURE_TABLE_FILENAME[] = "featuretable_linux.txt";  #else  const char FEATURE_TABLE_FILENAME[] = "featuretable.txt"; diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 4ad136e13a..235ead6053 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -40,7 +40,7 @@  #include "llwindowsdl.h" // for some X/GTK utils to help with filepickers  #endif // LL_SDL -#if LL_LINUX +#if LL_LINUX || LL_FREEBSD  #include "llhttpconstants.h"    // file picker uses some of thes constants on Linux  #endif @@ -1093,7 +1093,7 @@ BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter,  }  //END LL_DARWIN -#elif LL_LINUX +#elif LL_LINUX || LL_FREEBSD  # if LL_GTK @@ -1360,6 +1360,14 @@ static std::string add_save_texture_filter_to_gtkchooser(GtkWindow *picker)  	return caption;  } +BOOL LLFilePicker::getMultipleOpenFilesModeless(ELoadFilter filter, +                                                void (*callback)(bool, std::vector<std::string> &, void*), +                                                void *userdata ) +{ +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE; +} +  BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking )  {  	BOOL rtn = FALSE; @@ -1477,6 +1485,15 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename,  	return rtn;  } +BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter, +                                       const std::string& filename, +                                       void (*callback)(bool, std::string&, void*), +                                       void *userdata) +{ +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE; +} +  BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  {  	BOOL rtn = FALSE; @@ -1509,7 +1526,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  			filtername = add_xml_filter_to_gtkchooser(picker);  			break;          case FFLOAD_GLTF: -            filtername = dead_code_should_blow_up_here(picker); +            //filtername = dead_code_should_blow_up_here(picker);              break;          case FFLOAD_COLLADA:              filtername = add_collada_filter_to_gtkchooser(picker); @@ -1542,6 +1559,14 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  	return rtn;  } +BOOL LLFilePicker::getOpenFileModeless(ELoadFilter filter, +                                       void (*callback)(bool, std::vector<std::string> &, void*), +                                       void *userdata) +{ +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE; +} +  BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking)  {  	BOOL rtn = FALSE; @@ -1668,13 +1693,13 @@ BOOL LLFilePicker::getMultipleOpenFilesModeless(ELoadFilter filter,  #else // not implemented -BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename ) +BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking )  {  	reset();	  	return FALSE;  } -BOOL LLFilePicker::getOpenFile( ELoadFilter filter ) +BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  {  	reset();  	return FALSE; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d4eb40ff92..87e87adf9e 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3855,7 +3855,7 @@ void LLPanelRegionEnvironment::onChkAllowOverride(bool value)      if (LLPanelEstateInfo::isLindenEstate())          notification = "ChangeLindenEstate"; -	LLSD args; +    LLSD args;  	args["ESTATENAME"] = LLEstateInfoModel::instance().getName();  	LLNotification::Params params(notification);  	params.substitutions(args); diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 1aeb727172..189f5297a9 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -96,6 +96,8 @@ BOOL LLFloaterTOS::postBuild()  			external_prompt->setVisible(true);  		web_browser->setVisible(false); + +		updateAgreeEnabled(true);  #else  		web_browser->addObserver(this); diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 67a205417e..4b848ea759 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -73,6 +73,7 @@  #if LL_DARWIN  #include <CoreFoundation/CFURL.h> +#include <CoreFoundation/CFBundle.h>  #endif  // Static initialization diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp index dff310ecf9..4e17f2fb5b 100644 --- a/indra/newview/llhudrender.cpp +++ b/indra/newview/llhudrender.cpp @@ -117,9 +117,11 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,  		proj[i] = (F64) gGLProjection[i];  	} +#if GLU_VERSION_1_1  	gluProject(render_pos.mV[0], render_pos.mV[1], render_pos.mV[2],  				mdlv, proj, (GLint*) viewport,  				&winX, &winY, &winZ); +#endif  	//fonts all render orthographically, set up projection``  	gGL.matrixMode(LLRender::MM_PROJECTION); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 6880cf2171..2d22dc8212 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -24,6 +24,8 @@   * $/LicenseInfo$   */ +#include <array> +  #include "llviewerprecompiledheaders.h"  #include "llimview.h" diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index ba82ff0b0f..1dd6ac9339 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -41,7 +41,9 @@  #include <boost/algorithm/string/trim.hpp>  #include <boost/algorithm/string/replace.hpp> +#ifndef LL_USESYSTEMLIBS  #include <boost/regex/v4/match_results.hpp> +#endif  #include <boost/foreach.hpp>  #if LL_MSVC diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index feb691520f..e99a098953 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -568,8 +568,10 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string  			gGL.scalef(inv_zoom_amt, inv_zoom_amt, inv_zoom_amt);  		} +		/*  		LLColor4 shadow_color = LLColor4::black;  		shadow_color.mV[VALPHA] = color.mV[VALPHA] * 0.5f; +		*/  		if (fractional_portion != 0)  		{ diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index 7f37f98568..5f8493c152 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -274,7 +274,9 @@ void LLManipRotate::render()  			}  			LLGLEnable cull_face(GL_CULL_FACE); +#if GL_VERSION_1_1  			LLGLEnable clip_plane0(GL_CLIP_PLANE0); +#endif  			LLGLDepthTest gls_depth(GL_FALSE);  			//LLGLDisable gls_stencil(GL_STENCIL_TEST); diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index d3b981e205..b0953f929c 100644 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -204,7 +204,7 @@ bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)      if (std::find_if(mUnQueuedRequests.begin(), mUnQueuedRequests.end(), upred) != mUnQueuedRequests.end())          return true; -	return false; +    return false;  }  void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) @@ -829,7 +829,7 @@ bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &ob      if (std::find_if(mRoundRobinQueue.begin(), mRoundRobinQueue.end(), PredicateMatchRequest(object->getID())) != mRoundRobinQueue.end())          return true; -	return false; +    return false;  }  void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index ccae1030f1..1ab6f09a47 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -3425,9 +3425,13 @@ BOOL LLModelPreview::render()                      if (edges)                      {                          glLineWidth(PREVIEW_EDGE_WIDTH); +#if GL_VERSION_1_1                          glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif                          buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts() - 1, buffer->getNumIndices(), 0); +#if GL_VERSION_1_1                          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif                          glLineWidth(1.f);                      }                      buffer->unmapBuffer(); @@ -3549,10 +3553,14 @@ BOOL LLModelPreview::render()                                      gGL.diffuseColor4fv(PREVIEW_PSYH_EDGE_COL.mV);                                      glLineWidth(PREVIEW_PSYH_EDGE_WIDTH); +#if GL_VERSION_1_1                                      glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif                                      buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts() - 1, buffer->getNumIndices(), 0); +#if GL_VERSION_1_1                                      glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif                                      glLineWidth(1.f);                                      buffer->unmapBuffer(); @@ -3566,7 +3574,9 @@ BOOL LLModelPreview::render()                      if (mHasDegenerate)                      {                          glLineWidth(PREVIEW_DEG_EDGE_WIDTH); +#if GL_VERSION_1_1                          glPointSize(PREVIEW_DEG_POINT_SIZE); +#endif                          gPipeline.enableLightsFullbright();                          //show degenerate triangles                          LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS); @@ -3635,7 +3645,9 @@ BOOL LLModelPreview::render()                              gGL.popMatrix();                          }                          glLineWidth(1.f); +#if GL_VERSION_1_1                          glPointSize(1.f); +#endif                          gPipeline.enableLightsPreview();                          gGL.setSceneBlendType(LLRender::BT_ALPHA);                      } @@ -3754,9 +3766,13 @@ BOOL LLModelPreview::render()                                  gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);                                  gGL.diffuseColor4fv(PREVIEW_EDGE_COL.mV);                                  glLineWidth(PREVIEW_EDGE_WIDTH); +#if GL_VERSION_1_1                                  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif                                  buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0); +#if GL_VERSION_1_1                                  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif                                  glLineWidth(1.f);                              }                          } diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index bb0bb04797..5cf9608bb1 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -681,7 +681,9 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face)                  LL_PROFILE_GPU_ZONE("probe mip copy");                  mTexture->bind(0);                  //glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, mip, 0, 0, probe->mCubeIndex * 6 + face, 0, 0, res, res); +#if GL_VERSION_4_0                  glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, mip, 0, 0, sourceIdx * 6 + face, 0, 0, res, res); +#endif                  //if (i == 0)                  //{                      //glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, mip, 0, 0, probe->mCubeIndex * 6 + face, 0, 0, res, res); @@ -739,7 +741,9 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face)                      mVertexBuffer->drawArrays(gGL.TRIANGLE_STRIP, 0, 4); +#if GL_VERSION_4_0                      glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, i, 0, 0, probe->mCubeIndex * 6 + cf, 0, 0, res, res); +#endif                  }                  if (i != mMipChain.size() - 1) @@ -790,7 +794,9 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face)                      S32 res = mMipChain[i].getWidth();                      mIrradianceMaps->bind(channel); +#if GL_VERSION_4_0                      glCopyTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, i - start_mip, 0, 0, probe->mCubeIndex * 6 + cf, 0, 0, res, res); +#endif                      mTexture->bind(channel);                  }              } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index ecc2783eb1..4b27e55309 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6405,7 +6405,9 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)  			}  		} +#if GL_VERSION_1_1  		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif  		S32 num_tes = llmin((S32)objectp->getNumTEs(), (S32)objectp->getNumFaces()); // avatars have TEs but no faces  		for (S32 te = 0; te < num_tes; ++te) @@ -6420,7 +6422,9 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)  		gGL.popMatrix();  		glLineWidth(1.f); +#if GL_VERSION_1_1  		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif  		if (shader)  		{ diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 29d42b3c00..ff3cb39ca4 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -1625,7 +1625,9 @@ void renderOctree(LLSpatialGroup* group)  		{  			LLGLDepthTest gl_depth(FALSE, FALSE); +#if GL_VERSION_1_1  			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif  			gGL.diffuseColor4f(1,0,0,group->mBuilt);  			gGL.flush(); @@ -1727,7 +1729,9 @@ void renderOctree(LLSpatialGroup* group)  					gGL.popMatrix();  				}  			} +#if GL_VERSION_1_1  			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif              gDebugProgram.bind(); // make sure non-rigged variant is bound  			gGL.diffuseColor4f(1,1,1,1);  		} @@ -2392,12 +2396,14 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume, bool wireframe  			llassert(LLGLSLShader::sCurBoundShader != 0);  			LLVertexBuffer::unbind(); +#if GL_VERSION_1_1  			glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);              gGL.diffuseColor4fv(color.mV);              gGL.syncMatrices();  			glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices); +#endif  		}  		else  		{ @@ -2589,7 +2595,9 @@ void renderTextureAnim(LLDrawInfo* params)  void renderBatchSize(LLDrawInfo* params)  { +#if GL_VERSION_1_1  	LLGLEnable offset(GL_POLYGON_OFFSET_FILL); +#endif  	glPolygonOffset(-1.f, 1.f);      LLGLSLShader* old_shader = LLGLSLShader::sCurBoundShaderPtr;      bool bind = false; @@ -2890,13 +2898,17 @@ void renderRaycast(LLDrawable* drawablep)  					dir.setSub(end, start);  					gGL.flush(); +#if GL_VERSION_1_1  					glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);				 +#endif  					{  						//render face positions  						LLVertexBuffer::unbind();  						gGL.diffuseColor4f(0,1,1,0.5f); +#if GL_VERSION_1_1  						glVertexPointer(3, GL_FLOAT, sizeof(LLVector4a), face.mPositions); +#endif  						gGL.syncMatrices();  						glDrawElements(GL_TRIANGLES, face.mNumIndices, GL_UNSIGNED_SHORT, face.mIndices);  					} @@ -2916,7 +2928,9 @@ void renderRaycast(LLDrawable* drawablep)  					}  					gGL.popMatrix();		 +#if GL_VERSION_1_1  					glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif  				}  			}  		} @@ -3504,16 +3518,22 @@ void LLSpatialPartition::renderDebug()  			LLGLEnable blend(GL_BLEND);  			LLGLDepthTest depth_under(GL_TRUE, GL_FALSE, GL_GREATER); +#if GL_VERSION_1_1  			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif  			gGL.diffuseColor4f(0.5f, 0.0f, 0, 0.25f); +#if GL_VERSION_1_1  			LLGLEnable offset(GL_POLYGON_OFFSET_LINE); +#endif  			glPolygonOffset(-1.f, -1.f);  			LLOctreeRenderXRay xray(camera);  			xray.traverse(mOctree); +#if GL_VERSION_1_1  			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif  		}  	}  	gDebugProgram.unbind(); diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h index bd34e40642..fc646e6ac2 100644 --- a/indra/newview/lltoastalertpanel.h +++ b/indra/newview/lltoastalertpanel.h @@ -86,7 +86,7 @@ private:  		: mWidth(0)  		{} -		LLButton* mButton; +		LLButton* mButton = nullptr;  		std::string mURL;  		U32 mURLExternal;  		S32 mWidth; diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index b37f08283d..54d773f33c 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -191,6 +191,7 @@ void LLViewerCamera::calcProjection(const F32 far_distance) const  //static  void LLViewerCamera::updateFrustumPlanes(LLCamera& camera, BOOL ortho, BOOL zflip, BOOL no_hacks)  { +#if GLU_VERSION_1_1  	GLint* viewport = (GLint*) gGLViewport;  	F64 model[16];  	F64 proj[16]; @@ -283,6 +284,7 @@ void LLViewerCamera::updateFrustumPlanes(LLCamera& camera, BOOL ortho, BOOL zfli  	}  	camera.calcAgentFrustumPlanes(frust); +#endif // GLU_VERSION_1_1  }  void LLViewerCamera::setPerspective(BOOL for_selection, @@ -425,12 +427,14 @@ void LLViewerCamera::projectScreenToPosAgent(const S32 screen_x, const S32 scree  		proj[i] = (F64) gGLProjection[i];  	} +#if GLU_VERSION_1_1  	gluUnProject(  		GLdouble(screen_x), GLdouble(screen_y), 0.0,  		mdlv, proj, (GLint*)gGLViewport,  		&x,  		&y,  		&z ); +#endif  	pos_agent->setVec( (F32)x, (F32)y, (F32)z );  } @@ -473,6 +477,7 @@ BOOL LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord  		proj[i] = (F64) gGLProjection[i];  	} +#if GLU_VERSION_1_1  	if (GL_TRUE == gluProject(pos_agent.mV[VX], pos_agent.mV[VY], pos_agent.mV[VZ],  								mdlv, proj, (GLint*)viewport,  								&x, &y, &z)) @@ -549,6 +554,7 @@ BOOL LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord  		}  	}  	else +#endif // GLU_VERSION_1_1  	{  		return FALSE;  	} @@ -560,6 +566,7 @@ BOOL LLViewerCamera::projectPosAgentToScreen(const LLVector3 &pos_agent, LLCoord  BOOL LLViewerCamera::projectPosAgentToScreenEdge(const LLVector3 &pos_agent,  												LLCoordGL &out_point) const  { +#if GLU_VERSION_1_1  	LLVector3 dir_to_point = pos_agent - getOrigin();  	dir_to_point /= dir_to_point.magVec(); @@ -706,6 +713,7 @@ BOOL LLViewerCamera::projectPosAgentToScreenEdge(const LLVector3 &pos_agent,  		out_point.mY = int_y + world_rect.mBottom;  		return TRUE;  	} +#endif // GLU_VERSION_1_1  	return FALSE;  } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 04ca62e0ec..b3c3138d70 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1542,7 +1542,9 @@ void render_ui_2d()  	// Render 2D UI elements that overlay the world (no z compare)  	//  Disable wireframe mode below here, as this is HUD/menus +#if GL_VERSION_1_1  	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +#endif  	//  Menu overlays, HUD, etc  	gViewerWindow->setup2DRender(); diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 5d46c695b7..ec530412f6 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -56,7 +56,7 @@  #include "llmatrix4a.h"  #include "llperfstats.h"  -#if !LL_DARWIN && !LL_LINUX +#if !LL_DARWIN && !LL_LINUX && !LL_FREEBSD  extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB;  extern PFNGLWEIGHTFVARBPROC glWeightfvARB;  extern PFNGLVERTEXBLENDARBPROC glVertexBlendARB; @@ -242,7 +242,9 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)  	stop_glerror(); +#if GL_VERSION_1_1  	LLGLSSpecular specular(LLColor4(1.f,1.f,1.f,1.f), 0.f); +#endif  	//----------------------------------------------------------------  	// setup current texture diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 9d63241300..671098328b 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -1217,7 +1217,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh  					LLGLEnable clamp(use_depth_clamp ? GL_DEPTH_CLAMP : 0); -					U32 mode = gGLManager.mGLVersion >= 3.3f ? GL_ANY_SAMPLES_PASSED : GL_SAMPLES_PASSED; +					U32 mode = GL_ANY_SAMPLES_PASSED;  #if LL_TRACK_PENDING_OCCLUSION_QUERIES  					sPendingQueries.insert(mOcclusionQuery[LLViewerCamera::sCurCameraID]); diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index 6372679a07..26cd640a7c 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -163,7 +163,7 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )      if (delta_time < interval)          return; -	if (mSkipSaveIfZeros) +    if (mSkipSaveIfZeros)  	{          S32 total_events = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates +                              mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheUpdateDupes + diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d80d7f46fd..2db9f9b6a3 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -162,15 +162,25 @@ void LLViewerTextureList::doPreloadImages()  		image->setAddressMode(LLTexUnit::TAM_WRAP);  		mImagePreloads.insert(image);  	} +#if GL_VERSION_1_1  	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,  		GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD); +#else +	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, +		GL_ALPHA8_EXT, GL_ALPHA, IMG_ALPHA_GRAD); +#endif  	if (image)  	{  		image->setAddressMode(LLTexUnit::TAM_CLAMP);  		mImagePreloads.insert(image);  	} +#if GL_VERSION_1_1  	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,  		GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD_2D); +#else +	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, +		GL_ALPHA8_EXT, GL_ALPHA, IMG_ALPHA_GRAD_2D); +#endif  	if (image)  	{  		image->setAddressMode(LLTexUnit::TAM_CLAMP); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 10a257fbb5..1c2ecfe693 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -11480,24 +11480,38 @@ void LLVOAvatar::placeProfileQuery()          glGenQueries(1, &mGPUTimerQuery);      } -    glBeginQuery(GL_TIME_ELAPSED, mGPUTimerQuery); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +    glBeginQuery(GL_TIME_ELAPSED_EXT, mGPUTimerQuery); +#endif  }  void LLVOAvatar::readProfileQuery(S32 retries)  {      if (!mGPUProfilePending)      { -        glEndQuery(GL_TIME_ELAPSED); +#if GL_EXT_timer_query || GL_EXT_disjoint_timer_query +        glEndQuery(GL_TIME_ELAPSED_EXT); +#endif          mGPUProfilePending = true;      } +#if GL_ARB_timer_query      GLuint64 result = 0;      glGetQueryObjectui64v(mGPUTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#else +    GLuint result = 0; +    glGetQueryObjectuiv(mGPUTimerQuery, GL_QUERY_RESULT_AVAILABLE, &result); +#endif      if (result == GL_TRUE || --retries <= 0)      { // query available, readback result +#if GL_ARB_timer_query          GLuint64 time_elapsed = 0;          glGetQueryObjectui64v(mGPUTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#else +        GLuint time_elapsed = 0; +        glGetQueryObjectuiv(mGPUTimerQuery, GL_QUERY_RESULT, &time_elapsed); +#endif          mGPURenderTime = time_elapsed / 1000000.f;          mGPUProfilePending = false; diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 3725510b6a..a6002715bb 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -5994,7 +5994,7 @@ LLVivoxVoiceClient::sessionState::~sessionState()      if (mMyIterator != mSession.end())          mSession.erase(mMyIterator); -	removeAllParticipants(); +    removeAllParticipants();  }  bool LLVivoxVoiceClient::sessionState::isCallBackPossible() diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index 1760ccde1f..fcc554854d 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -383,7 +383,7 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const  	mCertStore = gSavedSettings.getString("CertStore");  	httpOpts->setSSLVerifyPeer( vefifySSLCert ); -	httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0); +	httpOpts->setSSLVerifyHost( vefifySSLCert );  	// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer  	httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders()); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 78d4e65d42..3de2e367af 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -925,7 +925,7 @@ bool LLPipeline::allocateShadowBuffer(U32 resX, U32 resY)                  gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_ANISOTROPIC);                  gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); -                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); +                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);                  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);              }          } @@ -942,7 +942,7 @@ bool LLPipeline::allocateShadowBuffer(U32 resX, U32 resY)                  gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_ANISOTROPIC);                  gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); -                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); +                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);                  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);              }          } @@ -3768,10 +3768,12 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera, bool do_occlusion)      llassert(!sRenderingHUDs); +#if GL_VERSION_1_1      if (gUseWireframe)      {          glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);      } +#endif      if (&camera == LLViewerCamera::getInstance())      {   // a bit hacky, this is the start of the main render frame, figure out delta between last modelview matrix and  @@ -3896,10 +3898,12 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera, bool do_occlusion)  	} // Tracy ZoneScoped +#if GL_VERSION_1_1      if (gUseWireframe)      {          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);      } +#endif  }  void LLPipeline::renderGeomPostDeferred(LLCamera& camera) @@ -3907,10 +3911,12 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)  	LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;      LL_PROFILE_GPU_ZONE("renderGeomPostDeferred"); +#if GL_VERSION_1_1      if (gUseWireframe)      {          glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);      } +#endif  	U32 cur_type = 0; @@ -3995,10 +4001,12 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)          renderDebug();      } +#if GL_VERSION_1_1      if (gUseWireframe)      {          glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);      } +#endif  }  void LLPipeline::renderGeomShadow(LLCamera& camera) @@ -4091,7 +4099,9 @@ void LLPipeline::renderPhysicsDisplay()      gGL.flush();      gDebugProgram.bind(); +#if GL_VERSION_1_1      LLGLEnable(GL_POLYGON_OFFSET_LINE); +#endif      glPolygonOffset(3.f, 3.f);      glLineWidth(3.f);      LLGLEnable blend(GL_BLEND); @@ -4107,10 +4117,12 @@ void LLPipeline::renderPhysicsDisplay()          bool wireframe = (pass == 2); +#if GL_VERSION_1_1          if (wireframe)          {              glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);          } +#endif          for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();              iter != LLWorld::getInstance()->getRegionList().end(); ++iter) @@ -4130,10 +4142,12 @@ void LLPipeline::renderPhysicsDisplay()          }          gGL.flush(); +#if GL_VERSION_1_1          if (wireframe)          {              glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);          } +#endif      }      glLineWidth(1.f);  	gDebugProgram.unbind(); @@ -4213,7 +4227,9 @@ void LLPipeline::renderDebug()  						glClearColor(clearColor.mV[0],clearColor.mV[1],clearColor.mV[2],0);                          glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // no stencil -- deprecated | GL_STENCIL_BUFFER_BIT);  						gGL.setColorMask(true, false); +#if GL_VERSION_1_1  						glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 +#endif  					}  					//NavMesh @@ -4243,7 +4259,9 @@ void LLPipeline::renderDebug()  						gPathfindingProgram.bind();  						gGL.flush(); +#if GL_VERSION_1_1  						glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 +#endif  						glLineWidth(1.0f);	  						gGL.flush();  					} @@ -4300,7 +4318,9 @@ void LLPipeline::renderDebug()  							LLGLDisable cull(i >= 2 ? GL_CULL_FACE : 0);  							gGL.flush(); +#if GL_VERSION_1_1  							glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 +#endif  							//get rid of some z-fighting  							LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); @@ -4325,9 +4345,11 @@ void LLPipeline::renderDebug()  									gGL.flush();				  								} +#if GL_VERSION_1_1  								LLGLEnable lineOffset(GL_POLYGON_OFFSET_LINE);  								glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );	 +#endif  								F32 offset = gSavedSettings.getF32("PathfindingLineOffset");  								if (pathfindingConsole->isRenderXRay()) @@ -4346,10 +4368,14 @@ void LLPipeline::renderDebug()  									}  									else  									{ +#if GL_VERSION_1_1  										glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 +#endif  										gPathfindingProgram.uniform1f(sAmbiance, ambiance);  										llPathingLibInstance->renderNavMeshShapesVBO( render_order[i] );				 +#if GL_VERSION_1_1  										glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#endif  									}  								} @@ -4366,7 +4392,9 @@ void LLPipeline::renderDebug()  									glLineWidth(1.f);  								} +#if GL_VERSION_1_1  								glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); +#endif  							}  						}  					} @@ -4377,7 +4405,9 @@ void LLPipeline::renderDebug()  					{	//render navmesh xray  						F32 ambiance = gSavedSettings.getF32("PathfindingAmbiance"); +#if GL_VERSION_1_1  						LLGLEnable lineOffset(GL_POLYGON_OFFSET_LINE); +#endif  						LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);  						F32 offset = gSavedSettings.getF32("PathfindingLineOffset"); @@ -4394,10 +4424,14 @@ void LLPipeline::renderDebug()  						if (gSavedSettings.getBOOL("PathfindingXRayWireframe"))  						{ //draw hidden wireframe as darker and less opaque +#if GL_VERSION_1_1  							glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );	 +#endif  							gPathfindingProgram.uniform1f(sAmbiance, 1.f);  							llPathingLibInstance->renderNavMesh(); +#if GL_VERSION_1_1  							glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 +#endif  						}	  						else  						{ @@ -4437,7 +4471,9 @@ void LLPipeline::renderDebug()  		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep, true); +#if GL_VERSION_1_1  		glPointSize(8.f); +#endif  		LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS);  		gGL.begin(LLRender::POINTS); @@ -4462,7 +4498,9 @@ void LLPipeline::renderDebug()  		}  		gGL.end();  		gGL.flush(); +#if GL_VERSION_1_1  		glPointSize(1.f); +#endif  	}  	// Debug stuff. @@ -4645,7 +4683,9 @@ void LLPipeline::renderDebug()  				{  					//render visible point cloud  					gGL.flush(); +#if GL_VERSION_1_1  					glPointSize(8.f); +#endif  					gGL.begin(LLRender::POINTS);  					F32* c = col+i*4; @@ -4659,7 +4699,9 @@ void LLPipeline::renderDebug()  					gGL.end();  					gGL.flush(); +#if GL_VERSION_1_1  					glPointSize(1.f); +#endif  					LLVector3* ext = mShadowExtents[i];   					LLVector3 pos = (ext[0]+ext[1])*0.5f; @@ -6685,7 +6727,7 @@ void apply_cube_face_rotation(U32 face)  void validate_framebuffer_object()  {                                                             	GLenum status;                                             -	status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);  +	status = glCheckFramebufferStatus(GL_FRAMEBUFFER);  	switch(status)   	{                                            		case GL_FRAMEBUFFER_COMPLETE:                        diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 6efe302f30..a6820086fc 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -527,7 +527,7 @@       value="0.5 0 0 1" />      <color       name="MenuBarBgColor" -     reference="DkGray" /> +     reference="Black" />      <color       name="MenuBarGodBgColor"       reference="FrogGreen" /> diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index f6f3a984f5..328105b931 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -637,8 +637,8 @@ with the same filename but different name    <texture name="Snapshot_Profile" file_name="toolbar_icons/profile.png" preload="false" />    <texture name="startup_logo"  file_name="windows/startup_logo.png" preload="true" /> -  <texture name="login_sl_logo"  file_name="windows/login_sl_logo.png" preload="true" /> -  <texture name="login_sl_logo_small"  file_name="windows/login_sl_logo_small.png" preload="true" /> +  <texture name="login_mp_logo"  file_name="windows/login_mp_logo.png" preload="true" /> +  <texture name="login_mp_logo_small"  file_name="windows/login_mp_logo_small.png" preload="true" />    <texture name="first_login_image"  file_name="windows/first_login_image.jpg" preload="true" />    <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/windows/login_mp_logo.png b/indra/newview/skins/default/textures/windows/login_mp_logo.pngBinary files differ new file mode 100644 index 0000000000..6ae2b947db --- /dev/null +++ b/indra/newview/skins/default/textures/windows/login_mp_logo.png diff --git a/indra/newview/skins/default/textures/windows/login_mp_logo_small.png b/indra/newview/skins/default/textures/windows/login_mp_logo_small.pngBinary files differ new file mode 100644 index 0000000000..e95127cba4 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/login_mp_logo_small.png diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml index 0e3cbfd2d2..fd3fa6c6fd 100644 --- a/indra/newview/skins/default/xui/da/language_settings.xml +++ b/indra/newview/skins/default/xui/da/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">da_DK.UTF-8</string>  	<string name="DarwinLocale">da_DK.UTF-8</string>  	<string name="LinuxLocale">da_DK.UTF-8</string> +	<string name="FreeBSDLocale">da_DK.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index e4f99d14e9..d7930d9e81 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -5,7 +5,7 @@       that are returned from one component and may appear in many places-->  <strings>  	<string name="CAPITALIZED_APP_NAME"> -		SECOND LIFE +		MEGAPAHIT  	</string>  	<string name="SUPPORT_SITE">  		Second Life Support Portal diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml index f9346eef7d..912b30615e 100644 --- a/indra/newview/skins/default/xui/de/language_settings.xml +++ b/indra/newview/skins/default/xui/de/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">de_DE.UTF-8</string>  	<string name="DarwinLocale">de_DE.UTF-8</string>  	<string name="LinuxLocale">de_DE.UTF-8</string> +	<string name="FreeBSDLocale">de_DE.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index a9e7626dc5..3f4adf4d4b 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -1,8 +1,8 @@  <?xml version="1.0" ?>  <strings>  	<string name="SECOND_LIFE">Second Life</string> -	<string name="APP_NAME">Second Life</string> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="APP_NAME">Megapahit</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SECOND_LIFE_GRID">Second Life-Grid:</string>  	<string name="SUPPORT_SITE">Second Life Support-Portal</string>  	<string name="StartupDetectingHardware">Hardware wird erfasst...</string> diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 1ad7811d85..55f7488971 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -51,15 +51,14 @@        name="credits_panel">        <text            follows="top|left|right" -          height="20" +          height="30"            layout="topleft"            left="5"            name="linden_intro"            top="10"            width="465"            wrap="true"> -Second Life is brought to you by the Lindens,  -with open source contributions from: +Megapahit is brought to you by Erik Kundiman, with special thanks to the Lindens whose viewer this software is based on, which therefore has open source contributions from:        </text>        <text_editor         enabled="false"  @@ -93,35 +92,50 @@ Dummy Name replaced at run time         top="5"         width="465"         word_wrap="true"> -        3Dconnexion SDK Copyright (C) 1992-2009 3Dconnexion -        APR Copyright (C) 2011 The Apache Software Foundation -        Collada DOM Copyright 2006 Sony Computer Entertainment Inc. -        cURL Copyright (C) 1996-2010, Daniel Stenberg, (daniel@haxx.se) -        DBus/dbus-glib Copyright (C) 2002, 2003  CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. -        expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. -        FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm, and Werner Lemberg. -        GL Copyright (C) 1999-2004 Brian Paul. -        google-perftools Copyright (c) 2005, Google Inc. -        Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. -        jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) -        jpeglib Copyright (C) 1991-1998, Thomas G. Lane. -        meshoptimizer Copyright (c) 2016-2021 Arseny Kapoulkine -        ogg/vorbis Copyright (C) 2002, Xiphophorus -        OpenSSL Copyright (C) 1998-2008 The OpenSSL Project. -        PCRE Copyright (c) 1997-2012 University of Cambridge -        SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga -        SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -        xmlrpc-epi Copyright (C) 2000 Epinions, Inc. -        xxHash Copyright (C) 2012-2020 Yann Collet. -        zlib Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler. - -        Second Life Viewer uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. +        The library that is linked statically to this software is OpenJPEG v2.5.0. See the license below. +/* + * The copyright in this software is being made available under the 2-clauses  + * BSD License, included below. This software may be subject to other third  + * party and contributor rights, including patent rights, and no such rights + * are granted under this license. + * + * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2014, Professor Benoit Macq + * Copyright (c) 2003-2014, Antonin Descampe + * Copyright (c) 2003-2009, Francois-Olivier Devaux + * Copyright (c) 2005, Herve Drolon, FreeImage Team + * Copyright (c) 2002-2003, Yannick Verschueren + * Copyright (c) 2001-2003, David Janssens + * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France  + * Copyright (c) 2012, CS Systemes d'Information, France + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */          This software contains source code provided by NVIDIA Corporation.          All rights reserved.  See licenses.txt for details. - -        Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)        </text_editor>        </panel>      </tab_container> diff --git a/indra/newview/skins/default/xui/en/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml index d418fc38e3..2e874554a1 100644 --- a/indra/newview/skins/default/xui/en/language_settings.xml +++ b/indra/newview/skins/default/xui/en/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">C</string>  	<string name="DarwinLocale">C</string>  	<string name="LinuxLocale">C</string> +	<string name="FreeBSDLocale">C</string>    <!-- Note: for plural nouns, see strings.xml.  For example:         AgeYearsA = singular, diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 3aba80909a..55493591a3 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -5,7 +5,7 @@    name="panel_login"    focus_root="true"    background_visible="true" -  bg_opaque_color="0.16 0.16 0.16 1" +  bg_opaque_color="0.0 0.0 0.0 1"    background_opaque="true"    width="1024">    <panel.string @@ -40,7 +40,7 @@    <icon      height="73"      width="165" -    image_name="login_sl_logo" +    image_name="login_mp_logo"      left="0"      top="25"      name="sl_logo_small" /> diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index d36c83d292..e3b16952ad 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -60,7 +60,7 @@            height="105">            <icon              height="94" -            image_name="login_sl_logo" +            image_name="login_mp_logo"              left="0"              name="sl_logo"              top="0" /> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 36b7c57aba..3848aea535 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -7,8 +7,8 @@  	<!-- Default Args - these arguments will be replaced in all strings -->  	<string name="SECOND_LIFE">Second Life</string> -	<string name="APP_NAME">Second Life</string> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="APP_NAME">Megapahit</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SECOND_LIFE_GRID">Second Life Grid</string>  	<string name="SUPPORT_SITE">Second Life Support Portal</string> diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml index 997293a741..c345ad73ad 100644 --- a/indra/newview/skins/default/xui/es/language_settings.xml +++ b/indra/newview/skins/default/xui/es/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">es_ES.UTF-8</string>  	<string name="DarwinLocale">es_ES.UTF-8</string>  	<string name="LinuxLocale">es_ES.UTF-8</string> +	<string name="FreeBSDLocale">es_ES.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index cd8e7687ae..36d9b03efc 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -1,6 +1,6 @@  <?xml version="1.0" ?>  <strings> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SUPPORT_SITE">Portal de Soporte de Second Life</string>  	<string name="StartupDetectingHardware">Identificando el hardware...</string>  	<string name="StartupLoading">Instalando [APP_NAME]...</string> diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml index fdac9d65a7..0dc61fc258 100644 --- a/indra/newview/skins/default/xui/fr/language_settings.xml +++ b/indra/newview/skins/default/xui/fr/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">fr_FR.UTF-8</string>  	<string name="DarwinLocale">fr_FR.UTF-8</string>  	<string name="LinuxLocale">fr_FR.UTF-8</string> +	<string name="FreeBSDLocale">fr_FR.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 0a3fbeb603..00009b6a05 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1,8 +1,8 @@  <?xml version="1.0" ?>  <strings>  	<string name="SECOND_LIFE">Second Life</string> -	<string name="APP_NAME">Second Life</string> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="APP_NAME">Megapahit</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SECOND_LIFE_GRID">Grille de Second Life</string>  	<string name="SUPPORT_SITE">Portail Assistance Second Life</string>  	<string name="StartupDetectingHardware">Détection du matériel...</string> diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml index 5f448fa828..205ee3dbef 100644 --- a/indra/newview/skins/default/xui/it/language_settings.xml +++ b/indra/newview/skins/default/xui/it/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">it_IT.UTF-8</string>  	<string name="DarwinLocale">it_IT.UTF-8</string>  	<string name="LinuxLocale">it_IT.UTF-8</string> +	<string name="FreeBSDLocale">it_IT.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 178bb90ca6..49b2b27668 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -1,8 +1,8 @@  <?xml version="1.0" ?>  <strings>  	<string name="SECOND_LIFE">Second Life</string> -	<string name="APP_NAME">Second Life</string> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="APP_NAME">Megapahit</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SUPPORT_SITE">Portale di supporto di Second Life</string>  	<string name="StartupDetectingHardware">Ricerca hardware...</string>  	<string name="StartupLoading">Caricamento di [APP_NAME]...</string> diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml index facae22acf..c6f9ae3e26 100644 --- a/indra/newview/skins/default/xui/ja/language_settings.xml +++ b/indra/newview/skins/default/xui/ja/language_settings.xml @@ -12,6 +12,9 @@  	<string name="LinuxLocale">  		ja_JP.UTF-8  	</string> +	<string name="FreeBSDLocale"> +		ja_JP.UTF-8 +	</string>  	<string name="TimeHour">  		hour,datetime,slt  	</string> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index fa6c329fe7..52387a07a8 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -4,10 +4,10 @@  		Second Life  	</string>  	<string name="APP_NAME"> -		Second Life +		Megapahit  	</string>  	<string name="CAPITALIZED_APP_NAME"> -		SECOND LIFE +		MEGAPAHIT  	</string>  	<string name="SECOND_LIFE_GRID">  		Second Lifeグリッド diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml index 0057ca530c..b84d817aa5 100644 --- a/indra/newview/skins/default/xui/pl/language_settings.xml +++ b/indra/newview/skins/default/xui/pl/language_settings.xml @@ -4,6 +4,7 @@  	<string name="MacLocale">pl_PL.UTF-8</string>  	<string name="DarwinLocale">pl_PL.UTF-8</string>  	<string name="LinuxLocale">pl_PL.UTF-8</string> +	<string name="FreeBSDLocale">pl_PL.UTF-8</string>  	<string name="TimeHour">hour,datetime,slt</string>  	<string name="TimeMin">min,datetime,slt</string>  	<string name="TimeSec">second,datetime,slt</string> diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml index 8799475ace..e31af58455 100644 --- a/indra/newview/skins/default/xui/pt/language_settings.xml +++ b/indra/newview/skins/default/xui/pt/language_settings.xml @@ -7,6 +7,7 @@  	<string name="MacLocale">pt_PT.UTF-8</string>  	<string name="DarwinLocale">pt_PT.UTF-8</string>  	<string name="LinuxLocale">pt_PT.UTF-8</string> +	<string name="FreeBSDLocale">pt_PT.UTF-8</string>  	<!--   	datetimeToCodes["wkday"]	= "%a";		// Thu diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 6db5da2e89..a1ec99ea47 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -1,6 +1,6 @@  <?xml version="1.0" ?>  <strings> -	<string name="CAPITALIZED_APP_NAME">SECOND LIFE</string> +	<string name="CAPITALIZED_APP_NAME">MEGAPAHIT</string>  	<string name="SUPPORT_SITE">Portal de Supporte Second Life</string>  	<string name="StartupDetectingHardware">Detectando hardware...</string>  	<string name="StartupLoading">Carregando [APP_NAME]...</string> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 61d836a2d1..649d5e7107 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -8,10 +8,10 @@  		Second Life  	</string>  	<string name="APP_NAME"> -		Second Life +		Megapahit  	</string>  	<string name="CAPITALIZED_APP_NAME"> -		SECOND LIFE +		MEGAPAHIT  	</string>  	<string name="SECOND_LIFE_GRID">  		Сетка Second Life diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index e709a4c5d6..f80d8e3382 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -8,10 +8,10 @@  		Second Life  	</string>  	<string name="APP_NAME"> -		Second Life +		Megapahit  	</string>  	<string name="CAPITALIZED_APP_NAME"> -		SECOND LIFE +		MEGAPAHIT  	</string>  	<string name="SECOND_LIFE_GRID">  		Second Life Ağı diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt index 8381803b03..d33b6d78f7 100644 --- a/indra/viewer_components/login/CMakeLists.txt +++ b/indra/viewer_components/login/CMakeLists.txt @@ -1,6 +1,6 @@  # -*- cmake -*- -project(login) +project(lllogin)  include(00-Common)  if(LL_TESTS) @@ -9,21 +9,21 @@ endif(LL_TESTS)  include(LLCommon)  include(LLCoreHttp) -set(login_SOURCE_FILES +set(lllogin_SOURCE_FILES      lllogin.cpp      ) -set(login_HEADER_FILES +set(lllogin_HEADER_FILES      lllogin.h      )  list(APPEND  -    login_SOURCE_FILES  -    ${login_HEADER_FILES}  +    lllogin_SOURCE_FILES +    ${lllogin_HEADER_FILES}      )  add_library(lllogin  -            ${login_SOURCE_FILES} +            ${lllogin_SOURCE_FILES}              )  target_include_directories( lllogin  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR}) @@ -35,6 +35,8 @@ target_link_libraries(lllogin          llxml      ) +include(LibraryInstall) +  if(LL_TESTS)    SET(lllogin_TEST_SOURCE_FILES        lllogin.cpp | 
