Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alchemy/viewer
  • Miezhiko/alchemy-next
  • JennaHuntsman/xdg-integration
  • logue/alchemy-next
  • FelixWolf/alchemy-viewer
  • XenHat/xdg-integration
6 results
Show changes
Commits on Source (43)
Showing
with 316 additions and 250 deletions
......@@ -2,8 +2,11 @@ stages:
- build
- deploy
default:
interruptible: true
variables:
VIEWER_USE_CRASHPAD: "TRUE"
VIEWER_USE_CRASHPAD: "FALSE"
VIEWER_CRASHPAD_URL: $SENTRY_DSN
.win_build: &win_build
......@@ -14,27 +17,48 @@ variables:
before_script:
- pipenv install
script:
- If ($env:VIEWER_CHANNEL_TYPE -eq 'Project')
{
$env:VIEWER_CHANNEL_CODENAME = $env:CI_COMMIT_REF_NAME[8..100] -join ''
}
- pipenv run autobuild configure -c ReleaseOS -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DVS_DISABLE_FATAL_WARNINGS=ON
- pipenv run autobuild build -c ReleaseOS --no-configure
- If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE') {
- Push-Location .\build-vc-*\newview\Release\
- sentry-cli upload-dif --include-sources alchemy-bin.exe alchemy-bin.pdb crashpad_handler.exe crashpad_handler.pdb openjpeg.pdb openjpeg.dll fmod.dll libcrypto-1_1.dll libcrypto-1_1.pdb libssl-1_1.dll libssl-1_1.pdb libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssl-1_1-x64.dll libssl-1_1-x64.pdb vcruntime140.dll msvcp140.dll nghttp2.dll glod.dll
- Pop-Location }
- |
pipenv run autobuild configure -c ReleaseOS -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DVS_DISABLE_FATAL_WARNINGS=ON
pipenv run autobuild build -c ReleaseOS --no-configure
artifacts:
name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
expire_in: 2 week
paths:
- build-vc-*/newview/Release/build_data.json
- build-vc-*/newview/Release/alchemy-bin.pdb
- build-vc-*/newview/Release/alchemy-bin.exe
- build-vc-*/newview/Release/*.pdb
- build-vc-*/newview/Release/*.dll
- build-vc-*/newview/Release/Alchemy_*_Setup.exe
.beta_rules: &beta_rules
.lnx_build: &lnx_build
stage: build
image: r.alchemyviewer.org/alchemy/infrastructure/debian-build-image:latest
tags:
- linux
- docker
script:
- |
autobuild configure -c ReleaseOS -- -DUSE_FMODSTUDIO=ON -DUSE_NVAPI=ON -DUSE_LTO=ON -DUNIX_DISABLE_FATAL_WARNINGS=ON
autobuild build -c ReleaseOS --no-configure
artifacts:
name: "$env:CI_COMMIT_REF_NAME-$env:CI_COMMIT_SHORT_SHA"
expire_in: 2 week
paths:
- build-linux-*/build_data.json
- build-linux-*/newview/Alchemy_*.tar.bz2
.master_rules: &master_rules
only:
variables:
- $BUILD_CHANNEL =~ /Test/
.project_rules: &project_rules
only:
- /^.*-beta$/
variables:
- $BUILD_CHANNEL =~ /Project/
.beta_rules: &beta_rules
except:
- branches
......@@ -44,51 +68,65 @@ variables:
except:
- branches
build:master:windows32:
<<: *win_build
interruptible: true
build:master:linux64:
<<: *lnx_build
variables:
AUTOBUILD_ADDRSIZE: 32
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Test
VIEWER_USE_CRASHPAD: "FALSE"
only:
- schedules
<<: *master_rules
#build:master:windows32:
# <<: *win_build
# variables:
# AUTOBUILD_ADDRSIZE: 32
# VIEWER_CHANNEL_TYPE: Test
# VIEWER_USE_CRASHPAD: "FALSE"
# <<: *master_rules
build:master:windows64:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Test
VIEWER_USE_CRASHPAD: "FALSE"
only:
- schedules
<<: *master_rules
build:project:windows32:
<<: *win_build
interruptible: true
build:project:linux64:
<<: *lnx_build
variables:
AUTOBUILD_ADDRSIZE: 32
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Project
only:
- /^project-.*$/
<<: *project_rules
#build:project:windows32:
# <<: *win_build
# variables:
# AUTOBUILD_ADDRSIZE: 32
# VIEWER_CHANNEL_TYPE: Project
# <<: *project_rules
build:project:windows64:
<<: *win_build
interruptible: true
variables:
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Project
only:
- /^project-.*$/
<<: *project_rules
build:beta:windows32:
<<: *win_build
build:beta:linux64:
<<: *lnx_build
variables:
AUTOBUILD_ADDRSIZE: 32
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Beta
<<: *beta_rules
#build:beta:windows32:
# <<: *win_build
# variables:
# AUTOBUILD_ADDRSIZE: 32
# VIEWER_CHANNEL_TYPE: Beta
# <<: *beta_rules
build:beta:windows64:
<<: *win_build
variables:
......@@ -96,13 +134,20 @@ build:beta:windows64:
VIEWER_CHANNEL_TYPE: Beta
<<: *beta_rules
build:release:windows32:
<<: *win_build
build:release:linux64:
<<: *lnx_build
variables:
AUTOBUILD_ADDRSIZE: 32
AUTOBUILD_ADDRSIZE: 64
VIEWER_CHANNEL_TYPE: Release
<<: *release_rules
#build:release:windows32:
# <<: *win_build
# variables:
# AUTOBUILD_ADDRSIZE: 32
# VIEWER_CHANNEL_TYPE: Release
# <<: *release_rules
build:release:windows64:
<<: *win_build
variables:
......@@ -115,49 +160,57 @@ build:release:windows64:
tags:
- autobuild
- windows
script:
- $BuildData = Get-Content .\build-vc-64\newview\Release\build_data.json | ConvertFrom-Json
- $BuildChannelVersion = $BuildData."Channel" + ' ' + $BuildData."Version"
- $UploadDestViewerDir = $BuildChannelVersion.ToLower().Replace(" ", "/")
- $UploadDestURL = "https://pkg.alchemyviewer.org/repository/viewer/${UploadDestViewerDir}"
- $UploadParams = @{ UseBasicParsing = $true;
Method = "PUT";
Headers = @{
ContentType = "application/x-executable";
Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$env:AUTOBUILD_HTTP_USER`:$env:AUTOBUILD_HTTP_PASS")))"; };
Verbose = $true; };
- Push-Location .\build-vc-32\newview\Release\
- $FileNameWin32 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin32 -Uri "${UploadDestURL}/${FileNameWin32}"
- Pop-Location
- Push-Location .\build-vc-64\newview\Release\
- $FileNameWin64 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
- Invoke-WebRequest @UploadParams -InFile .\$FileNameWin64 -Uri "${UploadDestURL}/${FileNameWin64}"
- Pop-Location
- sentry-cli releases new $BuildChannelVersion
- sentry-cli releases set-commits --auto $BuildChannelVersion
- sentry-cli releases finalize $BuildChannelVersion
when: manual
allow_failure: false
script:
- |
$BuildData = Get-Content .\build-vc-64\newview\Release\build_data.json | ConvertFrom-Json
$BuildChannelVersion = $BuildData."Channel" + ' ' + $BuildData."Version"
$UploadDestViewerDir = $BuildChannelVersion.ToLower().Replace(" ", "/")
$UploadDestURL = "https://pkg.alchemyviewer.org/repository/viewer/${UploadDestViewerDir}"
$UploadParams = @{ UseBasicParsing = $true;
Method = "PUT";
Headers = @{
ContentType = "application/x-executable";
Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$env:AUTOBUILD_HTTP_USER`:$env:AUTOBUILD_HTTP_PASS")))"; };
Verbose = $true; };
Push-Location .\build-linux-64\newview\Release\
$FileNameLnx64 = Get-ChildItem -Path . -Name -Include Alchemy_*.tar.bz2
Invoke-WebRequest @UploadParams -InFile .\$FileNameLnx64 -Uri "${UploadDestURL}/${FileNameLnx64}"
Pop-Location
Push-Location .\build-vc-64\newview\Release\
$FileNameWin64 = Get-ChildItem -Path . -Name -Include Alchemy_*_Setup.exe
Invoke-WebRequest @UploadParams -InFile .\$FileNameWin64 -Uri "${UploadDestURL}/${FileNameWin64}"
If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE')
{
sentry-cli upload-dif --include-sources alchemy-bin.exe alchemy-bin.pdb crashpad_handler.exe crashpad_handler.pdb openjpeg.pdb openjpeg.dll fmod.dll libcrypto-1_1.dll libcrypto-1_1.pdb libssl-1_1.dll libssl-1_1.pdb libcrypto-1_1-x64.dll libcrypto-1_1-x64.pdb libssl-1_1-x64.dll libssl-1_1-x64.pdb vcruntime140.dll msvcp140.dll nghttp2.dll glod.dll
}
Pop-Location
If ($env:VIEWER_USE_CRASHPAD -eq 'TRUE')
{
sentry-cli releases new $BuildChannelVersion
sentry-cli releases set-commits --auto $BuildChannelVersion
sentry-cli releases finalize $BuildChannelVersion
}
deploy_project:
<<: *deploy_template
environment:
name: qa
only:
- /^project-.*$/
<<: *project_rules
deploy_beta:
<<: *deploy_template
environment:
name: staging
name: beta
<<: *beta_rules
deploy_release:
<<: *deploy_template
environment:
name: production
name: release
<<: *release_rules
\ No newline at end of file
[![Alchemy Logo](https://www.alchemyviewer.org/images/banner.png)](https://www.alchemyviewer.org)
[![Alchemy License](https://img.shields.io/badge/license-LGPL%202.1-blue.svg)](https://raw.githubusercontent.com/nlohmann/json/master/LICENSE.MIT)
[![Alchemy License](https://img.shields.io/badge/license-LGPL%202.1-blue.svg)](https://git.alchemyviewer.org/alchemy/alchemy-next/-/blob/master/LICENSE.md)
[![pipeline status](https://git.alchemyviewer.org/alchemy/alchemy-next/badges/master/pipeline.svg)](https://git.alchemyviewer.org/alchemy/alchemy-next/-/commits/master)
## About
[Alchemy](https://www.alchemyviewer.org) Viewer is a client for Second Life and OpenMetaverse protocol simulators. We focus on creating a smooth and easy to use experience with secure and sane defaults.
......
......@@ -560,16 +560,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>d778c6a3475bc35ee8b9615dfc38b4a9</string>
<string>342ec43ede75eceac27842f0fc3e56ae</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55025/511964/dictionaries-1.538984-common-538984.tar.bz2</string>
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/dictionaries/common/dictionaries-1.432-common-432.tar.bz2</string>
</map>
<key>name</key>
<string>common</string>
</map>
</map>
<key>version</key>
<string>1.538984</string>
<string>1.432</string>
</map>
<key>dullahan</key>
<map>
......@@ -2010,7 +2012,7 @@
<key>llca</key>
<map>
<key>copyright</key>
<string>Copyright (c) 2016, Linden Research, Inc.; data provided by the Mozilla NSS Project.
<string>Copyright (c) 2020, Alchemy Development Group; data provided by the Mozilla NSS Project.
</string>
<key>license</key>
<string>mit</string>
......@@ -2025,16 +2027,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>b677ee43822212f0a27c838dc8bf3623</string>
<string>b84ff60ea62e7dd4c8cb5578ee4dc8b3</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/67622/646614/llca-202009010215.548269-common-548269.tar.bz2</string>
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/llca/common/llca-202010010024.0-common-437.tar.bz2</string>
</map>
<key>name</key>
<string>common</string>
</map>
</map>
<key>version</key>
<string>202009010215.548269</string>
<string>202010010024.0</string>
</map>
<key>llphysicsextensions_source</key>
<map>
......@@ -2832,9 +2836,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>fb1a57a1cf5e38a3d51b32307b93ffba</string>
<string>017c4784aea9dffbebfb782cbfeed020</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55968/524423/slvoice-4.10.0000.32327.5fc3fe7c.539691-windows-539691.tar.bz2</string>
<string>https://pkg.alchemyviewer.org/repository/autobuild-external/slvoice/windows/slvoice-4.10.0000.32327.5fc3fe7c.539691-windows-539691.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
......@@ -3616,11 +3622,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>build</key>
<map>
<key>command</key>
<string>make</string>
<string>cmake</string>
<key>options</key>
<array>
<string>-j</string>
<string>7</string>
<string>--build</string>
<string>.</string>
<string>--config</string>
<string>Release</string>
<string>--parallel</string>
<string>14</string>
</array>
</map>
<key>configure</key>
......
......@@ -299,11 +299,16 @@ if (LINUX OR DARWIN)
endif (CMAKE_CXX_COMPILER MATCHES ".*clang")
if (CMAKE_COMPILER_IS_GNUCXX)
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-deprecated-copy -Wno-ignored-qualifiers -Wno-unused-function -Wnon-virtual-dtor")
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-ignored-qualifiers -Wno-unused-function -Wnon-virtual-dtor")
elseif (CMAKE_COMPILER_IS_CLANGXX)
set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
endif()
CHECK_CXX_COMPILER_FLAG(-Wdeprecated-copy HAS_DEPRECATED_COPY)
if (HAS_DEPRECATED_COPY)
set(GCC_WARNINGS "${GCC_WARNINGS} -Wno-deprecated-copy")
endif()
if (NOT GCC_DISABLE_FATAL_WARNINGS)
# set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
endif (NOT GCC_DISABLE_FATAL_WARNINGS)
......
# -*- cmake -*-
# Construct the viewer version number based on the indra/VIEWER_VERSION file
option(REVISION_FROM_VCS "Get current revision from vcs" ON)
find_package(Git)
if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/
set(VIEWER_VERSION_BASE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/newview/VIEWER_VERSION.txt")
# Construct the viewer channel from environment variables or defaults
if(NOT DEFINED VIEWER_CHANNEL)
if(DEFINED ENV{VIEWER_CHANNEL_BASE})
set(VIEWER_CHANNEL_BASE
$ENV{VIEWER_CHANNEL_BASE}
CACHE STRING "Viewer Channel Base Name" FORCE)
else()
set(VIEWER_CHANNEL_BASE
"Alchemy"
CACHE STRING "Viewer Channel Base Name")
endif()
if(DEFINED ENV{VIEWER_CHANNEL_TYPE})
set(VIEWER_CHANNEL_TYPE
$ENV{VIEWER_CHANNEL_TYPE}
CACHE STRING "Viewer Channel Type Name" FORCE)
else()
set(VIEWER_CHANNEL_TYPE
"Test"
CACHE STRING "Viewer Channel Type Name")
endif()
if(DEFINED ENV{VIEWER_CHANNEL_CODENAME})
set(VIEWER_CHANNEL_CODENAME_INTERNAL $ENV{VIEWER_CHANNEL_CODENAME})
elseif(DEFINED VIEWER_CHANNEL_CODENAME)
set(VIEWER_CHANNEL_CODENAME_INTERNAL ${VIEWER_CHANNEL_CODENAME})
else()
set(VIEWER_CHANNEL_CODENAME_FILE "${CMAKE_SOURCE_DIR}/newview/VIEWER_PROJECT_CODENAME.txt")
if ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
if(EXISTS ${VIEWER_CHANNEL_CODENAME_FILE})
file(STRINGS ${VIEWER_CHANNEL_CODENAME_FILE} VIEWER_CHANNEL_CODENAME_INTERNAL)
else()
set(VIEWER_CHANNEL_CODENAME_INTERNAL "Default")
endif()
endif()
if("${VIEWER_CHANNEL_TYPE}" STREQUAL "Project")
set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE} ${VIEWER_CHANNEL_CODENAME_INTERNAL}")
else()
set(VIEWER_CHANNEL "${VIEWER_CHANNEL_BASE} ${VIEWER_CHANNEL_TYPE}")
endif()
endif()
# Construct the viewer version number based on the indra/VIEWER_VERSION file
if(NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/
set(VIEWER_VERSION_BASE_FILE "${CMAKE_SOURCE_DIR}/newview/VIEWER_VERSION.txt")
if(EXISTS ${VIEWER_VERSION_BASE_FILE})
file(STRINGS ${VIEWER_VERSION_BASE_FILE} VIEWER_SHORT_VERSION REGEX "^[0-9]+\\.[0-9]+\\.[0-9]+")
string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" VIEWER_VERSION_MAJOR ${VIEWER_SHORT_VERSION})
string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" VIEWER_VERSION_MINOR ${VIEWER_SHORT_VERSION})
string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" VIEWER_VERSION_PATCH ${VIEWER_SHORT_VERSION})
if ((NOT REVISION_FROM_VCS) AND DEFINED ENV{revision})
set(VIEWER_VERSION_REVISION $ENV{revision})
message(STATUS "Revision (from environment): ${VIEWER_VERSION_REVISION}")
elseif ((NOT REVISION_FROM_VCS) AND DEFINED ENV{AUTOBUILD_BUILD_ID})
set(VIEWER_VERSION_REVISION $ENV{AUTOBUILD_BUILD_ID})
message(STATUS "Revision (from autobuild environment): ${VIEWER_VERSION_REVISION}")
elseif (Git_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count
OUTPUT_VARIABLE GIT_REV_LIST_COUNT
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if((NOT REVISION_FROM_VCS) AND DEFINED ENV{revision})
set(VIEWER_VERSION_REVISION $ENV{revision})
message(STATUS "Revision (from environment): ${VIEWER_VERSION_REVISION}")
elseif((NOT REVISION_FROM_VCS) AND DEFINED ENV{AUTOBUILD_BUILD_ID})
set(VIEWER_VERSION_REVISION $ENV{AUTOBUILD_BUILD_ID})
message(STATUS "Revision (from autobuild environment): ${VIEWER_VERSION_REVISION}")
elseif(Git_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-list HEAD --count
OUTPUT_VARIABLE GIT_REV_LIST_COUNT
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(GIT_REV_LIST_COUNT)
set(VIEWER_VERSION_REVISION ${GIT_REV_LIST_COUNT})
set(VIEWER_VERSION_REVISION ${GIT_REV_LIST_COUNT})
else(GIT_REV_LIST_COUNT)
set(VIEWER_VERSION_REVISION 0)
set(VIEWER_VERSION_REVISION 0)
endif(GIT_REV_LIST_COUNT)
else ()
set(VIEWER_VERSION_REVISION 0)
endif ()
else()
set(VIEWER_VERSION_REVISION 0)
endif()
message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'")
endif ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
else(EXISTS ${VIEWER_VERSION_BASE_FILE})
message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'")
endif(EXISTS ${VIEWER_VERSION_BASE_FILE})
if ("${VIEWER_VERSION_REVISION}" STREQUAL "")
message(STATUS "Ultimate fallback, revision was blank or not set: will use 0")
set(VIEWER_VERSION_REVISION 0)
endif ("${VIEWER_VERSION_REVISION}" STREQUAL "")
if("${VIEWER_VERSION_REVISION}" STREQUAL "")
message(STATUS "Ultimate fallback, revision was blank or not set: will use 0")
set(VIEWER_VERSION_REVISION 0)
endif("${VIEWER_VERSION_REVISION}" STREQUAL "")
set(VIEWER_CHANNEL_VERSION_DEFINES
"LL_VIEWER_CHANNEL=${VIEWER_CHANNEL}"
"LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}"
"LL_VIEWER_CHANNEL_CODENAME=${VIEWER_CHANNEL_CODENAME_INTERNAL}"
"LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}"
"LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}"
"LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}"
"LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"
"LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\""
)
endif (NOT DEFINED VIEWER_SHORT_VERSION)
if (NOT DEFINED VIEWER_COMMIT_LONG_SHA)
if(Git_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
OUTPUT_VARIABLE GIT_COMMIT_SHA
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(GIT_COMMIT_SHA)
set(VIEWER_COMMIT_LONG_SHA ${GIT_COMMIT_SHA})
else()
set(VIEWER_COMMIT_LONG_SHA 0)
endif()
else()
set(VIEWER_COMMIT_LONG_SHA 0)
endif()
endif (NOT DEFINED VIEWER_COMMIT_LONG_SHA)
if (NOT DEFINED VIEWER_COMMIT_SHORT_SHA)
if(Git_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
OUTPUT_VARIABLE GIT_COMMIT_SHORT_SHA
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(GIT_COMMIT_SHORT_SHA)
set(VIEWER_COMMIT_SHORT_SHA ${GIT_COMMIT_SHORT_SHA})
else()
set(VIEWER_COMMIT_SHORT_SHA 0)
endif()
else()
set(VIEWER_COMMIT_SHORT_SHA 0)
endif()
endif (NOT DEFINED VIEWER_COMMIT_SHORT_SHA)
"LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}"
"LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"
"LLBUILD_CONFIG=\"${CMAKE_BUILD_TYPE}\"")
endif(NOT DEFINED VIEWER_SHORT_VERSION)
......@@ -23,9 +23,23 @@ set(LIBS_OPEN_PREFIX)
set(SCRIPTS_PREFIX ../scripts)
set(VIEWER_PREFIX)
set(INTEGRATION_TESTS_PREFIX)
set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")
set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)")
set(ENABLE_MEDIA_PLUGINS ON CACHE BOOL "Turn off building media plugins if they are imported by third-party library mechanism")
option(LL_TESTS "Build and run unit and integration tests (disable for build timing runs to reduce variation" ON)
option(ENABLE_MEDIA_PLUGINS "Turn off building media plugins if they are imported by third-party library mechanism" ON)
# Compiler and toolchain options
option(INCREMENTAL_LINK "Use incremental linking on win32 builds (enable for faster links on some machines)" OFF)
option(USE_LTO "Enable global and interprocedural optimizations" OFF)
option(FULL_DEBUG_SYMS "Enable Generation of full pdb on msvc" OFF)
option(USE_ASAN "Enable address sanitizer for detection of memory issues" OFF)
option(USE_LEAKSAN "Enable address sanitizer for detection of memory leaks" OFF)
option(USE_UBSAN "Enable undefined behavior sanitizer" OFF)
option(USE_THDSAN "Enable thread sanitizer for detection of thread data races and mutexing issues" OFF)
if(USE_ASAN AND USE_LEAKSAN)
message(FATAL_ERROR "You may only enable either USE_ASAN or USE_LEAKSAN not both")
elseif((USE_ASAN OR USE_LEAKSAN) AND USE_THDSAN)
message(FATAL_ERROR "Address and Leak sanitizers are incompatible with thread sanitizer")
endif(USE_ASAN AND USE_LEAKSAN)
set(VIEWER_SYMBOL_FILE "" CACHE STRING "Name of tarball into which to place symbol files")
set(BUGSPLAT_DB "" CACHE STRING "BugSplat database name, if BugSplat crash reporting is desired")
......@@ -199,8 +213,6 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# Default deploy grid
set(GRID agni CACHE STRING "Target Grid")
set(VIEWER_CHANNEL "Alchemy Test" CACHE STRING "Viewer Channel Name")
set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
......
......@@ -6,6 +6,16 @@ include(FetchContent)
set(CMAKE_FOLDER "Third Party")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(${CMAKE_VERSION} VERSION_LESS 3.14)
macro(FetchContent_MakeAvailable NAME)
FetchContent_GetProperties(${NAME})
if(NOT ${NAME}_POPULATED)
FetchContent_Populate(${NAME})
add_subdirectory(${${NAME}_SOURCE_DIR} ${${NAME}_BINARY_DIR})
endif()
endmacro()
endif()
FetchContent_Declare(
meshoptimizer
GIT_REPOSITORY https://github.com/zeux/meshoptimizer.git
......
......@@ -27,7 +27,7 @@
#ifndef LL_LLSTRING_H
#define LL_LLSTRING_H
#if LL_GNUC
#if LL_GNUC && GCC_VERSION >= 90000
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-copy-dtor"
#endif
......
......@@ -483,11 +483,11 @@ namespace LLTrace
//
// members
//
class BlockTimerStatHandle* mParent; // last acknowledged parent of this time block
class BlockTimerStatHandle* mLastCaller; // used to bootstrap tree construction
U64 mTotalTimeCounter,
mSelfTimeCounter;
S32 mCalls;
class BlockTimerStatHandle* mParent; // last acknowledged parent of this time block
class BlockTimerStatHandle* mLastCaller; // used to bootstrap tree construction
U16 mActiveCount; // number of timers with this ID active on stack
bool mMoveUpTree; // needs to be moved up the tree of timers at the end of frame
......
......@@ -568,7 +568,7 @@ void LLCamera::calculateFrustumPlanes()
calculateFrustumPlanes(left, right, top, bottom);
}
LLPlane planeFromPoints(LLVector3 p1, LLVector3 p2, LLVector3 p3)
LLPlane planeFromPoints(const LLVector3& p1, const LLVector3& p2, const LLVector3& p3)
{
LLVector3 n = ((p2-p1)%(p3-p1));
n.normVec();
......
......@@ -164,23 +164,7 @@ inline F64 llabs(const F64 a)
inline S32 lltrunc( F32 f )
{
#if LL_WINDOWS && !defined( __INTEL_COMPILER ) && (ADDRESS_SIZE == 32)
// Avoids changing the floating point control word.
// Add or subtract 0.5 - epsilon and then round
const static U32 zpfp[] = { 0xBEFFFFFF, 0x3EFFFFFF };
S32 result;
__asm {
fld f
mov eax, f
shr eax, 29
and eax, 4
fadd dword ptr [zpfp + eax]
fistp result
}
return result;
#else
return (S32)f;
#endif
return (S32)f;
}
inline S32 lltrunc( F64 f )
......@@ -190,21 +174,7 @@ inline S32 lltrunc( F64 f )
inline S32 llfloor( F32 f )
{
#if LL_WINDOWS && !defined( __INTEL_COMPILER ) && (ADDRESS_SIZE == 32)
// Avoids changing the floating point control word.
// Accurate (unlike Stereopsis version) for all values between S32_MIN and S32_MAX and slightly faster than Stereopsis version.
// Add -(0.5 - epsilon) and then round
const U32 zpfp = 0xBEFFFFFF;
S32 result;
__asm {
fld f
fadd dword ptr [zpfp]
fistp result
}
return result;
#else
return (S32)floor(f);
#endif
return (S32)floor(f);
}
......
......@@ -107,7 +107,9 @@ class LLOctreeNode : public LLTreeNode<T>
const LLVector4a& size,
BaseType* parent,
U8 octant = 255)
: mParent((oct_node*)parent),
: mCenter(center),
mSize(size),
mParent((oct_node*)parent),
mOctant(octant)
{
llassert(size[0] >= gOctreeMinSize*0.5f);
......@@ -115,9 +117,6 @@ class LLOctreeNode : public LLTreeNode<T>
mData.push_back(NULL);
mDataEnd = &mData[0];
mCenter = center;
mSize = size;
updateMinMax();
if ((mOctant == 255) && mParent)
{
......
......@@ -61,7 +61,7 @@ LLQuaternion::LLQuaternion(F32 angle, const LLVector4 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -80,7 +80,7 @@ LLQuaternion::LLQuaternion(F32 angle, const LLVector3 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -150,7 +150,7 @@ const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, F32 x, F32 y, F32 z)
F32 mag = sqrtf(x * x + y * y + z * z);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = x * s;
......@@ -170,7 +170,7 @@ const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector3 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -190,7 +190,7 @@ const LLQuaternion& LLQuaternion::setAngleAxis(F32 angle, const LLVector4 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -237,7 +237,7 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, F32 x, F32 y, F32 z)
F32 mag = sqrtf(x * x + y * y + z * z);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = x * s;
......@@ -258,7 +258,7 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector3 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -278,7 +278,7 @@ const LLQuaternion& LLQuaternion::setQuat(F32 angle, const LLVector4 &vec)
F32 mag = sqrtf(vec.mV[VX] * vec.mV[VX] + vec.mV[VY] * vec.mV[VY] + vec.mV[VZ] * vec.mV[VZ]);
if (mag > FP_MAG_THRESHOLD)
{
angle *= 0.5;
angle *= 0.5f;
F32 c = cosf(angle);
F32 s = sinf(angle) / mag;
mQ[VX] = vec.mV[VX] * s;
......@@ -498,7 +498,7 @@ const LLQuaternion &LLQuaternion::constrain(F32 radians)
const F32 cos_angle_lim = cosf( radians/2 ); // mQ[VW] limit
const F32 sin_angle_lim = sinf( radians/2 ); // rotation axis length limit
if (mQ[VW] < 0.f)
if (mQ[VW] < 0.0f)
{
mQ[VX] *= -1.f;
mQ[VY] *= -1.f;
......@@ -888,8 +888,8 @@ void LLQuaternion::getAzimuthAndAltitude(F32 &azimuthRadians, F32 &altitudeRadia
// quaternion does not need to be normalized
void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const
{
F32 sx = 2 * (mQ[VX] * mQ[VW] - mQ[VY] * mQ[VZ]); // sine of the roll
F32 sy = 2 * (mQ[VY] * mQ[VW] + mQ[VX] * mQ[VZ]); // sine of the pitch
F32 sx = 2.f * (mQ[VX] * mQ[VW] - mQ[VY] * mQ[VZ]); // sine of the roll
F32 sy = 2.f * (mQ[VY] * mQ[VW] + mQ[VX] * mQ[VZ]); // sine of the pitch
F32 ys = mQ[VW] * mQ[VW] - mQ[VY] * mQ[VY]; // intermediate cosine 1
F32 xz = mQ[VX] * mQ[VX] - mQ[VZ] * mQ[VZ]; // intermediate cosine 2
F32 cx = ys - xz; // cosine of the roll
......@@ -902,17 +902,17 @@ void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const
}
else // gimbal lock
{
if (sy > 0)
if (sy > 0.0f)
{
*pitch = F_PI_BY_TWO;
*yaw = 2 * atan2f(mQ[VZ] + mQ[VX], mQ[VW] + mQ[VY]);
*yaw = 2.f * atan2f(mQ[VZ] + mQ[VX], mQ[VW] + mQ[VY]);
}
else
{
*pitch = -F_PI_BY_TWO;
*yaw = 2 * atan2f(mQ[VZ] - mQ[VX], mQ[VW] - mQ[VY]);
*yaw = 2.f * atan2f(mQ[VZ] - mQ[VX], mQ[VW] - mQ[VY]);
}
*roll = 0;
*roll = 0.0f;
}
}
......@@ -930,7 +930,7 @@ LLVector3 LLQuaternion::packToVector3() const
y /= mag;
z /= mag; // no need to normalize w, it's not used
}
if( mQ[VW] >= 0 )
if( mQ[VW] >= 0.0f)
{
return LLVector3( x, y , z );
}
......@@ -946,8 +946,8 @@ void LLQuaternion::unpackFromVector3( const LLVector3& vec )
mQ[VX] = vec.mV[VX];
mQ[VY] = vec.mV[VY];
mQ[VZ] = vec.mV[VZ];
F32 t = 1.f - vec.magVecSquared();
if( t > 0 )
F32 t = 1.0f - vec.magVecSquared();
if( t > 0.0f)
{
mQ[VW] = sqrt( t );
}
......@@ -955,7 +955,7 @@ void LLQuaternion::unpackFromVector3( const LLVector3& vec )
{
// Need this to avoid trying to find the square root of a negative number due
// to floating point error.
mQ[VW] = 0;
mQ[VW] = 0.0f;
}
}
......
......@@ -1373,9 +1373,10 @@ void LLPath::genNGon(const LLPathParams& params, S32 sides, F32 startOff, F32 en
c = cos(ang)*lerp(radius_start, radius_end, t);
pt->mPos.set(0 + lerp(0,params.getShear().mV[0],s)
const LLVector2& shearval = params.getShear();
pt->mPos.set(0 + lerp(0,shearval.mV[0],s)
+ lerp(-skew ,skew, t) * 0.5f,
c + lerp(0,params.getShear().mV[1],s),
c + lerp(0,shearval.mV[1],s),
s);
pt->mScale.set(hole_x * lerp(taper_x_begin, taper_x_end, t),
hole_y * lerp(taper_y_begin, taper_y_end, t),
......@@ -3556,7 +3557,7 @@ bool LLVolumeParams::setSkew(const F32 skew_value)
return valid;
}
bool LLVolumeParams::setSculptID(const LLUUID sculpt_id, U8 sculpt_type)
bool LLVolumeParams::setSculptID(LLUUID sculpt_id, U8 sculpt_type)
{
mSculptID = std::move(sculpt_id);
mSculptType = sculpt_type;
......@@ -3763,19 +3764,19 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
LLVector4a t;
mat.affineTransform(v[v1], t);
vertices.push_back(LLVector3(t[0], t[1], t[2]));
vertices.emplace_back(LLVector3(t[0], t[1], t[2]));
norm_mat.rotate(n[v1], t);
t.normalize3fast();
normals.push_back(LLVector3(t[0], t[1], t[2]));
normals.emplace_back(LLVector3(t[0], t[1], t[2]));
mat.affineTransform(v[v2], t);
vertices.push_back(LLVector3(t[0], t[1], t[2]));
vertices.emplace_back(LLVector3(t[0], t[1], t[2]));
norm_mat.rotate(n[v2], t);
t.normalize3fast();
normals.push_back(LLVector3(t[0], t[1], t[2]));
normals.emplace_back(LLVector3(t[0], t[1], t[2]));
}
}
}
......@@ -3947,19 +3948,19 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
LLVector4a t;
mat.affineTransform(v[v1], t);
vertices.push_back(LLVector3(t[0], t[1], t[2]));
vertices.emplace_back(LLVector3(t[0], t[1], t[2]));
norm_mat.rotate(n[v1], t);
t.normalize3fast();
normals.push_back(LLVector3(t[0], t[1], t[2]));
normals.emplace_back(LLVector3(t[0], t[1], t[2]));
mat.affineTransform(v[v2], t);
vertices.push_back(LLVector3(t[0], t[1], t[2]));
vertices.emplace_back(LLVector3(t[0], t[1], t[2]));
norm_mat.rotate(n[v2], t);
t.normalize3fast();
normals.push_back(LLVector3(t[0], t[1], t[2]));
normals.emplace_back(LLVector3(t[0], t[1], t[2]));
}
}
}
......@@ -4131,10 +4132,8 @@ class LLVertexIndexPair
};
LLVertexIndexPair::LLVertexIndexPair(const LLVector3 &vertex, const S32 index)
{
mVertex = vertex;
mIndex = index;
}
: mVertex(vertex), mIndex(index)
{ }
const F32 VERTEX_SLOP = 0.00001f;
......@@ -5692,12 +5691,13 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
{
const LLPathParams& path_params = volume->getParams().getPathParams();
if (!(mTypeMask & HOLLOW_MASK) &&
!(mTypeMask & OPEN_MASK) &&
((volume->getParams().getPathParams().getBegin()==0.0f)&&
(volume->getParams().getPathParams().getEnd()==1.0f))&&
((path_params.getBegin()==0.0f)&&
(path_params.getEnd()==1.0f))&&
(volume->getParams().getProfileParams().getCurveType()==LL_PCODE_PROFILE_SQUARE &&
volume->getParams().getPathParams().getCurveType()==LL_PCODE_PATH_LINE)
path_params.getCurveType()==LL_PCODE_PATH_LINE)
){
return createUnCutCubeCap(volume, partial_build);
}
......
......@@ -619,7 +619,7 @@ class LLVolumeParams
bool setRevolutions(const F32 revolutions); // 1 to 4
bool setRadiusOffset(const F32 radius_offset);
bool setSkew(const F32 skew);
bool setSculptID(const LLUUID sculpt_id, U8 sculpt_type);
bool setSculptID(LLUUID sculpt_id, U8 sculpt_type);
static bool validate(U8 prof_curve, F32 prof_begin, F32 prof_end, F32 hollow,
U8 path_curve, F32 path_begin, F32 path_end,
......
......@@ -68,7 +68,7 @@ BOOL LLVolumeMgr::cleanup()
}
for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
end = mVolumeLODGroups.end();
iter != end; iter++)
iter != end; ++iter)
{
LLVolumeLODGroup *volgroupp = iter->second;
if (volgroupp->cleanupRefs() == false)
......@@ -196,7 +196,7 @@ void LLVolumeMgr::dump()
}
for (volume_lod_group_map_t::iterator iter = mVolumeLODGroups.begin(),
end = mVolumeLODGroups.end();
iter != end; iter++)
iter != end; ++iter)
{
LLVolumeLODGroup *volgroupp = iter->second;
avg += volgroupp->dump();
......
......@@ -244,7 +244,6 @@ LLQuaternion LLMatrix3::quaternion() const
LLQuaternion quat;
F32 tr, s, q[4];
U32 i, j, k;
U32 nxt[3] = {1, 2, 0};
tr = mMatrix[0][0] + mMatrix[1][1] + mMatrix[2][2];
......@@ -260,6 +259,8 @@ LLQuaternion LLMatrix3::quaternion() const
}
else
{
const U32 nxt[3] = { 1, 2, 0 };
// diagonal is negative
i = 0;
if (mMatrix[1][1] > mMatrix[0][0])
......
......@@ -308,7 +308,6 @@ LLQuaternion LLMatrix4::quaternion() const
LLQuaternion quat;
F32 tr, s, q[4];
U32 i, j, k;
U32 nxt[3] = {1, 2, 0};
tr = mMatrix[0][0] + mMatrix[1][1] + mMatrix[2][2];
......@@ -324,6 +323,8 @@ LLQuaternion LLMatrix4::quaternion() const
}
else
{
const U32 nxt[3] = { 1, 2, 0 };
// diagonal is negative
i = 0;
if (mMatrix[1][1] > mMatrix[0][0])
......
......@@ -35,7 +35,7 @@
BOOL line_plane(const LLVector3 &line_point, const LLVector3 &line_direction,
const LLVector3 &plane_point, const LLVector3 plane_normal,
const LLVector3 &plane_point, const LLVector3 &plane_normal,
LLVector3 &intersection)
{
F32 N = line_direction * plane_normal;
......@@ -55,7 +55,7 @@ BOOL line_plane(const LLVector3 &line_point, const LLVector3 &line_direction,
BOOL ray_plane(const LLVector3 &ray_point, const LLVector3 &ray_direction,
const LLVector3 &plane_point, const LLVector3 plane_normal,
const LLVector3 &plane_point, const LLVector3 &plane_normal,
LLVector3 &intersection)
{
F32 N = ray_direction * plane_normal;
......@@ -81,7 +81,7 @@ BOOL ray_plane(const LLVector3 &ray_point, const LLVector3 &ray_direction,
BOOL ray_circle(const LLVector3 &ray_point, const LLVector3 &ray_direction,
const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
const LLVector3 &circle_center, const LLVector3 &plane_normal, F32 circle_radius,
LLVector3 &intersection)
{
if (ray_plane(ray_point, ray_direction, circle_center, plane_normal, intersection))
......@@ -1105,7 +1105,7 @@ BOOL ray_pyramid(const LLVector3 &ray_point, const LLVector3 &ray_direction,
BOOL linesegment_circle(const LLVector3 &point_a, const LLVector3 &point_b,
const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
const LLVector3 &circle_center, const LLVector3 &plane_normal, F32 circle_radius,
LLVector3 &intersection)
{
LLVector3 ray_direction = point_b - point_a;
......
......@@ -63,18 +63,18 @@ class LLQuaternion;
// returns TRUE iff line is not parallel to plane.
BOOL line_plane(const LLVector3 &line_point, const LLVector3 &line_direction,
const LLVector3 &plane_point, const LLVector3 plane_normal,
const LLVector3 &plane_point, const LLVector3 &plane_normal,
LLVector3 &intersection);
// returns TRUE iff line is not parallel to plane.
BOOL ray_plane(const LLVector3 &ray_point, const LLVector3 &ray_direction,
const LLVector3 &plane_point, const LLVector3 plane_normal,
const LLVector3 &plane_point, const LLVector3 &plane_normal,
LLVector3 &intersection);
BOOL ray_circle(const LLVector3 &ray_point, const LLVector3 &ray_direction,
const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
const LLVector3 &circle_center, const LLVector3 &plane_normal, F32 circle_radius,
LLVector3 &intersection);
// point_0 through point_2 define the plane_normal via the right-hand rule:
......@@ -171,7 +171,7 @@ BOOL ray_hemicone(const LLVector3 &ray_point, const LLVector3 &ray_direction,
BOOL linesegment_circle(const LLVector3 &point_a, const LLVector3 &point_b,
const LLVector3 &circle_center, const LLVector3 plane_normal, F32 circle_radius,
const LLVector3 &circle_center, const LLVector3 &plane_normal, F32 circle_radius,
LLVector3 &intersection);
// point_0 through point_2 define the plane_normal via the right-hand rule:
......