Merge branch 'DRTVWR-600-maint-A' into signal/trim-trailing
commit
f74c10c4ec
|
|
@ -0,0 +1,38 @@
|
|||
* text eol=lf
|
||||
|
||||
# VSTool (normalization disabled)
|
||||
indra/tools/vstool/* -text
|
||||
|
||||
# Images
|
||||
*.bmp binary
|
||||
*.BMP binary
|
||||
*.gif binary
|
||||
*.icns binary
|
||||
*.ico binary
|
||||
*.j2c binary
|
||||
*.j2k binary
|
||||
*.jpg binary
|
||||
*.png binary
|
||||
*.tga binary
|
||||
*.tif binary
|
||||
|
||||
# Viewer resources
|
||||
*.db2 binary
|
||||
*.llm binary
|
||||
*.nib binary
|
||||
*.rtf binary
|
||||
*.ttf binary
|
||||
|
||||
# Executables
|
||||
*.dll binary
|
||||
*.exe binary
|
||||
|
||||
# Files with Windows line endings
|
||||
VivoxAUP.txt text eol=crlf
|
||||
FILES_ARE_UNICODE_UTF-16LE.txt text eol=crlf
|
||||
|
||||
# Windows Manifest files
|
||||
*.manifest text eol=crlf
|
||||
|
||||
# Windows Installer Script files (normalization disabled)
|
||||
*.nsi -text
|
||||
318
autobuild.xml
318
autobuild.xml
|
|
@ -104,25 +104,39 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8539775e0a0783bd252bc548b20b3472a8254c31</string>
|
||||
<string>d8d9e1e15ec09c81acfa9ffb80c3f20435373543</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-boost/releases/download/v1.81-09d25a7/boost-1.81-darwin64-09d25a7.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-boost/releases/download/v1.84.0-r1/boost-1.84-darwin64-8499892512.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>a5552fcd343179c4c7d6dd6289675431a8c0fe8d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-boost/releases/download/v1.84.0-r1/boost-1.84-linux64-8499892512.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>d40c86fbcb6ce064d546165cbabbf035ea80e07b</string>
|
||||
<string>5af9c69093e171eda552720a7acd570496db17db</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-boost/releases/download/v1.81-09d25a7/boost-1.81-windows64-09d25a7.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-boost/releases/download/v1.84.0-r1/boost-1.84-windows64-8499892512.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -196,25 +210,39 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b1bb8a9c8d458d8842d79f9633fb61df12f1b0ad</string>
|
||||
<string>fd656d2478728c4fc268478ec40d33b0ed1b7d83</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-colladadom/releases/download/v2.3.ab0c124/colladadom-2.3.ab0c124-darwin64-ab0c124.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-colladadom/releases/download/v2.3-r4/colladadom-2.3.8500178177-darwin64-8500178177.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>aebc0ddcae18852e78143fbac793cd4a32f0f251</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-colladadom/releases/download/v2.3-r4/colladadom-2.3.8500178177-linux64-8500178177.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0df4c05d4efa3019afa4cbf09599df60b586fc5c</string>
|
||||
<string>3b25739b1a923c2edcf19864a1c82aeb5042567b</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-colladadom/releases/download/v2.3.ab0c124/colladadom-2.3.ab0c124-windows64-ab0c124.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-colladadom/releases/download/v2.3-r4/colladadom-2.3.8500178177-windows64-8500178177.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -561,72 +589,6 @@
|
|||
<key>description</key>
|
||||
<string>Expat is an XML parser library written in C</string>
|
||||
</map>
|
||||
<key>fmodstudio</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>a2074b67de7ad4c04b5ca8f8f161506add9697b2</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207589</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>8c1b701648c077220dbc576c3d9aefbef47f8324</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207592</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>7e0c3d50e8b99d8735c6c9596a72ded9ee2bc1c8</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-fmodstudio/releases/assets/149207594</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>fmod</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/fmodstudio.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>FMOD Studio by Firelight Technologies Pty Ltd.</string>
|
||||
<key>version</key>
|
||||
<string>2.02.20.c78ef55</string>
|
||||
<key>name</key>
|
||||
<string>fmodstudio</string>
|
||||
<key>description</key>
|
||||
<string>FMOD Studio API</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
|
|
@ -689,20 +651,6 @@
|
|||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4fecff41a38d67d6b1c97c7c73980667b6a8a1bd</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-freetype/releases/download/v.2.12.1.557becd/freetype-2.12.1.557becd-windows-557becd.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -795,52 +743,6 @@
|
|||
<key>description</key>
|
||||
<string>glh - is a platform-indepenedent C++ OpenGL helper library</string>
|
||||
</map>
|
||||
<key>googlemock</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>dce3174b12136746f5f910e311e895c1b47bf8fb</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-googlemock/releases/download/v1.7.0.2b109d4/googlemock-1.7.0.2b109d4-darwin64-2b109d4.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>265813f84b04c3b03f3d7d33e149b3d5e3cf31db</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-googlemock/releases/download/v1.7.0.2b109d4/googlemock-1.7.0.2b109d4-windows64-2b109d4.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>BSD</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/gmock.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2008, Google Inc.</string>
|
||||
<key>version</key>
|
||||
<string>1.7.0.2b109d4</string>
|
||||
<key>name</key>
|
||||
<string>googlemock</string>
|
||||
<key>description</key>
|
||||
<string>a library for writing and using C++ mock classes</string>
|
||||
</map>
|
||||
<key>gstreamer</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
|
|
@ -1075,66 +977,6 @@
|
|||
<key>description</key>
|
||||
<string>JPEG encoding, decoding library</string>
|
||||
</map>
|
||||
<key>jsoncpp</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>07761ab01e61d5d6b40d303ffafd85ec055ec9f7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-jsoncpp/releases/download/v0.5.0.bc46e62/jsoncpp-0.5.0.bc46e62-darwin64-bc46e62.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>97e268754808cb2fbd682c4d3beafd2c598e1ba7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-jsoncpp/releases/download/v0.5.0.bc46e62/jsoncpp-0.5.0.bc46e62-linux64-bc46e62.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>500e455b210d6bc4985185cef2472987ed3034bf</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-jsoncpp/releases/download/v0.5.0.bc46e62/jsoncpp-0.5.0.bc46e62-windows64-bc46e62.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>public domain</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/jsoncpp.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2007-2010 Baptiste Lepilleur</string>
|
||||
<key>version</key>
|
||||
<string>0.5.0.bc46e62</string>
|
||||
<key>name</key>
|
||||
<string>jsoncpp</string>
|
||||
<key>description</key>
|
||||
<string>jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++.</string>
|
||||
</map>
|
||||
<key>kdu</key>
|
||||
<map>
|
||||
<key>platforms</key>
|
||||
|
|
@ -1534,6 +1376,14 @@
|
|||
</map>
|
||||
<key>llphysicsextensions_source</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2010, Linden Research, Inc.</string>
|
||||
<key>license</key>
|
||||
<string>internal</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/llphysicsextensions.txt</string>
|
||||
<key>name</key>
|
||||
<string>llphysicsextensions_source</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
|
|
@ -1543,11 +1393,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>b037cc0b29ea70ee834cfae6dda5b7a25cd57174</string>
|
||||
<string>755a3de464149ae88b048f976828a8c0c46e3bdb</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851460</string>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966323</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1559,11 +1409,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>bdea1fd5c4da9da5afde088d16188b45d0853e04</string>
|
||||
<string>813e7b5e294d7958e3d69e2252752ff346953b0c</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851461</string>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966322</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -1575,26 +1425,18 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>f652ce0d6aef864689f0ed44255da4d9cd65a43f</string>
|
||||
<string>67f647538b1b49d0152fd9d03cfb9bdf978e33d1</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/144851463</string>
|
||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966328</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>internal</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/llphysicsextensions.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2010, Linden Research, Inc.</string>
|
||||
<key>version</key>
|
||||
<string>1.0.479d20a</string>
|
||||
<key>name</key>
|
||||
<string>llphysicsextensions_source</string>
|
||||
<string>1.0.b8b1f73</string>
|
||||
</map>
|
||||
<key>llphysicsextensions_stub</key>
|
||||
<map>
|
||||
|
|
@ -2124,18 +1966,42 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
</map>
|
||||
<key>openal</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 1999-2007 by authors.</string>
|
||||
<key>description</key>
|
||||
<string>OpenAL Soft is a software implementation of the OpenAL 3D audio API.</string>
|
||||
<key>license</key>
|
||||
<string>LGPL2</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/openal-soft.txt</string>
|
||||
<key>name</key>
|
||||
<string>openal</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>191e4ef07a35f7147708415465191ce7622e3012</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-darwin64-8979520327.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e0fbc4874acc4167a6e2b6489fbb8258d98fd665</string>
|
||||
<string>3bd8c9028ef42bdb43c7422e7d324e213fdb081e</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-18e315c/openal-1.23.1-linux64-18e315c.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-linux64-8979520327.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -2145,42 +2011,18 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6ae3b5310eb1988741bc55416681ca9d64f76f85</string>
|
||||
<string>4b849609abec790e89be5fad8ddee3717ee301c4</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-18e315c/openal-1.23.1-windows64-18e315c.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-windows64-8979520327.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4edaef5f03a1122eae8467c4a04d9caccaaaf847</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-18e315c/openal-1.23.1-darwin64-18e315c.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>LGPL2</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/openal-soft.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 1999-2007 by authors.</string>
|
||||
<key>version</key>
|
||||
<string>1.23.1</string>
|
||||
<key>name</key>
|
||||
<string>openal</string>
|
||||
<key>description</key>
|
||||
<string>OpenAL Soft is a software implementation of the OpenAL 3D audio API.</string>
|
||||
</map>
|
||||
<key>openjpeg</key>
|
||||
<map>
|
||||
|
|
@ -3015,6 +2857,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<string>-DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
|
||||
<string>-DINSTALL_PROPRIETARY=TRUE</string>
|
||||
<string>-DUSE_OPENAL:BOOL=ON</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>build</key>
|
||||
|
|
@ -3056,6 +2899,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<string>-DADDRESS_SIZE:STRING=$AUTOBUILD_ADDRSIZE</string>
|
||||
<string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
|
||||
<string>-DINSTALL_PROPRIETARY=TRUE</string>
|
||||
<string>-DUSE_OPENAL:BOOL=ON</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>build</key>
|
||||
|
|
|
|||
|
|
@ -23,14 +23,11 @@ set(cmake_SOURCE_FILES
|
|||
DragDrop.cmake
|
||||
EXPAT.cmake
|
||||
FindAutobuild.cmake
|
||||
FMODSTUDIO.cmake
|
||||
FreeType.cmake
|
||||
GLEXT.cmake
|
||||
GLH.cmake
|
||||
GoogleMock.cmake
|
||||
Havok.cmake
|
||||
Hunspell.cmake
|
||||
JsonCpp.cmake
|
||||
LLAddBuildTest.cmake
|
||||
LLAppearance.cmake
|
||||
LLAudio.cmake
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
include(CMakeCopyIfDifferent)
|
||||
include(Linking)
|
||||
include(OPENAL)
|
||||
include(FMODSTUDIO)
|
||||
|
||||
# When we copy our dependent libraries, we almost always want to copy them to
|
||||
# both the Release and the RelWithDebInfo staging directories. This has
|
||||
|
|
@ -85,12 +84,6 @@ if(WINDOWS)
|
|||
endif(ADDRESS_SIZE EQUAL 32)
|
||||
endif (USE_BUGSPLAT)
|
||||
|
||||
if (TARGET ll::fmodstudio)
|
||||
# fmodL is included for logging, only one should be picked by manifest
|
||||
set(release_files ${release_files} fmodL.dll)
|
||||
set(release_files ${release_files} fmod.dll)
|
||||
endif ()
|
||||
|
||||
if (TARGET ll::openal)
|
||||
list(APPEND release_files openal32.dll alut.dll)
|
||||
endif ()
|
||||
|
|
@ -105,14 +98,27 @@ if(WINDOWS)
|
|||
set(MSVC_VER 120)
|
||||
elseif (MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) # Visual Studio 2017
|
||||
set(MSVC_VER 140)
|
||||
set(MSVC_TOOLSET_VER 141)
|
||||
elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019
|
||||
set(MSVC_VER 140)
|
||||
set(MSVC_TOOLSET_VER 142)
|
||||
elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022
|
||||
set(MSVC_VER 140)
|
||||
set(MSVC_TOOLSET_VER 143)
|
||||
else (MSVC80)
|
||||
MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")
|
||||
endif (MSVC80)
|
||||
|
||||
if (MSVC_TOOLSET_VER AND DEFINED ENV{VCTOOLSREDISTDIR})
|
||||
if(ADDRESS_SIZE EQUAL 32)
|
||||
set(redist_find_path "$ENV{VCTOOLSREDISTDIR}x86\\Microsoft.VC${MSVC_TOOLSET_VER}.CRT")
|
||||
else(ADDRESS_SIZE EQUAL 32)
|
||||
set(redist_find_path "$ENV{VCTOOLSREDISTDIR}x64\\Microsoft.VC${MSVC_TOOLSET_VER}.CRT")
|
||||
endif(ADDRESS_SIZE EQUAL 32)
|
||||
get_filename_component(redist_path "${redist_find_path}" ABSOLUTE)
|
||||
MESSAGE(STATUS "VC Runtime redist path: ${redist_path}")
|
||||
endif (MSVC_TOOLSET_VER AND DEFINED ENV{VCTOOLSREDISTDIR})
|
||||
|
||||
if(ADDRESS_SIZE EQUAL 32)
|
||||
# this folder contains the 32bit DLLs.. (yes really!)
|
||||
set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64")
|
||||
|
|
@ -135,7 +141,14 @@ if(WINDOWS)
|
|||
vcruntime${MSVC_VER}.dll
|
||||
vcruntime${MSVC_VER}_1.dll
|
||||
)
|
||||
if(EXISTS "${registry_path}/${release_msvc_file}")
|
||||
if(redist_path AND EXISTS "${redist_path}/${release_msvc_file}")
|
||||
MESSAGE(STATUS "Copying redist file from ${redist_path}/${release_msvc_file}")
|
||||
to_staging_dirs(
|
||||
${redist_path}
|
||||
third_party_targets
|
||||
${release_msvc_file})
|
||||
elseif(EXISTS "${registry_path}/${release_msvc_file}")
|
||||
MESSAGE(STATUS "Copying redist file from ${registry_path}/${release_msvc_file}")
|
||||
to_staging_dirs(
|
||||
${registry_path}
|
||||
third_party_targets
|
||||
|
|
@ -177,9 +190,8 @@ elseif(DARWIN)
|
|||
liburiparser.1.0.27.dylib
|
||||
)
|
||||
|
||||
if (TARGET ll::fmodstudio)
|
||||
set(debug_files ${debug_files} libfmodL.dylib)
|
||||
set(release_files ${release_files} libfmod.dylib)
|
||||
if (TARGET ll::openal)
|
||||
list(APPEND release_files libalut.dylib libopenal.dylib)
|
||||
endif ()
|
||||
|
||||
elseif(LINUX)
|
||||
|
|
@ -229,11 +241,6 @@ elseif(LINUX)
|
|||
)
|
||||
endif()
|
||||
|
||||
if (TARGET ll::fmodstudio)
|
||||
set(debug_files ${debug_files} "libfmodL.so")
|
||||
set(release_files ${release_files} "libfmod.so")
|
||||
endif ()
|
||||
|
||||
else(WINDOWS)
|
||||
message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
|
||||
set(vivox_lib_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
include_guard()
|
||||
|
||||
# FMODSTUDIO can be set when launching the make using the argument -DUSE_FMODSTUDIO:BOOL=ON
|
||||
# When building using proprietary binaries though (i.e. having access to LL private servers),
|
||||
# we always build with FMODSTUDIO.
|
||||
if (INSTALL_PROPRIETARY)
|
||||
set(USE_FMODSTUDIO ON CACHE BOOL "Using FMODSTUDIO sound library.")
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
|
||||
# ND: To streamline arguments passed, switch from FMODSTUDIO to USE_FMODSTUDIO
|
||||
# To not break all old build scripts convert old arguments but warn about it
|
||||
if(FMODSTUDIO)
|
||||
message( WARNING "Use of the FMODSTUDIO argument is deprecated, please switch to USE_FMODSTUDIO")
|
||||
set(USE_FMODSTUDIO ${FMODSTUDIO})
|
||||
endif()
|
||||
|
||||
if (USE_FMODSTUDIO)
|
||||
add_library( ll::fmodstudio INTERFACE IMPORTED )
|
||||
target_compile_definitions( ll::fmodstudio INTERFACE LL_FMODSTUDIO=1)
|
||||
|
||||
if (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
# If the path have been specified in the arguments, use that
|
||||
|
||||
target_link_libraries(ll::fmodstudio INTERFACE ${FMODSTUDIO_LIBRARY})
|
||||
target_include_directories( ll::fmodstudio SYSTEM INTERFACE ${FMODSTUDIO_INCLUDE_DIR})
|
||||
else (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
# If not, we're going to try to get the package listed in autobuild.xml
|
||||
# Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
|
||||
# as accessing the private LL location will fail if you don't have the credential
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(fmodstudio)
|
||||
if (WINDOWS)
|
||||
target_link_libraries( ll::fmodstudio INTERFACE fmod_vc)
|
||||
elseif (DARWIN)
|
||||
#despite files being called libfmod.dylib, we are searching for fmod
|
||||
target_link_libraries( ll::fmodstudio INTERFACE fmod)
|
||||
elseif (LINUX)
|
||||
target_link_libraries( ll::fmodstudio INTERFACE fmod)
|
||||
endif (WINDOWS)
|
||||
|
||||
target_include_directories( ll::fmodstudio SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/fmodstudio)
|
||||
endif (FMODSTUDIO_LIBRARY AND FMODSTUDIO_INCLUDE_DIR)
|
||||
else()
|
||||
set( USE_FMODSTUDIO "OFF")
|
||||
endif ()
|
||||
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
include(Prebuilt)
|
||||
include(Linking)
|
||||
|
||||
include_guard()
|
||||
|
||||
add_library( ll::googlemock INTERFACE IMPORTED )
|
||||
if(USE_CONAN)
|
||||
target_link_libraries( ll::googlemock INTERFACE CONAN_PKG::gtest )
|
||||
|
||||
#Not very nice, but for the moment we need this for tut.hpp
|
||||
target_include_directories( ll::googlemock SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include )
|
||||
return()
|
||||
endif()
|
||||
|
||||
use_prebuilt_binary(googlemock)
|
||||
|
||||
target_include_directories( ll::googlemock SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include )
|
||||
|
||||
if (LINUX)
|
||||
# VWR-24366: gmock is underlinked, it needs gtest.
|
||||
target_link_libraries( ll::googlemock INTERFACE gmock gtest)
|
||||
elseif(WINDOWS)
|
||||
target_link_libraries( ll::googlemock INTERFACE gmock)
|
||||
target_include_directories( ll::googlemock SYSTEM INTERFACE
|
||||
${LIBS_PREBUILT_DIR}/include
|
||||
${LIBS_PREBUILT_DIR}/include/gmock)
|
||||
elseif(DARWIN)
|
||||
target_link_libraries( ll::googlemock INTERFACE gmock gtest)
|
||||
endif(LINUX)
|
||||
|
||||
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
include(Prebuilt)
|
||||
include_guard()
|
||||
add_library( ll::jsoncpp INTERFACE IMPORTED )
|
||||
|
||||
use_system_binary(jsoncpp)
|
||||
|
||||
use_prebuilt_binary(jsoncpp)
|
||||
if (WINDOWS)
|
||||
target_link_libraries( ll::jsoncpp INTERFACE json_libmd.lib )
|
||||
elseif (DARWIN)
|
||||
target_link_libraries( ll::jsoncpp INTERFACE libjson_darwin_libmt.a )
|
||||
elseif (LINUX)
|
||||
target_link_libraries( ll::jsoncpp INTERFACE libjson_linux-gcc-4.1.3_libmt.a )
|
||||
endif (WINDOWS)
|
||||
target_include_directories( ll::jsoncpp SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
# -*- cmake -*-
|
||||
include(00-Common)
|
||||
include(LLTestCommand)
|
||||
include(GoogleMock)
|
||||
include(bugsplat)
|
||||
include(Tut)
|
||||
|
||||
|
|
@ -19,10 +18,6 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
|||
#
|
||||
# More info and examples at: https://wiki.secondlife.com/wiki/How_to_add_unit_tests_to_indra_code
|
||||
|
||||
# This here looks weird, but is needed. It will inject GoogleMock into projects that forgot to include `this` (LLAddBuildTest.cmake)
|
||||
# But through some other means have access to this macro
|
||||
include(GoogleMock)
|
||||
|
||||
if(LL_TEST_VERBOSE)
|
||||
message("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} sources: ${sources}")
|
||||
endif()
|
||||
|
|
@ -41,7 +36,6 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
|||
|
||||
set(alltest_LIBRARIES
|
||||
llcommon
|
||||
ll::googlemock
|
||||
)
|
||||
if(NOT "${project}" STREQUAL "llmath")
|
||||
# add llmath as a dep unless the tested module *is* llmath!
|
||||
|
|
@ -204,7 +198,6 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
|
|||
|
||||
set(libraries
|
||||
${library_dependencies}
|
||||
ll::googlemock
|
||||
)
|
||||
|
||||
# Add test executable build target
|
||||
|
|
|
|||
|
|
@ -6,6 +6,5 @@ include(EXPAT)
|
|||
include(Tracy)
|
||||
include(xxHash)
|
||||
include(ZLIBNG)
|
||||
include(JsonCpp)
|
||||
|
||||
include(XmlRpcEpi)
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ if (USE_OPENAL)
|
|||
alut
|
||||
)
|
||||
else()
|
||||
message(FATAL_ERROR "OpenAL is not available for this platform")
|
||||
target_link_libraries( ll::openal INTERFACE
|
||||
openal
|
||||
alut
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# Platform variables:
|
||||
#
|
||||
# DARWIN - Mac OS X
|
||||
# DARWIN - macOS
|
||||
# LINUX - Linux
|
||||
# WINDOWS - Windows
|
||||
|
||||
|
|
@ -117,7 +117,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|||
set(FIND_LIBRARY_USE_LIB64_PATHS ON)
|
||||
endif (ADDRESS_SIZE EQUAL 32)
|
||||
|
||||
execute_process(COMMAND dpkg-architecture -a${DEB_ARCHITECTURE} -qDEB_HOST_MULTIARCH
|
||||
execute_process(COMMAND dpkg-architecture -a${DEB_ARCHITECTURE} -qDEB_HOST_MULTIARCH
|
||||
RESULT_VARIABLE DPKG_RESULT
|
||||
OUTPUT_VARIABLE DPKG_ARCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ BASE_ARGUMENTS=[
|
|||
dict(name='build', description='Build directory.', default=DEFAULT_SRCTREE),
|
||||
dict(name='buildtype', description='Build type (i.e. Debug, Release, RelWithDebInfo).', default=None),
|
||||
dict(name='bundleid',
|
||||
description="""The Mac OS X Bundle identifier.""",
|
||||
description="""The macOS Bundle identifier.""",
|
||||
default="com.secondlife.indra.viewer"),
|
||||
dict(name='channel',
|
||||
description="""The channel to use for updates, packaging, settings name, etc.""",
|
||||
|
|
@ -146,7 +146,7 @@ BASE_ARGUMENTS=[
|
|||
dict(name='signature',
|
||||
description="""This specifies an identity to sign the viewer with, if any.
|
||||
If no value is supplied, the default signature will be used, if any. Currently
|
||||
only used on Mac OS X.""",
|
||||
only used on macOS.""",
|
||||
default=None),
|
||||
dict(name='source',
|
||||
description='Source directory.',
|
||||
|
|
@ -533,8 +533,8 @@ class LLManifest(object, metaclass=LLManifestRegistry):
|
|||
return path
|
||||
|
||||
def run_command(self, command, **kwds):
|
||||
"""
|
||||
Runs an external command.
|
||||
"""
|
||||
Runs an external command.
|
||||
Raises ManifestError exception if the command returns a nonzero status.
|
||||
"""
|
||||
print("Running command:", shlex.join(command))
|
||||
|
|
|
|||
|
|
@ -64,19 +64,19 @@ class LLAvatarBoneInfo
|
|||
friend class LLAvatarAppearance;
|
||||
friend class LLAvatarSkeletonInfo;
|
||||
public:
|
||||
LLAvatarBoneInfo() : mIsJoint(FALSE) {}
|
||||
LLAvatarBoneInfo() : mIsJoint(false) {}
|
||||
~LLAvatarBoneInfo()
|
||||
{
|
||||
std::for_each(mChildren.begin(), mChildren.end(), DeletePointer());
|
||||
mChildren.clear();
|
||||
}
|
||||
BOOL parseXml(LLXmlTreeNode* node);
|
||||
bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
private:
|
||||
std::string mName;
|
||||
std::string mSupport;
|
||||
std::string mAliases;
|
||||
BOOL mIsJoint;
|
||||
bool mIsJoint;
|
||||
LLVector3 mPos;
|
||||
LLVector3 mEnd;
|
||||
LLVector3 mRot;
|
||||
|
|
@ -101,7 +101,7 @@ public:
|
|||
std::for_each(mBoneInfoList.begin(), mBoneInfoList.end(), DeletePointer());
|
||||
mBoneInfoList.clear();
|
||||
}
|
||||
BOOL parseXml(LLXmlTreeNode* node);
|
||||
bool parseXml(LLXmlTreeNode* node);
|
||||
S32 getNumBones() const { return mNumBones; }
|
||||
S32 getNumCollisionVolumes() const { return mNumCollisionVolumes; }
|
||||
|
||||
|
|
@ -164,19 +164,7 @@ LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary* LLAvatarAppearance::sAv
|
|||
|
||||
LLAvatarAppearance::LLAvatarAppearance(LLWearableData* wearable_data) :
|
||||
LLCharacter(),
|
||||
mIsDummy(FALSE),
|
||||
mTexSkinColor( NULL ),
|
||||
mTexHairColor( NULL ),
|
||||
mTexEyeColor( NULL ),
|
||||
mPelvisToFoot(0.f),
|
||||
mHeadOffset(),
|
||||
mRoot(NULL),
|
||||
mWearableData(wearable_data),
|
||||
mNumBones(0),
|
||||
mNumCollisionVolumes(0),
|
||||
mCollisionVolumes(NULL),
|
||||
mIsBuilt(FALSE),
|
||||
mInitFlags(0)
|
||||
mWearableData(wearable_data)
|
||||
{
|
||||
llassert_always(mWearableData);
|
||||
mBakedTextureDatas.resize(LLAvatarAppearanceDefines::BAKED_NUM_INDICES);
|
||||
|
|
@ -222,14 +210,14 @@ void LLAvatarAppearance::initInstance()
|
|||
mesh->setName(mesh_name);
|
||||
mesh->setMeshID(mesh_index);
|
||||
mesh->setPickName(mesh_dict->mPickName);
|
||||
mesh->setIsTransparent(FALSE);
|
||||
mesh->setIsTransparent(false);
|
||||
switch((S32)mesh_index)
|
||||
{
|
||||
case MESH_ID_HAIR:
|
||||
mesh->setIsTransparent(TRUE);
|
||||
mesh->setIsTransparent(true);
|
||||
break;
|
||||
case MESH_ID_SKIRT:
|
||||
mesh->setIsTransparent(TRUE);
|
||||
mesh->setIsTransparent(true);
|
||||
break;
|
||||
case MESH_ID_EYEBALL_LEFT:
|
||||
case MESH_ID_EYEBALL_RIGHT:
|
||||
|
|
@ -331,7 +319,7 @@ void LLAvatarAppearance::initClass(const std::string& avatar_file_name_arg, cons
|
|||
avatar_file_name = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,AVATAR_DEFAULT_CHAR + "_lad.xml");
|
||||
}
|
||||
LLXmlTree xml_tree;
|
||||
BOOL success = xml_tree.parseFile( avatar_file_name, FALSE );
|
||||
bool success = xml_tree.parseFile( avatar_file_name, false );
|
||||
if (!success)
|
||||
{
|
||||
LL_ERRS() << "Problem reading avatar configuration file:" << avatar_file_name << LL_ENDL;
|
||||
|
|
@ -536,17 +524,17 @@ F32 LLAvatarAppearance::computePelvisToFoot()
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseSkeletonFile()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree)
|
||||
bool LLAvatarAppearance::parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree)
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// parse the file
|
||||
//-------------------------------------------------------------------------
|
||||
BOOL parsesuccess = skeleton_xml_tree.parseFile( filename, FALSE );
|
||||
bool parsesuccess = skeleton_xml_tree.parseFile( filename, false );
|
||||
|
||||
if (!parsesuccess)
|
||||
{
|
||||
LL_ERRS() << "Can't parse skeleton file: " << filename << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// now sanity check xml file
|
||||
|
|
@ -554,13 +542,13 @@ BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename, LLXmlTre
|
|||
if (!root)
|
||||
{
|
||||
LL_ERRS() << "No root node found in avatar skeleton file: " << filename << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !root->hasName( "linden_skeleton" ) )
|
||||
{
|
||||
LL_ERRS() << "Invalid avatar skeleton file header: " << filename << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string version;
|
||||
|
|
@ -568,16 +556,16 @@ BOOL LLAvatarAppearance::parseSkeletonFile(const std::string& filename, LLXmlTre
|
|||
if( !root->getFastAttributeString( version_string, version ) || ((version != "1.0") && (version != "2.0")))
|
||||
{
|
||||
LL_ERRS() << "Invalid avatar skeleton file version: " << version << " in file: " << filename << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// setupBone()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent, S32 &volume_num, S32 &joint_num)
|
||||
bool LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent, S32 &volume_num, S32 &joint_num)
|
||||
{
|
||||
LLJoint* joint = NULL;
|
||||
|
||||
|
|
@ -593,7 +581,7 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent
|
|||
if (!joint)
|
||||
{
|
||||
LL_WARNS() << "Too many bones" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
joint->setName( info->mName );
|
||||
}
|
||||
|
|
@ -602,7 +590,7 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent
|
|||
if (volume_num >= (S32)mNumCollisionVolumes)
|
||||
{
|
||||
LL_WARNS() << "Too many collision volumes" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
joint = (&mCollisionVolumes[volume_num]);
|
||||
joint->setName( info->mName );
|
||||
|
|
@ -642,17 +630,17 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent
|
|||
{
|
||||
if (!setupBone(child_info, joint, volume_num, joint_num))
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// allocateCharacterJoints()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::allocateCharacterJoints( U32 num )
|
||||
bool LLAvatarAppearance::allocateCharacterJoints( U32 num )
|
||||
{
|
||||
if (mSkeleton.size() != num)
|
||||
{
|
||||
|
|
@ -661,14 +649,14 @@ BOOL LLAvatarAppearance::allocateCharacterJoints( U32 num )
|
|||
mNumBones = num;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// buildSkeleton()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::buildSkeleton(const LLAvatarSkeletonInfo *info)
|
||||
bool LLAvatarAppearance::buildSkeleton(const LLAvatarSkeletonInfo *info)
|
||||
{
|
||||
LL_DEBUGS("BVH") << "numBones " << info->mNumBones << " numCollisionVolumes " << info->mNumCollisionVolumes << LL_ENDL;
|
||||
|
||||
|
|
@ -676,7 +664,7 @@ BOOL LLAvatarAppearance::buildSkeleton(const LLAvatarSkeletonInfo *info)
|
|||
if (!allocateCharacterJoints(info->mNumBones))
|
||||
{
|
||||
LL_ERRS() << "Can't allocate " << info->mNumBones << " joints" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// allocate volumes
|
||||
|
|
@ -685,7 +673,7 @@ BOOL LLAvatarAppearance::buildSkeleton(const LLAvatarSkeletonInfo *info)
|
|||
if (!allocateCollisionVolumes(info->mNumCollisionVolumes))
|
||||
{
|
||||
LL_ERRS() << "Can't allocate " << info->mNumCollisionVolumes << " collision volumes" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -696,11 +684,11 @@ BOOL LLAvatarAppearance::buildSkeleton(const LLAvatarSkeletonInfo *info)
|
|||
if (!setupBone(bone_info, NULL, current_volume_num, current_joint_num))
|
||||
{
|
||||
LL_ERRS() << "Error parsing bone in skeleton file" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -765,7 +753,7 @@ void LLAvatarAppearance::buildCharacter()
|
|||
//-------------------------------------------------------------------------
|
||||
mRoot->removeAllChildren();
|
||||
mJointMap.clear();
|
||||
mIsBuilt = FALSE;
|
||||
mIsBuilt = false;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// clear mesh data
|
||||
|
|
@ -783,10 +771,10 @@ void LLAvatarAppearance::buildCharacter()
|
|||
//-------------------------------------------------------------------------
|
||||
LLTimer timer;
|
||||
|
||||
BOOL status = loadAvatar();
|
||||
bool status = loadAvatar();
|
||||
stop_glerror();
|
||||
|
||||
// gPrintMessagesThisFrame = TRUE;
|
||||
// gPrintMessagesThisFrame = true;
|
||||
LL_DEBUGS() << "Avatar load took " << timer.getElapsedTimeF32() << " seconds." << LL_ENDL;
|
||||
|
||||
if (!status)
|
||||
|
|
@ -856,12 +844,12 @@ void LLAvatarAppearance::buildCharacter()
|
|||
// SL-315
|
||||
mPelvisp->setPosition( LLVector3(0.0f, 0.0f, 0.0f) );
|
||||
|
||||
mIsBuilt = TRUE;
|
||||
mIsBuilt = true;
|
||||
stop_glerror();
|
||||
|
||||
}
|
||||
|
||||
BOOL LLAvatarAppearance::loadAvatar()
|
||||
bool LLAvatarAppearance::loadAvatar()
|
||||
{
|
||||
// LL_RECORD_BLOCK_TIME(FTM_LOAD_AVATAR);
|
||||
|
||||
|
|
@ -869,7 +857,7 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
if( !buildSkeleton(sAvatarSkeletonInfo) )
|
||||
{
|
||||
LL_ERRS() << "avatar file: buildSkeleton() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// initialize mJointAliasMap
|
||||
|
|
@ -879,14 +867,14 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
if( !loadSkeletonNode() )
|
||||
{
|
||||
LL_ERRS() << "avatar file: loadNodeSkeleton() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// avatar_lad.xml : <mesh>
|
||||
if( !loadMeshNodes() )
|
||||
{
|
||||
LL_ERRS() << "avatar file: loadNodeMesh() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// avatar_lad.xml : <global_color>
|
||||
|
|
@ -896,13 +884,13 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
if( !mTexSkinColor->setInfo( sAvatarXmlInfo->mTexSkinColorInfo ) )
|
||||
{
|
||||
LL_ERRS() << "avatar file: mTexSkinColor->setInfo() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "<global_color> name=\"skin_color\" not found" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if( sAvatarXmlInfo->mTexHairColorInfo )
|
||||
{
|
||||
|
|
@ -910,13 +898,13 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
if( !mTexHairColor->setInfo( sAvatarXmlInfo->mTexHairColorInfo ) )
|
||||
{
|
||||
LL_ERRS() << "avatar file: mTexHairColor->setInfo() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "<global_color> name=\"hair_color\" not found" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if( sAvatarXmlInfo->mTexEyeColorInfo )
|
||||
{
|
||||
|
|
@ -924,26 +912,26 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
if( !mTexEyeColor->setInfo( sAvatarXmlInfo->mTexEyeColorInfo ) )
|
||||
{
|
||||
LL_ERRS() << "avatar file: mTexEyeColor->setInfo() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "<global_color> name=\"eye_color\" not found" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// avatar_lad.xml : <layer_set>
|
||||
if (sAvatarXmlInfo->mLayerInfoList.empty())
|
||||
{
|
||||
LL_ERRS() << "avatar file: missing <layer_set> node" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (sAvatarXmlInfo->mMorphMaskInfoList.empty())
|
||||
{
|
||||
LL_ERRS() << "avatar file: missing <morph_masks> node" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// avatar_lad.xml : <morph_masks>
|
||||
|
|
@ -957,7 +945,7 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
morph_param = getVisualParam(name->c_str());
|
||||
if (morph_param)
|
||||
{
|
||||
BOOL invert = info->mInvert;
|
||||
bool invert = info->mInvert;
|
||||
addMaskedMorph(baked, morph_param, invert, info->mLayer);
|
||||
}
|
||||
}
|
||||
|
|
@ -985,24 +973,24 @@ BOOL LLAvatarAppearance::loadAvatar()
|
|||
{
|
||||
delete driver_param;
|
||||
LL_WARNS() << "avatar file: driver_param->parseData() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// loadSkeletonNode(): loads <skeleton> node from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::loadSkeletonNode ()
|
||||
bool LLAvatarAppearance::loadSkeletonNode ()
|
||||
{
|
||||
mRoot->addChild( mSkeleton[0] );
|
||||
|
||||
// make meshes children before calling parent version of the function
|
||||
for (LLAvatarJoint* joint : mMeshLOD)
|
||||
{
|
||||
joint->mUpdateXform = FALSE;
|
||||
joint->mUpdateXform = false;
|
||||
joint->setMeshesToChildren();
|
||||
}
|
||||
|
||||
|
|
@ -1039,7 +1027,7 @@ BOOL LLAvatarAppearance::loadSkeletonNode ()
|
|||
if (!param->setInfo(info))
|
||||
{
|
||||
delete param;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1050,13 +1038,13 @@ BOOL LLAvatarAppearance::loadSkeletonNode ()
|
|||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// loadMeshNodes(): loads <mesh> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::loadMeshNodes()
|
||||
bool LLAvatarAppearance::loadMeshNodes()
|
||||
{
|
||||
for (const LLAvatarXmlInfo::LLAvatarMeshInfo* info : sAvatarXmlInfo->mMeshInfoList)
|
||||
{
|
||||
|
|
@ -1065,7 +1053,7 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
|
||||
LLAvatarJointMesh* mesh = NULL;
|
||||
U8 mesh_id = 0;
|
||||
BOOL found_mesh_id = FALSE;
|
||||
bool found_mesh_id = false;
|
||||
|
||||
/* if (type == "hairMesh")
|
||||
switch(lod)
|
||||
|
|
@ -1078,7 +1066,7 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
if (type.compare(mesh_dict->mName) == 0)
|
||||
{
|
||||
mesh_id = mesh_index;
|
||||
found_mesh_id = TRUE;
|
||||
found_mesh_id = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1092,13 +1080,13 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
else
|
||||
{
|
||||
LL_WARNS() << "Avatar file: <mesh> has invalid lod setting " << lod << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Ignoring unrecognized mesh type: " << type << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// LL_INFOS() << "Parsing mesh data for " << type << "..." << LL_ENDL;
|
||||
|
|
@ -1121,7 +1109,7 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
{
|
||||
// This should never happen
|
||||
LL_WARNS("Avatar") << "Could not find avatar mesh: " << info->mReferenceMeshName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1133,7 +1121,7 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
if( !poly_mesh )
|
||||
{
|
||||
LL_WARNS() << "Failed to load mesh of type " << type << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Multimap insert
|
||||
|
|
@ -1148,7 +1136,7 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
if (!param->setInfo((LLPolyMorphTargetInfo*)info_pair.first))
|
||||
{
|
||||
delete param;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1166,15 +1154,15 @@ BOOL LLAvatarAppearance::loadMeshNodes()
|
|||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// loadLayerSets()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::loadLayersets()
|
||||
bool LLAvatarAppearance::loadLayersets()
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
for (LLTexLayerSetInfo* layerset_info : sAvatarXmlInfo->mLayerInfoList)
|
||||
{
|
||||
if (isSelf())
|
||||
|
|
@ -1187,7 +1175,7 @@ BOOL LLAvatarAppearance::loadLayersets()
|
|||
stop_glerror();
|
||||
delete layer_set;
|
||||
LL_WARNS() << "avatar file: layer_set->setInfo() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// scan baked textures and associate the layerset with the appropriate one
|
||||
|
|
@ -1209,7 +1197,7 @@ BOOL LLAvatarAppearance::loadLayersets()
|
|||
{
|
||||
LL_WARNS() << "<layer_set> has invalid body_region attribute" << LL_ENDL;
|
||||
delete layer_set;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// scan morph masks and let any affected layers know they have an associated morph
|
||||
|
|
@ -1218,12 +1206,12 @@ BOOL LLAvatarAppearance::loadLayersets()
|
|||
LLTexLayerInterface* layer = layer_set->findLayerByName(morph->mLayer);
|
||||
if (layer)
|
||||
{
|
||||
layer->setHasMorph(TRUE);
|
||||
layer->setHasMorph(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Could not find layer named " << morph->mLayer << " to set morph flag" << LL_ENDL;
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1316,19 +1304,19 @@ LLPolyMesh* LLAvatarAppearance::getUpperBodyMesh()
|
|||
|
||||
|
||||
// virtual
|
||||
BOOL LLAvatarAppearance::isValid() const
|
||||
bool LLAvatarAppearance::isValid() const
|
||||
{
|
||||
// This should only be called on ourself.
|
||||
if (!isSelf())
|
||||
{
|
||||
LL_ERRS() << "Called LLAvatarAppearance::isValid() on when isSelf() == false" << LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// adds a morph mask to the appropriate baked texture structure
|
||||
void LLAvatarAppearance::addMaskedMorph(EBakedTextureIndex index, LLVisualParam* morph_target, BOOL invert, std::string layer)
|
||||
void LLAvatarAppearance::addMaskedMorph(EBakedTextureIndex index, LLVisualParam* morph_target, bool invert, std::string layer)
|
||||
{
|
||||
if (index < BAKED_NUM_INDICES)
|
||||
{
|
||||
|
|
@ -1339,7 +1327,7 @@ void LLAvatarAppearance::addMaskedMorph(EBakedTextureIndex index, LLVisualParam*
|
|||
|
||||
|
||||
//static
|
||||
BOOL LLAvatarAppearance::teToColorParams( ETextureIndex te, U32 *param_name )
|
||||
bool LLAvatarAppearance::teToColorParams( ETextureIndex te, U32 *param_name )
|
||||
{
|
||||
switch( te )
|
||||
{
|
||||
|
|
@ -1423,10 +1411,10 @@ BOOL LLAvatarAppearance::teToColorParams( ETextureIndex te, U32 *param_name )
|
|||
|
||||
default:
|
||||
llassert(0);
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLAvatarAppearance::setClothesColor( ETextureIndex te, const LLColor4& new_color)
|
||||
|
|
@ -1434,9 +1422,9 @@ void LLAvatarAppearance::setClothesColor( ETextureIndex te, const LLColor4& new_
|
|||
U32 param_name[3];
|
||||
if( teToColorParams( te, param_name ) )
|
||||
{
|
||||
setVisualParamWeight( param_name[0], new_color.mV[VX]);
|
||||
setVisualParamWeight( param_name[1], new_color.mV[VY]);
|
||||
setVisualParamWeight( param_name[2], new_color.mV[VZ]);
|
||||
setVisualParamWeight( param_name[0], new_color.mV[VRED]);
|
||||
setVisualParamWeight( param_name[1], new_color.mV[VGREEN]);
|
||||
setVisualParamWeight( param_name[2], new_color.mV[VBLUE]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1446,9 +1434,9 @@ LLColor4 LLAvatarAppearance::getClothesColor( ETextureIndex te )
|
|||
U32 param_name[3];
|
||||
if( teToColorParams( te, param_name ) )
|
||||
{
|
||||
color.mV[VX] = getVisualParamWeight( param_name[0] );
|
||||
color.mV[VY] = getVisualParamWeight( param_name[1] );
|
||||
color.mV[VZ] = getVisualParamWeight( param_name[2] );
|
||||
color.mV[VRED] = getVisualParamWeight( param_name[0] );
|
||||
color.mV[VGREEN] = getVisualParamWeight( param_name[1] );
|
||||
color.mV[VBLUE] = getVisualParamWeight( param_name[2] );
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
|
@ -1482,7 +1470,7 @@ LLColor4 LLAvatarAppearance::getGlobalColor( const std::string& color_name ) con
|
|||
|
||||
// Unlike most wearable functions, this works for both self and other.
|
||||
// virtual
|
||||
BOOL LLAvatarAppearance::isWearingWearableType(LLWearableType::EType type) const
|
||||
bool LLAvatarAppearance::isWearingWearableType(LLWearableType::EType type) const
|
||||
{
|
||||
return mWearableData->getWearableCount(type) > 0;
|
||||
}
|
||||
|
|
@ -1499,7 +1487,7 @@ LLTexLayerSet* LLAvatarAppearance::getAvatarLayerSet(EBakedTextureIndex baked_in
|
|||
//-----------------------------------------------------------------------------
|
||||
// allocateCollisionVolumes()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::allocateCollisionVolumes( U32 num )
|
||||
bool LLAvatarAppearance::allocateCollisionVolumes( U32 num )
|
||||
{
|
||||
if (mNumCollisionVolumes !=num)
|
||||
{
|
||||
|
|
@ -1510,27 +1498,27 @@ BOOL LLAvatarAppearance::allocateCollisionVolumes( U32 num )
|
|||
if (!mCollisionVolumes)
|
||||
{
|
||||
LL_WARNS() << "Failed to allocate collision volumes" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
mNumCollisionVolumes = num;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLAvatarBoneInfo::parseXml()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
if (node->hasName("bone"))
|
||||
{
|
||||
mIsJoint = TRUE;
|
||||
mIsJoint = true;
|
||||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if (!node->getFastAttributeString(name_string, mName))
|
||||
{
|
||||
LL_WARNS() << "Bone without name" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle aliases_string = LLXmlTree::addAttributeString("aliases");
|
||||
|
|
@ -1538,7 +1526,7 @@ BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
|||
}
|
||||
else if (node->hasName("collision_volume"))
|
||||
{
|
||||
mIsJoint = FALSE;
|
||||
mIsJoint = false;
|
||||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if (!node->getFastAttributeString(name_string, mName))
|
||||
{
|
||||
|
|
@ -1548,28 +1536,28 @@ BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
|||
else
|
||||
{
|
||||
LL_WARNS() << "Invalid node " << node->getName() << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle pos_string = LLXmlTree::addAttributeString("pos");
|
||||
if (!node->getFastAttributeVector3(pos_string, mPos))
|
||||
{
|
||||
LL_WARNS() << "Bone without position" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle rot_string = LLXmlTree::addAttributeString("rot");
|
||||
if (!node->getFastAttributeVector3(rot_string, mRot))
|
||||
{
|
||||
LL_WARNS() << "Bone without rotation" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle scale_string = LLXmlTree::addAttributeString("scale");
|
||||
if (!node->getFastAttributeVector3(scale_string, mScale))
|
||||
{
|
||||
LL_WARNS() << "Bone without scale" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle end_string = LLXmlTree::addAttributeString("end");
|
||||
|
|
@ -1592,7 +1580,7 @@ BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (!node->getFastAttributeVector3(pivot_string, mPivot))
|
||||
{
|
||||
LL_WARNS() << "Bone without pivot" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1604,23 +1592,23 @@ BOOL LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (!child_info->parseXml(child))
|
||||
{
|
||||
delete child_info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mChildren.push_back(child_info);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLAvatarSkeletonInfo::parseXml()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarSkeletonInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLAvatarSkeletonInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
static LLStdStringHandle num_bones_string = LLXmlTree::addAttributeString("num_bones");
|
||||
if (!node->getFastAttributeS32(num_bones_string, mNumBones))
|
||||
{
|
||||
LL_WARNS() << "Couldn't find number of bones." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle num_collision_volumes_string = LLXmlTree::addAttributeString("num_collision_volumes");
|
||||
|
|
@ -1634,11 +1622,11 @@ BOOL LLAvatarSkeletonInfo::parseXml(LLXmlTreeNode* node)
|
|||
{
|
||||
delete info;
|
||||
LL_WARNS() << "Error parsing bone in skeleton file" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mBoneInfoList.push_back(info);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//Make aliases for joint and push to map.
|
||||
|
|
@ -1706,13 +1694,13 @@ const LLAvatarAppearance::joint_alias_map_t& LLAvatarAppearance::getJointAliases
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseXmlSkeletonNode(): parses <skeleton> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* root)
|
||||
{
|
||||
LLXmlTreeNode* node = root->getChildByName( "skeleton" );
|
||||
if( !node )
|
||||
{
|
||||
LL_WARNS() << "avatar file: missing <skeleton>" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLXmlTreeNode* child;
|
||||
|
|
@ -1732,14 +1720,14 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* ro
|
|||
{
|
||||
LL_WARNS() << "Unknown param type." << LL_ENDL;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLPolySkeletalDistortionInfo *info = new LLPolySkeletalDistortionInfo;
|
||||
if (!info->parseXml(child))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
mSkeletalDistortionInfoList.push_back(info);
|
||||
|
|
@ -1757,7 +1745,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* ro
|
|||
{
|
||||
LL_WARNS() << "No name supplied for attachment point." << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle joint_string = LLXmlTree::addAttributeString("joint");
|
||||
|
|
@ -1765,19 +1753,19 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* ro
|
|||
{
|
||||
LL_WARNS() << "No bone declared in attachment point " << info->mName << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle position_string = LLXmlTree::addAttributeString("position");
|
||||
if (child->getFastAttributeVector3(position_string, info->mPosition))
|
||||
{
|
||||
info->mHasPosition = TRUE;
|
||||
info->mHasPosition = true;
|
||||
}
|
||||
|
||||
static LLStdStringHandle rotation_string = LLXmlTree::addAttributeString("rotation");
|
||||
if (child->getFastAttributeVector3(rotation_string, info->mRotationEuler))
|
||||
{
|
||||
info->mHasRotation = TRUE;
|
||||
info->mHasRotation = true;
|
||||
}
|
||||
static LLStdStringHandle group_string = LLXmlTree::addAttributeString("group");
|
||||
if (child->getFastAttributeS32(group_string, info->mGroup))
|
||||
|
|
@ -1791,7 +1779,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* ro
|
|||
{
|
||||
LL_WARNS() << "No id supplied for attachment point " << info->mName << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle slot_string = LLXmlTree::addAttributeString("pie_slice");
|
||||
|
|
@ -1806,13 +1794,13 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlSkeletonNode(LLXmlTreeNode* ro
|
|||
mAttachmentInfoList.push_back(info);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseXmlMeshNodes(): parses <mesh> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
||||
{
|
||||
for (LLXmlTreeNode* node = root->getChildByName( "mesh" );
|
||||
node;
|
||||
|
|
@ -1826,7 +1814,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
{
|
||||
LL_WARNS() << "Avatar file: <mesh> is missing type attribute. Ignoring element. " << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE; // Ignore this element
|
||||
return false; // Ignore this element
|
||||
}
|
||||
|
||||
static LLStdStringHandle lod_string = LLXmlTree::addAttributeString("lod");
|
||||
|
|
@ -1834,7 +1822,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
{
|
||||
LL_WARNS() << "Avatar file: <mesh> is missing lod attribute. Ignoring element. " << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE; // Ignore this element
|
||||
return false; // Ignore this element
|
||||
}
|
||||
|
||||
static LLStdStringHandle file_name_string = LLXmlTree::addAttributeString("file_name");
|
||||
|
|
@ -1842,7 +1830,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
{
|
||||
LL_WARNS() << "Avatar file: <mesh> is missing file_name attribute. Ignoring: " << info->mType << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE; // Ignore this element
|
||||
return false; // Ignore this element
|
||||
}
|
||||
|
||||
static LLStdStringHandle reference_string = LLXmlTree::addAttributeString("reference");
|
||||
|
|
@ -1877,7 +1865,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
{
|
||||
LL_WARNS() << "Unknown param type." << LL_ENDL;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLPolyMorphTargetInfo *morphinfo = new LLPolyMorphTargetInfo();
|
||||
|
|
@ -1885,9 +1873,9 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
{
|
||||
delete morphinfo;
|
||||
delete info;
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
BOOL shared = FALSE;
|
||||
bool shared = false;
|
||||
static LLStdStringHandle shared_string = LLXmlTree::addAttributeString("shared");
|
||||
child->getFastAttributeBOOL(shared_string, shared);
|
||||
|
||||
|
|
@ -1896,13 +1884,13 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMeshNodes(LLXmlTreeNode* root)
|
|||
|
||||
mMeshInfoList.push_back(info);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseXmlColorNodes(): parses <global_color> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root)
|
||||
{
|
||||
for (LLXmlTreeNode* color_node = root->getChildByName( "global_color" );
|
||||
color_node;
|
||||
|
|
@ -1917,14 +1905,14 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root
|
|||
if (mTexSkinColorInfo)
|
||||
{
|
||||
LL_WARNS() << "avatar file: multiple instances of skin_color" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mTexSkinColorInfo = new LLTexGlobalColorInfo;
|
||||
if( !mTexSkinColorInfo->parseXml( color_node ) )
|
||||
{
|
||||
delete_and_clear(mTexSkinColorInfo);
|
||||
LL_WARNS() << "avatar file: mTexSkinColor->parseXml() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if( global_color_name == "hair_color" )
|
||||
|
|
@ -1932,14 +1920,14 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root
|
|||
if (mTexHairColorInfo)
|
||||
{
|
||||
LL_WARNS() << "avatar file: multiple instances of hair_color" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mTexHairColorInfo = new LLTexGlobalColorInfo;
|
||||
if( !mTexHairColorInfo->parseXml( color_node ) )
|
||||
{
|
||||
delete_and_clear(mTexHairColorInfo);
|
||||
LL_WARNS() << "avatar file: mTexHairColor->parseXml() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if( global_color_name == "eye_color" )
|
||||
|
|
@ -1947,24 +1935,24 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlColorNodes(LLXmlTreeNode* root
|
|||
if (mTexEyeColorInfo)
|
||||
{
|
||||
LL_WARNS() << "avatar file: multiple instances of eye_color" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mTexEyeColorInfo = new LLTexGlobalColorInfo;
|
||||
if( !mTexEyeColorInfo->parseXml( color_node ) )
|
||||
{
|
||||
LL_WARNS() << "avatar file: mTexEyeColor->parseXml() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseXmlLayerNodes(): parses <layer_set> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlLayerNodes(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlLayerNodes(LLXmlTreeNode* root)
|
||||
{
|
||||
for (LLXmlTreeNode* layer_node = root->getChildByName( "layer_set" );
|
||||
layer_node;
|
||||
|
|
@ -1979,16 +1967,16 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlLayerNodes(LLXmlTreeNode* root
|
|||
{
|
||||
delete layer_info;
|
||||
LL_WARNS() << "avatar file: layer_set->parseXml() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseXmlDriverNodes(): parses <driver_parameters> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlDriverNodes(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlDriverNodes(LLXmlTreeNode* root)
|
||||
{
|
||||
LLXmlTreeNode* driver = root->getChildByName( "driver_parameters" );
|
||||
if( driver )
|
||||
|
|
@ -2008,23 +1996,23 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlDriverNodes(LLXmlTreeNode* roo
|
|||
{
|
||||
delete driver_info;
|
||||
LL_WARNS() << "avatar file: driver_param->parseXml() failed" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseXmlDriverNodes(): parses <driver_parameters> nodes from XML tree
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root)
|
||||
bool LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root)
|
||||
{
|
||||
LLXmlTreeNode* masks = root->getChildByName( "morph_masks" );
|
||||
if( !masks )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (LLXmlTreeNode* grand_child = masks->getChildByName( "mask" );
|
||||
|
|
@ -2038,7 +2026,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root
|
|||
{
|
||||
LL_WARNS() << "No name supplied for morph mask." << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle region_string = LLXmlTree::addAttributeString("body_region");
|
||||
|
|
@ -2046,7 +2034,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root
|
|||
{
|
||||
LL_WARNS() << "No region supplied for morph mask." << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle layer_string = LLXmlTree::addAttributeString("layer");
|
||||
|
|
@ -2054,7 +2042,7 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root
|
|||
{
|
||||
LL_WARNS() << "No layer supplied for morph mask." << LL_ENDL;
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// optional parameter. don't throw a warning if not present.
|
||||
|
|
@ -2064,11 +2052,11 @@ BOOL LLAvatarAppearance::LLAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root
|
|||
mMorphMaskInfoList.push_back(info);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
LLAvatarAppearance::LLMaskedMorph::LLMaskedMorph(LLVisualParam *morph_target, BOOL invert, std::string layer) :
|
||||
LLAvatarAppearance::LLMaskedMorph::LLMaskedMorph(LLVisualParam *morph_target, bool invert, std::string layer) :
|
||||
mMorphTarget(morph_target),
|
||||
mInvert(invert),
|
||||
mLayer(layer)
|
||||
|
|
|
|||
|
|
@ -70,10 +70,10 @@ public:
|
|||
static void initClass();
|
||||
static void cleanupClass(); // Cleanup data that's only init'd once per class.
|
||||
virtual void initInstance(); // Called after construction to initialize the instance.
|
||||
S32 mInitFlags;
|
||||
virtual BOOL loadSkeletonNode();
|
||||
BOOL loadMeshNodes();
|
||||
BOOL loadLayersets();
|
||||
S32 mInitFlags{ 0 };
|
||||
virtual bool loadSkeletonNode();
|
||||
bool loadMeshNodes();
|
||||
bool loadLayersets();
|
||||
|
||||
|
||||
/** Initialization
|
||||
|
|
@ -108,9 +108,9 @@ public:
|
|||
**/
|
||||
public:
|
||||
virtual bool isSelf() const { return false; } // True if this avatar is for this viewer's agent
|
||||
virtual BOOL isValid() const;
|
||||
virtual BOOL isUsingLocalAppearance() const = 0;
|
||||
virtual BOOL isEditingAppearance() const = 0;
|
||||
virtual bool isValid() const;
|
||||
virtual bool isUsingLocalAppearance() const = 0;
|
||||
virtual bool isEditingAppearance() const = 0;
|
||||
|
||||
bool isBuilt() const { return mIsBuilt; }
|
||||
|
||||
|
|
@ -135,8 +135,8 @@ public:
|
|||
F32 getPelvisToFoot() const { return mPelvisToFoot; }
|
||||
/*virtual*/ LLJoint* getRootJoint() { return mRoot; }
|
||||
|
||||
LLVector3 mHeadOffset; // current head position
|
||||
LLAvatarJoint *mRoot;
|
||||
LLVector3 mHeadOffset{}; // current head position
|
||||
LLAvatarJoint* mRoot{ nullptr };
|
||||
|
||||
typedef std::map<std::string, LLJoint*> joint_map_t;
|
||||
joint_map_t mJointMap;
|
||||
|
|
@ -146,7 +146,7 @@ public:
|
|||
joint_state_map_t mCurrBodySizeState;
|
||||
void compareJointStateMaps(joint_state_map_t& last_state,
|
||||
joint_state_map_t& curr_state);
|
||||
void computeBodySize();
|
||||
void computeBodySize();
|
||||
F32 computeBodyHeight();
|
||||
F32 computePelvisToFoot();
|
||||
|
||||
|
|
@ -158,16 +158,16 @@ public:
|
|||
|
||||
|
||||
protected:
|
||||
static BOOL parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree);
|
||||
static bool parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree);
|
||||
virtual void buildCharacter();
|
||||
virtual BOOL loadAvatar();
|
||||
virtual bool loadAvatar();
|
||||
|
||||
BOOL setupBone(const LLAvatarBoneInfo* info, LLJoint* parent, S32 ¤t_volume_num, S32 ¤t_joint_num);
|
||||
BOOL allocateCharacterJoints(U32 num);
|
||||
BOOL buildSkeleton(const LLAvatarSkeletonInfo *info);
|
||||
bool setupBone(const LLAvatarBoneInfo* info, LLJoint* parent, S32 ¤t_volume_num, S32 ¤t_joint_num);
|
||||
bool allocateCharacterJoints(U32 num);
|
||||
bool buildSkeleton(const LLAvatarSkeletonInfo *info);
|
||||
|
||||
void clearSkeleton();
|
||||
BOOL mIsBuilt; // state of deferred character building
|
||||
bool mIsBuilt{ false }; // state of deferred character building
|
||||
avatar_joint_list_t mSkeleton;
|
||||
LLVector3OverrideMap mPelvisFixups;
|
||||
joint_alias_map_t mJointAliasMap;
|
||||
|
|
@ -184,30 +184,30 @@ public:
|
|||
LLVector3 mBodySize;
|
||||
LLVector3 mAvatarOffset;
|
||||
protected:
|
||||
F32 mPelvisToFoot;
|
||||
F32 mPelvisToFoot{ 0.f };
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Cached pointers to well known joints
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
LLJoint* mPelvisp;
|
||||
LLJoint* mTorsop;
|
||||
LLJoint* mChestp;
|
||||
LLJoint* mNeckp;
|
||||
LLJoint* mHeadp;
|
||||
LLJoint* mSkullp;
|
||||
LLJoint* mEyeLeftp;
|
||||
LLJoint* mEyeRightp;
|
||||
LLJoint* mHipLeftp;
|
||||
LLJoint* mHipRightp;
|
||||
LLJoint* mKneeLeftp;
|
||||
LLJoint* mKneeRightp;
|
||||
LLJoint* mAnkleLeftp;
|
||||
LLJoint* mAnkleRightp;
|
||||
LLJoint* mFootLeftp;
|
||||
LLJoint* mFootRightp;
|
||||
LLJoint* mWristLeftp;
|
||||
LLJoint* mWristRightp;
|
||||
LLJoint* mPelvisp{nullptr};
|
||||
LLJoint* mTorsop{ nullptr };
|
||||
LLJoint* mChestp{ nullptr };
|
||||
LLJoint* mNeckp{ nullptr };
|
||||
LLJoint* mHeadp{ nullptr };
|
||||
LLJoint* mSkullp{ nullptr };
|
||||
LLJoint* mEyeLeftp{ nullptr };
|
||||
LLJoint* mEyeRightp{ nullptr };
|
||||
LLJoint* mHipLeftp{ nullptr };
|
||||
LLJoint* mHipRightp{ nullptr };
|
||||
LLJoint* mKneeLeftp{ nullptr };
|
||||
LLJoint* mKneeRightp{ nullptr };
|
||||
LLJoint* mAnkleLeftp{ nullptr };
|
||||
LLJoint* mAnkleRightp{ nullptr };
|
||||
LLJoint* mFootLeftp{ nullptr };
|
||||
LLJoint* mFootRightp{ nullptr };
|
||||
LLJoint* mWristLeftp{ nullptr };
|
||||
LLJoint* mWristRightp{ nullptr };
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// XML parse tree
|
||||
|
|
@ -227,14 +227,14 @@ protected:
|
|||
** RENDERING
|
||||
**/
|
||||
public:
|
||||
BOOL mIsDummy; // for special views and animated object controllers; local to viewer
|
||||
bool mIsDummy{ false }; // for special views and animated object controllers; local to viewer
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Morph masks
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
void addMaskedMorph(LLAvatarAppearanceDefines::EBakedTextureIndex index, LLVisualParam* morph_target, BOOL invert, std::string layer);
|
||||
virtual void applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components, LLAvatarAppearanceDefines::EBakedTextureIndex index = LLAvatarAppearanceDefines::BAKED_NUM_INDICES) = 0;
|
||||
void addMaskedMorph(LLAvatarAppearanceDefines::EBakedTextureIndex index, LLVisualParam* morph_target, bool invert, std::string layer);
|
||||
virtual void applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components, LLAvatarAppearanceDefines::EBakedTextureIndex index = LLAvatarAppearanceDefines::BAKED_NUM_INDICES) = 0;
|
||||
|
||||
/** Rendering
|
||||
** **
|
||||
|
|
@ -281,7 +281,7 @@ protected:
|
|||
public:
|
||||
void setClothesColor(LLAvatarAppearanceDefines::ETextureIndex te, const LLColor4& new_color);
|
||||
LLColor4 getClothesColor(LLAvatarAppearanceDefines::ETextureIndex te);
|
||||
static BOOL teToColorParams(LLAvatarAppearanceDefines::ETextureIndex te, U32 *param_name);
|
||||
static bool teToColorParams(LLAvatarAppearanceDefines::ETextureIndex te, U32 *param_name);
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Global colors
|
||||
|
|
@ -290,9 +290,9 @@ public:
|
|||
LLColor4 getGlobalColor(const std::string& color_name ) const;
|
||||
virtual void onGlobalColorChanged(const LLTexGlobalColor* global_color) = 0;
|
||||
protected:
|
||||
LLTexGlobalColor* mTexSkinColor;
|
||||
LLTexGlobalColor* mTexHairColor;
|
||||
LLTexGlobalColor* mTexEyeColor;
|
||||
LLTexGlobalColor* mTexSkinColor{ nullptr };
|
||||
LLTexGlobalColor* mTexHairColor{ nullptr };
|
||||
LLTexGlobalColor* mTexEyeColor{ nullptr };
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Visibility
|
||||
|
|
@ -311,11 +311,11 @@ public:
|
|||
public:
|
||||
LLWearableData* getWearableData() { return mWearableData; }
|
||||
const LLWearableData* getWearableData() const { return mWearableData; }
|
||||
virtual BOOL isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex te, U32 index = 0 ) const = 0;
|
||||
virtual BOOL isWearingWearableType(LLWearableType::EType type ) const;
|
||||
virtual bool isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex te, U32 index = 0 ) const = 0;
|
||||
virtual bool isWearingWearableType(LLWearableType::EType type ) const;
|
||||
|
||||
private:
|
||||
LLWearableData* mWearableData;
|
||||
LLWearableData* mWearableData{ nullptr };
|
||||
|
||||
/********************************************************************************
|
||||
** **
|
||||
|
|
@ -333,11 +333,11 @@ protected:
|
|||
struct BakedTextureData
|
||||
{
|
||||
LLUUID mLastTextureID;
|
||||
LLTexLayerSet* mTexLayerSet; // Only exists for self
|
||||
bool mIsLoaded;
|
||||
bool mIsUsed;
|
||||
LLAvatarAppearanceDefines::ETextureIndex mTextureIndex;
|
||||
U32 mMaskTexName;
|
||||
LLTexLayerSet* mTexLayerSet{ nullptr }; // Only exists for self
|
||||
bool mIsLoaded{ false };
|
||||
bool mIsUsed{ false };
|
||||
LLAvatarAppearanceDefines::ETextureIndex mTextureIndex{ LLAvatarAppearanceDefines::ETextureIndex::TEX_INVALID };
|
||||
U32 mMaskTexName{ 0 };
|
||||
// Stores pointers to the joint meshes that this baked texture deals with
|
||||
avatar_joint_mesh_list_t mJointMeshes;
|
||||
morph_list_t mMaskedMorphs;
|
||||
|
|
@ -354,11 +354,11 @@ protected:
|
|||
// Collision volumes
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
S32 mNumBones;
|
||||
S32 mNumCollisionVolumes;
|
||||
LLAvatarJointCollisionVolume* mCollisionVolumes;
|
||||
S32 mNumBones{ 0 };
|
||||
S32 mNumCollisionVolumes{ 0 };
|
||||
LLAvatarJointCollisionVolume* mCollisionVolumes{ nullptr };
|
||||
protected:
|
||||
BOOL allocateCollisionVolumes(U32 num);
|
||||
bool allocateCollisionVolumes(U32 num);
|
||||
|
||||
/** Physics
|
||||
** **
|
||||
|
|
@ -374,16 +374,16 @@ protected:
|
|||
LLAvatarXmlInfo();
|
||||
~LLAvatarXmlInfo();
|
||||
|
||||
BOOL parseXmlSkeletonNode(LLXmlTreeNode* root);
|
||||
BOOL parseXmlMeshNodes(LLXmlTreeNode* root);
|
||||
BOOL parseXmlColorNodes(LLXmlTreeNode* root);
|
||||
BOOL parseXmlLayerNodes(LLXmlTreeNode* root);
|
||||
BOOL parseXmlDriverNodes(LLXmlTreeNode* root);
|
||||
BOOL parseXmlMorphNodes(LLXmlTreeNode* root);
|
||||
bool parseXmlSkeletonNode(LLXmlTreeNode* root);
|
||||
bool parseXmlMeshNodes(LLXmlTreeNode* root);
|
||||
bool parseXmlColorNodes(LLXmlTreeNode* root);
|
||||
bool parseXmlLayerNodes(LLXmlTreeNode* root);
|
||||
bool parseXmlDriverNodes(LLXmlTreeNode* root);
|
||||
bool parseXmlMorphNodes(LLXmlTreeNode* root);
|
||||
|
||||
struct LLAvatarMeshInfo
|
||||
{
|
||||
typedef std::pair<LLViewerVisualParamInfo*,BOOL> morph_info_pair_t; // LLPolyMorphTargetInfo stored here
|
||||
typedef std::pair<LLViewerVisualParamInfo*,bool> morph_info_pair_t; // LLPolyMorphTargetInfo stored here
|
||||
typedef std::vector<morph_info_pair_t> morph_info_list_t;
|
||||
|
||||
LLAvatarMeshInfo() : mLOD(0), mMinPixelArea(.1f) {}
|
||||
|
|
@ -412,8 +412,8 @@ protected:
|
|||
struct LLAvatarAttachmentInfo
|
||||
{
|
||||
LLAvatarAttachmentInfo()
|
||||
: mGroup(-1), mAttachmentID(-1), mPieMenuSlice(-1), mVisibleFirstPerson(FALSE),
|
||||
mIsHUDAttachment(FALSE), mHasPosition(FALSE), mHasRotation(FALSE) {}
|
||||
: mGroup(-1), mAttachmentID(-1), mPieMenuSlice(-1), mVisibleFirstPerson(false),
|
||||
mIsHUDAttachment(false), mHasPosition(false), mHasRotation(false) {}
|
||||
std::string mName;
|
||||
std::string mJointName;
|
||||
LLVector3 mPosition;
|
||||
|
|
@ -421,10 +421,10 @@ protected:
|
|||
S32 mGroup;
|
||||
S32 mAttachmentID;
|
||||
S32 mPieMenuSlice;
|
||||
BOOL mVisibleFirstPerson;
|
||||
BOOL mIsHUDAttachment;
|
||||
BOOL mHasPosition;
|
||||
BOOL mHasRotation;
|
||||
bool mVisibleFirstPerson;
|
||||
bool mIsHUDAttachment;
|
||||
bool mHasPosition;
|
||||
bool mHasRotation;
|
||||
};
|
||||
typedef std::vector<LLAvatarAttachmentInfo*> attachment_info_list_t;
|
||||
attachment_info_list_t mAttachmentInfoList;
|
||||
|
|
@ -442,11 +442,11 @@ protected:
|
|||
struct LLAvatarMorphInfo
|
||||
{
|
||||
LLAvatarMorphInfo()
|
||||
: mInvert(FALSE) {}
|
||||
: mInvert(false) {}
|
||||
std::string mName;
|
||||
std::string mRegion;
|
||||
std::string mLayer;
|
||||
BOOL mInvert;
|
||||
bool mInvert;
|
||||
};
|
||||
|
||||
typedef std::vector<LLAvatarMorphInfo*> morph_info_list_t;
|
||||
|
|
@ -457,10 +457,10 @@ protected:
|
|||
class LLMaskedMorph
|
||||
{
|
||||
public:
|
||||
LLMaskedMorph(LLVisualParam *morph_target, BOOL invert, std::string layer);
|
||||
LLMaskedMorph(LLVisualParam *morph_target, bool invert, std::string layer);
|
||||
|
||||
LLVisualParam *mMorphTarget;
|
||||
BOOL mInvert;
|
||||
bool mInvert;
|
||||
std::string mLayer;
|
||||
};
|
||||
/** Support Classes
|
||||
|
|
|
|||
|
|
@ -39,56 +39,56 @@ using namespace LLAvatarAppearanceDefines;
|
|||
|
||||
LLAvatarAppearanceDictionary::Textures::Textures()
|
||||
{
|
||||
addEntry(TEX_HEAD_BODYPAINT, new TextureEntry("head_bodypaint", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_UPPER_SHIRT, new TextureEntry("upper_shirt", TRUE, BAKED_NUM_INDICES, "UIImgDefaultShirtUUID", LLWearableType::WT_SHIRT));
|
||||
addEntry(TEX_LOWER_PANTS, new TextureEntry("lower_pants", TRUE, BAKED_NUM_INDICES, "UIImgDefaultPantsUUID", LLWearableType::WT_PANTS));
|
||||
addEntry(TEX_EYES_IRIS, new TextureEntry("eyes_iris", TRUE, BAKED_NUM_INDICES, "UIImgDefaultEyesUUID", LLWearableType::WT_EYES));
|
||||
addEntry(TEX_HAIR, new TextureEntry("hair_grain", TRUE, BAKED_NUM_INDICES, "UIImgDefaultHairUUID", LLWearableType::WT_HAIR));
|
||||
addEntry(TEX_UPPER_BODYPAINT, new TextureEntry("upper_bodypaint", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_LOWER_BODYPAINT, new TextureEntry("lower_bodypaint", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_LOWER_SHOES, new TextureEntry("lower_shoes", TRUE, BAKED_NUM_INDICES, "UIImgDefaultShoesUUID", LLWearableType::WT_SHOES));
|
||||
addEntry(TEX_LOWER_SOCKS, new TextureEntry("lower_socks", TRUE, BAKED_NUM_INDICES, "UIImgDefaultSocksUUID", LLWearableType::WT_SOCKS));
|
||||
addEntry(TEX_UPPER_JACKET, new TextureEntry("upper_jacket", TRUE, BAKED_NUM_INDICES, "UIImgDefaultJacketUUID", LLWearableType::WT_JACKET));
|
||||
addEntry(TEX_LOWER_JACKET, new TextureEntry("lower_jacket", TRUE, BAKED_NUM_INDICES, "UIImgDefaultJacketUUID", LLWearableType::WT_JACKET));
|
||||
addEntry(TEX_UPPER_GLOVES, new TextureEntry("upper_gloves", TRUE, BAKED_NUM_INDICES, "UIImgDefaultGlovesUUID", LLWearableType::WT_GLOVES));
|
||||
addEntry(TEX_UPPER_UNDERSHIRT, new TextureEntry("upper_undershirt", TRUE, BAKED_NUM_INDICES, "UIImgDefaultUnderwearUUID", LLWearableType::WT_UNDERSHIRT));
|
||||
addEntry(TEX_LOWER_UNDERPANTS, new TextureEntry("lower_underpants", TRUE, BAKED_NUM_INDICES, "UIImgDefaultUnderwearUUID", LLWearableType::WT_UNDERPANTS));
|
||||
addEntry(TEX_SKIRT, new TextureEntry("skirt", TRUE, BAKED_NUM_INDICES, "UIImgDefaultSkirtUUID", LLWearableType::WT_SKIRT));
|
||||
addEntry(TEX_HEAD_BODYPAINT, new TextureEntry("head_bodypaint", true, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_UPPER_SHIRT, new TextureEntry("upper_shirt", true, BAKED_NUM_INDICES, "UIImgDefaultShirtUUID", LLWearableType::WT_SHIRT));
|
||||
addEntry(TEX_LOWER_PANTS, new TextureEntry("lower_pants", true, BAKED_NUM_INDICES, "UIImgDefaultPantsUUID", LLWearableType::WT_PANTS));
|
||||
addEntry(TEX_EYES_IRIS, new TextureEntry("eyes_iris", true, BAKED_NUM_INDICES, "UIImgDefaultEyesUUID", LLWearableType::WT_EYES));
|
||||
addEntry(TEX_HAIR, new TextureEntry("hair_grain", true, BAKED_NUM_INDICES, "UIImgDefaultHairUUID", LLWearableType::WT_HAIR));
|
||||
addEntry(TEX_UPPER_BODYPAINT, new TextureEntry("upper_bodypaint", true, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_LOWER_BODYPAINT, new TextureEntry("lower_bodypaint", true, BAKED_NUM_INDICES, "", LLWearableType::WT_SKIN));
|
||||
addEntry(TEX_LOWER_SHOES, new TextureEntry("lower_shoes", true, BAKED_NUM_INDICES, "UIImgDefaultShoesUUID", LLWearableType::WT_SHOES));
|
||||
addEntry(TEX_LOWER_SOCKS, new TextureEntry("lower_socks", true, BAKED_NUM_INDICES, "UIImgDefaultSocksUUID", LLWearableType::WT_SOCKS));
|
||||
addEntry(TEX_UPPER_JACKET, new TextureEntry("upper_jacket", true, BAKED_NUM_INDICES, "UIImgDefaultJacketUUID", LLWearableType::WT_JACKET));
|
||||
addEntry(TEX_LOWER_JACKET, new TextureEntry("lower_jacket", true, BAKED_NUM_INDICES, "UIImgDefaultJacketUUID", LLWearableType::WT_JACKET));
|
||||
addEntry(TEX_UPPER_GLOVES, new TextureEntry("upper_gloves", true, BAKED_NUM_INDICES, "UIImgDefaultGlovesUUID", LLWearableType::WT_GLOVES));
|
||||
addEntry(TEX_UPPER_UNDERSHIRT, new TextureEntry("upper_undershirt", true, BAKED_NUM_INDICES, "UIImgDefaultUnderwearUUID", LLWearableType::WT_UNDERSHIRT));
|
||||
addEntry(TEX_LOWER_UNDERPANTS, new TextureEntry("lower_underpants", true, BAKED_NUM_INDICES, "UIImgDefaultUnderwearUUID", LLWearableType::WT_UNDERPANTS));
|
||||
addEntry(TEX_SKIRT, new TextureEntry("skirt", true, BAKED_NUM_INDICES, "UIImgDefaultSkirtUUID", LLWearableType::WT_SKIRT));
|
||||
|
||||
addEntry(TEX_LOWER_ALPHA, new TextureEntry("lower_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_UPPER_ALPHA, new TextureEntry("upper_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_HEAD_ALPHA, new TextureEntry("head_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_EYES_ALPHA, new TextureEntry("eyes_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_HAIR_ALPHA, new TextureEntry("hair_alpha", TRUE, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_LOWER_ALPHA, new TextureEntry("lower_alpha", true, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_UPPER_ALPHA, new TextureEntry("upper_alpha", true, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_HEAD_ALPHA, new TextureEntry("head_alpha", true, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_EYES_ALPHA, new TextureEntry("eyes_alpha", true, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
addEntry(TEX_HAIR_ALPHA, new TextureEntry("hair_alpha", true, BAKED_NUM_INDICES, "UIImgDefaultAlphaUUID", LLWearableType::WT_ALPHA));
|
||||
|
||||
addEntry(TEX_HEAD_TATTOO, new TextureEntry("head_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_UPPER_TATTOO, new TextureEntry("upper_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_LOWER_TATTOO, new TextureEntry("lower_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_HEAD_TATTOO, new TextureEntry("head_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_UPPER_TATTOO, new TextureEntry("upper_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
addEntry(TEX_LOWER_TATTOO, new TextureEntry("lower_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_TATTOO));
|
||||
|
||||
addEntry(TEX_HEAD_UNIVERSAL_TATTOO, new TextureEntry("head_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_UPPER_UNIVERSAL_TATTOO, new TextureEntry("upper_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LOWER_UNIVERSAL_TATTOO, new TextureEntry("lower_universal_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_SKIRT_TATTOO, new TextureEntry("skirt_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_HAIR_TATTOO, new TextureEntry("hair_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_EYES_TATTOO, new TextureEntry("eyes_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_ARM_TATTOO, new TextureEntry("leftarm_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_LEG_TATTOO, new TextureEntry("leftleg_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX1_TATTOO, new TextureEntry("aux1_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX2_TATTOO, new TextureEntry("aux2_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX3_TATTOO, new TextureEntry("aux3_tattoo", TRUE, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_HEAD_UNIVERSAL_TATTOO, new TextureEntry("head_universal_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_UPPER_UNIVERSAL_TATTOO, new TextureEntry("upper_universal_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LOWER_UNIVERSAL_TATTOO, new TextureEntry("lower_universal_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_SKIRT_TATTOO, new TextureEntry("skirt_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_HAIR_TATTOO, new TextureEntry("hair_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_EYES_TATTOO, new TextureEntry("eyes_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_ARM_TATTOO, new TextureEntry("leftarm_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_LEFT_LEG_TATTOO, new TextureEntry("leftleg_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX1_TATTOO, new TextureEntry("aux1_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX2_TATTOO, new TextureEntry("aux2_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
addEntry(TEX_AUX3_TATTOO, new TextureEntry("aux3_tattoo", true, BAKED_NUM_INDICES, "", LLWearableType::WT_UNIVERSAL));
|
||||
|
||||
|
||||
addEntry(TEX_HEAD_BAKED, new TextureEntry("head-baked", FALSE, BAKED_HEAD, "head"));
|
||||
addEntry(TEX_UPPER_BAKED, new TextureEntry("upper-baked", FALSE, BAKED_UPPER, "upper"));
|
||||
addEntry(TEX_LOWER_BAKED, new TextureEntry("lower-baked", FALSE, BAKED_LOWER, "lower"));
|
||||
addEntry(TEX_EYES_BAKED, new TextureEntry("eyes-baked", FALSE, BAKED_EYES, "eyes"));
|
||||
addEntry(TEX_HAIR_BAKED, new TextureEntry("hair-baked", FALSE, BAKED_HAIR, "hair"));
|
||||
addEntry(TEX_SKIRT_BAKED, new TextureEntry("skirt-baked", FALSE, BAKED_SKIRT, "skirt"));
|
||||
addEntry(TEX_LEFT_ARM_BAKED, new TextureEntry("leftarm-baked", FALSE, BAKED_LEFT_ARM, "leftarm"));
|
||||
addEntry(TEX_LEFT_LEG_BAKED, new TextureEntry("leftleg-baked", FALSE, BAKED_LEFT_LEG, "leftleg"));
|
||||
addEntry(TEX_AUX1_BAKED, new TextureEntry("aux1-baked", FALSE, BAKED_AUX1, "aux1"));
|
||||
addEntry(TEX_AUX2_BAKED, new TextureEntry("aux2-baked", FALSE, BAKED_AUX2, "aux2"));
|
||||
addEntry(TEX_AUX3_BAKED, new TextureEntry("aux3-baked", FALSE, BAKED_AUX3, "aux3"));
|
||||
addEntry(TEX_HEAD_BAKED, new TextureEntry("head-baked", false, BAKED_HEAD, "head"));
|
||||
addEntry(TEX_UPPER_BAKED, new TextureEntry("upper-baked", false, BAKED_UPPER, "upper"));
|
||||
addEntry(TEX_LOWER_BAKED, new TextureEntry("lower-baked", false, BAKED_LOWER, "lower"));
|
||||
addEntry(TEX_EYES_BAKED, new TextureEntry("eyes-baked", false, BAKED_EYES, "eyes"));
|
||||
addEntry(TEX_HAIR_BAKED, new TextureEntry("hair-baked", false, BAKED_HAIR, "hair"));
|
||||
addEntry(TEX_SKIRT_BAKED, new TextureEntry("skirt-baked", false, BAKED_SKIRT, "skirt"));
|
||||
addEntry(TEX_LEFT_ARM_BAKED, new TextureEntry("leftarm-baked", false, BAKED_LEFT_ARM, "leftarm"));
|
||||
addEntry(TEX_LEFT_LEG_BAKED, new TextureEntry("leftleg-baked", false, BAKED_LEFT_LEG, "leftleg"));
|
||||
addEntry(TEX_AUX1_BAKED, new TextureEntry("aux1-baked", false, BAKED_AUX1, "aux1"));
|
||||
addEntry(TEX_AUX2_BAKED, new TextureEntry("aux2-baked", false, BAKED_AUX2, "aux2"));
|
||||
addEntry(TEX_AUX3_BAKED, new TextureEntry("aux3-baked", false, BAKED_AUX3, "aux3"));
|
||||
}
|
||||
|
||||
LLAvatarAppearanceDictionary::BakedTextures::BakedTextures()
|
||||
|
|
@ -303,15 +303,15 @@ LLWearableType::EType LLAvatarAppearanceDictionary::getTEWearableType(ETextureIn
|
|||
}
|
||||
|
||||
// static
|
||||
BOOL LLAvatarAppearanceDictionary::isBakedImageId(const LLUUID& id)
|
||||
bool LLAvatarAppearanceDictionary::isBakedImageId(const LLUUID& id)
|
||||
{
|
||||
if ((id == IMG_USE_BAKED_EYES) || (id == IMG_USE_BAKED_HAIR) || (id == IMG_USE_BAKED_HEAD) || (id == IMG_USE_BAKED_LOWER) || (id == IMG_USE_BAKED_SKIRT) || (id == IMG_USE_BAKED_UPPER)
|
||||
|| (id == IMG_USE_BAKED_LEFTARM) || (id == IMG_USE_BAKED_LEFTLEG) || (id == IMG_USE_BAKED_AUX1) || (id == IMG_USE_BAKED_AUX2) || (id == IMG_USE_BAKED_AUX3) )
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ namespace LLAvatarAppearanceDefines
|
|||
extern const S32 SCRATCH_TEX_WIDTH;
|
||||
extern const S32 SCRATCH_TEX_HEIGHT;
|
||||
|
||||
static const U32 AVATAR_HOVER = 11001;
|
||||
static constexpr U32 AVATAR_HOVER = 11001;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Enums
|
||||
|
|
@ -167,10 +167,10 @@ public:
|
|||
const std::string mDefaultImageName;
|
||||
const LLWearableType::EType mWearableType;
|
||||
// It's either a local texture xor baked
|
||||
BOOL mIsLocalTexture;
|
||||
BOOL mIsBakedTexture;
|
||||
bool mIsLocalTexture;
|
||||
bool mIsBakedTexture;
|
||||
// If it's a local texture, it may be used by a baked texture
|
||||
BOOL mIsUsedByBakedTexture;
|
||||
bool mIsUsedByBakedTexture;
|
||||
EBakedTextureIndex mBakedTextureIndex;
|
||||
};
|
||||
|
||||
|
|
@ -244,7 +244,7 @@ public:
|
|||
// Given a texture entry, determine which wearable type owns it.
|
||||
LLWearableType::EType getTEWearableType(ETextureIndex index) const;
|
||||
|
||||
static BOOL isBakedImageId(const LLUUID& id);
|
||||
static bool isBakedImageId(const LLUUID& id);
|
||||
static EBakedTextureIndex assetIdToBakedTextureIndex(const LLUUID& id);
|
||||
static LLUUID localTextureIndexToMagicId(ETextureIndex t);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ const F32 DEFAULT_AVATAR_JOINT_LOD = 0.0f;
|
|||
//-----------------------------------------------------------------------------
|
||||
// Static Data
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarJoint::sDisableLOD = FALSE;
|
||||
bool LLAvatarJoint::sDisableLOD = false;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLAvatarJoint()
|
||||
|
|
@ -66,13 +66,13 @@ LLAvatarJoint::LLAvatarJoint(const std::string &name, LLJoint *parent) :
|
|||
|
||||
void LLAvatarJoint::init()
|
||||
{
|
||||
mValid = FALSE;
|
||||
mValid = false;
|
||||
mComponents = SC_JOINT | SC_BONE | SC_AXES;
|
||||
mMinPixelArea = DEFAULT_AVATAR_JOINT_LOD;
|
||||
mPickName = PN_DEFAULT;
|
||||
mVisible = TRUE;
|
||||
mVisible = true;
|
||||
mMeshID = 0;
|
||||
mIsTransparent = FALSE;
|
||||
mIsTransparent = false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ LLAvatarJoint::~LLAvatarJoint()
|
|||
//--------------------------------------------------------------------
|
||||
// setValid()
|
||||
//--------------------------------------------------------------------
|
||||
void LLAvatarJoint::setValid( BOOL valid, BOOL recursive )
|
||||
void LLAvatarJoint::setValid( bool valid, bool recursive )
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// set visibility for this joint
|
||||
|
|
@ -103,7 +103,7 @@ void LLAvatarJoint::setValid( BOOL valid, BOOL recursive )
|
|||
for (LLJoint* child : mChildren)
|
||||
{
|
||||
LLAvatarJoint* joint = static_cast<LLAvatarJoint*>(child);
|
||||
joint->setValid(valid, TRUE);
|
||||
joint->setValid(valid, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ void LLAvatarJoint::setValid( BOOL valid, BOOL recursive )
|
|||
//--------------------------------------------------------------------
|
||||
// setSkeletonComponents()
|
||||
//--------------------------------------------------------------------
|
||||
void LLAvatarJoint::setSkeletonComponents( U32 comp, BOOL recursive )
|
||||
void LLAvatarJoint::setSkeletonComponents( U32 comp, bool recursive )
|
||||
{
|
||||
mComponents = comp;
|
||||
if (recursive)
|
||||
|
|
@ -125,7 +125,7 @@ void LLAvatarJoint::setSkeletonComponents( U32 comp, BOOL recursive )
|
|||
}
|
||||
}
|
||||
|
||||
void LLAvatarJoint::setVisible(BOOL visible, BOOL recursive)
|
||||
void LLAvatarJoint::setVisible(bool visible, bool recursive)
|
||||
{
|
||||
mVisible = visible;
|
||||
|
||||
|
|
@ -148,7 +148,7 @@ void LLAvatarJoint::updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pix
|
|||
}
|
||||
}
|
||||
|
||||
void LLAvatarJoint::updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind, bool terse_update)
|
||||
void LLAvatarJoint::updateFaceData(LLFace *face, F32 pixel_area, bool damp_wind, bool terse_update)
|
||||
{
|
||||
for (LLJoint* child : mChildren)
|
||||
{
|
||||
|
|
@ -167,10 +167,10 @@ void LLAvatarJoint::updateJointGeometry()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLAvatarJoint::updateLOD(F32 pixel_area, BOOL activate)
|
||||
bool LLAvatarJoint::updateLOD(F32 pixel_area, bool activate)
|
||||
{
|
||||
BOOL lod_changed = FALSE;
|
||||
BOOL found_lod = FALSE;
|
||||
bool lod_changed = false;
|
||||
bool found_lod = false;
|
||||
|
||||
for (LLJoint* child : mChildren)
|
||||
{
|
||||
|
|
@ -180,18 +180,18 @@ BOOL LLAvatarJoint::updateLOD(F32 pixel_area, BOOL activate)
|
|||
if (found_lod || jointLOD == DEFAULT_AVATAR_JOINT_LOD)
|
||||
{
|
||||
// we've already found a joint to enable, so enable the rest as alternatives
|
||||
lod_changed |= joint->updateLOD(pixel_area, TRUE);
|
||||
lod_changed |= joint->updateLOD(pixel_area, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pixel_area >= jointLOD || sDisableLOD)
|
||||
{
|
||||
lod_changed |= joint->updateLOD(pixel_area, TRUE);
|
||||
found_lod = TRUE;
|
||||
lod_changed |= joint->updateLOD(pixel_area, true);
|
||||
found_lod = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lod_changed |= joint->updateLOD(pixel_area, FALSE);
|
||||
lod_changed |= joint->updateLOD(pixel_area, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -222,11 +222,11 @@ void LLAvatarJoint::setMeshesToChildren()
|
|||
|
||||
LLAvatarJointCollisionVolume::LLAvatarJointCollisionVolume()
|
||||
{
|
||||
mUpdateXform = FALSE;
|
||||
mUpdateXform = false;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
U32 LLAvatarJointCollisionVolume::render( F32 pixelArea, BOOL first_pass, BOOL is_dummy )
|
||||
U32 LLAvatarJointCollisionVolume::render( F32 pixelArea, bool first_pass, bool is_dummy )
|
||||
{
|
||||
LL_ERRS() << "Cannot call render() on LLAvatarJointCollisionVolume" << LL_ENDL;
|
||||
return 0;
|
||||
|
|
@ -234,7 +234,7 @@ U32 LLAvatarJointCollisionVolume::render( F32 pixelArea, BOOL first_pass, BOOL i
|
|||
|
||||
LLVector3 LLAvatarJointCollisionVolume::getVolumePos(LLVector3 &offset)
|
||||
{
|
||||
mUpdateXform = TRUE;
|
||||
mUpdateXform = true;
|
||||
|
||||
LLVector3 result = offset;
|
||||
result.scaleVec(getScale());
|
||||
|
|
|
|||
|
|
@ -52,17 +52,17 @@ public:
|
|||
virtual ~LLAvatarJoint();
|
||||
|
||||
// Gets the validity of this joint
|
||||
BOOL getValid() { return mValid; }
|
||||
bool getValid() { return mValid; }
|
||||
|
||||
// Sets the validity of this joint
|
||||
virtual void setValid( BOOL valid, BOOL recursive=FALSE );
|
||||
virtual void setValid( bool valid, bool recursive=false );
|
||||
|
||||
// Returns true if this object is transparent.
|
||||
// This is used to determine in which order to draw objects.
|
||||
virtual BOOL isTransparent() { return mIsTransparent; }
|
||||
virtual bool isTransparent() { return mIsTransparent; }
|
||||
|
||||
// Returns true if this object should inherit scale modifiers from its immediate parent
|
||||
virtual BOOL inheritScale() { return FALSE; }
|
||||
virtual bool inheritScale() { return false; }
|
||||
|
||||
enum Components
|
||||
{
|
||||
|
|
@ -72,7 +72,7 @@ public:
|
|||
};
|
||||
|
||||
// Selects which skeleton components to draw
|
||||
void setSkeletonComponents( U32 comp, BOOL recursive = TRUE );
|
||||
void setSkeletonComponents( U32 comp, bool recursive = true );
|
||||
|
||||
// Returns which skeleton components are enables for drawing
|
||||
U32 getSkeletonComponents() { return mComponents; }
|
||||
|
|
@ -90,34 +90,34 @@ public:
|
|||
void setPickName(LLJointPickName name) { mPickName = name; }
|
||||
LLJointPickName getPickName() { return mPickName; }
|
||||
|
||||
void setVisible( BOOL visible, BOOL recursive );
|
||||
void setVisible( bool visible, bool recursive );
|
||||
|
||||
// Takes meshes in mMeshParts and sets each one as a child joint
|
||||
void setMeshesToChildren();
|
||||
|
||||
// LLViewerJoint interface
|
||||
virtual U32 render( F32 pixelArea, BOOL first_pass = TRUE, BOOL is_dummy = FALSE ) = 0;
|
||||
virtual U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false ) = 0;
|
||||
virtual void updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pixel_area);
|
||||
virtual void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE, bool terse_update = false);
|
||||
virtual BOOL updateLOD(F32 pixel_area, BOOL activate);
|
||||
virtual void updateFaceData(LLFace *face, F32 pixel_area, bool damp_wind = false, bool terse_update = false);
|
||||
virtual bool updateLOD(F32 pixel_area, bool activate);
|
||||
virtual void updateJointGeometry();
|
||||
virtual void dump();
|
||||
|
||||
|
||||
public:
|
||||
static BOOL sDisableLOD;
|
||||
static bool sDisableLOD;
|
||||
avatar_joint_mesh_list_t mMeshParts; //LLViewerJointMesh*
|
||||
void setMeshID( S32 id ) {mMeshID = id;}
|
||||
|
||||
protected:
|
||||
void init();
|
||||
|
||||
BOOL mValid;
|
||||
BOOL mIsTransparent;
|
||||
bool mValid;
|
||||
bool mIsTransparent;
|
||||
U32 mComponents;
|
||||
F32 mMinPixelArea;
|
||||
LLJointPickName mPickName;
|
||||
BOOL mVisible;
|
||||
bool mVisible;
|
||||
S32 mMeshID;
|
||||
};
|
||||
|
||||
|
|
@ -127,8 +127,8 @@ public:
|
|||
LLAvatarJointCollisionVolume();
|
||||
virtual ~LLAvatarJointCollisionVolume() {};
|
||||
|
||||
/*virtual*/ BOOL inheritScale() { return TRUE; }
|
||||
/*virtual*/ U32 render( F32 pixelArea, BOOL first_pass = TRUE, BOOL is_dummy = FALSE );
|
||||
/*virtual*/ bool inheritScale() { return true; }
|
||||
/*virtual*/ U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false );
|
||||
|
||||
void renderCollision();
|
||||
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ LLSkinJoint::~LLSkinJoint()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLSkinJoint::setupSkinJoint()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLSkinJoint::setupSkinJoint( LLAvatarJoint *joint)
|
||||
bool LLSkinJoint::setupSkinJoint( LLAvatarJoint *joint)
|
||||
{
|
||||
// find the named joint
|
||||
mJoint = joint;
|
||||
|
|
@ -119,7 +119,7 @@ BOOL LLSkinJoint::setupSkinJoint( LLAvatarJoint *joint)
|
|||
mRootToParentJointSkinOffset = totalSkinOffset(getBaseSkeletonAncestor(joint));
|
||||
mRootToParentJointSkinOffset = -mRootToParentJointSkinOffset;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -129,7 +129,7 @@ BOOL LLSkinJoint::setupSkinJoint( LLAvatarJoint *joint)
|
|||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLAvatarJointMesh::sPipelineRender = FALSE;
|
||||
bool LLAvatarJointMesh::sPipelineRender = false;
|
||||
U32 LLAvatarJointMesh::sClothingMaskImageName = 0;
|
||||
LLColor4 LLAvatarJointMesh::sClothingInnerColor;
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ LLAvatarJointMesh::LLAvatarJointMesh()
|
|||
mColor[2] = 1.0f;
|
||||
mColor[3] = 1.0f;
|
||||
mShiny = 0.0f;
|
||||
mCullBackFaces = TRUE;
|
||||
mCullBackFaces = true;
|
||||
|
||||
mMesh = NULL;
|
||||
|
||||
|
|
@ -159,11 +159,11 @@ LLAvatarJointMesh::LLAvatarJointMesh()
|
|||
mFace = NULL;
|
||||
|
||||
mMeshID = 0;
|
||||
mUpdateXform = FALSE;
|
||||
mUpdateXform = false;
|
||||
|
||||
mValid = FALSE;
|
||||
mValid = false;
|
||||
|
||||
mIsTransparent = FALSE;
|
||||
mIsTransparent = false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -182,11 +182,11 @@ LLAvatarJointMesh::~LLAvatarJointMesh()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLAvatarJointMesh::allocateSkinData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLAvatarJointMesh::allocateSkinData( U32 numSkinJoints )
|
||||
bool LLAvatarJointMesh::allocateSkinData( U32 numSkinJoints )
|
||||
{
|
||||
mSkinJoints = new LLSkinJoint[ numSkinJoints ];
|
||||
mNumSkinJoints = numSkinJoints;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -247,12 +247,12 @@ void LLAvatarJointMesh::setTexture( LLGLTexture *texture )
|
|||
{
|
||||
mLayerSet = NULL;
|
||||
//texture->bindTexture(0);
|
||||
//texture->setClamp(TRUE, TRUE);
|
||||
//texture->setClamp(true, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BOOL LLAvatarJointMesh::hasGLTexture() const
|
||||
bool LLAvatarJointMesh::hasGLTexture() const
|
||||
{
|
||||
return mTexture.notNull() && mTexture->hasGLTexture();
|
||||
}
|
||||
|
|
@ -272,7 +272,7 @@ void LLAvatarJointMesh::setLayerSet( LLTexLayerSet* layer_set )
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLAvatarJointMesh::hasComposite() const
|
||||
bool LLAvatarJointMesh::hasComposite() const
|
||||
{
|
||||
return (mLayerSet && mLayerSet->hasComposite());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class LLSkinJoint
|
|||
public:
|
||||
LLSkinJoint();
|
||||
~LLSkinJoint();
|
||||
BOOL setupSkinJoint( LLAvatarJoint *joint);
|
||||
bool setupSkinJoint( LLAvatarJoint *joint);
|
||||
|
||||
LLAvatarJoint *mJoint;
|
||||
LLVector3 mRootToJointSkinOffset;
|
||||
|
|
@ -69,7 +69,7 @@ protected:
|
|||
LLTexLayerSet* mLayerSet; // ptr to a layer set owned by the avatar
|
||||
U32 mTestImageName; // handle to a temporary texture for previewing uploads
|
||||
LLPolyMesh* mMesh; // ptr to a global polymesh
|
||||
BOOL mCullBackFaces; // true by default
|
||||
bool mCullBackFaces; // true by default
|
||||
LLFace* mFace; // ptr to a face w/ AGP copy of mesh
|
||||
|
||||
U32 mFaceIndexCount;
|
||||
|
|
@ -79,7 +79,7 @@ protected:
|
|||
S32 mMeshID;
|
||||
|
||||
public:
|
||||
static BOOL sPipelineRender;
|
||||
static bool sPipelineRender;
|
||||
//RN: this is here for testing purposes
|
||||
static U32 sClothingMaskImageName;
|
||||
static LLColor4 sClothingInnerColor;
|
||||
|
|
@ -104,14 +104,14 @@ public:
|
|||
// Sets the shape texture
|
||||
void setTexture( LLGLTexture *texture );
|
||||
|
||||
BOOL hasGLTexture() const;
|
||||
bool hasGLTexture() const;
|
||||
|
||||
void setTestTexture( U32 name ) { mTestImageName = name; }
|
||||
|
||||
// Sets layer set responsible for a dynamic shape texture (takes precedence over normal texture)
|
||||
void setLayerSet( LLTexLayerSet* layer_set );
|
||||
|
||||
BOOL hasComposite() const;
|
||||
bool hasComposite() const;
|
||||
|
||||
// Gets the poly mesh
|
||||
LLPolyMesh *getMesh();
|
||||
|
|
@ -122,20 +122,17 @@ public:
|
|||
// Sets up joint matrix data for rendering
|
||||
void setupJoint(LLAvatarJoint* current_joint);
|
||||
|
||||
// Render time method to upload batches of joint matrices
|
||||
void uploadJointMatrices();
|
||||
|
||||
// Sets ID for picking
|
||||
void setMeshID( S32 id ) {mMeshID = id;}
|
||||
|
||||
// Gets ID for picking
|
||||
S32 getMeshID() { return mMeshID; }
|
||||
|
||||
void setIsTransparent(BOOL is_transparent) { mIsTransparent = is_transparent; }
|
||||
void setIsTransparent(bool is_transparent) { mIsTransparent = is_transparent; }
|
||||
|
||||
private:
|
||||
// Allocate skin data
|
||||
BOOL allocateSkinData( U32 numSkinJoints );
|
||||
bool allocateSkinData( U32 numSkinJoints );
|
||||
|
||||
// Free skin data
|
||||
void freeSkinData();
|
||||
|
|
|
|||
|
|
@ -41,16 +41,16 @@ LLDriverParamInfo::LLDriverParamInfo() :
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLDriverParamInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLDriverParamInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert( node->hasName( "param" ) && node->getChildByName( "param_driver" ) );
|
||||
|
||||
if( !LLViewerVisualParamInfo::parseXml( node ))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
LLXmlTreeNode* param_driver_node = node->getChildByName( "param_driver" );
|
||||
if( !param_driver_node )
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
for (LLXmlTreeNode* child = param_driver_node->getChildByName( "driven" );
|
||||
child;
|
||||
|
|
@ -90,10 +90,10 @@ BOOL LLDriverParamInfo::parseXml(LLXmlTreeNode* node)
|
|||
else
|
||||
{
|
||||
LL_ERRS() << "<driven> Unable to resolve driven parameter: " << driven_id << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -187,18 +187,18 @@ LLDriverParam::~LLDriverParam()
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLDriverParam::setInfo(LLDriverParamInfo *info)
|
||||
bool LLDriverParam::setInfo(LLDriverParamInfo *info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
if (info->mID < 0)
|
||||
return FALSE;
|
||||
return false;
|
||||
mInfo = info;
|
||||
mID = info->mID;
|
||||
info->mDriverParam = this;
|
||||
|
||||
setWeight(getDefaultWeight());
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* LLDriverParam::cloneParam(LLWearable* wearable) const
|
||||
|
|
@ -422,7 +422,7 @@ const LLVector4a* LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **po
|
|||
|
||||
S32 LLDriverParam::getDrivenParamsCount() const
|
||||
{
|
||||
return mDriven.size();
|
||||
return static_cast<S32>(mDriven.size());
|
||||
}
|
||||
|
||||
const LLViewerVisualParam* LLDriverParam::getDrivenParam(S32 index) const
|
||||
|
|
@ -461,25 +461,25 @@ void LLDriverParam::stopAnimating()
|
|||
|
||||
for(LLDrivenEntry& driven : mDriven)
|
||||
{
|
||||
driven.mParam->setAnimating(FALSE);
|
||||
driven.mParam->setAnimating(false);
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLDriverParam::linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params)
|
||||
bool LLDriverParam::linkDrivenParams(visual_param_mapper mapper, bool only_cross_params)
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
for (LLDrivenEntryInfo& driven_info : getInfo()->mDrivenInfoList)
|
||||
{
|
||||
S32 driven_id = driven_info.mDrivenID;
|
||||
|
||||
// check for already existing links. Do not overwrite.
|
||||
BOOL found = FALSE;
|
||||
bool found = false;
|
||||
for (auto& driven : mDriven)
|
||||
{
|
||||
if (driven.mInfo->mDrivenID == driven_id)
|
||||
{
|
||||
found = TRUE;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -494,7 +494,7 @@ BOOL LLDriverParam::linkDrivenParams(visual_param_mapper mapper, BOOL only_cross
|
|||
}
|
||||
else
|
||||
{
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public:
|
|||
LLDriverParamInfo();
|
||||
/*virtual*/ ~LLDriverParamInfo() {};
|
||||
|
||||
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
|
||||
/*virtual*/ bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
/*virtual*/ void toStream(std::ostream &out);
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ public:
|
|||
// Special: These functions are overridden by child classes
|
||||
LLDriverParamInfo* getInfo() const { return (LLDriverParamInfo*)mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
BOOL setInfo(LLDriverParamInfo* info);
|
||||
bool setInfo(LLDriverParamInfo* info);
|
||||
|
||||
LLAvatarAppearance* getAvatarAppearance() { return mAvatarAppearance; }
|
||||
const LLAvatarAppearance* getAvatarAppearance() const { return mAvatarAppearance; }
|
||||
|
|
@ -104,7 +104,7 @@ public:
|
|||
/*virtual*/ void setWeight(F32 weight);
|
||||
/*virtual*/ void setAnimationTarget(F32 target_value);
|
||||
/*virtual*/ void stopAnimating();
|
||||
/*virtual*/ BOOL linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params);
|
||||
/*virtual*/ bool linkDrivenParams(visual_param_mapper mapper, bool only_cross_params);
|
||||
/*virtual*/ void resetDrivenParams();
|
||||
|
||||
// LLViewerVisualParam Virtual functions
|
||||
|
|
@ -130,10 +130,10 @@ protected:
|
|||
|
||||
LL_ALIGN_16(LLVector4a mDefaultVec); // temp holder
|
||||
entry_list_t mDriven;
|
||||
LLViewerVisualParam* mCurrentDistortionParam;
|
||||
LLViewerVisualParam* mCurrentDistortionParam{ nullptr };
|
||||
// Backlink only; don't make this an LLPointer.
|
||||
LLAvatarAppearance* mAvatarAppearance;
|
||||
LLWearable* mWearablep;
|
||||
LLAvatarAppearance* mAvatarAppearance{ nullptr };
|
||||
LLWearable* mWearablep{ nullptr };
|
||||
};
|
||||
|
||||
#endif // LL_LLDRIVERPARAM_H
|
||||
|
|
|
|||
|
|
@ -36,14 +36,14 @@
|
|||
|
||||
|
||||
LLLocalTextureObject::LLLocalTextureObject() :
|
||||
mIsBakedReady(FALSE),
|
||||
mIsBakedReady(false),
|
||||
mDiscard(MAX_DISCARD_LEVEL+1)
|
||||
{
|
||||
mImage = NULL;
|
||||
}
|
||||
|
||||
LLLocalTextureObject::LLLocalTextureObject(LLGLTexture* image, const LLUUID& id) :
|
||||
mIsBakedReady(FALSE),
|
||||
mIsBakedReady(false),
|
||||
mDiscard(MAX_DISCARD_LEVEL+1)
|
||||
{
|
||||
mImage = image;
|
||||
|
|
@ -109,7 +109,7 @@ LLTexLayer* LLLocalTextureObject::getTexLayer(const std::string &name)
|
|||
|
||||
U32 LLLocalTextureObject::getNumTexLayers() const
|
||||
{
|
||||
return mTexLayers.size();
|
||||
return static_cast<U32>(mTexLayers.size());
|
||||
}
|
||||
|
||||
LLUUID LLLocalTextureObject::getID() const
|
||||
|
|
@ -122,7 +122,7 @@ S32 LLLocalTextureObject::getDiscard() const
|
|||
return mDiscard;
|
||||
}
|
||||
|
||||
BOOL LLLocalTextureObject::getBakedReady() const
|
||||
bool LLLocalTextureObject::getBakedReady() const
|
||||
{
|
||||
return mIsBakedReady;
|
||||
}
|
||||
|
|
@ -132,11 +132,11 @@ void LLLocalTextureObject::setImage(LLGLTexture* new_image)
|
|||
mImage = new_image;
|
||||
}
|
||||
|
||||
BOOL LLLocalTextureObject::setTexLayer(LLTexLayer *new_tex_layer, U32 index)
|
||||
bool LLLocalTextureObject::setTexLayer(LLTexLayer *new_tex_layer, U32 index)
|
||||
{
|
||||
if (index >= getNumTexLayers() )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (new_tex_layer == NULL)
|
||||
|
|
@ -153,47 +153,47 @@ BOOL LLLocalTextureObject::setTexLayer(LLTexLayer *new_tex_layer, U32 index)
|
|||
}
|
||||
mTexLayers[index] = layer;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLLocalTextureObject::addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable)
|
||||
bool LLLocalTextureObject::addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable)
|
||||
{
|
||||
if (new_tex_layer == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLTexLayer *layer = new LLTexLayer(*new_tex_layer, wearable);
|
||||
layer->setLTO(this);
|
||||
mTexLayers.push_back(layer);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLLocalTextureObject::addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable)
|
||||
bool LLLocalTextureObject::addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable)
|
||||
{
|
||||
if (new_tex_layer == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLTexLayer *layer = new LLTexLayer(*new_tex_layer, this, wearable);
|
||||
layer->setLTO(this);
|
||||
mTexLayers.push_back(layer);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLLocalTextureObject::removeTexLayer(U32 index)
|
||||
bool LLLocalTextureObject::removeTexLayer(U32 index)
|
||||
{
|
||||
if (index >= getNumTexLayers())
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
tex_layer_vec_t::iterator iter = mTexLayers.begin();
|
||||
iter += index;
|
||||
|
||||
delete *iter;
|
||||
mTexLayers.erase(iter);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLLocalTextureObject::setID(LLUUID new_id)
|
||||
|
|
@ -206,7 +206,7 @@ void LLLocalTextureObject::setDiscard(S32 new_discard)
|
|||
mDiscard = new_discard;
|
||||
}
|
||||
|
||||
void LLLocalTextureObject::setBakedReady(BOOL ready)
|
||||
void LLLocalTextureObject::setBakedReady(bool ready)
|
||||
{
|
||||
mIsBakedReady = ready;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,17 +53,17 @@ public:
|
|||
U32 getNumTexLayers() const;
|
||||
LLUUID getID() const;
|
||||
S32 getDiscard() const;
|
||||
BOOL getBakedReady() const;
|
||||
bool getBakedReady() const;
|
||||
|
||||
void setImage(LLGLTexture* new_image);
|
||||
BOOL setTexLayer(LLTexLayer *new_tex_layer, U32 index);
|
||||
BOOL addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable);
|
||||
BOOL addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable);
|
||||
BOOL removeTexLayer(U32 index);
|
||||
bool setTexLayer(LLTexLayer *new_tex_layer, U32 index);
|
||||
bool addTexLayer(LLTexLayer *new_tex_layer, LLWearable *wearable);
|
||||
bool addTexLayer(LLTexLayerTemplate *new_tex_layer, LLWearable *wearable);
|
||||
bool removeTexLayer(U32 index);
|
||||
|
||||
void setID(LLUUID new_id);
|
||||
void setDiscard(S32 new_discard);
|
||||
void setBakedReady(BOOL ready);
|
||||
void setBakedReady(bool ready);
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ private:
|
|||
|
||||
LLUUID mID;
|
||||
|
||||
BOOL mIsBakedReady;
|
||||
bool mIsBakedReady;
|
||||
S32 mDiscard;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ LLPolyMeshSharedData::LLPolyMeshSharedData()
|
|||
mTexCoords = NULL;
|
||||
mDetailTexCoords = NULL;
|
||||
mWeights = NULL;
|
||||
mHasWeights = FALSE;
|
||||
mHasDetailTexCoords = FALSE;
|
||||
mHasWeights = false;
|
||||
mHasDetailTexCoords = false;
|
||||
|
||||
mNumFaces = 0;
|
||||
mFaces = NULL;
|
||||
|
|
@ -225,7 +225,7 @@ U32 LLPolyMeshSharedData::getNumKB()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLPolyMeshSharedData::allocateVertexData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
|
||||
bool LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
|
||||
{
|
||||
U32 i;
|
||||
mBaseCoords = (LLVector4a*) ll_aligned_malloc_16(numVertices*sizeof(LLVector4a));
|
||||
|
|
@ -243,34 +243,34 @@ BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
|
|||
mWeights[i] = 0.f;
|
||||
}
|
||||
mNumVertices = numVertices;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLPolyMeshSharedData::allocateFaceData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMeshSharedData::allocateFaceData( U32 numFaces )
|
||||
bool LLPolyMeshSharedData::allocateFaceData( U32 numFaces )
|
||||
{
|
||||
mFaces = new LLPolyFace[ numFaces ];
|
||||
mNumFaces = numFaces;
|
||||
mNumTriangleIndices = mNumFaces * 3;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLPolyMeshSharedData::allocateJointNames()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMeshSharedData::allocateJointNames( U32 numJointNames )
|
||||
bool LLPolyMeshSharedData::allocateJointNames( U32 numJointNames )
|
||||
{
|
||||
mJointNames = new std::string[ numJointNames ];
|
||||
mNumJointNames = numJointNames;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// LLPolyMeshSharedData::loadMesh()
|
||||
//--------------------------------------------------------------------
|
||||
BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
||||
bool LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// Open the file
|
||||
|
|
@ -278,13 +278,13 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if(fileName.empty())
|
||||
{
|
||||
LL_ERRS() << "Filename is Empty!" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
LLFILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/
|
||||
if (!fp)
|
||||
{
|
||||
LL_ERRS() << "can't open: " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -299,7 +299,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
//-------------------------------------------------------------------------
|
||||
// Check for proper binary header
|
||||
//-------------------------------------------------------------------------
|
||||
BOOL status = FALSE;
|
||||
bool status = false;
|
||||
if ( strncmp(header, HEADER_BINARY, strlen(HEADER_BINARY)) == 0 ) /*Flawfinder: ignore*/
|
||||
{
|
||||
LL_DEBUGS() << "Loading " << fileName << LL_ENDL;
|
||||
|
|
@ -317,11 +317,11 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read HasWeights flag from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if (!isLOD())
|
||||
{
|
||||
mHasWeights = (hasWeights==0) ? FALSE : TRUE;
|
||||
mHasWeights = hasWeights > 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -332,7 +332,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read HasDetailTexCoords flag from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -344,7 +344,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << "can't read Position from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
setPosition( position );
|
||||
|
||||
|
|
@ -357,7 +357,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << "can't read RotationAngles from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
U8 rotationOrder;
|
||||
|
|
@ -366,7 +366,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read RotationOrder from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
rotationOrder = 0;
|
||||
|
|
@ -385,7 +385,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << "can't read Scale from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
setScale( scale );
|
||||
|
||||
|
|
@ -406,7 +406,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read NumVertices from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
allocateVertexData( numVertices );
|
||||
|
|
@ -421,7 +421,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << "can't read Coordinates from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -435,7 +435,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << " can't read Normals from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -449,7 +449,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << " can't read Binormals from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -461,7 +461,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != numVertices)
|
||||
{
|
||||
LL_ERRS() << "can't read TexCoords from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -474,7 +474,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != numVertices)
|
||||
{
|
||||
LL_ERRS() << "can't read DetailTexCoords from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -488,7 +488,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != numVertices)
|
||||
{
|
||||
LL_ERRS() << "can't read Weights from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -502,7 +502,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read NumFaces from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
allocateFaceData( numFaces );
|
||||
|
||||
|
|
@ -520,7 +520,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_ERRS() << "can't read Face[" << i << "] from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if (mReferenceData)
|
||||
{
|
||||
|
|
@ -577,7 +577,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read NumSkinJoints from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
allocateJointNames( numSkinJoints );
|
||||
}
|
||||
|
|
@ -593,7 +593,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_ERRS() << "can't read Skin[" << i << "].Name from " << fileName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string *jn = &mJointNames[i];
|
||||
|
|
@ -615,7 +615,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
std::string morph_name(morphName);
|
||||
LLPolyMorphData* morph_data = new LLPolyMorphData(morph_name);
|
||||
|
||||
BOOL result = morph_data->loadBinary(fp, this);
|
||||
bool result = morph_data->loadBinary(fp, this);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
|
|
@ -705,12 +705,12 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
|
|||
}
|
||||
}
|
||||
|
||||
status = TRUE;
|
||||
status = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "invalid mesh file header: " << fileName << LL_ENDL;
|
||||
status = FALSE;
|
||||
status = false;
|
||||
}
|
||||
|
||||
if (0 == mNumJointNames)
|
||||
|
|
@ -983,7 +983,7 @@ void LLPolyMesh::initializeForMorph()
|
|||
LLVector4a::memcpyNonAliased16((F32*) mScaledBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices);
|
||||
LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices + mSharedData->mNumVertices%2));
|
||||
|
||||
for (U32 i = 0; i < mSharedData->mNumVertices; ++i)
|
||||
for (S32 i = 0; i < mSharedData->mNumVertices; ++i)
|
||||
{
|
||||
mClothingWeights[i].clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,8 +79,8 @@ private:
|
|||
LLVector2 *mDetailTexCoords;
|
||||
F32 *mWeights;
|
||||
|
||||
BOOL mHasWeights;
|
||||
BOOL mHasDetailTexCoords;
|
||||
bool mHasWeights;
|
||||
bool mHasDetailTexCoords;
|
||||
|
||||
// face data
|
||||
S32 mNumFaces;
|
||||
|
|
@ -119,17 +119,17 @@ private:
|
|||
void setRotation( const LLQuaternion &rot ) { mRotation = rot; }
|
||||
void setScale( const LLVector3 &scale ) { mScale = scale; }
|
||||
|
||||
BOOL allocateVertexData( U32 numVertices );
|
||||
bool allocateVertexData( U32 numVertices );
|
||||
|
||||
BOOL allocateFaceData( U32 numFaces );
|
||||
bool allocateFaceData( U32 numFaces );
|
||||
|
||||
BOOL allocateJointNames( U32 numJointNames );
|
||||
bool allocateJointNames( U32 numJointNames );
|
||||
|
||||
// Retrieve the number of KB of memory used by this instance
|
||||
U32 getNumKB();
|
||||
|
||||
// Load mesh data from file
|
||||
BOOL loadMesh( const std::string& fileName );
|
||||
bool loadMesh( const std::string& fileName );
|
||||
|
||||
public:
|
||||
void genIndices(S32 offset);
|
||||
|
|
@ -138,7 +138,7 @@ public:
|
|||
|
||||
const S32 *getSharedVert(S32 vert);
|
||||
|
||||
BOOL isLOD() { return (mReferenceData != NULL); }
|
||||
bool isLOD() { return (mReferenceData != NULL); }
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -204,13 +204,13 @@ public:
|
|||
}
|
||||
|
||||
// Returns whether or not the mesh has detail texture coords
|
||||
BOOL hasDetailTexCoords() {
|
||||
bool hasDetailTexCoords() {
|
||||
llassert (mSharedData);
|
||||
return mSharedData->mHasDetailTexCoords;
|
||||
}
|
||||
|
||||
// Returns whether or not the mesh has vertex weights
|
||||
BOOL hasWeights() const{
|
||||
bool hasWeights() const{
|
||||
llassert (mSharedData);
|
||||
return mSharedData->mHasWeights;
|
||||
}
|
||||
|
|
@ -316,7 +316,7 @@ public:
|
|||
// Get indices
|
||||
U32* getIndices() { return mSharedData ? mSharedData->mTriangleIndices : NULL; }
|
||||
|
||||
BOOL isLOD() { return mSharedData && mSharedData->isLOD(); }
|
||||
bool isLOD() { return mSharedData && mSharedData->isLOD(); }
|
||||
|
||||
void setAvatar(LLAvatarAppearance* avatarp) { mAvatarp = avatarp; }
|
||||
LLAvatarAppearance* getAvatar() { return mAvatarp; }
|
||||
|
|
|
|||
|
|
@ -104,17 +104,17 @@ LLPolyMorphData::~LLPolyMorphData()
|
|||
//-----------------------------------------------------------------------------
|
||||
// loadBinary()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
||||
bool LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
||||
{
|
||||
S32 numVertices;
|
||||
S32 numRead;
|
||||
size_t numRead;
|
||||
|
||||
numRead = fread(&numVertices, sizeof(S32), 1, fp);
|
||||
llendianswizzle(&numVertices, sizeof(S32), 1);
|
||||
if (numRead != 1)
|
||||
{
|
||||
LL_WARNS() << "Can't read number of morph target vertices" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -151,14 +151,14 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
if (numRead != 1)
|
||||
{
|
||||
LL_WARNS() << "Can't read morph target vertex number" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mVertexIndices[v] > 10000)
|
||||
{
|
||||
// Bad install? These are usually .llm files from 'character' fodler
|
||||
LL_WARNS() << "Bad morph index " << v << ": " << mVertexIndices[v] << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_WARNS() << "Can't read morph target vertex coordinates" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
F32 magnitude = mCoords[v].getLength3().getF32();
|
||||
|
|
@ -187,7 +187,7 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_WARNS() << "Can't read morph target normal" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
numRead = fread(&mBinormals[v], sizeof(F32), 3, fp);
|
||||
|
|
@ -195,7 +195,7 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
if (numRead != 3)
|
||||
{
|
||||
LL_WARNS() << "Can't read morph target binormal" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -204,7 +204,7 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
if (numRead != 2)
|
||||
{
|
||||
LL_WARNS() << "Can't read morph target uv" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
mNumIndices++;
|
||||
|
|
@ -213,7 +213,7 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
mAvgDistortion.mul(1.f/(F32)mNumIndices);
|
||||
mAvgDistortion.normalize3fast();
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -256,23 +256,23 @@ void LLPolyMorphData::freeData()
|
|||
// LLPolyMorphTargetInfo()
|
||||
//-----------------------------------------------------------------------------
|
||||
LLPolyMorphTargetInfo::LLPolyMorphTargetInfo()
|
||||
: mIsClothingMorph(FALSE)
|
||||
: mIsClothingMorph(false)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLPolyMorphTargetInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLPolyMorphTargetInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert( node->hasName( "param" ) && node->getChildByName( "param_morph" ) );
|
||||
|
||||
if (!LLViewerVisualParamInfo::parseXml(node))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
// Get mixed-case name
|
||||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if( !node->getFastAttributeString( name_string, mMorphName ) )
|
||||
{
|
||||
LL_WARNS() << "Avatar file: <param> is missing name attribute" << LL_ENDL;
|
||||
return FALSE; // Continue, ignoring this tag
|
||||
return false; // Continue, ignoring this tag
|
||||
}
|
||||
|
||||
static LLStdStringHandle clothing_morph_string = LLXmlTree::addAttributeString("clothing_morph");
|
||||
|
|
@ -284,7 +284,7 @@ BOOL LLPolyMorphTargetInfo::parseXml(LLXmlTreeNode* node)
|
|||
{
|
||||
LL_WARNS() << "Failed to getChildByName(\"param_morph\")"
|
||||
<< LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (LLXmlTreeNode* child_node = paramNode->getFirstChild();
|
||||
|
|
@ -310,7 +310,7 @@ BOOL LLPolyMorphTargetInfo::parseXml(LLXmlTreeNode* node)
|
|||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -353,11 +353,11 @@ LLPolyMorphTarget::~LLPolyMorphTarget()
|
|||
//-----------------------------------------------------------------------------
|
||||
// setInfo()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
|
||||
bool LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
if (info->mID < 0)
|
||||
return FALSE;
|
||||
return false;
|
||||
mInfo = info;
|
||||
mID = info->mID;
|
||||
setWeight(getDefaultWeight());
|
||||
|
|
@ -384,8 +384,8 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
|
|||
if (!mMorphData)
|
||||
{
|
||||
const std::string driven_tag = "_Driven";
|
||||
U32 pos = morph_param_name.find(driven_tag);
|
||||
if (pos > 0)
|
||||
auto pos = morph_param_name.find(driven_tag);
|
||||
if (pos != std::string::npos && pos > 0)
|
||||
{
|
||||
morph_param_name = morph_param_name.substr(0,pos);
|
||||
mMorphData = mMesh->getMorphData(morph_param_name);
|
||||
|
|
@ -394,9 +394,9 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
|
|||
if (!mMorphData)
|
||||
{
|
||||
LL_WARNS() << "No morph target named " << morph_param_name << " found in mesh." << LL_ENDL;
|
||||
return FALSE; // Continue, ignoring this tag
|
||||
return false; // Continue, ignoring this tag
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* LLPolyMorphTarget::cloneParam(LLWearable* wearable) const
|
||||
|
|
@ -408,7 +408,7 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPolyMorphTarget::parseData(LLXmlTreeNode* node)
|
||||
bool LLPolyMorphTarget::parseData(LLXmlTreeNode* node)
|
||||
{
|
||||
LLPolyMorphTargetInfo* info = new LLPolyMorphTargetInfo;
|
||||
|
||||
|
|
@ -416,9 +416,9 @@ BOOL LLPolyMorphTarget::parseData(LLXmlTreeNode* node)
|
|||
if (!setInfo(info))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -659,7 +659,7 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )
|
|||
//-----------------------------------------------------------------------------
|
||||
// applyMask()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLPolyMorphTarget::applyMask(U8 *maskTextureData, S32 width, S32 height, S32 num_components, BOOL invert)
|
||||
void LLPolyMorphTarget::applyMask(const U8 *maskTextureData, S32 width, S32 height, S32 num_components, bool invert)
|
||||
{
|
||||
LLVector4a *clothing_weights = getInfo()->mIsClothingMorph ? mMesh->getWritableClothingWeights() : NULL;
|
||||
|
||||
|
|
@ -749,7 +749,7 @@ void LLPolyMorphTarget::applyVolumeChanges(F32 delta_weight)
|
|||
LLPolyVertexMask::LLPolyVertexMask(LLPolyMorphData* morph_data)
|
||||
: mWeights(new F32[morph_data->mNumIndices]),
|
||||
mMorphData(morph_data),
|
||||
mWeightsGenerated(FALSE)
|
||||
mWeightsGenerated(false)
|
||||
{
|
||||
llassert(mMorphData != NULL);
|
||||
llassert(mMorphData->mNumIndices > 0);
|
||||
|
|
@ -780,10 +780,10 @@ LLPolyVertexMask::~LLPolyVertexMask()
|
|||
//-----------------------------------------------------------------------------
|
||||
// generateMask()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLPolyVertexMask::generateMask(U8 *maskTextureData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4a *clothing_weights)
|
||||
void LLPolyVertexMask::generateMask(const U8 *maskTextureData, S32 width, S32 height, S32 num_components, bool invert, LLVector4a *clothing_weights)
|
||||
{
|
||||
// RN debug output that uses Image Debugger (http://www.cs.unc.edu/~baxter/projects/imdebug/)
|
||||
// BOOL debugImg = FALSE;
|
||||
// bool debugImg = false;
|
||||
// if (debugImg)
|
||||
// {
|
||||
// if (invert)
|
||||
|
|
@ -827,7 +827,7 @@ void LLPolyVertexMask::generateMask(U8 *maskTextureData, S32 width, S32 height,
|
|||
clothing_weights[vertIndex].getF32ptr()[VW] = mWeights[index];
|
||||
}
|
||||
}
|
||||
mWeightsGenerated = TRUE;
|
||||
mWeightsGenerated = true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public:
|
|||
~LLPolyMorphData();
|
||||
LLPolyMorphData(const LLPolyMorphData &rhs);
|
||||
|
||||
BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
|
||||
bool loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
|
||||
const std::string& getName() { return mName; }
|
||||
|
||||
public:
|
||||
|
|
@ -84,14 +84,14 @@ public:
|
|||
LLPolyVertexMask(const LLPolyVertexMask& pOther);
|
||||
~LLPolyVertexMask();
|
||||
|
||||
void generateMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert, LLVector4a *clothing_weights);
|
||||
void generateMask(const U8 *maskData, S32 width, S32 height, S32 num_components, bool invert, LLVector4a *clothing_weights);
|
||||
F32* getMorphMaskWeights();
|
||||
|
||||
|
||||
protected:
|
||||
F32* mWeights;
|
||||
LLPolyMorphData *mMorphData;
|
||||
BOOL mWeightsGenerated;
|
||||
bool mWeightsGenerated;
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -129,11 +129,11 @@ public:
|
|||
LLPolyMorphTargetInfo();
|
||||
/*virtual*/ ~LLPolyMorphTargetInfo() {};
|
||||
|
||||
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
|
||||
/*virtual*/ bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
protected:
|
||||
std::string mMorphName;
|
||||
BOOL mIsClothingMorph;
|
||||
bool mIsClothingMorph;
|
||||
typedef std::vector<LLPolyVolumeMorphInfo> volume_info_list_t;
|
||||
volume_info_list_t mVolumeInfoList;
|
||||
};
|
||||
|
|
@ -154,12 +154,12 @@ public:
|
|||
// Special: These functions are overridden by child classes
|
||||
LLPolyMorphTargetInfo* getInfo() const { return (LLPolyMorphTargetInfo*)mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
BOOL setInfo(LLPolyMorphTargetInfo *info);
|
||||
bool setInfo(LLPolyMorphTargetInfo *info);
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
///*virtual*/ bool parseData(LLXmlTreeNode* node);
|
||||
/*virtual*/ void apply( ESex sex );
|
||||
|
||||
// LLViewerVisualParam Virtual functions
|
||||
|
|
@ -170,7 +170,7 @@ public:
|
|||
/*virtual*/ const LLVector4a* getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh);
|
||||
/*virtual*/ const LLVector4a* getNextDistortion(U32 *index, LLPolyMesh **poly_mesh);
|
||||
|
||||
void applyMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert);
|
||||
void applyMask(const U8 *maskData, S32 width, S32 height, S32 num_components, bool invert);
|
||||
void addPendingMorphMask() { mNumMorphMasksPending++; }
|
||||
|
||||
void applyVolumeChanges(F32 delta_weight); // SL-315 - for resetSkeleton()
|
||||
|
|
@ -183,7 +183,7 @@ protected:
|
|||
LLPolyVertexMask * mVertMask;
|
||||
ESex mLastSex;
|
||||
// number of morph masks that haven't been generated, must be 0 before this morph is applied
|
||||
BOOL mNumMorphMasksPending;
|
||||
S32 mNumMorphMasksPending;
|
||||
|
||||
typedef std::vector<LLPolyVolumeMorph> volume_list_t;
|
||||
volume_list_t mVolumeMorphs;
|
||||
|
|
|
|||
|
|
@ -45,12 +45,12 @@ LLPolySkeletalDistortionInfo::LLPolySkeletalDistortionInfo()
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert( node->hasName( "param" ) && node->getChildByName( "param_skeleton" ) );
|
||||
|
||||
if (!LLViewerVisualParamInfo::parseXml(node))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
LLXmlTreeNode* skeletalParam = node->getChildByName("param_skeleton");
|
||||
|
||||
|
|
@ -58,7 +58,7 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
|||
{
|
||||
LL_WARNS() << "Failed to getChildByName(\"param_skeleton\")"
|
||||
<< LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
for( LLXmlTreeNode* bone = skeletalParam->getFirstChild(); bone; bone = skeletalParam->getNextChild() )
|
||||
|
|
@ -68,7 +68,7 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
|||
std::string name;
|
||||
LLVector3 scale;
|
||||
LLVector3 pos;
|
||||
BOOL haspos = FALSE;
|
||||
bool haspos = false;
|
||||
|
||||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if (!bone->getFastAttributeString(name_string, name))
|
||||
|
|
@ -88,7 +88,7 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
|||
static LLStdStringHandle offset_string = LLXmlTree::addAttributeString("offset");
|
||||
if (bone->getFastAttributeVector3(offset_string, pos))
|
||||
{
|
||||
haspos = TRUE;
|
||||
haspos = true;
|
||||
}
|
||||
mBoneInfoList.push_back(LLPolySkeletalBoneInfo(name, scale, pos, haspos));
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -133,11 +133,11 @@ LLPolySkeletalDistortion::~LLPolySkeletalDistortion()
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
|
||||
bool LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
|
||||
{
|
||||
if (info->mID < 0)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mInfo = info;
|
||||
mID = info->mID;
|
||||
|
|
@ -151,7 +151,7 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
|
|||
// There's no point continuing after this error - means
|
||||
// that either the skeleton or lad file is broken.
|
||||
LL_WARNS() << "Joint " << bone_info.mBoneName << " not found." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// store it
|
||||
|
|
@ -174,7 +174,7 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
|
|||
mJointOffsets[joint] = bone_info.mPositionDeformation;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* LLPolySkeletalDistortion::cloneParam(LLWearable* wearable) const
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ class LLAvatarAppearance;
|
|||
//-----------------------------------------------------------------------------
|
||||
struct LLPolySkeletalBoneInfo
|
||||
{
|
||||
LLPolySkeletalBoneInfo(std::string &name, LLVector3 &scale, LLVector3 &pos, BOOL haspos)
|
||||
LLPolySkeletalBoneInfo(std::string &name, LLVector3 &scale, LLVector3 &pos, bool haspos)
|
||||
: mBoneName(name),
|
||||
mScaleDeformation(scale),
|
||||
mPositionDeformation(pos),
|
||||
|
|
@ -59,7 +59,7 @@ struct LLPolySkeletalBoneInfo
|
|||
std::string mBoneName;
|
||||
LLVector3 mScaleDeformation;
|
||||
LLVector3 mPositionDeformation;
|
||||
BOOL mHasPositionDeformation;
|
||||
bool mHasPositionDeformation;
|
||||
};
|
||||
|
||||
class alignas(16) LLPolySkeletalDistortionInfo : public LLViewerVisualParamInfo
|
||||
|
|
@ -71,7 +71,7 @@ public:
|
|||
LLPolySkeletalDistortionInfo();
|
||||
/*virtual*/ ~LLPolySkeletalDistortionInfo() {};
|
||||
|
||||
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
|
||||
/*virtual*/ bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
protected:
|
||||
typedef std::vector<LLPolySkeletalBoneInfo> bone_info_list_t;
|
||||
|
|
@ -92,12 +92,12 @@ public:
|
|||
// Special: These functions are overridden by child classes
|
||||
LLPolySkeletalDistortionInfo* getInfo() const { return (LLPolySkeletalDistortionInfo*)mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
BOOL setInfo(LLPolySkeletalDistortionInfo *info);
|
||||
bool setInfo(LLPolySkeletalDistortionInfo *info);
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
///*virtual*/ bool parseData(LLXmlTreeNode* node);
|
||||
/*virtual*/ void apply( ESex sex );
|
||||
|
||||
// LLViewerVisualParam Virtual functions
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ LLTexGlobalColor::~LLTexGlobalColor()
|
|||
//std::for_each(mParamColorList.begin(), mParamColorList.end(), DeletePointer());
|
||||
}
|
||||
|
||||
BOOL LLTexGlobalColor::setInfo(LLTexGlobalColorInfo *info)
|
||||
bool LLTexGlobalColor::setInfo(LLTexGlobalColorInfo *info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
mInfo = info;
|
||||
|
|
@ -58,15 +58,15 @@ BOOL LLTexGlobalColor::setInfo(LLTexGlobalColorInfo *info)
|
|||
for (LLTexLayerParamColorInfo* color_info : mInfo->mParamColorInfoList)
|
||||
{
|
||||
LLTexParamGlobalColor* param_color = new LLTexParamGlobalColor(this);
|
||||
if (!param_color->setInfo(color_info, TRUE))
|
||||
if (!param_color->setInfo(color_info, true))
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mParamGlobalColorList.push_back(param_color);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
LLColor4 LLTexGlobalColor::getColor() const
|
||||
|
|
@ -135,14 +135,14 @@ LLTexGlobalColorInfo::~LLTexGlobalColorInfo()
|
|||
mParamColorInfoList.clear();
|
||||
}
|
||||
|
||||
BOOL LLTexGlobalColorInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLTexGlobalColorInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
// name attribute
|
||||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if (!node->getFastAttributeString(name_string, mName))
|
||||
{
|
||||
LL_WARNS() << "<global_color> element is missing name attribute." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
// <param> sub-element
|
||||
for (LLXmlTreeNode* child = node->getChildByName("param");
|
||||
|
|
@ -156,10 +156,10 @@ BOOL LLTexGlobalColorInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (!info->parseXml(child))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mParamColorInfoList.push_back(info);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public:
|
|||
|
||||
LLTexGlobalColorInfo* getInfo() const { return mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
BOOL setInfo(LLTexGlobalColorInfo *info);
|
||||
bool setInfo(LLTexGlobalColorInfo *info);
|
||||
|
||||
LLAvatarAppearance* getAvatarAppearance() const { return mAvatarAppearance; }
|
||||
LLColor4 getColor() const;
|
||||
|
|
@ -62,7 +62,7 @@ public:
|
|||
LLTexGlobalColorInfo();
|
||||
~LLTexGlobalColorInfo();
|
||||
|
||||
BOOL parseXml(LLXmlTreeNode* node);
|
||||
bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
private:
|
||||
param_color_info_list_t mParamColorInfoList;
|
||||
|
|
|
|||
|
|
@ -59,17 +59,17 @@ public:
|
|||
LLTexLayerInfo();
|
||||
~LLTexLayerInfo();
|
||||
|
||||
BOOL parseXml(LLXmlTreeNode* node);
|
||||
BOOL createVisualParams(LLAvatarAppearance *appearance);
|
||||
BOOL isUserSettable() { return mLocalTexture != -1; }
|
||||
bool parseXml(LLXmlTreeNode* node);
|
||||
bool createVisualParams(LLAvatarAppearance *appearance);
|
||||
bool isUserSettable() { return mLocalTexture != -1; }
|
||||
S32 getLocalTexture() const { return mLocalTexture; }
|
||||
BOOL getOnlyAlpha() const { return mUseLocalTextureAlphaOnly; }
|
||||
bool getOnlyAlpha() const { return mUseLocalTextureAlphaOnly; }
|
||||
std::string getName() const { return mName; }
|
||||
|
||||
private:
|
||||
std::string mName;
|
||||
|
||||
BOOL mWriteAllChannels; // Don't use masking. Just write RGBA into buffer,
|
||||
bool mWriteAllChannels; // Don't use masking. Just write RGBA into buffer,
|
||||
LLTexLayerInterface::ERenderPass mRenderPass;
|
||||
|
||||
std::string mGlobalColor;
|
||||
|
|
@ -77,11 +77,11 @@ private:
|
|||
|
||||
S32 mLocalTexture;
|
||||
std::string mStaticImageFileName;
|
||||
BOOL mStaticImageIsMask;
|
||||
BOOL mUseLocalTextureAlphaOnly; // Ignore RGB channels from the input texture. Use alpha as a mask
|
||||
BOOL mIsVisibilityMask;
|
||||
bool mStaticImageIsMask;
|
||||
bool mUseLocalTextureAlphaOnly; // Ignore RGB channels from the input texture. Use alpha as a mask
|
||||
bool mIsVisibilityMask;
|
||||
|
||||
typedef std::vector< std::pair< std::string,BOOL > > morph_name_list_t;
|
||||
typedef std::vector< std::pair< std::string,bool > > morph_name_list_t;
|
||||
morph_name_list_t mMorphNameList;
|
||||
param_color_info_list_t mParamColorInfoList;
|
||||
param_alpha_info_list_t mParamAlphaInfoList;
|
||||
|
|
@ -130,17 +130,17 @@ void LLTexLayerSetBuffer::preRenderTexLayerSet()
|
|||
}
|
||||
|
||||
// virtual
|
||||
void LLTexLayerSetBuffer::postRenderTexLayerSet(BOOL success)
|
||||
void LLTexLayerSetBuffer::postRenderTexLayerSet(bool success)
|
||||
{
|
||||
popProjection();
|
||||
}
|
||||
|
||||
BOOL LLTexLayerSetBuffer::renderTexLayerSet(LLRenderTarget* bound_target)
|
||||
bool LLTexLayerSetBuffer::renderTexLayerSet(LLRenderTarget* bound_target)
|
||||
{
|
||||
// Default color mask for tex layer render
|
||||
gGL.setColorMask(true, true);
|
||||
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
|
||||
gAlphaMaskProgram.bind();
|
||||
gAlphaMaskProgram.setMinimumAlpha(0.004f);
|
||||
|
|
@ -175,7 +175,7 @@ LLTexLayerSetInfo::LLTexLayerSetInfo() :
|
|||
mBodyRegion( "" ),
|
||||
mWidth( 512 ),
|
||||
mHeight( 512 ),
|
||||
mClearAlpha( TRUE )
|
||||
mClearAlpha( true )
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -185,12 +185,12 @@ LLTexLayerSetInfo::~LLTexLayerSetInfo( )
|
|||
mLayerInfoList.clear();
|
||||
}
|
||||
|
||||
BOOL LLTexLayerSetInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLTexLayerSetInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert( node->hasName( "layer_set" ) );
|
||||
if( !node->hasName( "layer_set" ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// body_region
|
||||
|
|
@ -198,20 +198,20 @@ BOOL LLTexLayerSetInfo::parseXml(LLXmlTreeNode* node)
|
|||
if( !node->getFastAttributeString( body_region_string, mBodyRegion ) )
|
||||
{
|
||||
LL_WARNS() << "<layer_set> is missing body_region attribute" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// width, height
|
||||
static LLStdStringHandle width_string = LLXmlTree::addAttributeString("width");
|
||||
if( !node->getFastAttributeS32( width_string, mWidth ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle height_string = LLXmlTree::addAttributeString("height");
|
||||
if( !node->getFastAttributeS32( height_string, mHeight ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Optional alpha component to apply after all compositing is complete.
|
||||
|
|
@ -230,11 +230,11 @@ BOOL LLTexLayerSetInfo::parseXml(LLXmlTreeNode* node)
|
|||
if( !info->parseXml( child ))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mLayerInfoList.push_back( info );
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// creates visual params without generating layersets or layers
|
||||
|
|
@ -252,11 +252,11 @@ void LLTexLayerSetInfo::createVisualParams(LLAvatarAppearance *appearance)
|
|||
// An ordered set of texture layers that get composited into a single texture.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLTexLayerSet::sHasCaches = FALSE;
|
||||
bool LLTexLayerSet::sHasCaches = false;
|
||||
|
||||
LLTexLayerSet::LLTexLayerSet(LLAvatarAppearance* const appearance) :
|
||||
mAvatarAppearance( appearance ),
|
||||
mIsVisible( TRUE ),
|
||||
mIsVisible( true ),
|
||||
mBakedTexIndex(LLAvatarAppearanceDefines::BAKED_HEAD),
|
||||
mInfo( NULL )
|
||||
{
|
||||
|
|
@ -277,7 +277,7 @@ LLTexLayerSet::~LLTexLayerSet()
|
|||
// setInfo
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
|
||||
bool LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
mInfo = info;
|
||||
|
|
@ -299,7 +299,7 @@ BOOL LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
|
|||
if (!layer->setInfo(layer_info, NULL))
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if (!layer->isVisibilityMask())
|
||||
{
|
||||
|
|
@ -315,7 +315,7 @@ BOOL LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
|
|||
|
||||
stop_glerror();
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
#if 0 // obsolete
|
||||
|
|
@ -323,21 +323,21 @@ BOOL LLTexLayerSet::setInfo(const LLTexLayerSetInfo *info)
|
|||
// parseData
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLTexLayerSet::parseData(LLXmlTreeNode* node)
|
||||
bool LLTexLayerSet::parseData(LLXmlTreeNode* node)
|
||||
{
|
||||
LLTexLayerSetInfo *info = new LLTexLayerSetInfo;
|
||||
|
||||
if (!info->parseXml(node))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if (!setInfo(info))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -354,10 +354,10 @@ void LLTexLayerSet::deleteCaches()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target )
|
||||
bool LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target )
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
mIsVisible = TRUE;
|
||||
bool success = true;
|
||||
mIsVisible = true;
|
||||
|
||||
if (mMaskLayerList.size() > 0)
|
||||
{
|
||||
|
|
@ -365,7 +365,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height, LLRenderTarget*
|
|||
{
|
||||
if (layer->isInvisibleAlphaMask())
|
||||
{
|
||||
mIsVisible = FALSE;
|
||||
mIsVisible = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -425,7 +425,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height, LLRenderTarget*
|
|||
}
|
||||
|
||||
|
||||
BOOL LLTexLayerSet::isBodyRegion(const std::string& region) const
|
||||
bool LLTexLayerSet::isBodyRegion(const std::string& region) const
|
||||
{
|
||||
return mInfo->mBodyRegion == region;
|
||||
}
|
||||
|
|
@ -484,7 +484,7 @@ void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height,
|
|||
{
|
||||
gGL.flush();
|
||||
{
|
||||
LLGLTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(info->mStaticAlphaFileName, TRUE);
|
||||
LLGLTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(info->mStaticAlphaFileName, true);
|
||||
if( tex )
|
||||
{
|
||||
LLGLSUIDefault gls_ui;
|
||||
|
|
@ -528,21 +528,21 @@ void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height,
|
|||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
}
|
||||
|
||||
void LLTexLayerSet::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components)
|
||||
void LLTexLayerSet::applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components)
|
||||
{
|
||||
mAvatarAppearance->applyMorphMask(tex_data, width, height, num_components, mBakedTexIndex);
|
||||
}
|
||||
|
||||
BOOL LLTexLayerSet::isMorphValid() const
|
||||
bool LLTexLayerSet::isMorphValid() const
|
||||
{
|
||||
for(const LLTexLayerInterface* layer : mLayerList)
|
||||
{
|
||||
if (layer && !layer->isMorphValid())
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLTexLayerSet::invalidateMorphMasks()
|
||||
|
|
@ -561,13 +561,13 @@ void LLTexLayerSet::invalidateMorphMasks()
|
|||
// LLTexLayerInfo
|
||||
//-----------------------------------------------------------------------------
|
||||
LLTexLayerInfo::LLTexLayerInfo() :
|
||||
mWriteAllChannels( FALSE ),
|
||||
mWriteAllChannels( false ),
|
||||
mRenderPass(LLTexLayer::RP_COLOR),
|
||||
mFixedColor( 0.f, 0.f, 0.f, 0.f ),
|
||||
mLocalTexture( -1 ),
|
||||
mStaticImageIsMask( FALSE ),
|
||||
mUseLocalTextureAlphaOnly(FALSE),
|
||||
mIsVisibilityMask(FALSE)
|
||||
mStaticImageIsMask( false ),
|
||||
mUseLocalTextureAlphaOnly(false),
|
||||
mIsVisibilityMask(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -579,7 +579,7 @@ LLTexLayerInfo::~LLTexLayerInfo( )
|
|||
mParamAlphaInfoList.clear();
|
||||
}
|
||||
|
||||
BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert( node->hasName( "layer" ) );
|
||||
|
||||
|
|
@ -587,7 +587,7 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
|
||||
if( !node->getFastAttributeString( name_string, mName ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle write_all_channels_string = LLXmlTree::addAttributeString("write_all_channels");
|
||||
|
|
@ -609,7 +609,7 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
node->getFastAttributeString( global_color_string, mGlobalColor );
|
||||
|
||||
// Visibility mask (optional)
|
||||
BOOL is_visibility;
|
||||
bool is_visibility;
|
||||
static LLStdStringHandle visibility_mask_string = LLXmlTree::addAttributeString("visibility_mask");
|
||||
if (node->getFastAttributeBOOL(visibility_mask_string, is_visibility))
|
||||
{
|
||||
|
|
@ -657,13 +657,13 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (mLocalTexture == TEX_NUM_INDICES)
|
||||
{
|
||||
LL_WARNS() << "<texture> element has invalid local_texture attribute: " << mName << " " << local_texture_name << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "<texture> element is missing a required attribute. " << mName << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -675,10 +675,10 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
static LLStdStringHandle morph_name_string = LLXmlTree::addAttributeString("morph_name");
|
||||
if (maskNode->getFastAttributeString(morph_name_string, morph_name))
|
||||
{
|
||||
BOOL invert = FALSE;
|
||||
bool invert = false;
|
||||
static LLStdStringHandle invert_string = LLXmlTree::addAttributeString("invert");
|
||||
maskNode->getFastAttributeBOOL(invert_string, invert);
|
||||
mMorphNameList.push_back(std::pair<std::string,BOOL>(morph_name,invert));
|
||||
mMorphNameList.push_back(std::pair<std::string,bool>(morph_name,invert));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -694,7 +694,7 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (!info->parseXml(child))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mParamColorInfoList.push_back(info);
|
||||
}
|
||||
|
|
@ -705,37 +705,37 @@ BOOL LLTexLayerInfo::parseXml(LLXmlTreeNode* node)
|
|||
if (!info->parseXml(child))
|
||||
{
|
||||
delete info;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
mParamAlphaInfoList.push_back(info);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLTexLayerInfo::createVisualParams(LLAvatarAppearance *appearance)
|
||||
bool LLTexLayerInfo::createVisualParams(LLAvatarAppearance *appearance)
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
for (LLTexLayerParamColorInfo* color_info : mParamColorInfoList)
|
||||
{
|
||||
LLTexLayerParamColor* param_color = new LLTexLayerParamColor(appearance);
|
||||
if (!param_color->setInfo(color_info, TRUE))
|
||||
if (!param_color->setInfo(color_info, true))
|
||||
{
|
||||
LL_WARNS() << "NULL TexLayer Color Param could not be added to visual param list. Deleting." << LL_ENDL;
|
||||
delete param_color;
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
for (LLTexLayerParamAlphaInfo* alpha_info : mParamAlphaInfoList)
|
||||
{
|
||||
LLTexLayerParamAlpha* param_alpha = new LLTexLayerParamAlpha(appearance);
|
||||
if (!param_alpha->setInfo(alpha_info, TRUE))
|
||||
if (!param_alpha->setInfo(alpha_info, true))
|
||||
{
|
||||
LL_WARNS() << "NULL TexLayer Alpha Param could not be added to visual param list. Deleting." << LL_ENDL;
|
||||
delete param_alpha;
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -744,9 +744,9 @@ BOOL LLTexLayerInfo::createVisualParams(LLAvatarAppearance *appearance)
|
|||
|
||||
LLTexLayerInterface::LLTexLayerInterface(LLTexLayerSet* const layer_set):
|
||||
mTexLayerSet( layer_set ),
|
||||
mMorphMasksValid( FALSE ),
|
||||
mMorphMasksValid( false ),
|
||||
mInfo(NULL),
|
||||
mHasMorph(FALSE)
|
||||
mHasMorph(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -760,7 +760,7 @@ LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWea
|
|||
mHasMorph = layer.mHasMorph;
|
||||
}
|
||||
|
||||
BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable ) // This sets mInfo and calls initialization functions
|
||||
bool LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable ) // This sets mInfo and calls initialization functions
|
||||
{
|
||||
// setInfo should only be called once. Code is not robust enough to handle redefinition of a texlayer.
|
||||
// Not a critical warning, but could be useful for debugging later issues. -Nyx
|
||||
|
|
@ -778,10 +778,10 @@ BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearab
|
|||
if (!wearable)
|
||||
{
|
||||
param_color = new LLTexLayerParamColor(this);
|
||||
if (!param_color->setInfo(color_info, TRUE))
|
||||
if (!param_color->setInfo(color_info, true))
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -790,7 +790,7 @@ BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearab
|
|||
if (!param_color)
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
mParamColorList.push_back( param_color );
|
||||
|
|
@ -803,10 +803,10 @@ BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearab
|
|||
if (!wearable)
|
||||
{
|
||||
param_alpha = new LLTexLayerParamAlpha( this );
|
||||
if (!param_alpha->setInfo(alpha_info, TRUE))
|
||||
if (!param_alpha->setInfo(alpha_info, true))
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -815,13 +815,13 @@ BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearab
|
|||
if (!param_alpha)
|
||||
{
|
||||
mInfo = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
mParamAlphaList.push_back( param_alpha );
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*virtual*/ void LLTexLayerInterface::requestUpdate()
|
||||
|
|
@ -893,14 +893,14 @@ const std::string& LLTexLayerInterface::getGlobalColor() const
|
|||
return mInfo->mGlobalColor;
|
||||
}
|
||||
|
||||
BOOL LLTexLayerInterface::isVisibilityMask() const
|
||||
bool LLTexLayerInterface::isVisibilityMask() const
|
||||
{
|
||||
return mInfo->mIsVisibilityMask;
|
||||
}
|
||||
|
||||
void LLTexLayerInterface::invalidateMorphMasks()
|
||||
{
|
||||
mMorphMasksValid = FALSE;
|
||||
mMorphMasksValid = false;
|
||||
}
|
||||
|
||||
LLViewerVisualParam* LLTexLayerInterface::getVisualParamPtr(S32 index) const
|
||||
|
|
@ -980,7 +980,7 @@ void LLTexLayer::asLLSD(LLSD& sd) const
|
|||
// setInfo
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLTexLayer::setInfo(const LLTexLayerInfo* info, LLWearable* wearable )
|
||||
bool LLTexLayer::setInfo(const LLTexLayerInfo* info, LLWearable* wearable )
|
||||
{
|
||||
return LLTexLayerInterface::setInfo(info, wearable);
|
||||
}
|
||||
|
|
@ -1020,14 +1020,14 @@ void LLTexLayer::calculateTexLayerColor(const param_color_list_t ¶m_list, LL
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target)
|
||||
bool LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target)
|
||||
{
|
||||
// *TODO: Is this correct?
|
||||
//gPipeline.disableLights();
|
||||
stop_glerror();
|
||||
|
||||
LLColor4 net_color;
|
||||
BOOL color_specified = findNetColor(&net_color);
|
||||
bool color_specified = findNetColor(&net_color);
|
||||
|
||||
if (mTexLayerSet->getAvatarAppearance()->mIsDummy)
|
||||
{
|
||||
|
|
@ -1035,15 +1035,15 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
net_color = LLAvatarAppearance::getDummyColor();
|
||||
}
|
||||
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
|
||||
// If you can't see the layer, don't render it.
|
||||
if( is_approx_zero( net_color.mV[VW] ) )
|
||||
if( is_approx_zero( net_color.mV[VALPHA] ) )
|
||||
{
|
||||
return success;
|
||||
}
|
||||
|
||||
BOOL alpha_mask_specified = FALSE;
|
||||
bool alpha_mask_specified = false;
|
||||
param_alpha_list_t::const_iterator iter = mParamAlphaList.begin();
|
||||
if( iter != mParamAlphaList.end() )
|
||||
{
|
||||
|
|
@ -1051,7 +1051,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
// However, we can't do this optimization if we have morph masks that need updating.
|
||||
/* if (!mHasMorph)
|
||||
{
|
||||
BOOL skip_layer = TRUE;
|
||||
bool skip_layer = true;
|
||||
|
||||
while( iter != mParamAlphaList.end() )
|
||||
{
|
||||
|
|
@ -1059,7 +1059,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
|
||||
if( !param->getSkip() )
|
||||
{
|
||||
skip_layer = FALSE;
|
||||
skip_layer = false;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1074,7 +1074,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
|
||||
const bool force_render = true;
|
||||
renderMorphMasks(x, y, width, height, net_color, bound_target, force_render);
|
||||
alpha_mask_specified = TRUE;
|
||||
alpha_mask_specified = true;
|
||||
gGL.flush();
|
||||
gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
|
||||
}
|
||||
|
|
@ -1115,7 +1115,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
|
||||
LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
|
||||
|
||||
gGL.getTexUnit(0)->bind(tex, TRUE);
|
||||
gGL.getTexUnit(0)->bind(tex, true);
|
||||
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
||||
gl_rect_2d_simple_tex( width, height );
|
||||
|
|
@ -1130,7 +1130,7 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
}
|
||||
// else
|
||||
// {
|
||||
// success = FALSE;
|
||||
// success = false;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
@ -1141,13 +1141,13 @@ BOOL LLTexLayer::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bou
|
|||
LLGLTexture* tex = LLTexLayerStaticImageList::getInstance()->getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask);
|
||||
if( tex )
|
||||
{
|
||||
gGL.getTexUnit(0)->bind(tex, TRUE);
|
||||
gGL.getTexUnit(0)->bind(tex, true);
|
||||
gl_rect_2d_simple_tex( width, height );
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
else
|
||||
{
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1199,7 +1199,7 @@ const U8* LLTexLayer::getAlphaData() const
|
|||
return (iter2 == mAlphaCache.end()) ? 0 : iter2->second;
|
||||
}
|
||||
|
||||
BOOL LLTexLayer::findNetColor(LLColor4* net_color) const
|
||||
bool LLTexLayer::findNetColor(LLColor4* net_color) const
|
||||
{
|
||||
// Color is either:
|
||||
// * one or more color parameters (weighted colors) (which may make use of a global color or fixed color)
|
||||
|
|
@ -1213,7 +1213,7 @@ BOOL LLTexLayer::findNetColor(LLColor4* net_color) const
|
|||
{
|
||||
net_color->setVec( mTexLayerSet->getAvatarAppearance()->getGlobalColor( getInfo()->mGlobalColor ) );
|
||||
}
|
||||
else if (getInfo()->mFixedColor.mV[VW])
|
||||
else if (getInfo()->mFixedColor.mV[VALPHA])
|
||||
{
|
||||
net_color->setVec( getInfo()->mFixedColor );
|
||||
}
|
||||
|
|
@ -1223,29 +1223,29 @@ BOOL LLTexLayer::findNetColor(LLColor4* net_color) const
|
|||
}
|
||||
|
||||
calculateTexLayerColor(mParamColorList, *net_color);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if( !getGlobalColor().empty() )
|
||||
{
|
||||
net_color->setVec( mTexLayerSet->getAvatarAppearance()->getGlobalColor( getGlobalColor() ) );
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if( getInfo()->mFixedColor.mV[VW] )
|
||||
if( getInfo()->mFixedColor.mV[VALPHA] )
|
||||
{
|
||||
net_color->setVec( getInfo()->mFixedColor );
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
net_color->setToWhite();
|
||||
|
||||
return FALSE; // No need to draw a separate colored polygon
|
||||
return false; // No need to draw a separate colored polygon
|
||||
}
|
||||
|
||||
BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
|
||||
bool LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
|
||||
gGL.flush();
|
||||
|
||||
|
|
@ -1255,14 +1255,14 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height)
|
|||
if( tex )
|
||||
{
|
||||
gAlphaMaskProgram.setMinimumAlpha(0.f);
|
||||
gGL.getTexUnit(0)->bind(tex, TRUE);
|
||||
gGL.getTexUnit(0)->bind(tex, true);
|
||||
gl_rect_2d_simple_tex( width, height );
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gAlphaMaskProgram.setMinimumAlpha(0.004f);
|
||||
}
|
||||
else
|
||||
{
|
||||
success = FALSE;
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1297,7 +1297,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
|
|||
return;
|
||||
}
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
|
||||
llassert( !mParamAlphaList.empty() );
|
||||
|
||||
|
|
@ -1342,7 +1342,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
|
|||
{
|
||||
LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode();
|
||||
|
||||
gGL.getTexUnit(0)->bind(tex, TRUE);
|
||||
gGL.getTexUnit(0)->bind(tex, true);
|
||||
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
||||
gl_rect_2d_simple_tex( width, height );
|
||||
|
|
@ -1359,7 +1359,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
|
|||
{
|
||||
if( (tex->getComponents() == 4) || (tex->getComponents() == 1) )
|
||||
{
|
||||
gGL.getTexUnit(0)->bind(tex, TRUE);
|
||||
gGL.getTexUnit(0)->bind(tex, true);
|
||||
gl_rect_2d_simple_tex( width, height );
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
|
|
@ -1373,7 +1373,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
|
|||
|
||||
// Draw a rectangle with the layer color to multiply the alpha by that color's alpha.
|
||||
// Note: we're still using gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
|
||||
if ( !is_approx_equal(layer_color.mV[VW], 1.f) )
|
||||
if ( !is_approx_equal(layer_color.mV[VALPHA], 1.f) )
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.color4fv(layer_color.mV);
|
||||
|
|
@ -1480,7 +1480,7 @@ void LLTexLayer::renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLC
|
|||
|
||||
getTexLayerSet()->getAvatarAppearance()->dirtyMesh();
|
||||
|
||||
mMorphMasksValid = TRUE;
|
||||
mMorphMasksValid = true;
|
||||
getTexLayerSet()->applyMorphMask(alpha_data, width, height, 1);
|
||||
}
|
||||
}
|
||||
|
|
@ -1513,17 +1513,17 @@ void LLTexLayer::addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32
|
|||
}
|
||||
}
|
||||
|
||||
/*virtual*/ BOOL LLTexLayer::isInvisibleAlphaMask() const
|
||||
/*virtual*/ bool LLTexLayer::isInvisibleAlphaMask() const
|
||||
{
|
||||
if (mLocalTextureObject)
|
||||
{
|
||||
if (mLocalTextureObject->getID() == IMG_INVISIBLE)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLUUID LLTexLayer::getUUID() const
|
||||
|
|
@ -1582,7 +1582,7 @@ LLTexLayerTemplate::~LLTexLayerTemplate()
|
|||
// setInfo
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/*virtual*/ BOOL LLTexLayerTemplate::setInfo(const LLTexLayerInfo* info, LLWearable* wearable )
|
||||
/*virtual*/ bool LLTexLayerTemplate::setInfo(const LLTexLayerInfo* info, LLWearable* wearable )
|
||||
{
|
||||
return LLTexLayerInterface::setInfo(info, wearable);
|
||||
}
|
||||
|
|
@ -1631,14 +1631,14 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) const
|
|||
return layer;
|
||||
}
|
||||
|
||||
/*virtual*/ BOOL LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target)
|
||||
/*virtual*/ bool LLTexLayerTemplate::render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target)
|
||||
{
|
||||
if(!mInfo)
|
||||
{
|
||||
return FALSE ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
updateWearableCache();
|
||||
for (LLWearable* wearable : mWearableCache)
|
||||
{
|
||||
|
|
@ -1663,9 +1663,9 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) const
|
|||
return success;
|
||||
}
|
||||
|
||||
/*virtual*/ BOOL LLTexLayerTemplate::blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) // Multiplies a single alpha texture against the frame buffer
|
||||
/*virtual*/ bool LLTexLayerTemplate::blendAlphaTexture( S32 x, S32 y, S32 width, S32 height) // Multiplies a single alpha texture against the frame buffer
|
||||
{
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
U32 num_wearables = updateWearableCache();
|
||||
for (U32 i = 0; i < num_wearables; i++)
|
||||
{
|
||||
|
|
@ -1689,7 +1689,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) const
|
|||
}
|
||||
}
|
||||
|
||||
/*virtual*/ void LLTexLayerTemplate::setHasMorph(BOOL newval)
|
||||
/*virtual*/ void LLTexLayerTemplate::setHasMorph(bool newval)
|
||||
{
|
||||
mHasMorph = newval;
|
||||
U32 num_wearables = updateWearableCache();
|
||||
|
|
@ -1716,7 +1716,7 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) const
|
|||
}
|
||||
}
|
||||
|
||||
/*virtual*/ BOOL LLTexLayerTemplate::isInvisibleAlphaMask() const
|
||||
/*virtual*/ bool LLTexLayerTemplate::isInvisibleAlphaMask() const
|
||||
{
|
||||
U32 num_wearables = updateWearableCache();
|
||||
for (U32 i = 0; i < num_wearables; i++)
|
||||
|
|
@ -1726,12 +1726,12 @@ LLTexLayer* LLTexLayerTemplate::getLayer(U32 i) const
|
|||
{
|
||||
if (layer->isInvisibleAlphaMask())
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1853,7 +1853,7 @@ LLImageTGA* LLTexLayerStaticImageList::getImageTGA(const std::string& file_name)
|
|||
|
||||
// Returns a GL Image (without a backing ImageRaw) that contains the decoded data from a tga file named file_name.
|
||||
// Caches the result to speed identical subsequent requests.
|
||||
LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name, BOOL is_mask)
|
||||
LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name, bool is_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
LLPointer<LLGLTexture> tex;
|
||||
|
|
@ -1867,7 +1867,7 @@ LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name,
|
|||
else
|
||||
{
|
||||
llassert(gTextureManagerBridgep);
|
||||
tex = gTextureManagerBridgep->getLocalTexture( FALSE );
|
||||
tex = gTextureManagerBridgep->getLocalTexture( false );
|
||||
LLPointer<LLImageRaw> image_raw = new LLImageRaw;
|
||||
if( loadImageRaw( file_name, image_raw ) )
|
||||
{
|
||||
|
|
@ -1883,7 +1883,7 @@ LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name,
|
|||
|
||||
image_raw->copyUnscaledAlphaMask(alpha_image_raw, LLColor4U::black);
|
||||
}
|
||||
tex->createGLTexture(0, image_raw, 0, TRUE, LLGLTexture::LOCAL);
|
||||
tex->createGLTexture(0, image_raw, 0, true, LLGLTexture::LOCAL);
|
||||
|
||||
gGL.getTexUnit(0)->bind(tex);
|
||||
tex->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
|
@ -1901,11 +1901,11 @@ LLGLTexture* LLTexLayerStaticImageList::getTexture(const std::string& file_name,
|
|||
}
|
||||
|
||||
// Reads a .tga file, decodes it, and puts the decoded data in image_raw.
|
||||
// Returns TRUE if successful.
|
||||
BOOL LLTexLayerStaticImageList::loadImageRaw(const std::string& file_name, LLImageRaw* image_raw)
|
||||
// Returns true if successful.
|
||||
bool LLTexLayerStaticImageList::loadImageRaw(const std::string& file_name, LLImageRaw* image_raw)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
BOOL success = FALSE;
|
||||
bool success = false;
|
||||
std::string path;
|
||||
path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,file_name);
|
||||
LLPointer<LLImageTGA> image_tga = new LLImageTGA( path );
|
||||
|
|
|
|||
|
|
@ -65,13 +65,13 @@ public:
|
|||
LLTexLayerInterface(const LLTexLayerInterface &layer, LLWearable *wearable);
|
||||
virtual ~LLTexLayerInterface() {}
|
||||
|
||||
virtual BOOL render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target) = 0;
|
||||
virtual bool render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target) = 0;
|
||||
virtual void deleteCaches() = 0;
|
||||
virtual BOOL blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) = 0;
|
||||
virtual BOOL isInvisibleAlphaMask() const = 0;
|
||||
virtual bool blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) = 0;
|
||||
virtual bool isInvisibleAlphaMask() const = 0;
|
||||
|
||||
const LLTexLayerInfo* getInfo() const { return mInfo; }
|
||||
virtual BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // sets mInfo, calls initialization functions
|
||||
virtual bool setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // sets mInfo, calls initialization functions
|
||||
LLWearableType::EType getWearableType() const;
|
||||
LLAvatarAppearanceDefines::ETextureIndex getLocalTextureIndex() const;
|
||||
|
||||
|
|
@ -80,16 +80,16 @@ public:
|
|||
LLTexLayerSet* const getTexLayerSet() { return mTexLayerSet; }
|
||||
|
||||
void invalidateMorphMasks();
|
||||
virtual void setHasMorph(BOOL newval) { mHasMorph = newval; }
|
||||
BOOL hasMorph() const { return mHasMorph; }
|
||||
BOOL isMorphValid() const { return mMorphMasksValid; }
|
||||
virtual void setHasMorph(bool newval) { mHasMorph = newval; }
|
||||
bool hasMorph() const { return mHasMorph; }
|
||||
bool isMorphValid() const { return mMorphMasksValid; }
|
||||
|
||||
void requestUpdate();
|
||||
virtual void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, LLRenderTarget* bound_target) = 0;
|
||||
BOOL hasAlphaParams() const { return !mParamAlphaList.empty(); }
|
||||
bool hasAlphaParams() const { return !mParamAlphaList.empty(); }
|
||||
|
||||
ERenderPass getRenderPass() const;
|
||||
BOOL isVisibilityMask() const;
|
||||
bool isVisibilityMask() const;
|
||||
|
||||
virtual void asLLSD(LLSD& sd) const {}
|
||||
|
||||
|
|
@ -100,8 +100,8 @@ protected:
|
|||
protected:
|
||||
LLTexLayerSet* const mTexLayerSet;
|
||||
const LLTexLayerInfo* mInfo;
|
||||
BOOL mMorphMasksValid;
|
||||
BOOL mHasMorph;
|
||||
bool mMorphMasksValid;
|
||||
bool mHasMorph;
|
||||
|
||||
// Layers can have either mParamColorList, mGlobalColor, or mFixedColor. They are looked for in that order.
|
||||
param_color_list_t mParamColorList;
|
||||
|
|
@ -121,13 +121,13 @@ public:
|
|||
LLTexLayerTemplate(LLTexLayerSet* const layer_set, LLAvatarAppearance* const appearance);
|
||||
LLTexLayerTemplate(const LLTexLayerTemplate &layer);
|
||||
/*virtual*/ ~LLTexLayerTemplate();
|
||||
/*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
/*virtual*/ BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // This sets mInfo and calls initialization functions
|
||||
/*virtual*/ BOOL blendAlphaTexture(S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
|
||||
/*virtual*/ bool render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
/*virtual*/ bool setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // This sets mInfo and calls initialization functions
|
||||
/*virtual*/ bool blendAlphaTexture(S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
|
||||
/*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
/*virtual*/ void setHasMorph(BOOL newval);
|
||||
/*virtual*/ void setHasMorph(bool newval);
|
||||
/*virtual*/ void deleteCaches();
|
||||
/*virtual*/ BOOL isInvisibleAlphaMask() const;
|
||||
/*virtual*/ bool isInvisibleAlphaMask() const;
|
||||
protected:
|
||||
U32 updateWearableCache() const;
|
||||
LLTexLayer* getLayer(U32 i) const;
|
||||
|
|
@ -151,18 +151,18 @@ public:
|
|||
LLTexLayer(const LLTexLayerTemplate &layer_template, LLLocalTextureObject *lto, LLWearable *wearable);
|
||||
/*virtual*/ ~LLTexLayer();
|
||||
|
||||
/*virtual*/ BOOL setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // This sets mInfo and calls initialization functions
|
||||
/*virtual*/ BOOL render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
/*virtual*/ bool setInfo(const LLTexLayerInfo *info, LLWearable* wearable); // This sets mInfo and calls initialization functions
|
||||
/*virtual*/ bool render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
|
||||
/*virtual*/ void deleteCaches();
|
||||
const U8* getAlphaData() const;
|
||||
|
||||
BOOL findNetColor(LLColor4* color) const;
|
||||
/*virtual*/ BOOL blendAlphaTexture(S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
|
||||
bool findNetColor(LLColor4* color) const;
|
||||
/*virtual*/ bool blendAlphaTexture(S32 x, S32 y, S32 width, S32 height); // Multiplies a single alpha texture against the frame buffer
|
||||
/*virtual*/ void gatherAlphaMasks(U8 *data, S32 originX, S32 originY, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
void renderMorphMasks(S32 x, S32 y, S32 width, S32 height, const LLColor4 &layer_color, LLRenderTarget* bound_target, bool force_render);
|
||||
void addAlphaMask(U8 *data, S32 originX, S32 originY, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
/*virtual*/ BOOL isInvisibleAlphaMask() const;
|
||||
/*virtual*/ bool isInvisibleAlphaMask() const;
|
||||
|
||||
void setLTO(LLLocalTextureObject *lto) { mLocalTextureObject = lto; }
|
||||
LLLocalTextureObject* getLTO() { return mLocalTextureObject; }
|
||||
|
|
@ -197,14 +197,14 @@ public:
|
|||
void gatherMorphMaskAlpha(U8 *data, S32 origin_x, S32 origin_y, S32 width, S32 height, LLRenderTarget* bound_target);
|
||||
|
||||
const LLTexLayerSetInfo* getInfo() const { return mInfo; }
|
||||
BOOL setInfo(const LLTexLayerSetInfo *info); // This sets mInfo and calls initialization functions
|
||||
bool setInfo(const LLTexLayerSetInfo *info); // This sets mInfo and calls initialization functions
|
||||
|
||||
BOOL render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target = nullptr);
|
||||
bool render(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target = nullptr);
|
||||
void renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, LLRenderTarget* bound_target = nullptr, bool forceClear = false);
|
||||
|
||||
BOOL isBodyRegion(const std::string& region) const;
|
||||
void applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components);
|
||||
BOOL isMorphValid() const;
|
||||
bool isBodyRegion(const std::string& region) const;
|
||||
void applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components);
|
||||
bool isMorphValid() const;
|
||||
virtual void requestUpdate() = 0;
|
||||
void invalidateMorphMasks();
|
||||
void deleteCaches();
|
||||
|
|
@ -213,12 +213,12 @@ public:
|
|||
|
||||
LLAvatarAppearance* getAvatarAppearance() const { return mAvatarAppearance; }
|
||||
const std::string getBodyRegionName() const;
|
||||
BOOL hasComposite() const { return (mComposite.notNull()); }
|
||||
bool hasComposite() const { return (mComposite.notNull()); }
|
||||
LLAvatarAppearanceDefines::EBakedTextureIndex getBakedTexIndex() const { return mBakedTexIndex; }
|
||||
void setBakedTexIndex(LLAvatarAppearanceDefines::EBakedTextureIndex index) { mBakedTexIndex = index; }
|
||||
BOOL isVisible() const { return mIsVisible; }
|
||||
bool isVisible() const { return mIsVisible; }
|
||||
|
||||
static BOOL sHasCaches;
|
||||
static bool sHasCaches;
|
||||
|
||||
protected:
|
||||
typedef std::vector<LLTexLayerInterface *> layer_list_t;
|
||||
|
|
@ -226,7 +226,7 @@ protected:
|
|||
layer_list_t mMaskLayerList;
|
||||
LLPointer<LLTexLayerSetBuffer> mComposite;
|
||||
LLAvatarAppearance* const mAvatarAppearance; // note: backlink only; don't make this an LLPointer.
|
||||
BOOL mIsVisible;
|
||||
bool mIsVisible;
|
||||
|
||||
LLAvatarAppearanceDefines::EBakedTextureIndex mBakedTexIndex;
|
||||
const LLTexLayerSetInfo* mInfo;
|
||||
|
|
@ -243,7 +243,7 @@ class LLTexLayerSetInfo
|
|||
public:
|
||||
LLTexLayerSetInfo();
|
||||
~LLTexLayerSetInfo();
|
||||
BOOL parseXml(LLXmlTreeNode* node);
|
||||
bool parseXml(LLXmlTreeNode* node);
|
||||
void createVisualParams(LLAvatarAppearance *appearance);
|
||||
S32 getWidth() const { return mWidth; }
|
||||
S32 getHeight() const { return mHeight; }
|
||||
|
|
@ -252,7 +252,7 @@ protected:
|
|||
S32 mWidth;
|
||||
S32 mHeight;
|
||||
std::string mStaticAlphaFileName;
|
||||
BOOL mClearAlpha; // Set alpha to 1 for this layerset (if there is no mStaticAlphaFileName)
|
||||
bool mClearAlpha; // Set alpha to 1 for this layerset (if there is no mStaticAlphaFileName)
|
||||
typedef std::vector<LLTexLayerInfo*> layer_info_list_t;
|
||||
layer_info_list_t mLayerInfoList;
|
||||
};
|
||||
|
|
@ -274,13 +274,13 @@ protected:
|
|||
void pushProjection() const;
|
||||
void popProjection() const;
|
||||
virtual void preRenderTexLayerSet();
|
||||
virtual void midRenderTexLayerSet(BOOL success) {}
|
||||
virtual void postRenderTexLayerSet(BOOL success);
|
||||
virtual void midRenderTexLayerSet(bool success) {}
|
||||
virtual void postRenderTexLayerSet(bool success);
|
||||
virtual S32 getCompositeOriginX() const = 0;
|
||||
virtual S32 getCompositeOriginY() const = 0;
|
||||
virtual S32 getCompositeWidth() const = 0;
|
||||
virtual S32 getCompositeHeight() const = 0;
|
||||
BOOL renderTexLayerSet(LLRenderTarget* bound_target);
|
||||
bool renderTexLayerSet(LLRenderTarget* bound_target);
|
||||
|
||||
LLTexLayerSet* const mTexLayerSet;
|
||||
};
|
||||
|
|
@ -294,12 +294,12 @@ class LLTexLayerStaticImageList : public LLSingleton<LLTexLayerStaticImageList>
|
|||
LLSINGLETON(LLTexLayerStaticImageList);
|
||||
~LLTexLayerStaticImageList();
|
||||
public:
|
||||
LLGLTexture* getTexture(const std::string& file_name, BOOL is_mask);
|
||||
LLGLTexture* getTexture(const std::string& file_name, bool is_mask);
|
||||
LLImageTGA* getImageTGA(const std::string& file_name);
|
||||
void deleteCachedImages();
|
||||
void dumpByteCount() const;
|
||||
protected:
|
||||
BOOL loadImageRaw(const std::string& file_name, LLImageRaw* image_raw);
|
||||
bool loadImageRaw(const std::string& file_name, LLImageRaw* image_raw);
|
||||
private:
|
||||
LLStringTable mImageNames;
|
||||
typedef std::map<const char*, LLPointer<LLGLTexture> > texture_map_t;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ LLTexLayerParam::LLTexLayerParam(const LLTexLayerParam& pOther)
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLTexLayerParam::setInfo(LLViewerVisualParamInfo *info, BOOL add_to_appearance)
|
||||
bool LLTexLayerParam::setInfo(LLViewerVisualParamInfo *info, bool add_to_appearance)
|
||||
{
|
||||
LLViewerVisualParam::setInfo(info);
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ BOOL LLTexLayerParam::setInfo(LLViewerVisualParamInfo *info, BOOL add_to_appeara
|
|||
this->setParamLocation(mAvatarAppearance->isSelf() ? LOC_AV_SELF : LOC_AV_OTHER);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -123,8 +123,8 @@ LLTexLayerParamAlpha::LLTexLayerParamAlpha(LLTexLayerInterface* layer)
|
|||
mCachedProcessedTexture(NULL),
|
||||
mStaticImageTGA(),
|
||||
mStaticImageRaw(),
|
||||
mNeedsCreateTexture(FALSE),
|
||||
mStaticImageInvalid(FALSE),
|
||||
mNeedsCreateTexture(false),
|
||||
mStaticImageInvalid(false),
|
||||
mAvgDistortionVec(1.f, 1.f, 1.f),
|
||||
mCachedEffectiveWeight(0.f)
|
||||
{
|
||||
|
|
@ -136,8 +136,8 @@ LLTexLayerParamAlpha::LLTexLayerParamAlpha(LLAvatarAppearance* appearance)
|
|||
mCachedProcessedTexture(NULL),
|
||||
mStaticImageTGA(),
|
||||
mStaticImageRaw(),
|
||||
mNeedsCreateTexture(FALSE),
|
||||
mStaticImageInvalid(FALSE),
|
||||
mNeedsCreateTexture(false),
|
||||
mStaticImageInvalid(false),
|
||||
mAvgDistortionVec(1.f, 1.f, 1.f),
|
||||
mCachedEffectiveWeight(0.f)
|
||||
{
|
||||
|
|
@ -173,10 +173,10 @@ void LLTexLayerParamAlpha::deleteCaches()
|
|||
mStaticImageTGA = NULL; // deletes image
|
||||
mCachedProcessedTexture = NULL;
|
||||
mStaticImageRaw = NULL;
|
||||
mNeedsCreateTexture = FALSE;
|
||||
mNeedsCreateTexture = false;
|
||||
}
|
||||
|
||||
BOOL LLTexLayerParamAlpha::getMultiplyBlend() const
|
||||
bool LLTexLayerParamAlpha::getMultiplyBlend() const
|
||||
{
|
||||
return ((LLTexLayerParamAlphaInfo *)getInfo())->mMultiplyBlend;
|
||||
}
|
||||
|
|
@ -216,7 +216,7 @@ void LLTexLayerParamAlpha::setAnimationTarget(F32 target_value)
|
|||
|
||||
mTargetWeight = target_value;
|
||||
setWeight(target_value);
|
||||
mIsAnimating = TRUE;
|
||||
mIsAnimating = true;
|
||||
if (mNext)
|
||||
{
|
||||
mNext->setAnimationTarget(target_value);
|
||||
|
|
@ -231,11 +231,11 @@ void LLTexLayerParamAlpha::animate(F32 delta)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL LLTexLayerParamAlpha::getSkip() const
|
||||
bool LLTexLayerParamAlpha::getSkip() const
|
||||
{
|
||||
if (!mTexLayer)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
const LLAvatarAppearance *appearance = mTexLayer->getTexLayerSet()->getAvatarAppearance();
|
||||
|
|
@ -245,24 +245,24 @@ BOOL LLTexLayerParamAlpha::getSkip() const
|
|||
F32 effective_weight = (appearance->getSex() & getSex()) ? mCurWeight : getDefaultWeight();
|
||||
if (is_approx_zero(effective_weight))
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
LLWearableType::EType type = (LLWearableType::EType)getWearableType();
|
||||
if ((type != LLWearableType::WT_INVALID) && !appearance->isWearingWearableType(type))
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
||||
bool LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
BOOL success = TRUE;
|
||||
bool success = true;
|
||||
|
||||
if (!mTexLayer)
|
||||
{
|
||||
|
|
@ -270,7 +270,7 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
}
|
||||
|
||||
F32 effective_weight = (mTexLayer->getTexLayerSet()->getAvatarAppearance()->getSex() & getSex()) ? mCurWeight : getDefaultWeight();
|
||||
BOOL weight_changed = effective_weight != mCachedEffectiveWeight;
|
||||
bool weight_changed = effective_weight != mCachedEffectiveWeight;
|
||||
if (getSkip())
|
||||
{
|
||||
return success;
|
||||
|
|
@ -294,13 +294,13 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
// Don't load the image file until we actually need it the first time. Like now.
|
||||
mStaticImageTGA = LLTexLayerStaticImageList::getInstance()->getImageTGA(info->mStaticImageFileName);
|
||||
// We now have something in one of our caches
|
||||
LLTexLayerSet::sHasCaches |= mStaticImageTGA.notNull() ? TRUE : FALSE;
|
||||
LLTexLayerSet::sHasCaches |= mStaticImageTGA.notNull();
|
||||
|
||||
if (mStaticImageTGA.isNull())
|
||||
{
|
||||
LL_WARNS() << "Unable to load static file: " << info->mStaticImageFileName << LL_ENDL;
|
||||
mStaticImageInvalid = TRUE; // don't try again.
|
||||
return FALSE;
|
||||
mStaticImageInvalid = true; // don't try again.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -316,10 +316,10 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
if (!mCachedProcessedTexture)
|
||||
{
|
||||
llassert(gTextureManagerBridgep);
|
||||
mCachedProcessedTexture = gTextureManagerBridgep->getLocalTexture(image_tga_width, image_tga_height, 1, FALSE);
|
||||
mCachedProcessedTexture = gTextureManagerBridgep->getLocalTexture(image_tga_width, image_tga_height, 1, false);
|
||||
|
||||
// We now have something in one of our caches
|
||||
LLTexLayerSet::sHasCaches |= mCachedProcessedTexture ? TRUE : FALSE;
|
||||
LLTexLayerSet::sHasCaches |= mCachedProcessedTexture.notNull();
|
||||
|
||||
mCachedProcessedTexture->setExplicitFormat(GL_ALPHA8, GL_ALPHA);
|
||||
}
|
||||
|
|
@ -328,7 +328,7 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
mStaticImageRaw = NULL;
|
||||
mStaticImageRaw = new LLImageRaw;
|
||||
mStaticImageTGA->decodeAndProcess(mStaticImageRaw, info->mDomain, effective_weight);
|
||||
mNeedsCreateTexture = TRUE;
|
||||
mNeedsCreateTexture = true;
|
||||
LL_DEBUGS() << "Built Cached Alpha: " << info->mStaticImageFileName << ": (" << mStaticImageRaw->getWidth() << ", " << mStaticImageRaw->getHeight() << ") " << "Domain: " << info->mDomain << " Weight: " << effective_weight << LL_ENDL;
|
||||
}
|
||||
|
||||
|
|
@ -339,7 +339,7 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
if (mNeedsCreateTexture)
|
||||
{
|
||||
mCachedProcessedTexture->createGLTexture(0, mStaticImageRaw);
|
||||
mNeedsCreateTexture = FALSE;
|
||||
mNeedsCreateTexture = false;
|
||||
gGL.getTexUnit(0)->bind(mCachedProcessedTexture);
|
||||
mCachedProcessedTexture->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
}
|
||||
|
|
@ -372,23 +372,23 @@ BOOL LLTexLayerParamAlpha::render(S32 x, S32 y, S32 width, S32 height)
|
|||
// LLTexLayerParamAlphaInfo
|
||||
//-----------------------------------------------------------------------------
|
||||
LLTexLayerParamAlphaInfo::LLTexLayerParamAlphaInfo() :
|
||||
mMultiplyBlend(FALSE),
|
||||
mSkipIfZeroWeight(FALSE),
|
||||
mMultiplyBlend(false),
|
||||
mSkipIfZeroWeight(false),
|
||||
mDomain(0.f)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLTexLayerParamAlphaInfo::parseXml(LLXmlTreeNode* node)
|
||||
bool LLTexLayerParamAlphaInfo::parseXml(LLXmlTreeNode* node)
|
||||
{
|
||||
llassert(node->hasName("param") && node->getChildByName("param_alpha"));
|
||||
|
||||
if (!LLViewerVisualParamInfo::parseXml(node))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
LLXmlTreeNode* param_alpha_node = node->getChildByName("param_alpha");
|
||||
if (!param_alpha_node)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLStdStringHandle tga_file_string = LLXmlTree::addAttributeString("tga_file");
|
||||
|
|
@ -410,7 +410,7 @@ BOOL LLTexLayerParamAlphaInfo::parseXml(LLXmlTreeNode* node)
|
|||
static LLStdStringHandle domain_string = LLXmlTree::addAttributeString("domain");
|
||||
param_alpha_node->getFastAttributeF32(domain_string, mDomain);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -464,10 +464,10 @@ LLColor4 LLTexLayerParamColor::getNetColor() const
|
|||
F32 weight = scaled_weight - index_start;
|
||||
const LLColor4 *start = &info->mColors[ index_start ];
|
||||
const LLColor4 *end = &info->mColors[ index_end ];
|
||||
return LLColor4((1.f - weight) * start->mV[VX] + weight * end->mV[VX],
|
||||
(1.f - weight) * start->mV[VY] + weight * end->mV[VY],
|
||||
(1.f - weight) * start->mV[VZ] + weight * end->mV[VZ],
|
||||
(1.f - weight) * start->mV[VW] + weight * end->mV[VW]);
|
||||
return LLColor4((1.f - weight) * start->mV[VRED] + weight * end->mV[VRED],
|
||||
(1.f - weight) * start->mV[VGREEN] + weight * end->mV[VGREEN],
|
||||
(1.f - weight) * start->mV[VBLUE] + weight * end->mV[VBLUE],
|
||||
(1.f - weight) * start->mV[VALPHA] + weight * end->mV[VALPHA]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -514,7 +514,7 @@ void LLTexLayerParamColor::setAnimationTarget(F32 target_value)
|
|||
// set value first then set interpolating flag to ignore further updates
|
||||
mTargetWeight = target_value;
|
||||
setWeight(target_value);
|
||||
mIsAnimating = TRUE;
|
||||
mIsAnimating = true;
|
||||
if (mNext)
|
||||
{
|
||||
mNext->setAnimationTarget(target_value);
|
||||
|
|
@ -538,17 +538,17 @@ LLTexLayerParamColorInfo::LLTexLayerParamColorInfo() :
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLTexLayerParamColorInfo::parseXml(LLXmlTreeNode *node)
|
||||
bool LLTexLayerParamColorInfo::parseXml(LLXmlTreeNode *node)
|
||||
{
|
||||
llassert(node->hasName("param") && node->getChildByName("param_color"));
|
||||
|
||||
if (!LLViewerVisualParamInfo::parseXml(node))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
LLXmlTreeNode* param_color_node = node->getChildByName("param_color");
|
||||
if (!param_color_node)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string op_string;
|
||||
|
|
@ -581,14 +581,14 @@ BOOL LLTexLayerParamColorInfo::parseXml(LLXmlTreeNode *node)
|
|||
if (!mNumColors)
|
||||
{
|
||||
LL_WARNS() << "<param_color> is missing <value> sub-elements" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((mOperation == LLTexLayerParamColor::OP_BLEND) && (mNumColors != 1))
|
||||
{
|
||||
LL_WARNS() << "<param_color> with operation\"blend\" must have exactly one <value>" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class LLTexLayerParam : public LLViewerVisualParam
|
|||
public:
|
||||
LLTexLayerParam(LLTexLayerInterface *layer);
|
||||
LLTexLayerParam(LLAvatarAppearance *appearance);
|
||||
/*virtual*/ BOOL setInfo(LLViewerVisualParamInfo *info, BOOL add_to_appearance);
|
||||
/*virtual*/ bool setInfo(LLViewerVisualParamInfo *info, bool add_to_appearance);
|
||||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const = 0;
|
||||
|
||||
protected:
|
||||
|
|
@ -74,7 +74,7 @@ public:
|
|||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
///*virtual*/ bool parseData(LLXmlTreeNode* node);
|
||||
/*virtual*/ void apply( ESex avatar_sex ) {}
|
||||
/*virtual*/ void setWeight(F32 weight);
|
||||
/*virtual*/ void setAnimationTarget(F32 target_value);
|
||||
|
|
@ -89,10 +89,10 @@ public:
|
|||
/*virtual*/ const LLVector4a* getNextDistortion(U32 *index, LLPolyMesh **poly_mesh) { index = 0; poly_mesh = NULL; return NULL;};
|
||||
|
||||
// New functions
|
||||
BOOL render( S32 x, S32 y, S32 width, S32 height );
|
||||
BOOL getSkip() const;
|
||||
bool render( S32 x, S32 y, S32 width, S32 height );
|
||||
bool getSkip() const;
|
||||
void deleteCaches();
|
||||
BOOL getMultiplyBlend() const;
|
||||
bool getMultiplyBlend() const;
|
||||
|
||||
private:
|
||||
LLTexLayerParamAlpha(const LLTexLayerParamAlpha& pOther);
|
||||
|
|
@ -100,8 +100,8 @@ private:
|
|||
LLPointer<LLGLTexture> mCachedProcessedTexture;
|
||||
LLPointer<LLImageTGA> mStaticImageTGA;
|
||||
LLPointer<LLImageRaw> mStaticImageRaw;
|
||||
std::atomic<BOOL> mNeedsCreateTexture;
|
||||
BOOL mStaticImageInvalid;
|
||||
std::atomic<bool> mNeedsCreateTexture;
|
||||
bool mStaticImageInvalid;
|
||||
LL_ALIGN_16(LLVector4a mAvgDistortionVec);
|
||||
F32 mCachedEffectiveWeight;
|
||||
|
||||
|
|
@ -120,12 +120,12 @@ public:
|
|||
LLTexLayerParamAlphaInfo();
|
||||
/*virtual*/ ~LLTexLayerParamAlphaInfo() {};
|
||||
|
||||
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
|
||||
/*virtual*/ bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
private:
|
||||
std::string mStaticImageFileName;
|
||||
BOOL mMultiplyBlend;
|
||||
BOOL mSkipIfZeroWeight;
|
||||
bool mMultiplyBlend;
|
||||
bool mSkipIfZeroWeight;
|
||||
F32 mDomain;
|
||||
};
|
||||
//
|
||||
|
|
@ -157,7 +157,7 @@ public:
|
|||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
///*virtual*/ bool parseData(LLXmlTreeNode* node);
|
||||
/*virtual*/ void apply( ESex avatar_sex ) {}
|
||||
/*virtual*/ void setWeight(F32 weight);
|
||||
/*virtual*/ void setAnimationTarget(F32 target_value);
|
||||
|
|
@ -189,7 +189,7 @@ class LLTexLayerParamColorInfo : public LLViewerVisualParamInfo
|
|||
public:
|
||||
LLTexLayerParamColorInfo();
|
||||
virtual ~LLTexLayerParamColorInfo() {};
|
||||
BOOL parseXml( LLXmlTreeNode* node );
|
||||
bool parseXml( LLXmlTreeNode* node );
|
||||
LLTexLayerParamColor::EColorOperation getOperation() const { return mOperation; }
|
||||
private:
|
||||
enum { MAX_COLOR_VALUES = 20 };
|
||||
|
|
|
|||
|
|
@ -39,12 +39,12 @@
|
|||
LLViewerVisualParamInfo::LLViewerVisualParamInfo()
|
||||
:
|
||||
mWearableType( LLWearableType::WT_INVALID ),
|
||||
mCrossWearable(FALSE),
|
||||
mCrossWearable(false),
|
||||
mCamDist( 0.5f ),
|
||||
mCamAngle( 0.f ),
|
||||
mCamElevation( 0.f ),
|
||||
mEditGroupDisplayOrder( 0 ),
|
||||
mShowSimple(FALSE),
|
||||
mShowSimple(false),
|
||||
mSimpleMin(0.f),
|
||||
mSimpleMax(100.f)
|
||||
{
|
||||
|
|
@ -57,12 +57,12 @@ LLViewerVisualParamInfo::~LLViewerVisualParamInfo()
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseXml()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
||||
bool LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
||||
{
|
||||
llassert( node->hasName( "param" ) );
|
||||
|
||||
if (!LLVisualParamInfo::parseXml(node))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
// VIEWER SPECIFIC PARAMS
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
|||
static LLStdStringHandle cross_wearable_string = LLXmlTree::addAttributeString("cross_wearable");
|
||||
if (!node->getFastAttributeBOOL(cross_wearable_string, mCrossWearable))
|
||||
{
|
||||
mCrossWearable = FALSE;
|
||||
mCrossWearable = false;
|
||||
}
|
||||
|
||||
// Optional camera offsets from the current joint center. Used for generating "hints" (thumbnails).
|
||||
|
|
@ -107,7 +107,7 @@ BOOL LLViewerVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
|||
|
||||
params_loaded++;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*virtual*/ void LLViewerVisualParamInfo::toStream(std::ostream &out)
|
||||
|
|
@ -146,15 +146,15 @@ LLViewerVisualParam::~LLViewerVisualParam()
|
|||
// setInfo()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLViewerVisualParam::setInfo(LLViewerVisualParamInfo *info)
|
||||
bool LLViewerVisualParam::setInfo(LLViewerVisualParamInfo *info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
if (info->mID < 0)
|
||||
return FALSE;
|
||||
return false;
|
||||
mInfo = info;
|
||||
mID = info->mID;
|
||||
setWeight(getDefaultWeight());
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -166,14 +166,14 @@ BOOL LLViewerVisualParam::setInfo(LLViewerVisualParamInfo *info)
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLViewerVisualParam::parseData(LLXmlTreeNode *node)
|
||||
bool LLViewerVisualParam::parseData(LLXmlTreeNode *node)
|
||||
{
|
||||
LLViewerVisualParamInfo* info = new LLViewerVisualParamInfo;
|
||||
|
||||
info->parseXml(node);
|
||||
if (!setInfo(info))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -43,19 +43,19 @@ public:
|
|||
LLViewerVisualParamInfo();
|
||||
/*virtual*/ ~LLViewerVisualParamInfo();
|
||||
|
||||
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
|
||||
/*virtual*/ bool parseXml(LLXmlTreeNode* node);
|
||||
|
||||
/*virtual*/ void toStream(std::ostream &out);
|
||||
|
||||
protected:
|
||||
S32 mWearableType;
|
||||
BOOL mCrossWearable;
|
||||
bool mCrossWearable;
|
||||
std::string mEditGroup;
|
||||
F32 mCamDist;
|
||||
F32 mCamAngle; // degrees
|
||||
F32 mCamElevation;
|
||||
F32 mEditGroupDisplayOrder;
|
||||
BOOL mShowSimple; // show edit controls when in "simple ui" mode?
|
||||
bool mShowSimple; // show edit controls when in "simple ui" mode?
|
||||
F32 mSimpleMin; // when in simple UI, apply this minimum, range 0.f to 100.f
|
||||
F32 mSimpleMax; // when in simple UI, apply this maximum, range 0.f to 100.f
|
||||
};
|
||||
|
|
@ -75,12 +75,12 @@ public:
|
|||
// Special: These functions are overridden by child classes
|
||||
LLViewerVisualParamInfo *getInfo() const { return (LLViewerVisualParamInfo*)mInfo; };
|
||||
// This sets mInfo and calls initialization functions
|
||||
BOOL setInfo(LLViewerVisualParamInfo *info);
|
||||
bool setInfo(LLViewerVisualParamInfo *info);
|
||||
|
||||
virtual LLViewerVisualParam* cloneParam(LLWearable* wearable) const = 0;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
///*virtual*/ bool parseData(LLXmlTreeNode* node);
|
||||
|
||||
// New Virtual functions
|
||||
virtual F32 getTotalDistortion() = 0;
|
||||
|
|
@ -99,11 +99,11 @@ public:
|
|||
F32 getCameraAngle() const { return getInfo()->mCamAngle; } // degrees
|
||||
F32 getCameraElevation() const { return getInfo()->mCamElevation; }
|
||||
|
||||
BOOL getShowSimple() const { return getInfo()->mShowSimple; }
|
||||
bool getShowSimple() const { return getInfo()->mShowSimple; }
|
||||
F32 getSimpleMin() const { return getInfo()->mSimpleMin; }
|
||||
F32 getSimpleMax() const { return getInfo()->mSimpleMax; }
|
||||
|
||||
BOOL getCrossWearable() const { return getInfo()->mCrossWearable; }
|
||||
bool getCrossWearable() const { return getInfo()->mCrossWearable; }
|
||||
|
||||
protected:
|
||||
LLViewerVisualParam(const LLViewerVisualParam& pOther);
|
||||
|
|
|
|||
|
|
@ -86,16 +86,16 @@ LLAssetType::EType LLWearable::getAssetType() const
|
|||
return LLWearableType::getInstance()->getAssetType(mType);
|
||||
}
|
||||
|
||||
BOOL LLWearable::exportFile(const std::string& filename) const
|
||||
bool LLWearable::exportFile(const std::string& filename) const
|
||||
{
|
||||
llofstream ofs(filename.c_str(), std::ios_base::out | std::ios_base::trunc | std::ios_base::binary);
|
||||
return ofs.is_open() && exportStream(ofs);
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLWearable::exportStream( std::ostream& output_stream ) const
|
||||
bool LLWearable::exportStream( std::ostream& output_stream ) const
|
||||
{
|
||||
if (!output_stream.good()) return FALSE;
|
||||
if (!output_stream.good()) return false;
|
||||
|
||||
// header and version
|
||||
output_stream << "LLWearable version " << mDefinitionVersion << "\n";
|
||||
|
|
@ -107,13 +107,13 @@ BOOL LLWearable::exportStream( std::ostream& output_stream ) const
|
|||
// permissions
|
||||
if( !mPermissions.exportLegacyStream( output_stream ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// sale info
|
||||
if( !mSaleInfo.exportLegacyStream( output_stream ) )
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// wearable type
|
||||
|
|
@ -139,7 +139,7 @@ BOOL LLWearable::exportStream( std::ostream& output_stream ) const
|
|||
const LLUUID& image_id = te_pair.second->getID();
|
||||
output_stream << te << " " << image_id << "\n";
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLWearable::createVisualParams(LLAvatarAppearance *avatarp)
|
||||
|
|
@ -307,7 +307,7 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,
|
|||
// permissions. Thus, we read that out, and fix legacy
|
||||
// objects. It's possible this op would fail, but it should pick
|
||||
// up the vast majority of the tasks.
|
||||
BOOL has_perm_mask = FALSE;
|
||||
bool has_perm_mask = false;
|
||||
U32 perm_mask = 0;
|
||||
if( !mSaleInfo.importLegacyStream(input_stream, has_perm_mask, perm_mask) )
|
||||
{
|
||||
|
|
@ -469,11 +469,11 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,
|
|||
return LLWearable::SUCCESS;
|
||||
}
|
||||
|
||||
BOOL LLWearable::getNextPopulatedLine(std::istream& input_stream, char* buffer, U32 buffer_size)
|
||||
bool LLWearable::getNextPopulatedLine(std::istream& input_stream, char* buffer, U32 buffer_size)
|
||||
{
|
||||
if (!input_stream.good())
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
do
|
||||
|
|
@ -636,7 +636,7 @@ void LLWearable::addVisualParam(LLVisualParam *param)
|
|||
{
|
||||
delete mVisualParamIndexMap[param->getID()];
|
||||
}
|
||||
param->setIsDummy(FALSE);
|
||||
param->setIsDummy(false);
|
||||
param->setParamLocation(LOC_WEARABLE);
|
||||
mVisualParamIndexMap[param->getID()] = param;
|
||||
mSavedVisualParamMap[param->getID()] = param->getDefaultWeight();
|
||||
|
|
@ -744,7 +744,7 @@ void LLWearable::writeToAvatar(LLAvatarAppearance* avatarp)
|
|||
std::string terse_F32_to_string(F32 f)
|
||||
{
|
||||
std::string r = llformat("%.2f", f);
|
||||
S32 len = r.length();
|
||||
auto len = r.length();
|
||||
|
||||
// "1.20" -> "1.2"
|
||||
// "24.00" -> "24."
|
||||
|
|
|
|||
|
|
@ -80,9 +80,9 @@ public:
|
|||
SUCCESS,
|
||||
BAD_HEADER
|
||||
};
|
||||
BOOL exportFile(const std::string& filename) const;
|
||||
bool exportFile(const std::string& filename) const;
|
||||
EImportResult importFile(const std::string& filename, LLAvatarAppearance* avatarp );
|
||||
virtual BOOL exportStream( std::ostream& output_stream ) const;
|
||||
virtual bool exportStream( std::ostream& output_stream ) const;
|
||||
virtual EImportResult importStream( std::istream& input_stream, LLAvatarAppearance* avatarp );
|
||||
|
||||
static void setCurrentDefinitionVersion( S32 version ) { LLWearable::sCurrentDefinitionVersion = version; }
|
||||
|
|
@ -118,7 +118,7 @@ protected:
|
|||
void destroyTextures();
|
||||
void createVisualParams(LLAvatarAppearance *avatarp);
|
||||
void createLayers(S32 te, LLAvatarAppearance *avatarp);
|
||||
BOOL getNextPopulatedLine(std::istream& input_stream, char* buffer, U32 buffer_size);
|
||||
bool getNextPopulatedLine(std::istream& input_stream, char* buffer, U32 buffer_size);
|
||||
|
||||
static S32 sCurrentDefinitionVersion; // Depends on the current state of the avatar_lad.xml.
|
||||
S32 mDefinitionVersion; // Depends on the state of the avatar_lad.xml when this asset was created.
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ void LLWearableData::setWearable(const LLWearableType::EType type, U32 index, LL
|
|||
{
|
||||
wearable_vec[index] = wearable;
|
||||
old_wearable->setUpdated();
|
||||
const BOOL removed = FALSE;
|
||||
const bool removed = false;
|
||||
wearableUpdated(wearable, removed);
|
||||
}
|
||||
}
|
||||
|
|
@ -105,14 +105,14 @@ void LLWearableData::pushWearable(const LLWearableType::EType type,
|
|||
mWearableDatas[type].push_back(wearable);
|
||||
if (trigger_updated)
|
||||
{
|
||||
const BOOL removed = FALSE;
|
||||
const bool removed = false;
|
||||
wearableUpdated(wearable, removed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLWearableData::wearableUpdated(LLWearable *wearable, BOOL removed)
|
||||
void LLWearableData::wearableUpdated(LLWearable *wearable, bool removed)
|
||||
{
|
||||
wearable->setUpdated();
|
||||
if (!removed)
|
||||
|
|
@ -144,7 +144,7 @@ void LLWearableData::eraseWearable(const LLWearableType::EType type, U32 index)
|
|||
if (wearable)
|
||||
{
|
||||
mWearableDatas[type].erase(mWearableDatas[type].begin() + index);
|
||||
const BOOL removed = TRUE;
|
||||
const bool removed = true;
|
||||
wearableUpdated(wearable, removed);
|
||||
}
|
||||
}
|
||||
|
|
@ -200,11 +200,11 @@ void LLWearableData::pullCrossWearableValues(const LLWearableType::EType type)
|
|||
}
|
||||
|
||||
|
||||
BOOL LLWearableData::getWearableIndex(const LLWearable *wearable, U32& index_found) const
|
||||
bool LLWearableData::getWearableIndex(const LLWearable *wearable, U32& index_found) const
|
||||
{
|
||||
if (wearable == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
const LLWearableType::EType type = wearable->getType();
|
||||
|
|
@ -212,7 +212,7 @@ BOOL LLWearableData::getWearableIndex(const LLWearable *wearable, U32& index_fou
|
|||
if (wearable_iter == mWearableDatas.end())
|
||||
{
|
||||
LL_WARNS() << "tried to get wearable index with an invalid type!" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
const wearableentry_vec_t& wearable_vec = wearable_iter->second;
|
||||
for(U32 index = 0; index < wearable_vec.size(); index++)
|
||||
|
|
@ -220,11 +220,11 @@ BOOL LLWearableData::getWearableIndex(const LLWearable *wearable, U32& index_fou
|
|||
if (wearable_vec[index] == wearable)
|
||||
{
|
||||
index_found = index;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
U32 LLWearableData::getClothingLayerCount() const
|
||||
|
|
@ -242,7 +242,7 @@ U32 LLWearableData::getClothingLayerCount() const
|
|||
return count;
|
||||
}
|
||||
|
||||
BOOL LLWearableData::canAddWearable(const LLWearableType::EType type) const
|
||||
bool LLWearableData::canAddWearable(const LLWearableType::EType type) const
|
||||
{
|
||||
LLAssetType::EType a_type = LLWearableType::getInstance()->getAssetType(type);
|
||||
if (a_type==LLAssetType::AT_CLOTHING)
|
||||
|
|
@ -255,13 +255,13 @@ BOOL LLWearableData::canAddWearable(const LLWearableType::EType type) const
|
|||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLWearableData::isOnTop(LLWearable* wearable) const
|
||||
bool LLWearableData::isOnTop(LLWearable* wearable) const
|
||||
{
|
||||
if (!wearable) return FALSE;
|
||||
if (!wearable) return false;
|
||||
const LLWearableType::EType type = wearable->getType();
|
||||
return ( getTopWearable(type) == wearable );
|
||||
}
|
||||
|
|
@ -334,7 +334,7 @@ U32 LLWearableData::getWearableCount(const LLWearableType::EType type) const
|
|||
return 0;
|
||||
}
|
||||
const wearableentry_vec_t& wearable_vec = wearable_iter->second;
|
||||
return wearable_vec.size();
|
||||
return static_cast<U32>(wearable_vec.size());
|
||||
}
|
||||
|
||||
U32 LLWearableData::getWearableCount(const U32 tex_index) const
|
||||
|
|
|
|||
|
|
@ -60,11 +60,11 @@ public:
|
|||
const LLWearable* getBottomWearable(const LLWearableType::EType type) const;
|
||||
U32 getWearableCount(const LLWearableType::EType type) const;
|
||||
U32 getWearableCount(const U32 tex_index) const;
|
||||
BOOL getWearableIndex(const LLWearable *wearable, U32& index) const;
|
||||
bool getWearableIndex(const LLWearable *wearable, U32& index) const;
|
||||
U32 getClothingLayerCount() const;
|
||||
BOOL canAddWearable(const LLWearableType::EType type) const;
|
||||
bool canAddWearable(const LLWearableType::EType type) const;
|
||||
|
||||
BOOL isOnTop(LLWearable* wearable) const;
|
||||
bool isOnTop(LLWearable* wearable) const;
|
||||
|
||||
static const U32 MAX_CLOTHING_LAYERS = 60;
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ protected:
|
|||
void setWearable(const LLWearableType::EType type, U32 index, LLWearable *wearable);
|
||||
void pushWearable(const LLWearableType::EType type, LLWearable *wearable,
|
||||
bool trigger_updated = true);
|
||||
virtual void wearableUpdated(LLWearable *wearable, BOOL removed);
|
||||
virtual void wearableUpdated(LLWearable *wearable, bool removed);
|
||||
void eraseWearable(LLWearable *wearable);
|
||||
void eraseWearable(const LLWearableType::EType type, U32 index);
|
||||
void clearWearableType(const LLWearableType::EType type);
|
||||
|
|
|
|||
|
|
@ -32,27 +32,27 @@
|
|||
|
||||
LLWearableType::LLWearableDictionary::LLWearableDictionary(LLTranslationBridge::ptr_t& trans)
|
||||
{
|
||||
addEntry(LLWearableType::WT_SHAPE, new WearableEntry(trans, "shape", "New Shape", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_SHAPE, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_SKIN, new WearableEntry(trans, "skin", "New Skin", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_SKIN, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_HAIR, new WearableEntry(trans, "hair", "New Hair", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_HAIR, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_EYES, new WearableEntry(trans, "eyes", "New Eyes", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_EYES, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_SHIRT, new WearableEntry(trans, "shirt", "New Shirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SHIRT, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_PANTS, new WearableEntry(trans, "pants", "New Pants", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_PANTS, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_SHOES, new WearableEntry(trans, "shoes", "New Shoes", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SHOES, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_SOCKS, new WearableEntry(trans, "socks", "New Socks", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SOCKS, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_JACKET, new WearableEntry(trans, "jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_JACKET, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_GLOVES, new WearableEntry(trans, "gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_GLOVES, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry(trans, "undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNDERSHIRT, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry(trans, "underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNDERPANTS, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_SKIRT, new WearableEntry(trans, "skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_ALPHA, new WearableEntry(trans, "alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_TATTOO, new WearableEntry(trans, "tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_UNIVERSAL, new WearableEntry(trans, "universal", "New Universal", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNIVERSAL, FALSE, TRUE));
|
||||
addEntry(LLWearableType::WT_SHAPE, new WearableEntry(trans, "shape", "New Shape", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_SHAPE, false, false));
|
||||
addEntry(LLWearableType::WT_SKIN, new WearableEntry(trans, "skin", "New Skin", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_SKIN, false, false));
|
||||
addEntry(LLWearableType::WT_HAIR, new WearableEntry(trans, "hair", "New Hair", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_HAIR, false, false));
|
||||
addEntry(LLWearableType::WT_EYES, new WearableEntry(trans, "eyes", "New Eyes", LLAssetType::AT_BODYPART, LLInventoryType::ICONNAME_BODYPART_EYES, false, false));
|
||||
addEntry(LLWearableType::WT_SHIRT, new WearableEntry(trans, "shirt", "New Shirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SHIRT, false, true));
|
||||
addEntry(LLWearableType::WT_PANTS, new WearableEntry(trans, "pants", "New Pants", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_PANTS, false, true));
|
||||
addEntry(LLWearableType::WT_SHOES, new WearableEntry(trans, "shoes", "New Shoes", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SHOES, false, true));
|
||||
addEntry(LLWearableType::WT_SOCKS, new WearableEntry(trans, "socks", "New Socks", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SOCKS, false, true));
|
||||
addEntry(LLWearableType::WT_JACKET, new WearableEntry(trans, "jacket", "New Jacket", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_JACKET, false, true));
|
||||
addEntry(LLWearableType::WT_GLOVES, new WearableEntry(trans, "gloves", "New Gloves", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_GLOVES, false, true));
|
||||
addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry(trans, "undershirt", "New Undershirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNDERSHIRT, false, true));
|
||||
addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry(trans, "underpants", "New Underpants", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNDERPANTS, false, true));
|
||||
addEntry(LLWearableType::WT_SKIRT, new WearableEntry(trans, "skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_SKIRT, false, true));
|
||||
addEntry(LLWearableType::WT_ALPHA, new WearableEntry(trans, "alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_ALPHA, false, true));
|
||||
addEntry(LLWearableType::WT_TATTOO, new WearableEntry(trans, "tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_TATTOO, false, true));
|
||||
addEntry(LLWearableType::WT_UNIVERSAL, new WearableEntry(trans, "universal", "New Universal", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_UNIVERSAL, false, true));
|
||||
|
||||
addEntry(LLWearableType::WT_PHYSICS, new WearableEntry(trans, "physics", "New Physics", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_PHYSICS, TRUE, TRUE));
|
||||
addEntry(LLWearableType::WT_PHYSICS, new WearableEntry(trans, "physics", "New Physics", LLAssetType::AT_CLOTHING, LLInventoryType::ICONNAME_CLOTHING_PHYSICS, true, true));
|
||||
|
||||
addEntry(LLWearableType::WT_INVALID, new WearableEntry(trans, "invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryType::ICONNAME_UNKNOWN, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_NONE, new WearableEntry(trans, "none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryType::ICONNAME_NONE, FALSE, FALSE));
|
||||
addEntry(LLWearableType::WT_INVALID, new WearableEntry(trans, "invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryType::ICONNAME_UNKNOWN, false, false));
|
||||
addEntry(LLWearableType::WT_NONE, new WearableEntry(trans, "none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryType::ICONNAME_NONE, false, false));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -112,17 +112,17 @@ LLInventoryType::EIconName LLWearableType::getIconName(LLWearableType::EType typ
|
|||
return entry->mIconName;
|
||||
}
|
||||
|
||||
BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)
|
||||
bool LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)
|
||||
{
|
||||
const WearableEntry *entry = mDictionary.lookup(type);
|
||||
if (!entry) return FALSE;
|
||||
if (!entry) return false;
|
||||
return entry->mDisableCameraSwitch;
|
||||
}
|
||||
|
||||
BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)
|
||||
bool LLWearableType::getAllowMultiwear(LLWearableType::EType type)
|
||||
{
|
||||
const WearableEntry *entry = mDictionary.lookup(type);
|
||||
if (!entry) return FALSE;
|
||||
if (!entry) return false;
|
||||
return entry->mAllowMultiwear;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ public:
|
|||
LLAssetType::EType getAssetType(EType type);
|
||||
EType typeNameToType(const std::string& type_name);
|
||||
LLInventoryType::EIconName getIconName(EType type);
|
||||
BOOL getDisableCameraSwitch(EType type);
|
||||
BOOL getAllowMultiwear(EType type);
|
||||
bool getDisableCameraSwitch(EType type);
|
||||
bool getAllowMultiwear(EType type);
|
||||
|
||||
static EType inventoryFlagsToWearableType(U32 flags);
|
||||
|
||||
|
|
@ -85,8 +85,8 @@ private:
|
|||
const std::string& default_new_name,
|
||||
LLAssetType::EType assetType,
|
||||
LLInventoryType::EIconName iconName,
|
||||
BOOL disable_camera_switch = FALSE,
|
||||
BOOL allow_multiwear = TRUE) :
|
||||
bool disable_camera_switch = false,
|
||||
bool allow_multiwear = true) :
|
||||
LLDictionaryEntry(name),
|
||||
mAssetType(assetType),
|
||||
mDefaultNewName(default_new_name),
|
||||
|
|
@ -101,8 +101,8 @@ private:
|
|||
const std::string mLabel;
|
||||
const std::string mDefaultNewName;
|
||||
LLInventoryType::EIconName mIconName;
|
||||
BOOL mDisableCameraSwitch;
|
||||
BOOL mAllowMultiwear;
|
||||
bool mDisableCameraSwitch;
|
||||
bool mAllowMultiwear;
|
||||
};
|
||||
|
||||
class LLWearableDictionary : public LLDictionary<LLWearableType::EType, WearableEntry>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ project(llaudio)
|
|||
|
||||
include(00-Common)
|
||||
include(LLAudio)
|
||||
include(FMODSTUDIO)
|
||||
include(OPENAL)
|
||||
include(LLCommon)
|
||||
|
||||
|
|
@ -25,20 +24,6 @@ set(llaudio_HEADER_FILES
|
|||
llwindgen.h
|
||||
)
|
||||
|
||||
if (TARGET ll::fmodstudio)
|
||||
list(APPEND llaudio_SOURCE_FILES
|
||||
llaudioengine_fmodstudio.cpp
|
||||
lllistener_fmodstudio.cpp
|
||||
llstreamingaudio_fmodstudio.cpp
|
||||
)
|
||||
|
||||
list(APPEND llaudio_HEADER_FILES
|
||||
llaudioengine_fmodstudio.h
|
||||
lllistener_fmodstudio.h
|
||||
llstreamingaudio_fmodstudio.h
|
||||
)
|
||||
endif ()
|
||||
|
||||
if (TARGET ll::openal)
|
||||
list(APPEND llaudio_SOURCE_FILES
|
||||
llaudioengine_openal.cpp
|
||||
|
|
|
|||
|
|
@ -70,22 +70,22 @@ public:
|
|||
|
||||
LLVorbisDecodeState(const LLUUID &uuid, const std::string &out_filename);
|
||||
|
||||
BOOL initDecode();
|
||||
BOOL decodeSection(); // Return TRUE if done.
|
||||
BOOL finishDecode();
|
||||
bool initDecode();
|
||||
bool decodeSection(); // Return true if done.
|
||||
bool finishDecode();
|
||||
|
||||
void flushBadFile();
|
||||
|
||||
void ioComplete(S32 bytes) { mBytesRead = bytes; }
|
||||
BOOL isValid() const { return mValid; }
|
||||
BOOL isDone() const { return mDone; }
|
||||
bool isValid() const { return mValid; }
|
||||
bool isDone() const { return mDone; }
|
||||
const LLUUID &getUUID() const { return mUUID; }
|
||||
|
||||
protected:
|
||||
virtual ~LLVorbisDecodeState();
|
||||
|
||||
BOOL mValid;
|
||||
BOOL mDone;
|
||||
bool mValid;
|
||||
bool mDone;
|
||||
LLAtomicS32 mBytesRead;
|
||||
LLUUID mUUID;
|
||||
|
||||
|
|
@ -164,8 +164,8 @@ long cache_tell (void *datasource)
|
|||
|
||||
LLVorbisDecodeState::LLVorbisDecodeState(const LLUUID &uuid, const std::string &out_filename)
|
||||
{
|
||||
mDone = FALSE;
|
||||
mValid = FALSE;
|
||||
mDone = false;
|
||||
mValid = false;
|
||||
mBytesRead = -1;
|
||||
mUUID = uuid;
|
||||
mInFilep = NULL;
|
||||
|
|
@ -188,7 +188,7 @@ LLVorbisDecodeState::~LLVorbisDecodeState()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLVorbisDecodeState::initDecode()
|
||||
bool LLVorbisDecodeState::initDecode()
|
||||
{
|
||||
ov_callbacks cache_callbacks;
|
||||
cache_callbacks.read_func = cache_read;
|
||||
|
|
@ -204,14 +204,14 @@ BOOL LLVorbisDecodeState::initDecode()
|
|||
LL_WARNS("AudioEngine") << "unable to open vorbis source vfile for reading" << LL_ENDL;
|
||||
delete mInFilep;
|
||||
mInFilep = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 r = ov_open_callbacks(mInFilep, &mVF, NULL, 0, cache_callbacks);
|
||||
if(r < 0)
|
||||
{
|
||||
LL_WARNS("AudioEngine") << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << LL_ENDL;
|
||||
return(FALSE);
|
||||
return(false);
|
||||
}
|
||||
|
||||
S32 sample_count = (S32)ov_pcm_total(&mVF, -1);
|
||||
|
|
@ -260,7 +260,7 @@ BOOL LLVorbisDecodeState::initDecode()
|
|||
}
|
||||
delete mInFilep;
|
||||
mInFilep = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
|
|
@ -273,7 +273,7 @@ BOOL LLVorbisDecodeState::initDecode()
|
|||
LL_WARNS("AudioEngine") << "Out of memory when trying to alloc buffer: " << size_guess << LL_ENDL;
|
||||
delete mInFilep;
|
||||
mInFilep = NULL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -360,31 +360,31 @@ BOOL LLVorbisDecodeState::initDecode()
|
|||
// fprintf(stderr,"\nDecoded length: %ld samples\n", (long)ov_pcm_total(&vf,-1));
|
||||
// fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor);
|
||||
//}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLVorbisDecodeState::decodeSection()
|
||||
bool LLVorbisDecodeState::decodeSection()
|
||||
{
|
||||
if (!mInFilep)
|
||||
{
|
||||
LL_WARNS("AudioEngine") << "No cache file to decode in vorbis!" << LL_ENDL;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
if (mDone)
|
||||
{
|
||||
// LL_WARNS("AudioEngine") << "Already done with decode, aborting!" << LL_ENDL;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
char pcmout[4096]; /*Flawfinder: ignore*/
|
||||
|
||||
BOOL eof = FALSE;
|
||||
bool eof = false;
|
||||
long ret=ov_read(&mVF, pcmout, sizeof(pcmout), 0, 2, 1, &mCurrentSection);
|
||||
if (ret == 0)
|
||||
{
|
||||
/* EOF */
|
||||
eof = TRUE;
|
||||
mDone = TRUE;
|
||||
mValid = TRUE;
|
||||
eof = true;
|
||||
mDone = true;
|
||||
mValid = true;
|
||||
// LL_INFOS("AudioEngine") << "Vorbis EOF" << LL_ENDL;
|
||||
}
|
||||
else if (ret < 0)
|
||||
|
|
@ -394,10 +394,10 @@ BOOL LLVorbisDecodeState::decodeSection()
|
|||
|
||||
LL_WARNS("AudioEngine") << "BAD vorbis decode in decodeSection." << LL_ENDL;
|
||||
|
||||
mValid = FALSE;
|
||||
mDone = TRUE;
|
||||
// We're done, return TRUE.
|
||||
return TRUE;
|
||||
mValid = false;
|
||||
mDone = true;
|
||||
// We're done, return true.
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -409,12 +409,12 @@ BOOL LLVorbisDecodeState::decodeSection()
|
|||
return eof;
|
||||
}
|
||||
|
||||
BOOL LLVorbisDecodeState::finishDecode()
|
||||
bool LLVorbisDecodeState::finishDecode()
|
||||
{
|
||||
if (!isValid())
|
||||
{
|
||||
LL_WARNS("AudioEngine") << "Bogus vorbis decode state for " << getUUID() << ", aborting!" << LL_ENDL;
|
||||
return TRUE; // We've finished
|
||||
return true; // We've finished
|
||||
}
|
||||
|
||||
if (mFileHandle == LLLFSThread::nullHandle())
|
||||
|
|
@ -422,7 +422,7 @@ BOOL LLVorbisDecodeState::finishDecode()
|
|||
ov_clear(&mVF);
|
||||
|
||||
// write "data" chunk length, in little-endian format
|
||||
S32 data_length = mWAVBuffer.size() - WAV_HEADER_SIZE;
|
||||
S32 data_length = static_cast<S32>(mWAVBuffer.size()) - WAV_HEADER_SIZE;
|
||||
mWAVBuffer[40] = (data_length) & 0x000000FF;
|
||||
mWAVBuffer[41] = (data_length >> 8) & 0x000000FF;
|
||||
mWAVBuffer[42] = (data_length >> 16) & 0x000000FF;
|
||||
|
|
@ -463,7 +463,7 @@ BOOL LLVorbisDecodeState::finishDecode()
|
|||
{
|
||||
memcpy(&mWAVBuffer[WAV_HEADER_SIZE], pcmout, (2 * fade_length)); /*Flawfinder: ignore*/
|
||||
}
|
||||
S32 near_end = mWAVBuffer.size() - (2 * fade_length);
|
||||
S32 near_end = static_cast<S32>(mWAVBuffer.size()) - (2 * fade_length);
|
||||
if ((S32)mWAVBuffer.size() >= ( near_end + 2* fade_length))
|
||||
{
|
||||
memcpy(pcmout, &mWAVBuffer[near_end], (2 * fade_length)); /*Flawfinder: ignore*/
|
||||
|
|
@ -487,11 +487,11 @@ BOOL LLVorbisDecodeState::finishDecode()
|
|||
if (36 == data_length)
|
||||
{
|
||||
LL_WARNS("AudioEngine") << "BAD Vorbis decode in finishDecode!" << LL_ENDL;
|
||||
mValid = FALSE;
|
||||
return TRUE; // we've finished
|
||||
mValid = false;
|
||||
return true; // we've finished
|
||||
}
|
||||
mBytesRead = -1;
|
||||
mFileHandle = LLLFSThread::sLocal->write(mOutFilename, &mWAVBuffer[0], 0, mWAVBuffer.size(),
|
||||
mFileHandle = LLLFSThread::sLocal->write(mOutFilename, &mWAVBuffer[0], 0, static_cast<S32>(mWAVBuffer.size()),
|
||||
new WriteResponder(this));
|
||||
}
|
||||
|
||||
|
|
@ -502,21 +502,21 @@ BOOL LLVorbisDecodeState::finishDecode()
|
|||
if (mBytesRead == 0)
|
||||
{
|
||||
LL_WARNS("AudioEngine") << "Unable to write file in LLVorbisDecodeState::finishDecode" << LL_ENDL;
|
||||
mValid = FALSE;
|
||||
return TRUE; // we've finished
|
||||
mValid = false;
|
||||
return true; // we've finished
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE; // not done
|
||||
return false; // not done
|
||||
}
|
||||
}
|
||||
|
||||
mDone = TRUE;
|
||||
mDone = true;
|
||||
|
||||
LL_DEBUGS("AudioEngine") << "Finished decode for " << getUUID() << LL_ENDL;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLVorbisDecodeState::flushBadFile()
|
||||
|
|
@ -779,13 +779,13 @@ void LLAudioDecodeMgr::processQueue()
|
|||
mImpl->processQueue();
|
||||
}
|
||||
|
||||
BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
|
||||
bool LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
|
||||
{
|
||||
if (gAudiop && gAudiop->hasDecodedFile(uuid))
|
||||
{
|
||||
// Already have a decoded version, don't need to decode it.
|
||||
LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has decoded file already" << LL_ENDL;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND))
|
||||
|
|
@ -793,9 +793,9 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
|
|||
// Just put it on the decode queue.
|
||||
LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has local asset file already" << LL_ENDL;
|
||||
mImpl->mDecodeQueue.push_back(uuid);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " no file available" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class LLAudioDecodeMgr : public LLSingleton<LLAudioDecodeMgr>
|
|||
~LLAudioDecodeMgr();
|
||||
public:
|
||||
void processQueue();
|
||||
BOOL addDecodeRequest(const LLUUID &uuid);
|
||||
bool addDecodeRequest(const LLUUID &uuid);
|
||||
void addAudioRequest(const LLUUID &uuid);
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ public:
|
|||
|
||||
void preload(const LLUUID &audio_id); // Only used for preloading UI sounds, now.
|
||||
|
||||
void addAudioData(LLAudioData *adp, bool set_current = TRUE);
|
||||
void addAudioData(LLAudioData *adp, bool set_current = true);
|
||||
|
||||
void setForcedPriority(const bool ambient) { mForcedPriority = ambient; }
|
||||
bool isForcedPriority() const { return mForcedPriority; }
|
||||
|
|
|
|||
|
|
@ -1,756 +0,0 @@
|
|||
/**
|
||||
* @file audioengine_fmodstudio.cpp
|
||||
* @brief Implementation of LLAudioEngine class abstracting the audio
|
||||
* support as a FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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 "linden_common.h"
|
||||
|
||||
#include "llstreamingaudio.h"
|
||||
#include "llstreamingaudio_fmodstudio.h"
|
||||
|
||||
#include "llaudioengine_fmodstudio.h"
|
||||
#include "lllistener_fmodstudio.h"
|
||||
|
||||
#include "llerror.h"
|
||||
#include "llmath.h"
|
||||
#include "llrand.h"
|
||||
|
||||
#include "fmodstudio/fmod.hpp"
|
||||
#include "fmodstudio/fmod_errors.h"
|
||||
#include "lldir.h"
|
||||
#include "llapr.h"
|
||||
|
||||
#include "sound_ids.h"
|
||||
|
||||
FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int *outchannels);
|
||||
|
||||
FMOD::ChannelGroup *LLAudioEngine_FMODSTUDIO::mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT] = {0};
|
||||
|
||||
LLAudioEngine_FMODSTUDIO::LLAudioEngine_FMODSTUDIO(bool enable_profiler)
|
||||
: mInited(false),
|
||||
mWindGen(NULL),
|
||||
mWindDSP(NULL),
|
||||
mSystem(NULL),
|
||||
mEnableProfiler(enable_profiler),
|
||||
mWindDSPDesc(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LLAudioEngine_FMODSTUDIO::~LLAudioEngine_FMODSTUDIO()
|
||||
{
|
||||
// mWindDSPDesc, mWindGen and mWindDSP get cleaned up on cleanupWind in LLAudioEngine::shutdown()
|
||||
// mSystem gets cleaned up at shutdown()
|
||||
}
|
||||
|
||||
|
||||
static inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
|
||||
{
|
||||
if (result == FMOD_OK)
|
||||
return false;
|
||||
LL_DEBUGS("FMOD") << string << " Error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLAudioEngine_FMODSTUDIO::init(void* userdata, const std::string &app_title)
|
||||
{
|
||||
U32 version;
|
||||
FMOD_RESULT result;
|
||||
|
||||
LL_DEBUGS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() initializing FMOD" << LL_ENDL;
|
||||
|
||||
result = FMOD::System_Create(&mSystem);
|
||||
if (Check_FMOD_Error(result, "FMOD::System_Create"))
|
||||
return false;
|
||||
|
||||
//will call LLAudioEngine_FMODSTUDIO::allocateListener, which needs a valid mSystem pointer.
|
||||
LLAudioEngine::init(userdata, app_title);
|
||||
|
||||
result = mSystem->getVersion(&version);
|
||||
Check_FMOD_Error(result, "FMOD::System::getVersion");
|
||||
|
||||
if (version < FMOD_VERSION)
|
||||
{
|
||||
LL_WARNS("AppInit") << "FMOD Studio version mismatch, actual: " << version
|
||||
<< " expected:" << FMOD_VERSION << LL_ENDL;
|
||||
}
|
||||
|
||||
// In this case, all sounds, PLUS wind and stream will be software.
|
||||
result = mSystem->setSoftwareChannels(LL_MAX_AUDIO_CHANNELS + 2);
|
||||
Check_FMOD_Error(result, "FMOD::System::setSoftwareChannels");
|
||||
|
||||
FMOD_ADVANCEDSETTINGS settings;
|
||||
memset(&settings, 0, sizeof(settings));
|
||||
settings.cbSize = sizeof(FMOD_ADVANCEDSETTINGS);
|
||||
settings.resamplerMethod = FMOD_DSP_RESAMPLER_LINEAR;
|
||||
|
||||
result = mSystem->setAdvancedSettings(&settings);
|
||||
Check_FMOD_Error(result, "FMOD::System::setAdvancedSettings");
|
||||
|
||||
// FMOD_INIT_THREAD_UNSAFE Disables thread safety for API calls.
|
||||
// Only use this if FMOD is being called from a single thread, and if Studio API is not being used.
|
||||
U32 fmod_flags = FMOD_INIT_NORMAL | FMOD_INIT_3D_RIGHTHANDED | FMOD_INIT_THREAD_UNSAFE;
|
||||
if (mEnableProfiler)
|
||||
{
|
||||
fmod_flags |= FMOD_INIT_PROFILE_ENABLE;
|
||||
}
|
||||
|
||||
#if LL_LINUX
|
||||
bool audio_ok = false;
|
||||
|
||||
if (!audio_ok)
|
||||
{
|
||||
const char* env_string = getenv("LL_BAD_FMOD_PULSEAUDIO");
|
||||
if (NULL == env_string)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Trying PulseAudio audio output..." << LL_ENDL;
|
||||
if (mSystem->setOutput(FMOD_OUTPUTTYPE_PULSEAUDIO) == FMOD_OK &&
|
||||
(result = mSystem->init(LL_MAX_AUDIO_CHANNELS + 2, fmod_flags, const_cast<char*>(app_title.c_str()))) == FMOD_OK)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "PulseAudio output initialized OKAY" << LL_ENDL;
|
||||
audio_ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Check_FMOD_Error(result, "PulseAudio audio output FAILED to initialize");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "PulseAudio audio output SKIPPED" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (!audio_ok)
|
||||
{
|
||||
const char* env_string = getenv("LL_BAD_FMOD_ALSA");
|
||||
if (NULL == env_string)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
|
||||
if (mSystem->setOutput(FMOD_OUTPUTTYPE_ALSA) == FMOD_OK &&
|
||||
(result = mSystem->init(LL_MAX_AUDIO_CHANNELS + 2, fmod_flags, 0)) == FMOD_OK)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
|
||||
audio_ok = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "ALSA audio output SKIPPED" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (!audio_ok)
|
||||
{
|
||||
LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
// We're interested in logging which output method we
|
||||
// ended up with, for QA purposes.
|
||||
FMOD_OUTPUTTYPE output_type;
|
||||
mSystem->getOutput(&output_type);
|
||||
switch (output_type)
|
||||
{
|
||||
case FMOD_OUTPUTTYPE_NOSOUND:
|
||||
LL_INFOS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
|
||||
case FMOD_OUTPUTTYPE_PULSEAUDIO:
|
||||
LL_INFOS("AppInit") << "Audio output: PulseAudio" << LL_ENDL; break;
|
||||
case FMOD_OUTPUTTYPE_ALSA:
|
||||
LL_INFOS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
|
||||
default:
|
||||
LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
|
||||
};
|
||||
#else // LL_LINUX
|
||||
|
||||
// initialize the FMOD engine
|
||||
// number of channel in this case looks to be identiacal to number of max simultaneously
|
||||
// playing objects and we can set practically any number
|
||||
result = mSystem->init(LL_MAX_AUDIO_CHANNELS + 2, fmod_flags, 0);
|
||||
if (Check_FMOD_Error(result, "Error initializing FMOD Studio with default settins, retrying with other format"))
|
||||
{
|
||||
result = mSystem->setSoftwareFormat(44100, FMOD_SPEAKERMODE_STEREO, 0/*- ignore*/);
|
||||
if (Check_FMOD_Error(result, "Error setting sotware format. Can't init."))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
result = mSystem->init(LL_MAX_AUDIO_CHANNELS + 2, fmod_flags, 0);
|
||||
}
|
||||
if (Check_FMOD_Error(result, "Error initializing FMOD Studio"))
|
||||
{
|
||||
// If it fails here and (result == FMOD_ERR_OUTPUT_CREATEBUFFER),
|
||||
// we can retry with other settings
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() FMOD Studio initialized correctly" << LL_ENDL;
|
||||
|
||||
int r_numbuffers, r_samplerate, r_channels;
|
||||
unsigned int r_bufferlength;
|
||||
char r_name[512];
|
||||
int latency = 100;
|
||||
mSystem->getDSPBufferSize(&r_bufferlength, &r_numbuffers);
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_bufferlength=" << r_bufferlength << " bytes" << LL_ENDL;
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_numbuffers=" << r_numbuffers << LL_ENDL;
|
||||
|
||||
mSystem->getDriverInfo(0, r_name, 511, NULL, &r_samplerate, NULL, &r_channels);
|
||||
r_name[511] = '\0';
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): r_name=\"" << r_name << "\"" << LL_ENDL;
|
||||
|
||||
if (r_samplerate != 0)
|
||||
latency = (int)(1000.0f * r_bufferlength * r_numbuffers / r_samplerate);
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): latency=" << latency << "ms" << LL_ENDL;
|
||||
|
||||
mInited = true;
|
||||
|
||||
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init(): initialization complete." << LL_ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
std::string LLAudioEngine_FMODSTUDIO::getDriverName(bool verbose)
|
||||
{
|
||||
llassert_always(mSystem);
|
||||
if (verbose)
|
||||
{
|
||||
U32 version;
|
||||
if (!Check_FMOD_Error(mSystem->getVersion(&version), "FMOD::System::getVersion"))
|
||||
{
|
||||
return llformat("FMOD Studio %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
|
||||
}
|
||||
}
|
||||
return "FMOD STUDIO";
|
||||
}
|
||||
|
||||
|
||||
// create our favourite FMOD-native streaming audio implementation
|
||||
LLStreamingAudioInterface *LLAudioEngine_FMODSTUDIO::createDefaultStreamingAudioImpl() const
|
||||
{
|
||||
return new LLStreamingAudio_FMODSTUDIO(mSystem);
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::allocateListener(void)
|
||||
{
|
||||
mListenerp = (LLListener *) new LLListener_FMODSTUDIO(mSystem);
|
||||
if (!mListenerp)
|
||||
{
|
||||
LL_WARNS("FMOD") << "Listener creation failed" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::shutdown()
|
||||
{
|
||||
stopInternetStream();
|
||||
|
||||
LL_INFOS("FMOD") << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
||||
LLAudioEngine::shutdown();
|
||||
|
||||
LL_INFOS("FMOD") << "LLAudioEngine_FMODSTUDIO::shutdown() closing FMOD Studio" << LL_ENDL;
|
||||
if (mSystem)
|
||||
{
|
||||
mSystem->close();
|
||||
mSystem->release();
|
||||
}
|
||||
LL_INFOS("FMOD") << "LLAudioEngine_FMODSTUDIO::shutdown() done closing FMOD Studio" << LL_ENDL;
|
||||
|
||||
delete mListenerp;
|
||||
mListenerp = NULL;
|
||||
}
|
||||
|
||||
|
||||
LLAudioBuffer * LLAudioEngine_FMODSTUDIO::createBuffer()
|
||||
{
|
||||
return new LLAudioBufferFMODSTUDIO(mSystem);
|
||||
}
|
||||
|
||||
|
||||
LLAudioChannel * LLAudioEngine_FMODSTUDIO::createChannel()
|
||||
{
|
||||
return new LLAudioChannelFMODSTUDIO(mSystem);
|
||||
}
|
||||
|
||||
bool LLAudioEngine_FMODSTUDIO::initWind()
|
||||
{
|
||||
mNextWindUpdate = 0.0;
|
||||
|
||||
if (!mWindDSPDesc)
|
||||
{
|
||||
mWindDSPDesc = new FMOD_DSP_DESCRIPTION();
|
||||
}
|
||||
|
||||
if (!mWindDSP)
|
||||
{
|
||||
memset(mWindDSPDesc, 0, sizeof(*mWindDSPDesc)); //Set everything to zero
|
||||
strncpy(mWindDSPDesc->name, "Wind Unit", sizeof(mWindDSPDesc->name));
|
||||
mWindDSPDesc->pluginsdkversion = FMOD_PLUGIN_SDK_VERSION;
|
||||
mWindDSPDesc->read = &windCallback; // Assign callback - may be called from arbitrary threads
|
||||
if (Check_FMOD_Error(mSystem->createDSP(mWindDSPDesc, &mWindDSP), "FMOD::createDSP"))
|
||||
return false;
|
||||
|
||||
if (mWindGen)
|
||||
delete mWindGen;
|
||||
|
||||
int frequency = 44100;
|
||||
|
||||
FMOD_SPEAKERMODE mode;
|
||||
if (Check_FMOD_Error(mSystem->getSoftwareFormat(&frequency, &mode, nullptr), "FMOD::System::getSoftwareFormat"))
|
||||
{
|
||||
cleanupWind();
|
||||
return false;
|
||||
}
|
||||
|
||||
mWindGen = new LLWindGen<MIXBUFFERFORMAT>((U32)frequency);
|
||||
|
||||
if (Check_FMOD_Error(mWindDSP->setUserData((void*)mWindGen), "FMOD::DSP::setUserData"))
|
||||
{
|
||||
cleanupWind();
|
||||
return false;
|
||||
}
|
||||
if (Check_FMOD_Error(mWindDSP->setChannelFormat(FMOD_CHANNELMASK_STEREO, 2, mode), "FMOD::DSP::setChannelFormat"))
|
||||
{
|
||||
cleanupWind();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// *TODO: Should this guard against multiple plays?
|
||||
if (Check_FMOD_Error(mSystem->playDSP(mWindDSP, nullptr, false, nullptr), "FMOD::System::playDSP"))
|
||||
{
|
||||
cleanupWind();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioEngine_FMODSTUDIO::cleanupWind()
|
||||
{
|
||||
if (mWindDSP)
|
||||
{
|
||||
FMOD::ChannelGroup* master_group = NULL;
|
||||
if (!Check_FMOD_Error(mSystem->getMasterChannelGroup(&master_group), "FMOD::System::getMasterChannelGroup")
|
||||
&& master_group)
|
||||
{
|
||||
master_group->removeDSP(mWindDSP);
|
||||
}
|
||||
mWindDSP->release();
|
||||
mWindDSP = NULL;
|
||||
}
|
||||
|
||||
delete mWindDSPDesc;
|
||||
mWindDSPDesc = NULL;
|
||||
|
||||
delete mWindGen;
|
||||
mWindGen = NULL;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLAudioEngine_FMODSTUDIO::updateWind(LLVector3 wind_vec, F32 camera_height_above_water)
|
||||
{
|
||||
LLVector3 wind_pos;
|
||||
F64 pitch;
|
||||
F64 center_freq;
|
||||
|
||||
if (!mEnableWind)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
|
||||
{
|
||||
|
||||
// wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
|
||||
// need to convert this to the conventional orientation DS3D and OpenAL use
|
||||
// where +X = right, +Y = up, +Z = backwards
|
||||
|
||||
wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
|
||||
|
||||
// cerr << "Wind update" << endl;
|
||||
|
||||
pitch = 1.0 + mapWindVecToPitch(wind_vec);
|
||||
center_freq = 80.0 * pow(pitch, 2.5*(mapWindVecToGain(wind_vec) + 1.0));
|
||||
|
||||
mWindGen->mTargetFreq = (F32)center_freq;
|
||||
mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
|
||||
mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLAudioEngine_FMODSTUDIO::setInternalGain(F32 gain)
|
||||
{
|
||||
if (!mInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gain = llclamp(gain, 0.0f, 1.0f);
|
||||
|
||||
FMOD::ChannelGroup* master_group = NULL;
|
||||
if (!Check_FMOD_Error(mSystem->getMasterChannelGroup(&master_group), "FMOD::System::getMasterChannelGroup")
|
||||
&& master_group)
|
||||
{
|
||||
master_group->setVolume(gain);
|
||||
}
|
||||
|
||||
LLStreamingAudioInterface *saimpl = getStreamingAudioImpl();
|
||||
if (saimpl)
|
||||
{
|
||||
// fmod likes its streaming audio channel gain re-asserted after
|
||||
// master volume change.
|
||||
saimpl->setGain(saimpl->getGain());
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// LLAudioChannelFMODSTUDIO implementation
|
||||
//
|
||||
|
||||
LLAudioChannelFMODSTUDIO::LLAudioChannelFMODSTUDIO(FMOD::System *system) : LLAudioChannel(), mSystemp(system), mChannelp(NULL), mLastSamplePos(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LLAudioChannelFMODSTUDIO::~LLAudioChannelFMODSTUDIO()
|
||||
{
|
||||
cleanup();
|
||||
}
|
||||
|
||||
bool LLAudioChannelFMODSTUDIO::updateBuffer()
|
||||
{
|
||||
if (!mCurrentSourcep)
|
||||
{
|
||||
// This channel isn't associated with any source, nothing
|
||||
// to be updated
|
||||
return false;
|
||||
}
|
||||
|
||||
if (LLAudioChannel::updateBuffer())
|
||||
{
|
||||
// Base class update returned true, which means that we need to actually
|
||||
// set up the channel for a different buffer.
|
||||
|
||||
LLAudioBufferFMODSTUDIO *bufferp = (LLAudioBufferFMODSTUDIO *)mCurrentSourcep->getCurrentBuffer();
|
||||
|
||||
// Grab the FMOD sample associated with the buffer
|
||||
FMOD::Sound *soundp = bufferp->getSound();
|
||||
if (!soundp)
|
||||
{
|
||||
// This is bad, there should ALWAYS be a sound associated with a legit
|
||||
// buffer.
|
||||
LL_ERRS() << "No FMOD sound!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Actually play the sound. Start it off paused so we can do all the necessary
|
||||
// setup.
|
||||
if (!mChannelp)
|
||||
{
|
||||
FMOD_RESULT result = getSystem()->playSound(soundp, NULL /*free channel?*/, true, &mChannelp);
|
||||
Check_FMOD_Error(result, "FMOD::System::playSound");
|
||||
}
|
||||
|
||||
// Setting up channel mChannelID
|
||||
}
|
||||
|
||||
// If we have a source for the channel, we need to update its gain.
|
||||
if (mCurrentSourcep)
|
||||
{
|
||||
// SJB: warnings can spam and hurt framerate, disabling
|
||||
//FMOD_RESULT result;
|
||||
|
||||
mChannelp->setVolume(getSecondaryGain() * mCurrentSourcep->getGain());
|
||||
//Check_FMOD_Error(result, "FMOD::Channel::setVolume");
|
||||
|
||||
mChannelp->setMode(mCurrentSourcep->isLoop() ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF);
|
||||
/*if(Check_FMOD_Error(result, "FMOD::Channel::setMode"))
|
||||
{
|
||||
S32 index;
|
||||
mChannelp->getIndex(&index);
|
||||
LL_WARNS() << "Channel " << index << "Source ID: " << mCurrentSourcep->getID()
|
||||
<< " at " << mCurrentSourcep->getPositionGlobal() << LL_ENDL;
|
||||
}*/
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::update3DPosition()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
// We're not actually a live channel (i.e., we're not playing back anything)
|
||||
return;
|
||||
}
|
||||
|
||||
LLAudioBufferFMODSTUDIO *bufferp = (LLAudioBufferFMODSTUDIO *)mCurrentBufferp;
|
||||
if (!bufferp)
|
||||
{
|
||||
// We don't have a buffer associated with us (should really have been picked up
|
||||
// by the above if.
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCurrentSourcep->isForcedPriority())
|
||||
{
|
||||
// Prioritized UI and preview sounds don't need to do any positional updates.
|
||||
set3DMode(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Localized sound. Update the position and velocity of the sound.
|
||||
set3DMode(true);
|
||||
|
||||
LLVector3 float_pos;
|
||||
float_pos.setVec(mCurrentSourcep->getPositionGlobal());
|
||||
FMOD_RESULT result = mChannelp->set3DAttributes((FMOD_VECTOR*)float_pos.mV, (FMOD_VECTOR*)mCurrentSourcep->getVelocity().mV);
|
||||
Check_FMOD_Error(result, "FMOD::Channel::set3DAttributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::updateLoop()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
// May want to clear up the loop/sample counters.
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Hack: We keep track of whether we looped or not by seeing when the
|
||||
// sample position looks like it's going backwards. Not reliable; may
|
||||
// yield false negatives.
|
||||
//
|
||||
U32 cur_pos;
|
||||
mChannelp->getPosition(&cur_pos, FMOD_TIMEUNIT_PCMBYTES);
|
||||
|
||||
if (cur_pos < (U32)mLastSamplePos)
|
||||
{
|
||||
mLoopedThisFrame = true;
|
||||
}
|
||||
mLastSamplePos = cur_pos;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::cleanup()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
// Aborting cleanup with no channel handle.
|
||||
return;
|
||||
}
|
||||
|
||||
//Cleaning up channel mChannelID
|
||||
Check_FMOD_Error(mChannelp->stop(), "FMOD::Channel::stop");
|
||||
|
||||
mCurrentBufferp = NULL;
|
||||
mChannelp = NULL;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::play()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
LL_WARNS() << "Playing without a channel handle, aborting" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
Check_FMOD_Error(mChannelp->setPaused(false), "FMOD::Channel::pause");
|
||||
|
||||
getSource()->setPlayedOnce(true);
|
||||
|
||||
if (LLAudioEngine_FMODSTUDIO::mChannelGroups[getSource()->getType()])
|
||||
mChannelp->setChannelGroup(LLAudioEngine_FMODSTUDIO::mChannelGroups[getSource()->getType()]);
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::playSynced(LLAudioChannel *channelp)
|
||||
{
|
||||
LLAudioChannelFMODSTUDIO *fmod_channelp = (LLAudioChannelFMODSTUDIO*)channelp;
|
||||
if (!(fmod_channelp->mChannelp && mChannelp))
|
||||
{
|
||||
// Don't have channels allocated to both the master and the slave
|
||||
return;
|
||||
}
|
||||
|
||||
U32 cur_pos;
|
||||
if (Check_FMOD_Error(mChannelp->getPosition(&cur_pos, FMOD_TIMEUNIT_PCMBYTES), "Unable to retrieve current position"))
|
||||
return;
|
||||
|
||||
cur_pos %= mCurrentBufferp->getLength();
|
||||
|
||||
// Try to match the position of our sync master
|
||||
Check_FMOD_Error(mChannelp->setPosition(cur_pos, FMOD_TIMEUNIT_PCMBYTES), "Unable to set current position");
|
||||
|
||||
// Start us playing
|
||||
play();
|
||||
}
|
||||
|
||||
|
||||
bool LLAudioChannelFMODSTUDIO::isPlaying()
|
||||
{
|
||||
if (!mChannelp)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool paused, playing;
|
||||
mChannelp->getPaused(&paused);
|
||||
mChannelp->isPlaying(&playing);
|
||||
return !paused && playing;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// LLAudioChannelFMODSTUDIO implementation
|
||||
//
|
||||
|
||||
|
||||
LLAudioBufferFMODSTUDIO::LLAudioBufferFMODSTUDIO(FMOD::System *system) : mSystemp(system), mSoundp(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
LLAudioBufferFMODSTUDIO::~LLAudioBufferFMODSTUDIO()
|
||||
{
|
||||
if (mSoundp)
|
||||
{
|
||||
mSoundp->release();
|
||||
mSoundp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool LLAudioBufferFMODSTUDIO::loadWAV(const std::string& filename)
|
||||
{
|
||||
// Try to open a wav file from disk. This will eventually go away, as we don't
|
||||
// really want to block doing this.
|
||||
if (filename.empty())
|
||||
{
|
||||
// invalid filename, abort.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!gDirUtilp->fileExists(filename))
|
||||
{
|
||||
// File not found, abort.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mSoundp)
|
||||
{
|
||||
// If there's already something loaded in this buffer, clean it up.
|
||||
mSoundp->release();
|
||||
mSoundp = NULL;
|
||||
}
|
||||
|
||||
FMOD_MODE base_mode = FMOD_LOOP_NORMAL;
|
||||
FMOD_CREATESOUNDEXINFO exinfo;
|
||||
memset(&exinfo, 0, sizeof(exinfo));
|
||||
exinfo.cbsize = sizeof(exinfo);
|
||||
exinfo.suggestedsoundtype = FMOD_SOUND_TYPE_WAV; //Hint to speed up loading.
|
||||
// Load up the wav file into an fmod sample (since 1.05 fmod studio expects everything in UTF-8)
|
||||
FMOD_RESULT result = getSystem()->createSound(filename.c_str(), base_mode, &exinfo, &mSoundp);
|
||||
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
// We failed to load the file for some reason.
|
||||
LL_WARNS() << "Could not load data '" << filename << "': " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
|
||||
//
|
||||
// If we EVER want to load wav files provided by end users, we need
|
||||
// to rethink this!
|
||||
//
|
||||
// file is probably corrupt - remove it.
|
||||
LLFile::remove(filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything went well, return true
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
U32 LLAudioBufferFMODSTUDIO::getLength()
|
||||
{
|
||||
if (!mSoundp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
U32 length;
|
||||
mSoundp->getLength(&length, FMOD_TIMEUNIT_PCMBYTES);
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
void LLAudioChannelFMODSTUDIO::set3DMode(bool use3d)
|
||||
{
|
||||
FMOD_MODE current_mode;
|
||||
if (mChannelp->getMode(¤t_mode) != FMOD_OK)
|
||||
return;
|
||||
FMOD_MODE new_mode = current_mode;
|
||||
new_mode &= ~(use3d ? FMOD_2D : FMOD_3D);
|
||||
new_mode |= use3d ? FMOD_3D : FMOD_2D;
|
||||
|
||||
if (current_mode != new_mode)
|
||||
{
|
||||
mChannelp->setMode(new_mode);
|
||||
}
|
||||
}
|
||||
|
||||
// *NOTE: This is almost certainly being called on the mixer thread,
|
||||
// not the main thread. May have implications for callees or audio
|
||||
// engine shutdown.
|
||||
|
||||
FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int *outchannels)
|
||||
{
|
||||
// inbuffer = fmod's original mixbuffer.
|
||||
// outbuffer = the buffer passed from the previous DSP unit.
|
||||
// length = length in samples at this mix time.
|
||||
|
||||
LLWindGen<LLAudioEngine_FMODSTUDIO::MIXBUFFERFORMAT> *windgen = NULL;
|
||||
FMOD::DSP *thisdsp = (FMOD::DSP *)dsp_state->instance;
|
||||
|
||||
thisdsp->getUserData((void **)&windgen);
|
||||
|
||||
if (windgen)
|
||||
{
|
||||
windgen->windGenerate((LLAudioEngine_FMODSTUDIO::MIXBUFFERFORMAT *)outbuffer, length);
|
||||
}
|
||||
|
||||
return FMOD_OK;
|
||||
}
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
/**
|
||||
* @file audioengine_fmodstudio.h
|
||||
* @brief Definition of LLAudioEngine class abstracting the audio
|
||||
* support as a FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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_AUDIOENGINE_FMODSTUDIO_H
|
||||
#define LL_AUDIOENGINE_FMODSTUDIO_H
|
||||
|
||||
#include "llaudioengine.h"
|
||||
#include "llwindgen.h"
|
||||
|
||||
//Stubs
|
||||
class LLAudioStreamManagerFMODSTUDIO;
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
class Channel;
|
||||
class ChannelGroup;
|
||||
class Sound;
|
||||
class DSP;
|
||||
}
|
||||
typedef struct FMOD_DSP_DESCRIPTION FMOD_DSP_DESCRIPTION;
|
||||
|
||||
//Interfaces
|
||||
class LLAudioEngine_FMODSTUDIO : public LLAudioEngine
|
||||
{
|
||||
public:
|
||||
LLAudioEngine_FMODSTUDIO(bool enable_profiler);
|
||||
virtual ~LLAudioEngine_FMODSTUDIO();
|
||||
|
||||
// initialization/startup/shutdown
|
||||
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();
|
||||
|
||||
/*virtual*/ bool initWind();
|
||||
/*virtual*/ void cleanupWind();
|
||||
|
||||
/*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water);
|
||||
|
||||
typedef F32 MIXBUFFERFORMAT;
|
||||
|
||||
FMOD::System *getSystem() const {return mSystem;}
|
||||
protected:
|
||||
/*virtual*/ LLAudioBuffer *createBuffer(); // Get a free buffer, or flush an existing one if you have to.
|
||||
/*virtual*/ LLAudioChannel *createChannel(); // Create a new audio channel.
|
||||
|
||||
/*virtual*/ void setInternalGain(F32 gain);
|
||||
|
||||
bool mInited;
|
||||
|
||||
LLWindGen<MIXBUFFERFORMAT> *mWindGen;
|
||||
|
||||
FMOD_DSP_DESCRIPTION *mWindDSPDesc;
|
||||
FMOD::DSP *mWindDSP;
|
||||
FMOD::System *mSystem;
|
||||
bool mEnableProfiler;
|
||||
|
||||
public:
|
||||
static FMOD::ChannelGroup *mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT];
|
||||
};
|
||||
|
||||
|
||||
class LLAudioChannelFMODSTUDIO : public LLAudioChannel
|
||||
{
|
||||
public:
|
||||
LLAudioChannelFMODSTUDIO(FMOD::System *audioengine);
|
||||
virtual ~LLAudioChannelFMODSTUDIO();
|
||||
|
||||
protected:
|
||||
/*virtual*/ void play();
|
||||
/*virtual*/ void playSynced(LLAudioChannel *channelp);
|
||||
/*virtual*/ void cleanup();
|
||||
/*virtual*/ bool isPlaying();
|
||||
|
||||
/*virtual*/ bool updateBuffer();
|
||||
/*virtual*/ void update3DPosition();
|
||||
/*virtual*/ void updateLoop();
|
||||
|
||||
void set3DMode(bool use3d);
|
||||
protected:
|
||||
FMOD::System *getSystem() const {return mSystemp;}
|
||||
FMOD::System *mSystemp;
|
||||
FMOD::Channel *mChannelp;
|
||||
S32 mLastSamplePos;
|
||||
};
|
||||
|
||||
|
||||
class LLAudioBufferFMODSTUDIO : public LLAudioBuffer
|
||||
{
|
||||
public:
|
||||
LLAudioBufferFMODSTUDIO(FMOD::System *audioengine);
|
||||
virtual ~LLAudioBufferFMODSTUDIO();
|
||||
|
||||
/*virtual*/ bool loadWAV(const std::string& filename);
|
||||
/*virtual*/ U32 getLength();
|
||||
friend class LLAudioChannelFMODSTUDIO;
|
||||
protected:
|
||||
FMOD::System *getSystem() const {return mSystemp;}
|
||||
FMOD::System *mSystemp;
|
||||
FMOD::Sound *getSound() const{ return mSoundp; }
|
||||
FMOD::Sound *mSoundp;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_AUDIOENGINE_FMODSTUDIO_H
|
||||
|
|
@ -135,10 +135,19 @@ void LLAudioEngine_OpenAL::shutdown()
|
|||
LL_INFOS() << "About to LLAudioEngine::shutdown()" << LL_ENDL;
|
||||
LLAudioEngine::shutdown();
|
||||
|
||||
// If a subsequent error occurs while there is still an error recorded
|
||||
// internally, the second error will simply be ignored.
|
||||
// Clear previous error to make sure we will captuare a valid failure reason
|
||||
ALenum error = alutGetError();
|
||||
if (error != ALUT_ERROR_NO_ERROR)
|
||||
{
|
||||
LL_WARNS() << "Uncleared error state prior to shutdown: "
|
||||
<< alutGetErrorString(error) << LL_ENDL;
|
||||
}
|
||||
|
||||
LL_INFOS() << "About to alutExit()" << LL_ENDL;
|
||||
if(!alutExit())
|
||||
{
|
||||
LL_WARNS() << "Nuts." << LL_ENDL;
|
||||
LL_WARNS() << "LLAudioEngine_OpenAL::shutdown() ALUT shutdown failed: " << alutGetErrorString (alutGetError ()) << LL_ENDL;
|
||||
}
|
||||
|
||||
|
|
@ -518,7 +527,7 @@ void LLAudioEngine_OpenAL::updateWind(LLVector3 wind_vec, F32 camera_altitude)
|
|||
}
|
||||
|
||||
alBufferData(buffer,
|
||||
AL_FORMAT_STEREO16,
|
||||
AL_FORMAT_STEREO_FLOAT32,
|
||||
mWindGen->windGenerate(mWindBuf,
|
||||
mWindBufSamples),
|
||||
mWindBufBytes,
|
||||
|
|
|
|||
|
|
@ -57,9 +57,9 @@ class LLAudioEngine_OpenAL : public LLAudioEngine
|
|||
/*virtual*/ void updateWind(LLVector3 direction, F32 camera_altitude);
|
||||
|
||||
private:
|
||||
typedef S16 WIND_SAMPLE_T;
|
||||
typedef F32 WIND_SAMPLE_T;
|
||||
LLWindGen<WIND_SAMPLE_T> *mWindGen;
|
||||
S16 *mWindBuf;
|
||||
F32 *mWindBuf;
|
||||
U32 mWindBufFreq;
|
||||
U32 mWindBufSamples;
|
||||
U32 mWindBufBytes;
|
||||
|
|
|
|||
|
|
@ -1,136 +0,0 @@
|
|||
/**
|
||||
* @file listener_fmodstudio.cpp
|
||||
* @brief Implementation of LISTENER class abstracting the audio
|
||||
* support as a FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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 "linden_common.h"
|
||||
#include "llaudioengine.h"
|
||||
#include "lllistener_fmodstudio.h"
|
||||
#include "fmodstudio/fmod.hpp"
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// constructor
|
||||
//-----------------------------------------------------------------------
|
||||
LLListener_FMODSTUDIO::LLListener_FMODSTUDIO(FMOD::System *system)
|
||||
{
|
||||
mSystem = system;
|
||||
init();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
LLListener_FMODSTUDIO::~LLListener_FMODSTUDIO()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::init(void)
|
||||
{
|
||||
// do inherited
|
||||
LLListener::init();
|
||||
mDopplerFactor = 1.0f;
|
||||
mRolloffFactor = 1.0f;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::translate(LLVector3 offset)
|
||||
{
|
||||
LLListener::translate(offset);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::setPosition(LLVector3 pos)
|
||||
{
|
||||
LLListener::setPosition(pos);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::setVelocity(LLVector3 vel)
|
||||
{
|
||||
LLListener::setVelocity(vel);
|
||||
|
||||
mSystem->set3DListenerAttributes(0, NULL, (FMOD_VECTOR*)mVelocity.mV, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::orient(LLVector3 up, LLVector3 at)
|
||||
{
|
||||
LLListener::orient(up, at);
|
||||
|
||||
// at = -at; by default Fmod studio is 'left-handed' but we are providing
|
||||
// flag FMOD_INIT_3D_RIGHTHANDED so no correction are needed
|
||||
|
||||
mSystem->set3DListenerAttributes(0, NULL, NULL, (FMOD_VECTOR*)at.mV, (FMOD_VECTOR*)up.mV);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODSTUDIO::commitDeferredChanges()
|
||||
{
|
||||
if (!mSystem)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mSystem->update();
|
||||
}
|
||||
|
||||
|
||||
void LLListener_FMODSTUDIO::setRolloffFactor(F32 factor)
|
||||
{
|
||||
//An internal FMOD optimization skips 3D updates if there have not been changes to the 3D sound environment.
|
||||
// (this was true for FMODex, looks to be still true for FMOD STUDIO, but needs a recheck)
|
||||
//Sadly, a change in rolloff is not accounted for, thus we must touch the listener properties as well.
|
||||
//In short: Changing the position ticks a dirtyflag inside fmod, which makes it not skip 3D processing next update call.
|
||||
if (mRolloffFactor != factor)
|
||||
{
|
||||
LLVector3 pos = mPosition - LLVector3(0.f, 0.f, .1f);
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)pos.mV, NULL, NULL, NULL);
|
||||
mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, NULL, NULL);
|
||||
}
|
||||
mRolloffFactor = factor;
|
||||
mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
|
||||
}
|
||||
|
||||
|
||||
F32 LLListener_FMODSTUDIO::getRolloffFactor()
|
||||
{
|
||||
return mRolloffFactor;
|
||||
}
|
||||
|
||||
|
||||
void LLListener_FMODSTUDIO::setDopplerFactor(F32 factor)
|
||||
{
|
||||
mDopplerFactor = factor;
|
||||
mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
|
||||
}
|
||||
|
||||
|
||||
F32 LLListener_FMODSTUDIO::getDopplerFactor()
|
||||
{
|
||||
return mDopplerFactor;
|
||||
}
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
/**
|
||||
* @file listener_fmodstudio.h
|
||||
* @brief Description of LISTENER class abstracting the audio support
|
||||
* as an FMOD 3D implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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_LISTENER_FMODSTUDIO_H
|
||||
#define LL_LISTENER_FMODSTUDIO_H
|
||||
|
||||
#include "lllistener.h"
|
||||
|
||||
//Stubs
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
}
|
||||
|
||||
//Interfaces
|
||||
class LLListener_FMODSTUDIO : public LLListener
|
||||
{
|
||||
public:
|
||||
LLListener_FMODSTUDIO(FMOD::System *system);
|
||||
virtual ~LLListener_FMODSTUDIO();
|
||||
virtual void init();
|
||||
|
||||
virtual void translate(LLVector3 offset);
|
||||
virtual void setPosition(LLVector3 pos);
|
||||
virtual void setVelocity(LLVector3 vel);
|
||||
virtual void orient(LLVector3 up, LLVector3 at);
|
||||
virtual void commitDeferredChanges();
|
||||
|
||||
virtual void setDopplerFactor(F32 factor);
|
||||
virtual F32 getDopplerFactor();
|
||||
virtual void setRolloffFactor(F32 factor);
|
||||
virtual F32 getRolloffFactor();
|
||||
protected:
|
||||
FMOD::System *mSystem;
|
||||
F32 mDopplerFactor;
|
||||
F32 mRolloffFactor;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
#include "AL/al.h"
|
||||
#include "AL/alut.h"
|
||||
#include "AL/alext.h"
|
||||
|
||||
class LLListener_OpenAL : public LLListener
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,481 +0,0 @@
|
|||
/**
|
||||
* @file streamingaudio_fmodstudio.cpp
|
||||
* @brief LLStreamingAudio_FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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 "linden_common.h"
|
||||
|
||||
#include "llmath.h"
|
||||
|
||||
#include "fmodstudio/fmod.hpp"
|
||||
#include "fmodstudio/fmod_errors.h"
|
||||
|
||||
#include "llstreamingaudio_fmodstudio.h"
|
||||
|
||||
|
||||
class LLAudioStreamManagerFMODSTUDIO
|
||||
{
|
||||
public:
|
||||
LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, const std::string& url);
|
||||
FMOD::Channel* startStream();
|
||||
bool stopStream(); // Returns true if the stream was successfully stopped.
|
||||
bool ready();
|
||||
|
||||
const std::string& getURL() { return mInternetStreamURL; }
|
||||
|
||||
FMOD_OPENSTATE getOpenState(unsigned int* percentbuffered = NULL, bool* starving = NULL, bool* diskbusy = NULL);
|
||||
protected:
|
||||
FMOD::System* mSystem;
|
||||
FMOD::Channel* mStreamChannel;
|
||||
FMOD::Sound* mInternetStream;
|
||||
bool mReady;
|
||||
|
||||
std::string mInternetStreamURL;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Internet Streaming
|
||||
//---------------------------------------------------------------------------
|
||||
LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) :
|
||||
mSystem(system),
|
||||
mCurrentInternetStreamp(NULL),
|
||||
mFMODInternetStreamChannelp(NULL),
|
||||
mGain(1.0f),
|
||||
mRetryCount(0)
|
||||
{
|
||||
// Number of milliseconds of audio to buffer for the audio card.
|
||||
// Must be larger than the usual Second Life frame stutter time.
|
||||
const U32 buffer_seconds = 10; //sec
|
||||
const U32 estimated_bitrate = 128; //kbit/sec
|
||||
FMOD_RESULT result = mSystem->setStreamBufferSize(estimated_bitrate * buffer_seconds * 128/*bytes/kbit*/, FMOD_TIMEUNIT_RAWBYTES);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << "setStreamBufferSize error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
|
||||
// Here's where we set the size of the network buffer and some buffering
|
||||
// parameters. In this case we want a network buffer of 16k, we want it
|
||||
// to prebuffer 40% of that when we first connect, and we want it
|
||||
// to rebuffer 80% of that whenever we encounter a buffer underrun.
|
||||
|
||||
// Leave the net buffer properties at the default.
|
||||
//FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80);
|
||||
}
|
||||
|
||||
|
||||
LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO()
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
// Isn't supposed to hapen, stream should be clear by now,
|
||||
// and if it does, we are likely going to crash.
|
||||
LL_WARNS("FMOD") << "mCurrentInternetStreamp not null on shutdown!" << LL_ENDL;
|
||||
stop();
|
||||
}
|
||||
|
||||
// Kill dead internet streams, if possible
|
||||
killDeadStreams();
|
||||
|
||||
if (!mDeadStreams.empty())
|
||||
{
|
||||
// LLStreamingAudio_FMODSTUDIO was inited on startup
|
||||
// and should be destroyed on shutdown, it should
|
||||
// wait for streams to die to not cause crashes or
|
||||
// leaks.
|
||||
// Ideally we need to wait on some kind of callback
|
||||
// to release() streams correctly, but 200 ms should
|
||||
// be enough and we can't wait forever.
|
||||
LL_INFOS("FMOD") << "Waiting for " << (S32)mDeadStreams.size() << " streams to stop" << LL_ENDL;
|
||||
for (S32 i = 0; i < 20; i++)
|
||||
{
|
||||
const U32 ms_delay = 10;
|
||||
ms_sleep(ms_delay); // rude, but not many options here
|
||||
killDeadStreams();
|
||||
if (mDeadStreams.empty())
|
||||
{
|
||||
LL_INFOS("FMOD") << "All streams stopped after " << (S32)((i + 1) * ms_delay) << "ms" << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!mDeadStreams.empty())
|
||||
{
|
||||
LL_WARNS("FMOD") << "Failed to kill some audio streams" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::killDeadStreams()
|
||||
{
|
||||
std::list<LLAudioStreamManagerFMODSTUDIO *>::iterator iter;
|
||||
for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
|
||||
{
|
||||
LLAudioStreamManagerFMODSTUDIO *streamp = *iter;
|
||||
if (streamp->stopStream())
|
||||
{
|
||||
LL_INFOS("FMOD") << "Closed dead stream" << LL_ENDL;
|
||||
delete streamp;
|
||||
iter = mDeadStreams.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::start(const std::string& url)
|
||||
{
|
||||
//if (!mInited)
|
||||
//{
|
||||
// LL_WARNS() << "startInternetStream before audio initialized" << LL_ENDL;
|
||||
// return;
|
||||
//}
|
||||
|
||||
// "stop" stream but don't clear url, etc. in case url == mInternetStreamURL
|
||||
stop();
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_INFOS("FMOD") << "Starting internet stream: " << url << LL_ENDL;
|
||||
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, url);
|
||||
mURL = url;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("FMOD") << "Set internet stream to null" << LL_ENDL;
|
||||
mURL.clear();
|
||||
}
|
||||
|
||||
mRetryCount = 0;
|
||||
}
|
||||
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::update()
|
||||
{
|
||||
// Kill dead internet streams, if possible
|
||||
killDeadStreams();
|
||||
|
||||
// Don't do anything if there are no streams playing
|
||||
if (!mCurrentInternetStreamp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int progress;
|
||||
bool starving;
|
||||
bool diskbusy;
|
||||
FMOD_OPENSTATE open_state = mCurrentInternetStreamp->getOpenState(&progress, &starving, &diskbusy);
|
||||
|
||||
if (open_state == FMOD_OPENSTATE_READY)
|
||||
{
|
||||
// Stream is live
|
||||
|
||||
// start the stream if it's ready
|
||||
if (!mFMODInternetStreamChannelp &&
|
||||
(mFMODInternetStreamChannelp = mCurrentInternetStreamp->startStream()))
|
||||
{
|
||||
// Reset volume to previously set volume
|
||||
setGain(getGain());
|
||||
mFMODInternetStreamChannelp->setPaused(false);
|
||||
}
|
||||
mRetryCount = 0;
|
||||
}
|
||||
else if (open_state == FMOD_OPENSTATE_ERROR)
|
||||
{
|
||||
LL_INFOS("FMOD") << "State: FMOD_OPENSTATE_ERROR"
|
||||
<< " Progress: " << U32(progress)
|
||||
<< " Starving: " << S32(starving)
|
||||
<< " Diskbusy: " << S32(diskbusy) << LL_ENDL;
|
||||
if (mRetryCount < 2)
|
||||
{
|
||||
// Retry
|
||||
std::string url = mURL;
|
||||
stop(); // might drop mURL, drops mCurrentInternetStreamp
|
||||
|
||||
mRetryCount++;
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_INFOS("FMOD") << "Restarting internet stream: " << url << ", attempt " << (mRetryCount + 1) << LL_ENDL;
|
||||
mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, url);
|
||||
mURL = url;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (mFMODInternetStreamChannelp)
|
||||
{
|
||||
FMOD::Sound *sound = NULL;
|
||||
|
||||
if (mFMODInternetStreamChannelp->getCurrentSound(&sound) == FMOD_OK && sound)
|
||||
{
|
||||
FMOD_TAG tag;
|
||||
S32 tagcount, dirtytagcount;
|
||||
|
||||
if (sound->getNumTags(&tagcount, &dirtytagcount) == FMOD_OK && dirtytagcount)
|
||||
{
|
||||
for (S32 i = 0; i < tagcount; ++i)
|
||||
{
|
||||
if (sound->getTag(NULL, i, &tag) != FMOD_OK)
|
||||
continue;
|
||||
|
||||
if (tag.type == FMOD_TAGTYPE_FMOD)
|
||||
{
|
||||
if (!strcmp(tag.name, "Sample Rate Change"))
|
||||
{
|
||||
LL_INFOS("FMOD") << "Stream forced changing sample rate to " << *((float *)tag.data) << LL_ENDL;
|
||||
mFMODInternetStreamChannelp->setFrequency(*((float *)tag.data));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (starving)
|
||||
{
|
||||
bool paused = false;
|
||||
mFMODInternetStreamChannelp->getPaused(&paused);
|
||||
if (!paused)
|
||||
{
|
||||
LL_INFOS("FMOD") << "Stream starvation detected! Pausing stream until buffer nearly full." << LL_ENDL;
|
||||
LL_INFOS("FMOD") << " (diskbusy=" << diskbusy << ")" << LL_ENDL;
|
||||
LL_INFOS("FMOD") << " (progress=" << progress << ")" << LL_ENDL;
|
||||
mFMODInternetStreamChannelp->setPaused(true);
|
||||
}
|
||||
}
|
||||
else if (progress > 80)
|
||||
{
|
||||
mFMODInternetStreamChannelp->setPaused(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::stop()
|
||||
{
|
||||
if (mFMODInternetStreamChannelp)
|
||||
{
|
||||
mFMODInternetStreamChannelp->setPaused(true);
|
||||
mFMODInternetStreamChannelp->setPriority(0);
|
||||
mFMODInternetStreamChannelp = NULL;
|
||||
}
|
||||
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
LL_INFOS("FMOD") << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
|
||||
if (mCurrentInternetStreamp->stopStream())
|
||||
{
|
||||
delete mCurrentInternetStreamp;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("FMOD") << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << LL_ENDL;
|
||||
mDeadStreams.push_back(mCurrentInternetStreamp);
|
||||
}
|
||||
mCurrentInternetStreamp = NULL;
|
||||
//mURL.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::pause(int pauseopt)
|
||||
{
|
||||
if (pauseopt < 0)
|
||||
{
|
||||
pauseopt = mCurrentInternetStreamp ? 1 : 0;
|
||||
}
|
||||
|
||||
if (pauseopt)
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
LL_INFOS("FMOD") << "Pausing internet stream" << LL_ENDL;
|
||||
stop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
start(getURL());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// A stream is "playing" if it has been requested to start. That
|
||||
// doesn't necessarily mean audio is coming out of the speakers.
|
||||
int LLStreamingAudio_FMODSTUDIO::isPlaying()
|
||||
{
|
||||
if (mCurrentInternetStreamp)
|
||||
{
|
||||
return 1; // Active and playing
|
||||
}
|
||||
else if (!mURL.empty())
|
||||
{
|
||||
return 2; // "Paused"
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
F32 LLStreamingAudio_FMODSTUDIO::getGain()
|
||||
{
|
||||
return mGain;
|
||||
}
|
||||
|
||||
|
||||
std::string LLStreamingAudio_FMODSTUDIO::getURL()
|
||||
{
|
||||
return mURL;
|
||||
}
|
||||
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol)
|
||||
{
|
||||
mGain = vol;
|
||||
|
||||
if (mFMODInternetStreamChannelp)
|
||||
{
|
||||
vol = llclamp(vol * vol, 0.f, 1.f); //should vol be squared here?
|
||||
|
||||
mFMODInternetStreamChannelp->setVolume(vol);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////
|
||||
// manager of possibly-multiple internet audio streams
|
||||
|
||||
LLAudioStreamManagerFMODSTUDIO::LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, const std::string& url) :
|
||||
mSystem(system),
|
||||
mStreamChannel(NULL),
|
||||
mInternetStream(NULL),
|
||||
mReady(false)
|
||||
{
|
||||
mInternetStreamURL = url;
|
||||
|
||||
FMOD_RESULT result = mSystem->createStream(url.c_str(), FMOD_2D | FMOD_NONBLOCKING | FMOD_IGNORETAGS, 0, &mInternetStream);
|
||||
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << "Couldn't open fmod stream, error "
|
||||
<< FMOD_ErrorString(result)
|
||||
<< LL_ENDL;
|
||||
mReady = false;
|
||||
return;
|
||||
}
|
||||
|
||||
mReady = true;
|
||||
}
|
||||
|
||||
FMOD::Channel *LLAudioStreamManagerFMODSTUDIO::startStream()
|
||||
{
|
||||
// We need a live and opened stream before we try and play it.
|
||||
if (!mInternetStream || getOpenState() != FMOD_OPENSTATE_READY)
|
||||
{
|
||||
LL_WARNS("FMOD") << "No internet stream to start playing!" << LL_ENDL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (mStreamChannel)
|
||||
return mStreamChannel; //Already have a channel for this stream.
|
||||
|
||||
FMOD_RESULT result = mSystem->playSound(mInternetStream, NULL, true, &mStreamChannel);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
return mStreamChannel;
|
||||
}
|
||||
|
||||
bool LLAudioStreamManagerFMODSTUDIO::stopStream()
|
||||
{
|
||||
if (mInternetStream)
|
||||
{
|
||||
|
||||
|
||||
bool close = true;
|
||||
switch (getOpenState())
|
||||
{
|
||||
case FMOD_OPENSTATE_CONNECTING:
|
||||
close = false;
|
||||
break;
|
||||
default:
|
||||
close = true;
|
||||
}
|
||||
|
||||
if (close)
|
||||
{
|
||||
mInternetStream->release();
|
||||
mStreamChannel = NULL;
|
||||
mInternetStream = NULL;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
FMOD_OPENSTATE LLAudioStreamManagerFMODSTUDIO::getOpenState(unsigned int* percentbuffered, bool* starving, bool* diskbusy)
|
||||
{
|
||||
FMOD_OPENSTATE state;
|
||||
FMOD_RESULT result = mInternetStream->getOpenState(&state, percentbuffered, starving, diskbusy);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
void LLStreamingAudio_FMODSTUDIO::setBufferSizes(U32 streambuffertime, U32 decodebuffertime)
|
||||
{
|
||||
FMOD_RESULT result = mSystem->setStreamBufferSize(streambuffertime / 1000 * 128 * 128, FMOD_TIMEUNIT_RAWBYTES);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << "setStreamBufferSize error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
FMOD_ADVANCEDSETTINGS settings;
|
||||
memset(&settings, 0, sizeof(settings));
|
||||
settings.cbSize = sizeof(settings);
|
||||
settings.defaultDecodeBufferSize = decodebuffertime;//ms
|
||||
result = mSystem->setAdvancedSettings(&settings);
|
||||
if (result != FMOD_OK)
|
||||
{
|
||||
LL_WARNS("FMOD") << "setAdvancedSettings error: " << FMOD_ErrorString(result) << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
/**
|
||||
* @file streamingaudio_fmodstudio.h
|
||||
* @brief Definition of LLStreamingAudio_FMODSTUDIO implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
#define LL_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
|
||||
#include "stdtypes.h" // from llcommon
|
||||
|
||||
#include "llstreamingaudio.h"
|
||||
#include "lltimer.h"
|
||||
|
||||
//Stubs
|
||||
class LLAudioStreamManagerFMODSTUDIO;
|
||||
namespace FMOD
|
||||
{
|
||||
class System;
|
||||
class Channel;
|
||||
}
|
||||
|
||||
//Interfaces
|
||||
class LLStreamingAudio_FMODSTUDIO : public LLStreamingAudioInterface
|
||||
{
|
||||
public:
|
||||
LLStreamingAudio_FMODSTUDIO(FMOD::System *system);
|
||||
/*virtual*/ ~LLStreamingAudio_FMODSTUDIO();
|
||||
|
||||
/*virtual*/ void start(const std::string& url);
|
||||
/*virtual*/ void stop();
|
||||
/*virtual*/ void pause(S32 pause);
|
||||
/*virtual*/ void update();
|
||||
/*virtual*/ S32 isPlaying();
|
||||
/*virtual*/ void setGain(F32 vol);
|
||||
/*virtual*/ F32 getGain();
|
||||
/*virtual*/ std::string getURL();
|
||||
|
||||
/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
|
||||
/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
|
||||
private:
|
||||
void killDeadStreams();
|
||||
|
||||
FMOD::System *mSystem;
|
||||
|
||||
LLAudioStreamManagerFMODSTUDIO *mCurrentInternetStreamp;
|
||||
FMOD::Channel *mFMODInternetStreamChannelp;
|
||||
std::list<LLAudioStreamManagerFMODSTUDIO *> mDeadStreams;
|
||||
|
||||
std::string mURL;
|
||||
F32 mGain;
|
||||
S32 mRetryCount;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_STREAMINGAUDIO_FMODSTUDIO_H
|
||||
|
|
@ -75,7 +75,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
|
|||
U32 chunk_length = 0;
|
||||
U32 raw_data_length = 0;
|
||||
U32 bytes_per_sec = 0;
|
||||
BOOL uncompressed_pcm = FALSE;
|
||||
bool uncompressed_pcm = false;
|
||||
|
||||
unsigned char wav_header[44]; /*Flawfinder: ignore*/
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
|
|||
{
|
||||
if ((wav_header[8] == 0x01) && (wav_header[9] == 0x00))
|
||||
{
|
||||
uncompressed_pcm = TRUE;
|
||||
uncompressed_pcm = true;
|
||||
}
|
||||
num_channels = ((U16) wav_header[11] << 8) + wav_header[10];
|
||||
sample_rate = ((U32) wav_header[15] << 24)
|
||||
|
|
|
|||
|
|
@ -367,7 +367,7 @@ const char *LLAnimationLibrary::animStateToString( const LLUUID& state )
|
|||
//-----------------------------------------------------------------------------
|
||||
// Return the animation state for a given name
|
||||
//-----------------------------------------------------------------------------
|
||||
LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allow_ids )
|
||||
LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, bool allow_ids )
|
||||
{
|
||||
std::string lower_case_name(name);
|
||||
LLStringUtil::toLower(lower_case_name);
|
||||
|
|
@ -391,7 +391,7 @@ LLUUID LLAnimationLibrary::stringToAnimState( const std::string& name, BOOL allo
|
|||
else if (allow_ids)
|
||||
{
|
||||
// try to convert string to LLUUID
|
||||
id.set(name, FALSE);
|
||||
id.set(name, false);
|
||||
}
|
||||
|
||||
return id;
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ public:
|
|||
// Return the animation state for the given name.
|
||||
// Retun NULL if the name is invalid.
|
||||
//-----------------------------------------------------------------------------
|
||||
LLUUID stringToAnimState( const std::string& name, BOOL allow_ids = TRUE );
|
||||
LLUUID stringToAnimState( const std::string& name, bool allow_ids = true );
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Associate an anim state with a name
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ LLBVHLoader::LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &error
|
|||
LL_DEBUGS("BVH") << "After translations and optimize" << LL_ENDL;
|
||||
dumpBVHInfo();
|
||||
|
||||
mInitialized = TRUE;
|
||||
mInitialized = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -227,7 +227,7 @@ ELoadStatus LLBVHLoader::loadTranslationTable(const char *fileName)
|
|||
//--------------------------------------------------------------------
|
||||
// load data one line at a time
|
||||
//--------------------------------------------------------------------
|
||||
BOOL loadingGlobals = FALSE;
|
||||
bool loadingGlobals = false;
|
||||
while ( getLine(fp) )
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -251,7 +251,7 @@ ELoadStatus LLBVHLoader::loadTranslationTable(const char *fileName)
|
|||
|
||||
if (strcmp(name, "GLOBALS")==0)
|
||||
{
|
||||
loadingGlobals = TRUE;
|
||||
loadingGlobals = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -298,7 +298,7 @@ ELoadStatus LLBVHLoader::loadTranslationTable(const char *fileName)
|
|||
|
||||
if ( sscanf(mLine, " %*s = %f %f", &loop_in, &loop_out) == 2 )
|
||||
{
|
||||
mLoop = TRUE;
|
||||
mLoop = true;
|
||||
}
|
||||
else if ( sscanf(mLine, " %*s = %127s", trueFalse) == 1 ) /* Flawfinder: ignore */
|
||||
{
|
||||
|
|
@ -496,8 +496,8 @@ void LLBVHLoader::makeTranslation(std::string alias_name, std::string joint_name
|
|||
|
||||
if (joint_name == "mPelvis")
|
||||
{
|
||||
newTrans.mRelativePositionKey = TRUE;
|
||||
newTrans.mRelativeRotationKey = TRUE;
|
||||
newTrans.mRelativePositionKey = true;
|
||||
newTrans.mRelativeRotationKey = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -609,7 +609,7 @@ ELoadStatus LLBVHLoader::loadBVHFile(const char *buffer, char* error_text, S32 &
|
|||
//--------------------------------------------------------------------
|
||||
// consume joints
|
||||
//--------------------------------------------------------------------
|
||||
while (TRUE)
|
||||
while (true)
|
||||
{
|
||||
//----------------------------------------------------------------
|
||||
// get next line
|
||||
|
|
@ -969,7 +969,7 @@ void LLBVHLoader::applyTranslations()
|
|||
if ( trans.mIgnore )
|
||||
{
|
||||
//LL_INFOS() << "NOTE: Ignoring " << joint->mName.c_str() << LL_ENDL;
|
||||
joint->mIgnore = TRUE;
|
||||
joint->mIgnore = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -983,10 +983,10 @@ void LLBVHLoader::applyTranslations()
|
|||
}
|
||||
|
||||
//Allow joint position changes as of SL-318
|
||||
joint->mIgnorePositions = FALSE;
|
||||
joint->mIgnorePositions = false;
|
||||
if (joint->mNumChannels == 3)
|
||||
{
|
||||
joint->mIgnorePositions = TRUE;
|
||||
joint->mIgnorePositions = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
|
@ -995,13 +995,13 @@ void LLBVHLoader::applyTranslations()
|
|||
if ( trans.mRelativePositionKey )
|
||||
{
|
||||
// LL_INFOS() << "NOTE: Removing 1st position offset from all keys for " << joint->mOutName.c_str() << LL_ENDL;
|
||||
joint->mRelativePositionKey = TRUE;
|
||||
joint->mRelativePositionKey = true;
|
||||
}
|
||||
|
||||
if ( trans.mRelativeRotationKey )
|
||||
{
|
||||
// LL_INFOS() << "NOTE: Removing 1st rotation from all keys for " << joint->mOutName.c_str() << LL_ENDL;
|
||||
joint->mRelativeRotationKey = TRUE;
|
||||
joint->mRelativeRotationKey = true;
|
||||
}
|
||||
|
||||
if ( trans.mRelativePosition.magVec() > 0.0f )
|
||||
|
|
@ -1065,8 +1065,8 @@ void LLBVHLoader::optimize()
|
|||
|
||||
for (Joint* joint : mJoints)
|
||||
{
|
||||
BOOL pos_changed = FALSE;
|
||||
BOOL rot_changed = FALSE;
|
||||
bool pos_changed = false;
|
||||
bool rot_changed = false;
|
||||
|
||||
if ( ! joint->mIgnore )
|
||||
{
|
||||
|
|
@ -1079,7 +1079,7 @@ void LLBVHLoader::optimize()
|
|||
// no keys?
|
||||
if (first_key == joint->mKeys.end())
|
||||
{
|
||||
joint->mIgnore = TRUE;
|
||||
joint->mIgnore = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -1092,13 +1092,13 @@ void LLBVHLoader::optimize()
|
|||
{
|
||||
// *FIX: use single frame to move pelvis
|
||||
// if only one keyframe force output for this joint
|
||||
rot_changed = TRUE;
|
||||
rot_changed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// if more than one keyframe, use first frame as reference and skip to second
|
||||
first_key->mIgnorePos = TRUE;
|
||||
first_key->mIgnoreRot = TRUE;
|
||||
first_key->mIgnorePos = true;
|
||||
first_key->mIgnoreRot = true;
|
||||
++ki;
|
||||
}
|
||||
|
||||
|
|
@ -1119,7 +1119,7 @@ void LLBVHLoader::optimize()
|
|||
joint->mNumPosKeys++;
|
||||
if (dist_vec_squared(LLVector3(ki_prev->mPos), first_frame_pos) > POSITION_MOTION_THRESHOLD_SQUARED)
|
||||
{
|
||||
pos_changed = TRUE;
|
||||
pos_changed = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1132,12 +1132,12 @@ void LLBVHLoader::optimize()
|
|||
|
||||
if (dist_vec_squared(current_pos, first_frame_pos) > POSITION_MOTION_THRESHOLD_SQUARED)
|
||||
{
|
||||
pos_changed = TRUE;
|
||||
pos_changed = true;
|
||||
}
|
||||
|
||||
if (dist_vec_squared(interp_pos, test_pos) < POSITION_KEYFRAME_THRESHOLD_SQUARED)
|
||||
{
|
||||
ki_prev->mIgnorePos = TRUE;
|
||||
ki_prev->mIgnorePos = true;
|
||||
numPosFramesConsidered++;
|
||||
}
|
||||
else
|
||||
|
|
@ -1158,7 +1158,7 @@ void LLBVHLoader::optimize()
|
|||
|
||||
if (rot_test > ROTATION_MOTION_THRESHOLD)
|
||||
{
|
||||
rot_changed = TRUE;
|
||||
rot_changed = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1180,7 +1180,7 @@ void LLBVHLoader::optimize()
|
|||
rot_test = x_delta + y_delta;
|
||||
if (rot_test > ROTATION_MOTION_THRESHOLD)
|
||||
{
|
||||
rot_changed = TRUE;
|
||||
rot_changed = true;
|
||||
}
|
||||
x_delta = dist_vec(LLVector3::x_axis * interp_rot, LLVector3::x_axis * test_rot);
|
||||
y_delta = dist_vec(LLVector3::y_axis * interp_rot, LLVector3::y_axis * test_rot);
|
||||
|
|
@ -1202,9 +1202,9 @@ void LLBVHLoader::optimize()
|
|||
// because it's significantly faster.
|
||||
if (diff_max > 0)
|
||||
{
|
||||
if (ki_max->mIgnoreRot == TRUE)
|
||||
if (ki_max->mIgnoreRot)
|
||||
{
|
||||
ki_max->mIgnoreRot = FALSE;
|
||||
ki_max->mIgnoreRot = false;
|
||||
joint->mNumRotKeys++;
|
||||
}
|
||||
diff_max = 0;
|
||||
|
|
@ -1213,7 +1213,7 @@ void LLBVHLoader::optimize()
|
|||
else
|
||||
{
|
||||
// This keyframe isn't significant enough, throw it away.
|
||||
ki_prev->mIgnoreRot = TRUE;
|
||||
ki_prev->mIgnoreRot = true;
|
||||
numRotFramesConsidered++;
|
||||
// Store away the keyframe that has the largest deviation from the interpolated line, for insertion later.
|
||||
if (rot_test > diff_max)
|
||||
|
|
@ -1232,7 +1232,7 @@ void LLBVHLoader::optimize()
|
|||
if (!(pos_changed || rot_changed))
|
||||
{
|
||||
//LL_INFOS() << "Ignoring joint " << joint->mName << LL_ENDL;
|
||||
joint->mIgnore = TRUE;
|
||||
joint->mIgnore = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1245,13 +1245,13 @@ void LLBVHLoader::reset()
|
|||
mDuration = 0.0f;
|
||||
|
||||
mPriority = 2;
|
||||
mLoop = FALSE;
|
||||
mLoop = false;
|
||||
mLoopInPoint = 0.f;
|
||||
mLoopOutPoint = 0.f;
|
||||
mEaseIn = 0.3f;
|
||||
mEaseOut = 0.3f;
|
||||
mHand = 1;
|
||||
mInitialized = FALSE;
|
||||
mInitialized = false;
|
||||
|
||||
mEmoteName = "";
|
||||
mLineNumber = 0;
|
||||
|
|
@ -1262,19 +1262,19 @@ void LLBVHLoader::reset()
|
|||
//------------------------------------------------------------------------
|
||||
// LLBVHLoader::getLine()
|
||||
//------------------------------------------------------------------------
|
||||
BOOL LLBVHLoader::getLine(apr_file_t* fp)
|
||||
bool LLBVHLoader::getLine(apr_file_t* fp)
|
||||
{
|
||||
if (apr_file_eof(fp) == APR_EOF)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
if ( apr_file_gets(mLine, BVH_PARSER_LINE_SIZE, fp) == APR_SUCCESS)
|
||||
{
|
||||
mLineNumber++;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns required size of output buffer
|
||||
|
|
@ -1287,7 +1287,7 @@ U32 LLBVHLoader::getOutputSize()
|
|||
}
|
||||
|
||||
// writes contents to datapacker
|
||||
BOOL LLBVHLoader::serialize(LLDataPacker& dp)
|
||||
bool LLBVHLoader::serialize(LLDataPacker& dp)
|
||||
{
|
||||
F32 time;
|
||||
|
||||
|
|
@ -1496,5 +1496,5 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp)
|
|||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,8 +71,8 @@ struct Key
|
|||
|
||||
F32 mPos[3];
|
||||
F32 mRot[3];
|
||||
BOOL mIgnorePos;
|
||||
BOOL mIgnoreRot;
|
||||
bool mIgnorePos;
|
||||
bool mIgnoreRot;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -89,10 +89,10 @@ struct Joint
|
|||
Joint(const char *name)
|
||||
{
|
||||
mName = name;
|
||||
mIgnore = FALSE;
|
||||
mIgnorePositions = FALSE;
|
||||
mRelativePositionKey = FALSE;
|
||||
mRelativeRotationKey = FALSE;
|
||||
mIgnore = false;
|
||||
mIgnorePositions = false;
|
||||
mRelativePositionKey = false;
|
||||
mRelativeRotationKey = false;
|
||||
mOutName = name;
|
||||
mOrder[0] = 'X';
|
||||
mOrder[1] = 'Y';
|
||||
|
|
@ -111,10 +111,10 @@ struct Joint
|
|||
LLVector3 mRelativePosition;
|
||||
//
|
||||
std::string mName;
|
||||
BOOL mIgnore;
|
||||
BOOL mIgnorePositions;
|
||||
BOOL mRelativePositionKey;
|
||||
BOOL mRelativeRotationKey;
|
||||
bool mIgnore;
|
||||
bool mIgnorePositions;
|
||||
bool mRelativePositionKey;
|
||||
bool mRelativeRotationKey;
|
||||
std::string mOutName;
|
||||
std::string mMergeParentName;
|
||||
std::string mMergeChildName;
|
||||
|
|
@ -161,18 +161,18 @@ class Translation
|
|||
public:
|
||||
Translation()
|
||||
{
|
||||
mIgnore = FALSE;
|
||||
mIgnorePositions = FALSE;
|
||||
mRelativePositionKey = FALSE;
|
||||
mRelativeRotationKey = FALSE;
|
||||
mIgnore = false;
|
||||
mIgnorePositions = false;
|
||||
mRelativePositionKey = false;
|
||||
mRelativeRotationKey = false;
|
||||
mPriorityModifier = 0;
|
||||
}
|
||||
|
||||
std::string mOutName;
|
||||
BOOL mIgnore;
|
||||
BOOL mIgnorePositions;
|
||||
BOOL mRelativePositionKey;
|
||||
BOOL mRelativeRotationKey;
|
||||
bool mIgnore;
|
||||
bool mIgnorePositions;
|
||||
bool mRelativePositionKey;
|
||||
bool mRelativeRotationKey;
|
||||
LLMatrix3 mFrameMatrix;
|
||||
LLMatrix3 mOffsetMatrix;
|
||||
LLVector3 mRelativePosition;
|
||||
|
|
@ -293,7 +293,7 @@ public:
|
|||
U32 getOutputSize();
|
||||
|
||||
// writes contents to datapacker
|
||||
BOOL serialize(LLDataPacker& dp);
|
||||
bool serialize(LLDataPacker& dp);
|
||||
|
||||
// flags redundant keyframe data
|
||||
void optimize();
|
||||
|
|
@ -302,13 +302,13 @@ public:
|
|||
|
||||
F32 getDuration() { return mDuration; }
|
||||
|
||||
BOOL isInitialized() { return mInitialized; }
|
||||
bool isInitialized() { return mInitialized; }
|
||||
|
||||
ELoadStatus getStatus() { return mStatus; }
|
||||
|
||||
protected:
|
||||
// Consumes one line of input from file.
|
||||
BOOL getLine(apr_file_t *fp);
|
||||
bool getLine(apr_file_t *fp);
|
||||
|
||||
// parser state
|
||||
char mLine[BVH_PARSER_LINE_SIZE]; /* Flawfinder: ignore */
|
||||
|
|
@ -322,7 +322,7 @@ protected:
|
|||
TranslationMap mTranslations;
|
||||
|
||||
S32 mPriority;
|
||||
BOOL mLoop;
|
||||
bool mLoop;
|
||||
F32 mLoopInPoint;
|
||||
F32 mLoopOutPoint;
|
||||
F32 mEaseIn;
|
||||
|
|
@ -330,7 +330,7 @@ protected:
|
|||
S32 mHand;
|
||||
std::string mEmoteName;
|
||||
|
||||
BOOL mInitialized;
|
||||
bool mInitialized;
|
||||
ELoadStatus mStatus;
|
||||
|
||||
// computed values
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
LLStringTable LLCharacter::sVisualParamNames(1024);
|
||||
|
||||
std::vector< LLCharacter* > LLCharacter::sInstances;
|
||||
BOOL LLCharacter::sAllowInstancesChange = TRUE ;
|
||||
bool LLCharacter::sAllowInstancesChange = true ;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLCharacter()
|
||||
|
|
@ -73,8 +73,8 @@ LLCharacter::~LLCharacter()
|
|||
delete param;
|
||||
}
|
||||
|
||||
U32 i ;
|
||||
U32 size = sInstances.size() ;
|
||||
size_t i ;
|
||||
size_t size = sInstances.size() ;
|
||||
for(i = 0 ; i < size ; i++)
|
||||
{
|
||||
if(sInstances[i] == this)
|
||||
|
|
@ -114,7 +114,7 @@ LLJoint *LLCharacter::getJoint( const std::string &name )
|
|||
//-----------------------------------------------------------------------------
|
||||
// registerMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::registerMotion( const LLUUID& id, LLMotionConstructor create )
|
||||
bool LLCharacter::registerMotion( const LLUUID& id, LLMotionConstructor create )
|
||||
{
|
||||
return mMotionController.registerMotion(id, create);
|
||||
}
|
||||
|
|
@ -147,7 +147,7 @@ LLMotion* LLCharacter::createMotion( const LLUUID &id )
|
|||
//-----------------------------------------------------------------------------
|
||||
// startMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::startMotion(const LLUUID &id, F32 start_offset)
|
||||
bool LLCharacter::startMotion(const LLUUID &id, F32 start_offset)
|
||||
{
|
||||
return mMotionController.startMotion(id, start_offset);
|
||||
}
|
||||
|
|
@ -156,7 +156,7 @@ BOOL LLCharacter::startMotion(const LLUUID &id, F32 start_offset)
|
|||
//-----------------------------------------------------------------------------
|
||||
// stopMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::stopMotion(const LLUUID& id, BOOL stop_immediate)
|
||||
bool LLCharacter::stopMotion(const LLUUID& id, bool stop_immediate)
|
||||
{
|
||||
return mMotionController.stopMotionLocally(id, stop_immediate);
|
||||
}
|
||||
|
|
@ -164,7 +164,7 @@ BOOL LLCharacter::stopMotion(const LLUUID& id, BOOL stop_immediate)
|
|||
//-----------------------------------------------------------------------------
|
||||
// isMotionActive()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::isMotionActive(const LLUUID& id)
|
||||
bool LLCharacter::isMotionActive(const LLUUID& id)
|
||||
{
|
||||
LLMotion *motionp = mMotionController.findMotion(id);
|
||||
if (motionp)
|
||||
|
|
@ -172,7 +172,7 @@ BOOL LLCharacter::isMotionActive(const LLUUID& id)
|
|||
return mMotionController.isMotionActive(motionp);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -279,22 +279,22 @@ void LLCharacter::removeAnimationData(std::string name)
|
|||
//-----------------------------------------------------------------------------
|
||||
// setVisualParamWeight()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::setVisualParamWeight(const LLVisualParam* which_param, F32 weight)
|
||||
bool LLCharacter::setVisualParamWeight(const LLVisualParam* which_param, F32 weight)
|
||||
{
|
||||
S32 index = which_param->getID();
|
||||
visual_param_index_map_t::iterator index_iter = mVisualParamIndexMap.find(index);
|
||||
if (index_iter != mVisualParamIndexMap.end())
|
||||
{
|
||||
index_iter->second->setWeight(weight);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// setVisualParamWeight()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight)
|
||||
bool LLCharacter::setVisualParamWeight(const char* param_name, F32 weight)
|
||||
{
|
||||
std::string tname(param_name);
|
||||
LLStringUtil::toLower(tname);
|
||||
|
|
@ -303,25 +303,25 @@ BOOL LLCharacter::setVisualParamWeight(const char* param_name, F32 weight)
|
|||
if (name_iter != mVisualParamNameMap.end())
|
||||
{
|
||||
name_iter->second->setWeight(weight);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
LL_WARNS() << "LLCharacter::setVisualParamWeight() Invalid visual parameter: " << param_name << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// setVisualParamWeight()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLCharacter::setVisualParamWeight(S32 index, F32 weight)
|
||||
bool LLCharacter::setVisualParamWeight(S32 index, F32 weight)
|
||||
{
|
||||
visual_param_index_map_t::iterator index_iter = mVisualParamIndexMap.find(index);
|
||||
if (index_iter != mVisualParamIndexMap.end())
|
||||
{
|
||||
index_iter->second->setWeight(weight);
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
LL_WARNS() << "LLCharacter::setVisualParamWeight() Invalid visual parameter index: " << index << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
// registers a motion with the character
|
||||
// returns true if successfull
|
||||
BOOL registerMotion( const LLUUID& id, LLMotionConstructor create );
|
||||
bool registerMotion( const LLUUID& id, LLMotionConstructor create );
|
||||
|
||||
void removeMotion( const LLUUID& id );
|
||||
|
||||
|
|
@ -137,13 +137,13 @@ public:
|
|||
|
||||
// start a motion
|
||||
// returns true if successful, false if an error occurred
|
||||
virtual BOOL startMotion( const LLUUID& id, F32 start_offset = 0.f);
|
||||
virtual bool startMotion( const LLUUID& id, F32 start_offset = 0.f);
|
||||
|
||||
// stop a motion
|
||||
virtual BOOL stopMotion( const LLUUID& id, BOOL stop_immediate = FALSE );
|
||||
virtual bool stopMotion( const LLUUID& id, bool stop_immediate = false );
|
||||
|
||||
// is this motion active?
|
||||
BOOL isMotionActive( const LLUUID& id );
|
||||
bool isMotionActive( const LLUUID& id );
|
||||
|
||||
// Event handler for motion deactivation.
|
||||
// Called when a motion has completely stopped and has been deactivated.
|
||||
|
|
@ -156,7 +156,7 @@ public:
|
|||
void updateMotions(e_update_t update_type);
|
||||
|
||||
LLAnimPauseRequest requestPause();
|
||||
BOOL areAnimationsPaused() const { return mMotionController.isPaused(); }
|
||||
bool areAnimationsPaused() const { return mMotionController.isPaused(); }
|
||||
void setAnimTimeFactor(F32 factor) { mMotionController.setTimeFactor(factor); }
|
||||
void setTimeStep(F32 time_step) { mMotionController.setTimeStep(time_step); }
|
||||
|
||||
|
|
@ -190,9 +190,9 @@ public:
|
|||
void addVisualParam(LLVisualParam *param);
|
||||
void addSharedVisualParam(LLVisualParam *param);
|
||||
|
||||
virtual BOOL setVisualParamWeight(const LLVisualParam *which_param, F32 weight);
|
||||
virtual BOOL setVisualParamWeight(const char* param_name, F32 weight);
|
||||
virtual BOOL setVisualParamWeight(S32 index, F32 weight);
|
||||
virtual bool setVisualParamWeight(const LLVisualParam *which_param, F32 weight);
|
||||
virtual bool setVisualParamWeight(const char* param_name, F32 weight);
|
||||
virtual bool setVisualParamWeight(S32 index, F32 weight);
|
||||
|
||||
// get visual param weight by param or name
|
||||
F32 getVisualParamWeight(LLVisualParam *distortion);
|
||||
|
|
@ -256,7 +256,7 @@ public:
|
|||
void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; }
|
||||
|
||||
static std::vector< LLCharacter* > sInstances;
|
||||
static BOOL sAllowInstancesChange ; //debug use
|
||||
static bool sAllowInstancesChange ; //debug use
|
||||
|
||||
virtual void setHoverOffset(const LLVector3& hover_offset, bool send_update=true) { mHoverOffset = hover_offset; }
|
||||
const LLVector3& getHoverOffset() const { return mHoverOffset; }
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ LLMotion::LLMotionInitStatus LLEditingMotion::onInitialize(LLCharacter *characte
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLEditingMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLEditingMotion::onActivate()
|
||||
bool LLEditingMotion::onActivate()
|
||||
{
|
||||
// propagate joint positions to kinematic chain
|
||||
// SL-315
|
||||
|
|
@ -155,25 +155,25 @@ BOOL LLEditingMotion::onActivate()
|
|||
mShoulderJoint.setRotation( mShoulderState->getJoint()->getRotation() );
|
||||
mElbowJoint.setRotation( mElbowState->getJoint()->getRotation() );
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLEditingMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLEditingMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLEditingMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
LLVector3 focus_pt;
|
||||
LLVector3* pointAtPt = (LLVector3*)mCharacter->getAnimationData("PointAtPoint");
|
||||
|
||||
|
||||
BOOL result = TRUE;
|
||||
bool result = true;
|
||||
|
||||
if (!pointAtPt)
|
||||
{
|
||||
focus_pt = mLastSelectPt;
|
||||
result = FALSE;
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
|
@ -94,14 +94,14 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
|
|||
|
|
@ -91,17 +91,17 @@ const LLGesture &LLGesture::operator =(const LLGesture &rhs)
|
|||
}
|
||||
|
||||
|
||||
BOOL LLGesture::trigger(KEY key, MASK mask)
|
||||
bool LLGesture::trigger(KEY key, MASK mask)
|
||||
{
|
||||
LL_WARNS() << "Parent class trigger called: you probably didn't mean this." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLGesture::trigger(const std::string& trigger_string)
|
||||
bool LLGesture::trigger(const std::string& trigger_string)
|
||||
{
|
||||
LL_WARNS() << "Parent class trigger called: you probably didn't mean this." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// NOT endian-neutral
|
||||
|
|
@ -189,12 +189,12 @@ void LLGestureList::deleteAll()
|
|||
// Iterates through space delimited tokens in string, triggering any gestures found.
|
||||
// Generates a revised string that has the found tokens replaced by their replacement strings
|
||||
// and (as a minor side effect) has multiple spaces in a row replaced by single spaces.
|
||||
BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::string* revised_string)
|
||||
bool LLGestureList::triggerAndReviseString(const std::string &string, std::string* revised_string)
|
||||
{
|
||||
std::string tokenized = string;
|
||||
|
||||
BOOL found_gestures = FALSE;
|
||||
BOOL first_token = TRUE;
|
||||
bool found_gestures = false;
|
||||
bool first_token = true;
|
||||
|
||||
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
|
||||
boost::char_separator<char> sep(" ");
|
||||
|
|
@ -235,7 +235,7 @@ BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::strin
|
|||
}
|
||||
|
||||
}
|
||||
found_gestures = TRUE;
|
||||
found_gestures = true;
|
||||
break;
|
||||
}
|
||||
gesture = NULL;
|
||||
|
|
@ -251,14 +251,14 @@ BOOL LLGestureList::triggerAndReviseString(const std::string &string, std::strin
|
|||
revised_string->append( cur_token );
|
||||
}
|
||||
|
||||
first_token = FALSE;
|
||||
first_token = false;
|
||||
}
|
||||
return found_gestures;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL LLGestureList::trigger(KEY key, MASK mask)
|
||||
bool LLGestureList::trigger(KEY key, MASK mask)
|
||||
{
|
||||
for (U32 i = 0; i < mList.size(); i++)
|
||||
{
|
||||
|
|
@ -267,7 +267,7 @@ BOOL LLGestureList::trigger(KEY key, MASK mask)
|
|||
{
|
||||
if (gesture->trigger(key, mask))
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -275,14 +275,14 @@ BOOL LLGestureList::trigger(KEY key, MASK mask)
|
|||
LL_WARNS() << "NULL gesture in gesture list (" << i << ")" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// NOT endian-neutral
|
||||
U8 *LLGestureList::serialize(U8 *buffer) const
|
||||
{
|
||||
// a single S32 serves as the header that tells us how many to read
|
||||
U32 count = mList.size();
|
||||
auto count = mList.size();
|
||||
htolememcpy(buffer, &count, MVT_S32, 4);
|
||||
buffer += sizeof(count);
|
||||
|
||||
|
|
|
|||
|
|
@ -55,10 +55,10 @@ public:
|
|||
const std::string& getOutputString() const { return mOutputString; }
|
||||
|
||||
// Triggers if a key/mask matches it
|
||||
virtual BOOL trigger(KEY key, MASK mask);
|
||||
virtual bool trigger(KEY key, MASK mask);
|
||||
|
||||
// Triggers if case-insensitive substring matches (assumes string is lowercase)
|
||||
virtual BOOL trigger(const std::string &string);
|
||||
virtual bool trigger(const std::string &string);
|
||||
|
||||
// non-endian-neutral serialization
|
||||
U8 *serialize(U8 *buffer) const;
|
||||
|
|
@ -84,13 +84,13 @@ public:
|
|||
virtual ~LLGestureList();
|
||||
|
||||
// Triggers if a key/mask matches one in the list
|
||||
BOOL trigger(KEY key, MASK mask);
|
||||
bool trigger(KEY key, MASK mask);
|
||||
|
||||
// Triggers if substring matches and generates revised string.
|
||||
BOOL triggerAndReviseString(const std::string &string, std::string* revised_string);
|
||||
bool triggerAndReviseString(const std::string &string, std::string* revised_string);
|
||||
|
||||
// Used for construction from UI
|
||||
S32 count() const { return mList.size(); }
|
||||
S32 count() const { return static_cast<S32>(mList.size()); }
|
||||
virtual LLGesture* get(S32 i) const { return mList.at(i); }
|
||||
virtual void put(LLGesture* gesture) { mList.push_back( gesture ); }
|
||||
void deleteAll();
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ LLMotion::LLMotionInitStatus LLHandMotion::onInitialize(LLCharacter *character)
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLHandMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLHandMotion::onActivate()
|
||||
bool LLHandMotion::onActivate()
|
||||
{
|
||||
LLPolyMesh *upperBodyMesh = mCharacter->getUpperBodyMesh();
|
||||
|
||||
|
|
@ -112,14 +112,14 @@ BOOL LLHandMotion::onActivate()
|
|||
mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
|
||||
mCharacter->updateVisualParams();
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLHandMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLHandMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
eHandPose *requestedHandPose;
|
||||
|
|
@ -233,7 +233,7 @@ BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
|
@ -107,19 +107,19 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
||||
virtual BOOL canDeprecate() { return FALSE; }
|
||||
virtual bool canDeprecate() { return false; }
|
||||
|
||||
static std::string getHandPoseName(eHandPose pose);
|
||||
static eHandPose getHandPose(std::string posename);
|
||||
|
|
|
|||
|
|
@ -164,16 +164,16 @@ LLMotion::LLMotionInitStatus LLHeadRotMotion::onInitialize(LLCharacter *characte
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLHeadRotMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLHeadRotMotion::onActivate()
|
||||
bool LLHeadRotMotion::onActivate()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLHeadRotMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
|
||||
LLQuaternion targetHeadRotWorld;
|
||||
|
|
@ -251,7 +251,7 @@ BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
mHeadState->setRotation( nlerp(1.f - NECK_LAG, LLQuaternion::DEFAULT, head_rot_local));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -279,7 +279,7 @@ LLEyeMotion::LLEyeMotion(const LLUUID &id) : LLMotion(id)
|
|||
mEyeLookAwayPitch = 0.f;
|
||||
|
||||
mEyeBlinkTime = 0.f;
|
||||
mEyesClosed = FALSE;
|
||||
mEyesClosed = false;
|
||||
|
||||
mHeadJoint = NULL;
|
||||
|
||||
|
|
@ -362,9 +362,9 @@ LLMotion::LLMotionInitStatus LLEyeMotion::onInitialize(LLCharacter *character)
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLEyeMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLEyeMotion::onActivate()
|
||||
bool LLEyeMotion::onActivate()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -373,7 +373,7 @@ BOOL LLEyeMotion::onActivate()
|
|||
void LLEyeMotion::adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_state, LLJointState& right_eye_state)
|
||||
{
|
||||
// Compute eye rotation.
|
||||
BOOL has_eye_target = FALSE;
|
||||
bool has_eye_target = false;
|
||||
LLQuaternion target_eye_rot;
|
||||
LLVector3 eye_look_at;
|
||||
F32 vergence;
|
||||
|
|
@ -385,7 +385,7 @@ void LLEyeMotion::adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_s
|
|||
LLVector3 up;
|
||||
|
||||
eye_look_at = *targetPos;
|
||||
has_eye_target = TRUE;
|
||||
has_eye_target = true;
|
||||
F32 lookAtDistance = eye_look_at.normVec();
|
||||
|
||||
left.setVec(skyward % eye_look_at);
|
||||
|
|
@ -457,7 +457,7 @@ void LLEyeMotion::adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_s
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLEyeMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
|
||||
//calculate jitter
|
||||
|
|
@ -505,7 +505,7 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
|
||||
if (rightEyeBlinkMorph == 1.f)
|
||||
{
|
||||
mEyesClosed = TRUE;
|
||||
mEyesClosed = true;
|
||||
mEyeBlinkTime = EYE_BLINK_CLOSE_TIME;
|
||||
mEyeBlinkTimer.reset();
|
||||
}
|
||||
|
|
@ -525,7 +525,7 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
|
||||
if (rightEyeBlinkMorph == 0.f)
|
||||
{
|
||||
mEyesClosed = FALSE;
|
||||
mEyesClosed = false;
|
||||
mEyeBlinkTime = EYE_BLINK_MIN_TIME + ll_frand(EYE_BLINK_MAX_TIME - EYE_BLINK_MIN_TIME);
|
||||
mEyeBlinkTimer.reset();
|
||||
}
|
||||
|
|
@ -537,7 +537,7 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
adjustEyeTarget(targetPos, *mLeftEyeState, *mRightEyeState);
|
||||
adjustEyeTarget(targetPos, *mAltLeftEyeState, *mAltRightEyeState);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
|
@ -89,14 +89,14 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
@ -147,7 +147,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
|
@ -172,16 +172,16 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
void adjustEyeTarget(LLVector3* targetPos, LLJointState& left_eye_state, LLJointState& right_eye_state);
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
@ -209,7 +209,7 @@ public:
|
|||
// eye blinking
|
||||
LLFrameTimer mEyeBlinkTimer;
|
||||
F32 mEyeBlinkTime;
|
||||
BOOL mEyesClosed;
|
||||
bool mEyesClosed;
|
||||
};
|
||||
|
||||
#endif // LL_LLHEADROTMOTION_H
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ void LLVector3OverrideMap::showJointVector3Overrides( std::ostringstream& os ) c
|
|||
|
||||
U32 LLVector3OverrideMap::count() const
|
||||
{
|
||||
return m_map.size();
|
||||
return static_cast<U32>(m_map.size());
|
||||
}
|
||||
|
||||
void LLVector3OverrideMap::add(const LLUUID& mesh_id, const LLVector3& pos)
|
||||
|
|
@ -86,7 +86,7 @@ void LLVector3OverrideMap::add(const LLUUID& mesh_id, const LLVector3& pos)
|
|||
|
||||
bool LLVector3OverrideMap::remove(const LLUUID& mesh_id)
|
||||
{
|
||||
U32 remove_count = m_map.erase(mesh_id);
|
||||
auto remove_count = m_map.erase(mesh_id);
|
||||
return (remove_count > 0);
|
||||
}
|
||||
|
||||
|
|
@ -105,10 +105,10 @@ void LLJoint::init()
|
|||
{
|
||||
mName = "unnamed";
|
||||
mParent = NULL;
|
||||
mXform.setScaleChildOffset(TRUE);
|
||||
mXform.setScaleChildOffset(true);
|
||||
mXform.setScale(LLVector3(1.0f, 1.0f, 1.0f));
|
||||
mDirtyFlags = MATRIX_DIRTY | ROTATION_DIRTY | POSITION_DIRTY;
|
||||
mUpdateXform = TRUE;
|
||||
mUpdateXform = true;
|
||||
mSupport = SUPPORT_BASE;
|
||||
mEnd = LLVector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
|
|
@ -135,7 +135,7 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent) :
|
|||
mJointNum(-2)
|
||||
{
|
||||
init();
|
||||
mUpdateXform = FALSE;
|
||||
mUpdateXform = false;
|
||||
|
||||
setName(name);
|
||||
if (parent)
|
||||
|
|
@ -996,7 +996,7 @@ void LLJoint::updateWorldMatrix()
|
|||
if (mDirtyFlags & MATRIX_DIRTY)
|
||||
{
|
||||
sNumUpdates++;
|
||||
mXform.updateMatrix(FALSE);
|
||||
mXform.updateMatrix(false);
|
||||
mWorldMatrix.loadu(mXform.getWorldMatrix());
|
||||
mDirtyFlags = 0x0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,21 +40,21 @@
|
|||
#include "xform.h"
|
||||
#include "llmatrix4a.h"
|
||||
|
||||
const S32 LL_CHARACTER_MAX_JOINTS_PER_MESH = 15;
|
||||
constexpr S32 LL_CHARACTER_MAX_JOINTS_PER_MESH = 15;
|
||||
// Need to set this to count of animate-able joints,
|
||||
// currently = #bones + #collision_volumes + #attachments + 2,
|
||||
// rounded to next multiple of 4.
|
||||
const U32 LL_CHARACTER_MAX_ANIMATED_JOINTS = 216; // must be divisible by 4!
|
||||
const U32 LL_MAX_JOINTS_PER_MESH_OBJECT = 110;
|
||||
constexpr U32 LL_CHARACTER_MAX_ANIMATED_JOINTS = 216; // must be divisible by 4!
|
||||
constexpr U32 LL_MAX_JOINTS_PER_MESH_OBJECT = 110;
|
||||
|
||||
// These should be higher than the joint_num of any
|
||||
// other joint, to avoid conflicts in updateMotionsByType()
|
||||
const U32 LL_HAND_JOINT_NUM = (LL_CHARACTER_MAX_ANIMATED_JOINTS-1);
|
||||
const U32 LL_FACE_JOINT_NUM = (LL_CHARACTER_MAX_ANIMATED_JOINTS-2);
|
||||
const S32 LL_CHARACTER_MAX_PRIORITY = 7;
|
||||
const F32 LL_MAX_PELVIS_OFFSET = 5.f;
|
||||
constexpr U32 LL_HAND_JOINT_NUM = (LL_CHARACTER_MAX_ANIMATED_JOINTS-1);
|
||||
constexpr U32 LL_FACE_JOINT_NUM = (LL_CHARACTER_MAX_ANIMATED_JOINTS-2);
|
||||
constexpr S32 LL_CHARACTER_MAX_PRIORITY = 7;
|
||||
constexpr F32 LL_MAX_PELVIS_OFFSET = 5.f;
|
||||
|
||||
const F32 LL_JOINT_TRESHOLD_POS_OFFSET = 0.0001f; //0.1 mm
|
||||
constexpr F32 LL_JOINT_TRESHOLD_POS_OFFSET = 0.0001f; //0.1 mm
|
||||
|
||||
class LLVector3OverrideMap
|
||||
{
|
||||
|
|
@ -133,7 +133,7 @@ protected:
|
|||
|
||||
public:
|
||||
U32 mDirtyFlags;
|
||||
BOOL mUpdateXform;
|
||||
bool mUpdateXform;
|
||||
|
||||
// describes the skin binding pose
|
||||
LLVector3 mSkinOffset;
|
||||
|
|
@ -280,7 +280,7 @@ public:
|
|||
|
||||
void clampRotation(LLQuaternion old_rot, LLQuaternion new_rot);
|
||||
|
||||
virtual BOOL isAnimatable() const { return TRUE; }
|
||||
virtual bool isAnimatable() const { return true; }
|
||||
|
||||
void addAttachmentPosOverride( const LLVector3& pos, const LLUUID& mesh_id, const std::string& av_info, bool& active_override_changed );
|
||||
void removeAttachmentPosOverride( const LLUUID& mesh_id, const std::string& av_info, bool& active_override_changed );
|
||||
|
|
|
|||
|
|
@ -53,9 +53,9 @@ LLJointSolverRP3::LLJointSolverRP3()
|
|||
mLengthAB = 1.0f;
|
||||
mLengthBC = 1.0f;
|
||||
mPoleVector.setVec( 1.0f, 0.0f, 0.0f );
|
||||
mbUseBAxis = FALSE;
|
||||
mbUseBAxis = false;
|
||||
mTwist = 0.0f;
|
||||
mFirstTime = TRUE;
|
||||
mFirstTime = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ void LLJointSolverRP3::setBAxis( const LLVector3& bAxis )
|
|||
{
|
||||
mBAxis = bAxis;
|
||||
mBAxis.normVec();
|
||||
mbUseBAxis = TRUE;
|
||||
mbUseBAxis = true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -97,11 +97,11 @@ protected:
|
|||
|
||||
LLVector3 mPoleVector;
|
||||
LLVector3 mBAxis;
|
||||
BOOL mbUseBAxis;
|
||||
bool mbUseBAxis;
|
||||
|
||||
F32 mTwist;
|
||||
|
||||
BOOL mFirstTime;
|
||||
bool mFirstTime;
|
||||
LLMatrix4 mSavedJointAMat;
|
||||
LLMatrix4 mSavedInvPlaneMat;
|
||||
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ public:
|
|||
// joint that this state is applied to
|
||||
LLJoint* getJoint() { return mJoint; }
|
||||
const LLJoint* getJoint() const { return mJoint; }
|
||||
BOOL setJoint( LLJoint *joint ) { mJoint = joint; return mJoint != NULL; }
|
||||
bool setJoint( LLJoint *joint ) { mJoint = joint; return mJoint != NULL; }
|
||||
|
||||
// transform type (bitwise flags can be combined)
|
||||
// Note that these are set automatically when various
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ LLMotion::LLMotionInitStatus LLKeyframeFallMotion::onInitialize(LLCharacter *cha
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeFallMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeFallMotion::onActivate()
|
||||
bool LLKeyframeFallMotion::onActivate()
|
||||
{
|
||||
LLVector3 ground_pos;
|
||||
LLVector3 ground_normal;
|
||||
|
|
@ -119,10 +119,10 @@ BOOL LLKeyframeFallMotion::onActivate()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeFallMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeFallMotion::onUpdate(F32 activeTime, U8* joint_mask)
|
||||
bool LLKeyframeFallMotion::onUpdate(F32 activeTime, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
|
||||
BOOL result = LLKeyframeMotion::onUpdate(activeTime, joint_mask);
|
||||
bool result = LLKeyframeMotion::onUpdate(activeTime, joint_mask);
|
||||
F32 slerp_amt = clamp_rescale(activeTime / getDuration(), 0.5f, 0.75f, 0.f, 1.f);
|
||||
|
||||
if (mPelvisState.notNull())
|
||||
|
|
|
|||
|
|
@ -60,9 +60,9 @@ public:
|
|||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
virtual F32 getEaseInDuration();
|
||||
virtual BOOL onUpdate(F32 activeTime, U8* joint_mask);
|
||||
virtual bool onUpdate(F32 activeTime, U8* joint_mask);
|
||||
|
||||
protected:
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -86,9 +86,9 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() {
|
||||
virtual bool getLoop() {
|
||||
if (mJointMotionList) return mJointMotionList->mLoop;
|
||||
else return FALSE;
|
||||
else return false;
|
||||
}
|
||||
|
||||
// motions must report their total duration
|
||||
|
|
@ -135,14 +135,14 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
@ -155,14 +155,14 @@ public:
|
|||
|
||||
public:
|
||||
U32 getFileSize();
|
||||
BOOL serialize(LLDataPacker& dp) const;
|
||||
BOOL deserialize(LLDataPacker& dp, const LLUUID& asset_id, bool allow_invalid_joints = true);
|
||||
BOOL isLoaded() { return mJointMotionList != NULL; }
|
||||
bool serialize(LLDataPacker& dp) const;
|
||||
bool deserialize(LLDataPacker& dp, const LLUUID& asset_id, bool allow_invalid_joints = true);
|
||||
bool isLoaded() { return mJointMotionList != NULL; }
|
||||
bool dumpToFile(const std::string& name);
|
||||
|
||||
|
||||
// setters for modifying a keyframe animation
|
||||
void setLoop(BOOL loop);
|
||||
void setLoop(bool loop);
|
||||
|
||||
F32 getLoopIn() {
|
||||
return (mJointMotionList) ? mJointMotionList->mLoopInPoint : 0.f;
|
||||
|
|
@ -211,7 +211,7 @@ protected:
|
|||
mEaseInStopTime(0.f),
|
||||
mEaseOutStartTime(0.f),
|
||||
mEaseOutStopTime(0.f),
|
||||
mUseTargetOffset(FALSE),
|
||||
mUseTargetOffset(false),
|
||||
mConstraintType(CONSTRAINT_TYPE_POINT),
|
||||
mConstraintTargetType(CONSTRAINT_TARGET_TYPE_BODY),
|
||||
mSourceConstraintVolume(0),
|
||||
|
|
@ -231,7 +231,7 @@ protected:
|
|||
F32 mEaseInStopTime;
|
||||
F32 mEaseOutStartTime;
|
||||
F32 mEaseOutStopTime;
|
||||
BOOL mUseTargetOffset;
|
||||
bool mUseTargetOffset;
|
||||
EConstraintType mConstraintType;
|
||||
EConstraintTargetType mConstraintTargetType;
|
||||
};
|
||||
|
|
@ -251,7 +251,7 @@ protected:
|
|||
LLVector3 mPositions[MAX_CHAIN_LENGTH];
|
||||
F32 mJointLengths[MAX_CHAIN_LENGTH];
|
||||
F32 mJointLengthFractions[MAX_CHAIN_LENGTH];
|
||||
BOOL mActive;
|
||||
bool mActive;
|
||||
LLVector3d mGroundPos;
|
||||
LLVector3 mGroundNorm;
|
||||
LLJoint* mSourceVolume;
|
||||
|
|
@ -271,7 +271,7 @@ protected:
|
|||
|
||||
void applyConstraint(JointConstraint* constraintp, F32 time, U8* joint_mask);
|
||||
|
||||
BOOL setupPose();
|
||||
bool setupPose();
|
||||
|
||||
public:
|
||||
enum AssetStatus { ASSET_LOADED, ASSET_FETCHED, ASSET_NEEDS_FETCH, ASSET_FETCH_FAILED, ASSET_UNDEFINED };
|
||||
|
|
@ -398,7 +398,7 @@ public:
|
|||
public:
|
||||
std::vector<JointMotion*> mJointMotionArray;
|
||||
F32 mDuration;
|
||||
BOOL mLoop;
|
||||
bool mLoop;
|
||||
F32 mLoopInPoint;
|
||||
F32 mLoopOutPoint;
|
||||
F32 mEaseInDuration;
|
||||
|
|
@ -413,12 +413,14 @@ public:
|
|||
// TODO: LLKeyframeDataCache::getKeyframeData should probably return a class containing
|
||||
// JointMotionList and mEmoteName, see LLKeyframeMotion::onInitialize.
|
||||
std::string mEmoteName;
|
||||
LLUUID mEmoteID;
|
||||
|
||||
public:
|
||||
JointMotionList();
|
||||
~JointMotionList();
|
||||
U32 dumpDiagInfo();
|
||||
JointMotion* getJointMotion(U32 index) const { llassert(index < mJointMotionArray.size()); return mJointMotionArray[index]; }
|
||||
U32 getNumJointMotions() const { return mJointMotionArray.size(); }
|
||||
U32 getNumJointMotions() const { return static_cast<U32>(mJointMotionArray.size()); }
|
||||
};
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeMotionParam::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeMotionParam::onActivate()
|
||||
bool LLKeyframeMotionParam::onActivate()
|
||||
{
|
||||
for (motion_map_t::value_type& motion_pair : mParameterizedMotions)
|
||||
{
|
||||
|
|
@ -143,14 +143,14 @@ BOOL LLKeyframeMotionParam::onActivate()
|
|||
paramMotion.mMotion->activate(mActivationTimestamp);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeMotionParam::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
F32 weightFactor = 1.f / (F32)mParameterizedMotions.size();
|
||||
|
|
@ -262,7 +262,7 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
|
|||
|
||||
LL_INFOS() << "Param Motion weight " << mPoseBlender.getBlendedPose()->getWeight() << LL_ENDL;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -283,13 +283,13 @@ void LLKeyframeMotionParam::onDeactivate()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeMotionParam::addKeyframeMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char *param, F32 value)
|
||||
bool LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char *param, F32 value)
|
||||
{
|
||||
LLMotion *newMotion = mCharacter->createMotion( id );
|
||||
|
||||
if (!newMotion)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
newMotion->setName(name);
|
||||
|
|
@ -297,7 +297,7 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char
|
|||
// now add motion to this list
|
||||
mParameterizedMotions[param].insert(ParameterizedMotion(newMotion, value));
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -322,7 +322,7 @@ void LLKeyframeMotionParam::setDefaultKeyframeMotion(char *name)
|
|||
//-----------------------------------------------------------------------------
|
||||
// loadMotions()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeMotionParam::loadMotions()
|
||||
bool LLKeyframeMotionParam::loadMotions()
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// Load named file by concatenating the character prefix with the motion name.
|
||||
|
|
@ -344,7 +344,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
|
|||
if (!fp || fileSize == 0)
|
||||
{
|
||||
LL_INFOS() << "ERROR: can't open: " << path << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// allocate a text buffer
|
||||
|
|
@ -383,7 +383,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
|
|||
if ( error )
|
||||
{
|
||||
LL_INFOS() << "ERROR: error while reading from " << path << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LL_INFOS() << "Loading parametric keyframe data for: " << getName() << LL_ENDL;
|
||||
|
|
@ -401,7 +401,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
|
|||
//-------------------------------------------------------------------------
|
||||
// get priority
|
||||
//-------------------------------------------------------------------------
|
||||
BOOL isFirstMotion = TRUE;
|
||||
bool isFirstMotion = true;
|
||||
num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */
|
||||
|
||||
while(1)
|
||||
|
|
@ -410,13 +410,13 @@ BOOL LLKeyframeMotionParam::loadMotions()
|
|||
if ((num != 3))
|
||||
{
|
||||
LL_INFOS() << "WARNING: can't read parametric motion" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
addKeyframeMotion(strA, gAnimLibrary.stringToAnimState(std::string(strA)), strB, floatA);
|
||||
if (isFirstMotion)
|
||||
{
|
||||
isFirstMotion = FALSE;
|
||||
isFirstMotion = false;
|
||||
setDefaultKeyframeMotion(strA);
|
||||
}
|
||||
|
||||
|
|
@ -430,7 +430,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
|
|||
num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// End
|
||||
|
|
|
|||
|
|
@ -67,8 +67,8 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() {
|
||||
return TRUE;
|
||||
virtual bool getLoop() {
|
||||
return true;
|
||||
}
|
||||
|
||||
// motions must report their total duration
|
||||
|
|
@ -102,14 +102,14 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
@ -128,12 +128,12 @@ protected:
|
|||
};
|
||||
|
||||
// add a motion and associated parameter triplet
|
||||
BOOL addKeyframeMotion(char *name, const LLUUID &id, char *param, F32 value);
|
||||
bool addKeyframeMotion(char *name, const LLUUID &id, char *param, F32 value);
|
||||
|
||||
// set default motion for LOD and retrieving blend constants
|
||||
void setDefaultKeyframeMotion(char *);
|
||||
|
||||
BOOL loadMotions();
|
||||
bool loadMotions();
|
||||
|
||||
protected:
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ const F32 POSITION_THRESHOLD = 0.1f;
|
|||
//-----------------------------------------------------------------------------
|
||||
LLKeyframeStandMotion::LLKeyframeStandMotion(const LLUUID &id) : LLKeyframeMotion(id)
|
||||
{
|
||||
mFlipFeet = FALSE;
|
||||
mFlipFeet = false;
|
||||
mCharacter = NULL;
|
||||
|
||||
// create kinematic hierarchy
|
||||
|
|
@ -67,7 +67,7 @@ LLKeyframeStandMotion::LLKeyframeStandMotion(const LLUUID &id) : LLKeyframeMotio
|
|||
mKneeRightState = NULL;
|
||||
mAnkleRightState = NULL;
|
||||
|
||||
mTrackAnkles = TRUE;
|
||||
mTrackAnkles = true;
|
||||
|
||||
mFrameNum = 0;
|
||||
}
|
||||
|
|
@ -90,7 +90,7 @@ LLMotion::LLMotionInitStatus LLKeyframeStandMotion::onInitialize(LLCharacter *ch
|
|||
// save character pointer for later use
|
||||
mCharacter = character;
|
||||
|
||||
mFlipFeet = FALSE;
|
||||
mFlipFeet = false;
|
||||
|
||||
// load keyframe data, setup pose and joint states
|
||||
LLMotion::LLMotionInitStatus status = LLKeyframeMotion::onInitialize(character);
|
||||
|
|
@ -129,7 +129,7 @@ LLMotion::LLMotionInitStatus LLKeyframeStandMotion::onInitialize(LLCharacter *ch
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeStandMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeStandMotion::onActivate()
|
||||
bool LLKeyframeStandMotion::onActivate()
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// setup the IK solvers
|
||||
|
|
@ -158,15 +158,15 @@ void LLKeyframeStandMotion::onDeactivate()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeStandMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// let the base class update the cycle
|
||||
//-------------------------------------------------------------------------
|
||||
BOOL status = LLKeyframeMotion::onUpdate(time, joint_mask);
|
||||
bool status = LLKeyframeMotion::onUpdate(time, joint_mask);
|
||||
if (!status)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLVector3 root_world_pos = mPelvisState->getJoint()->getParent()->getWorldPosition();
|
||||
|
|
@ -174,7 +174,7 @@ BOOL LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
// have we received a valid world position for this avatar?
|
||||
if (root_world_pos.isExactlyZero())
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -185,16 +185,16 @@ BOOL LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
{
|
||||
mLastGoodPelvisRotation = mPelvisState->getJoint()->getWorldRotation();
|
||||
mLastGoodPelvisRotation.normalize();
|
||||
mTrackAnkles = TRUE;
|
||||
mTrackAnkles = true;
|
||||
}
|
||||
else if ((mCharacter->getCharacterPosition() - mLastGoodPosition).magVecSquared() > POSITION_THRESHOLD)
|
||||
{
|
||||
mLastGoodPosition = mCharacter->getCharacterPosition();
|
||||
mTrackAnkles = TRUE;
|
||||
mTrackAnkles = true;
|
||||
}
|
||||
else if (mPose.getWeight() < 1.f)
|
||||
{
|
||||
mTrackAnkles = TRUE;
|
||||
mTrackAnkles = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -255,7 +255,7 @@ BOOL LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
else if (mFrameNum < 2)
|
||||
{
|
||||
mFrameNum++;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
mFrameNum++;
|
||||
|
|
@ -336,7 +336,7 @@ BOOL LLKeyframeStandMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
//LL_INFOS() << "Stand drift amount " << (mCharacter->getCharacterPosition() - mLastGoodPosition).magVec() << LL_ENDL;
|
||||
|
||||
// LL_INFOS() << "DEBUG: " << speed << " : " << mTrackAnkles << LL_ENDL;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// End
|
||||
|
|
|
|||
|
|
@ -63,9 +63,9 @@ public:
|
|||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
void onDeactivate();
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
public:
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -85,7 +85,7 @@ public:
|
|||
|
||||
LLCharacter *mCharacter;
|
||||
|
||||
BOOL mFlipFeet;
|
||||
bool mFlipFeet;
|
||||
|
||||
LLPointer<LLJointState> mPelvisState;
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ public:
|
|||
|
||||
LLQuaternion mLastGoodPelvisRotation;
|
||||
LLVector3 mLastGoodPosition;
|
||||
BOOL mTrackAnkles;
|
||||
bool mTrackAnkles;
|
||||
|
||||
S32 mFrameNum;
|
||||
} LL_ALIGN_POSTFIX(16);
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ LLMotion::LLMotionInitStatus LLKeyframeWalkMotion::onInitialize(LLCharacter *cha
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeWalkMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeWalkMotion::onActivate()
|
||||
bool LLKeyframeWalkMotion::onActivate()
|
||||
{
|
||||
mRealTimeLast = 0.0f;
|
||||
mAdjTimeLast = 0.0f;
|
||||
|
|
@ -103,7 +103,7 @@ void LLKeyframeWalkMotion::onDeactivate()
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLKeyframeWalkMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLKeyframeWalkMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLKeyframeWalkMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// compute time since last update
|
||||
|
|
@ -174,7 +174,7 @@ LLMotion::LLMotionInitStatus LLWalkAdjustMotion::onInitialize(LLCharacter *chara
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLWalkAdjustMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLWalkAdjustMotion::onActivate()
|
||||
bool LLWalkAdjustMotion::onActivate()
|
||||
{
|
||||
mAnimSpeed = 0.f;
|
||||
mAdjustedSpeed = 0.f;
|
||||
|
|
@ -191,13 +191,13 @@ BOOL LLWalkAdjustMotion::onActivate()
|
|||
F32 rightAnkleOffset = (mRightAnkleJoint->getWorldPosition() - mCharacter->getCharacterPosition()).magVec();
|
||||
mAnkleOffset = llmax(leftAnkleOffset, rightAnkleOffset);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLWalkAdjustMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// delta_time is guaranteed to be non zero
|
||||
|
|
@ -315,7 +315,7 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
// need to update *some* joint to keep this animation active
|
||||
mPelvisState->setPosition(mPelvisOffset);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -362,18 +362,18 @@ LLMotion::LLMotionInitStatus LLFlyAdjustMotion::onInitialize(LLCharacter *charac
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLFlyAdjustMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLFlyAdjustMotion::onActivate()
|
||||
bool LLFlyAdjustMotion::onActivate()
|
||||
{
|
||||
mPelvisState->setPosition(LLVector3::zero);
|
||||
mPelvisState->setRotation(LLQuaternion::DEFAULT);
|
||||
mRoll = 0.f;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLFlyAdjustMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
LLVector3 ang_vel = mCharacter->getCharacterAngularVelocity() * mCharacter->getTimeDilation();
|
||||
|
|
@ -388,6 +388,6 @@ BOOL LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
LLQuaternion roll(mRoll, LLVector3(0.f, 0.f, 1.f));
|
||||
mPelvisState->setRotation(roll);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,9 +65,9 @@ public:
|
|||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
virtual void onDeactivate();
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
public:
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -100,11 +100,11 @@ public:
|
|||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
virtual void onDeactivate();
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
virtual LLJoint::JointPriority getPriority(){return LLJoint::HIGH_PRIORITY;}
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
virtual F32 getDuration() { return 0.f; }
|
||||
virtual F32 getEaseInDuration() { return 0.f; }
|
||||
virtual F32 getEaseOutDuration() { return 0.f; }
|
||||
|
|
@ -150,11 +150,11 @@ public:
|
|||
// animation callbacks to be implemented by subclasses
|
||||
//-------------------------------------------------------------------------
|
||||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
virtual void onDeactivate() {};
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
virtual LLJoint::JointPriority getPriority(){return LLJoint::HIGHER_PRIORITY;}
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
virtual F32 getDuration() { return 0.f; }
|
||||
virtual F32 getEaseInDuration() { return 0.f; }
|
||||
virtual F32 getEaseOutDuration() { return 0.f; }
|
||||
|
|
|
|||
|
|
@ -43,8 +43,8 @@
|
|||
// Class Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
LLMotion::LLMotion( const LLUUID &id ) :
|
||||
mStopped(TRUE),
|
||||
mActive(FALSE),
|
||||
mStopped(true),
|
||||
mActive(false),
|
||||
mID(id),
|
||||
mActivationTimestamp(0.f),
|
||||
mStopTimestamp(0.f),
|
||||
|
|
@ -132,10 +132,10 @@ void LLMotion::setDeactivateCallback( void (*cb)(void *), void* userdata )
|
|||
void LLMotion::setStopTime(F32 time)
|
||||
{
|
||||
mStopTimestamp = time;
|
||||
mStopped = TRUE;
|
||||
mStopped = true;
|
||||
}
|
||||
|
||||
BOOL LLMotion::isBlending()
|
||||
bool LLMotion::isBlending()
|
||||
{
|
||||
return mPose.getWeight() < 1.f;
|
||||
}
|
||||
|
|
@ -146,8 +146,8 @@ BOOL LLMotion::isBlending()
|
|||
void LLMotion::activate(F32 time)
|
||||
{
|
||||
mActivationTimestamp = time;
|
||||
mStopped = FALSE;
|
||||
mActive = TRUE;
|
||||
mStopped = false;
|
||||
mActive = true;
|
||||
onActivate();
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ void LLMotion::activate(F32 time)
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLMotion::deactivate()
|
||||
{
|
||||
mActive = FALSE;
|
||||
mActive = false;
|
||||
mPose.setWeight(0.f);
|
||||
|
||||
if (mDeactivateCallback)
|
||||
|
|
@ -169,9 +169,9 @@ void LLMotion::deactivate()
|
|||
onDeactivate();
|
||||
}
|
||||
|
||||
BOOL LLMotion::canDeprecate()
|
||||
bool LLMotion::canDeprecate()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// End
|
||||
|
|
|
|||
|
|
@ -91,21 +91,21 @@ public:
|
|||
|
||||
virtual void setStopTime(F32 time);
|
||||
|
||||
BOOL isStopped() const { return mStopped; }
|
||||
bool isStopped() const { return mStopped; }
|
||||
|
||||
void setStopped(BOOL stopped) { mStopped = stopped; }
|
||||
void setStopped(bool stopped) { mStopped = stopped; }
|
||||
|
||||
BOOL isBlending();
|
||||
bool isBlending();
|
||||
|
||||
// Activation functions.
|
||||
// It is OK for other classes to activate a motion,
|
||||
// but only the controller can deactivate it.
|
||||
// Thus, if mActive == TRUE, the motion *may* be on the controllers active list,
|
||||
// but if mActive == FALSE, the motion is gauranteed not to be on the active list.
|
||||
// Thus, if mActive == true, the motion *may* be on the controllers active list,
|
||||
// but if mActive == false, the motion is gauranteed not to be on the active list.
|
||||
protected:
|
||||
// Used by LLMotionController only
|
||||
void deactivate();
|
||||
BOOL isActive() { return mActive; }
|
||||
bool isActive() { return mActive; }
|
||||
public:
|
||||
void activate(F32 time);
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() = 0;
|
||||
virtual bool getLoop() = 0;
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() = 0;
|
||||
|
|
@ -144,33 +144,33 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character) = 0;
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 activeTime, U8* joint_mask) = 0;
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
virtual bool onUpdate(F32 activeTime, U8* joint_mask) = 0;
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate() = 0;
|
||||
|
||||
// can we crossfade this motion with a new instance when restarted?
|
||||
// should ultimately always be TRUE, but lack of emote blending, etc
|
||||
// should ultimately always be true, but lack of emote blending, etc
|
||||
// requires this
|
||||
virtual BOOL canDeprecate();
|
||||
virtual bool canDeprecate();
|
||||
|
||||
// optional callback routine called when animation deactivated.
|
||||
void setDeactivateCallback( void (*cb)(void *), void* userdata );
|
||||
|
||||
protected:
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate() = 0;
|
||||
virtual bool onActivate() = 0;
|
||||
|
||||
void addJointState(const LLPointer<LLJointState>& jointState);
|
||||
|
||||
protected:
|
||||
LLPose mPose;
|
||||
BOOL mStopped; // motion has been stopped;
|
||||
BOOL mActive; // motion is on active list (can be stopped or not stopped)
|
||||
bool mStopped; // motion has been stopped;
|
||||
bool mActive; // motion is on active list (can be stopped or not stopped)
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// these are set implicitly by the motion controller and
|
||||
|
|
@ -199,7 +199,7 @@ public:
|
|||
LLTestMotion(const LLUUID &id) : LLMotion(id){}
|
||||
~LLTestMotion() {}
|
||||
static LLMotion *create(const LLUUID& id) { return new LLTestMotion(id); }
|
||||
BOOL getLoop() { return FALSE; }
|
||||
bool getLoop() { return false; }
|
||||
F32 getDuration() { return 0.0f; }
|
||||
F32 getEaseInDuration() { return 0.0f; }
|
||||
F32 getEaseOutDuration() { return 0.0f; }
|
||||
|
|
@ -208,8 +208,8 @@ public:
|
|||
F32 getMinPixelArea() { return 0.f; }
|
||||
|
||||
LLMotionInitStatus onInitialize(LLCharacter*) { LL_INFOS() << "LLTestMotion::onInitialize()" << LL_ENDL; return STATUS_SUCCESS; }
|
||||
BOOL onActivate() { LL_INFOS() << "LLTestMotion::onActivate()" << LL_ENDL; return TRUE; }
|
||||
BOOL onUpdate(F32 time, U8* joint_mask) { LL_INFOS() << "LLTestMotion::onUpdate(" << time << ")" << LL_ENDL; return TRUE; }
|
||||
bool onActivate() { LL_INFOS() << "LLTestMotion::onActivate()" << LL_ENDL; return true; }
|
||||
bool onUpdate(F32 time, U8* joint_mask) { LL_INFOS() << "LLTestMotion::onUpdate(" << time << ")" << LL_ENDL; return true; }
|
||||
void onDeactivate() { LL_INFOS() << "LLTestMotion::onDeactivate()" << LL_ENDL; }
|
||||
};
|
||||
|
||||
|
|
@ -225,7 +225,7 @@ public:
|
|||
static LLMotion *create(const LLUUID &id) { return new LLNullMotion(id); }
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
/*virtual*/ BOOL getLoop() { return TRUE; }
|
||||
/*virtual*/ bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
/*virtual*/ F32 getDuration() { return 1.f; }
|
||||
|
|
@ -251,14 +251,14 @@ public:
|
|||
/*virtual*/ LLMotionInitStatus onInitialize(LLCharacter *character) { return STATUS_SUCCESS; }
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
/*virtual*/ BOOL onActivate() { return TRUE; }
|
||||
/*virtual*/ bool onActivate() { return true; }
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
/*virtual*/ BOOL onUpdate(F32 activeTime, U8* joint_mask) { return TRUE; }
|
||||
// must return true while it is active, and
|
||||
// must return false when the motion is completed.
|
||||
/*virtual*/ bool onUpdate(F32 activeTime, U8* joint_mask) { return true; }
|
||||
|
||||
// called when a motion is deactivated
|
||||
/*virtual*/ void onDeactivate() {}
|
||||
|
|
|
|||
|
|
@ -76,16 +76,16 @@ LLMotionRegistry::~LLMotionRegistry()
|
|||
//-----------------------------------------------------------------------------
|
||||
// addMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionRegistry::registerMotion( const LLUUID& id, LLMotionConstructor constructor )
|
||||
bool LLMotionRegistry::registerMotion( const LLUUID& id, LLMotionConstructor constructor )
|
||||
{
|
||||
// LL_INFOS() << "Registering motion: " << name << LL_ENDL;
|
||||
if (!is_in_map(mMotionTable, id))
|
||||
{
|
||||
mMotionTable[id] = constructor;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -133,13 +133,13 @@ LLMotionController::LLMotionController()
|
|||
mAnimTime(0.f),
|
||||
mPrevTimerElapsed(0.f),
|
||||
mLastTime(0.0f),
|
||||
mHasRunOnce(FALSE),
|
||||
mPaused(FALSE),
|
||||
mHasRunOnce(false),
|
||||
mPaused(false),
|
||||
mPausedFrame(0),
|
||||
mTimeStep(0.f),
|
||||
mTimeStepCount(0),
|
||||
mLastInterp(0.f),
|
||||
mIsSelf(FALSE),
|
||||
mIsSelf(false),
|
||||
mLastCountAfterPurge(0)
|
||||
{
|
||||
}
|
||||
|
|
@ -156,11 +156,11 @@ LLMotionController::~LLMotionController()
|
|||
|
||||
void LLMotionController::incMotionCounts(S32& num_motions, S32& num_loading_motions, S32& num_loaded_motions, S32& num_active_motions, S32& num_deprecated_motions)
|
||||
{
|
||||
num_motions += mAllMotions.size();
|
||||
num_loading_motions += mLoadingMotions.size();
|
||||
num_loaded_motions += mLoadedMotions.size();
|
||||
num_active_motions += mActiveMotions.size();
|
||||
num_deprecated_motions += mDeprecatedMotions.size();
|
||||
num_motions += static_cast<S32>(mAllMotions.size());
|
||||
num_loading_motions += static_cast<S32>(mLoadingMotions.size());
|
||||
num_loaded_motions += static_cast<S32>(mLoadedMotions.size());
|
||||
num_active_motions += static_cast<S32>(mActiveMotions.size());
|
||||
num_deprecated_motions += static_cast<S32>(mDeprecatedMotions.size());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -222,7 +222,7 @@ void LLMotionController::purgeExcessMotions()
|
|||
}
|
||||
|
||||
// clean up all inactive, loaded motions
|
||||
for (LLUUID motion_id : motions_to_kill)
|
||||
for (const LLUUID& motion_id : motions_to_kill)
|
||||
{
|
||||
// look up the motion again by ID to get canonical instance
|
||||
// and kill it only if that one is inactive
|
||||
|
|
@ -233,7 +233,7 @@ void LLMotionController::purgeExcessMotions()
|
|||
}
|
||||
}
|
||||
|
||||
U32 loaded_count = mLoadedMotions.size();
|
||||
U32 loaded_count = static_cast<U32>(mLoadedMotions.size());
|
||||
if (loaded_count > (2 * MAX_MOTION_INSTANCES) && loaded_count > mLastCountAfterPurge)
|
||||
{
|
||||
LL_WARNS_ONCE("Animation") << loaded_count << " Loaded Motions. Amount of motions is over limit." << LL_ENDL;
|
||||
|
|
@ -275,7 +275,7 @@ void LLMotionController::setTimeStep(F32 step)
|
|||
LLMotion* motionp = *iter;
|
||||
F32 activation_time = motionp->mActivationTimestamp;
|
||||
motionp->mActivationTimestamp = (F32)(llfloor(activation_time / step)) * step;
|
||||
BOOL stopped = motionp->isStopped();
|
||||
bool stopped = motionp->isStopped();
|
||||
motionp->setStopTime((F32)(llfloor(motionp->getStopTime() / step)) * step);
|
||||
motionp->setStopped(stopped);
|
||||
motionp->mSendStopTimestamp = (F32)llfloor(motionp->mSendStopTimestamp / step) * step;
|
||||
|
|
@ -303,7 +303,7 @@ void LLMotionController::setCharacter(LLCharacter *character)
|
|||
//-----------------------------------------------------------------------------
|
||||
// registerMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionController::registerMotion( const LLUUID& id, LLMotionConstructor constructor )
|
||||
bool LLMotionController::registerMotion( const LLUUID& id, LLMotionConstructor constructor )
|
||||
{
|
||||
return sRegistry.registerMotion(id, constructor);
|
||||
}
|
||||
|
|
@ -389,7 +389,7 @@ LLMotion* LLMotionController::createMotion( const LLUUID &id )
|
|||
//-----------------------------------------------------------------------------
|
||||
// startMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionController::startMotion(const LLUUID &id, F32 start_offset)
|
||||
bool LLMotionController::startMotion(const LLUUID &id, F32 start_offset)
|
||||
{
|
||||
// do we have an instance of this motion for this character?
|
||||
LLMotion *motion = findMotion(id);
|
||||
|
|
@ -415,12 +415,12 @@ BOOL LLMotionController::startMotion(const LLUUID &id, F32 start_offset)
|
|||
|
||||
if (!motion)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
//if the motion is already active and allows deprecation, then let it keep playing
|
||||
else if (motion->canDeprecate() && isMotionActive(motion))
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// LL_INFOS() << "Starting motion " << name << LL_ENDL;
|
||||
|
|
@ -431,7 +431,7 @@ BOOL LLMotionController::startMotion(const LLUUID &id, F32 start_offset)
|
|||
//-----------------------------------------------------------------------------
|
||||
// stopMotionLocally()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionController::stopMotionLocally(const LLUUID &id, BOOL stop_immediate)
|
||||
bool LLMotionController::stopMotionLocally(const LLUUID &id, bool stop_immediate)
|
||||
{
|
||||
// if already inactive, return false
|
||||
LLMotion *motion = findMotion(id);
|
||||
|
|
@ -439,11 +439,11 @@ BOOL LLMotionController::stopMotionLocally(const LLUUID &id, BOOL stop_immediate
|
|||
return stopMotionInstance(motion, stop_immediate||mPaused);
|
||||
}
|
||||
|
||||
BOOL LLMotionController::stopMotionInstance(LLMotion* motion, BOOL stop_immediate)
|
||||
bool LLMotionController::stopMotionInstance(LLMotion* motion, bool stop_immediate)
|
||||
{
|
||||
if (!motion)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -455,15 +455,15 @@ BOOL LLMotionController::stopMotionInstance(LLMotion* motion, BOOL stop_immediat
|
|||
{
|
||||
deactivateMotionInstance(motion);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
else if (isMotionLoading(motion))
|
||||
{
|
||||
motion->setStopped(TRUE);
|
||||
return TRUE;
|
||||
motion->setStopped(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -518,7 +518,7 @@ void LLMotionController::updateIdleMotion(LLMotion* motionp)
|
|||
if (mLastTime <= motionp->mSendStopTimestamp)
|
||||
{
|
||||
mCharacter->requestStopMotion( motionp );
|
||||
stopMotionInstance(motionp, FALSE);
|
||||
stopMotionInstance(motionp, false);
|
||||
}
|
||||
}
|
||||
else if (mAnimTime >= motionp->mActivationTimestamp)
|
||||
|
|
@ -552,7 +552,7 @@ void LLMotionController::updateIdleActiveMotions()
|
|||
void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_type)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
|
||||
BOOL update_result = TRUE;
|
||||
bool update_result = true;
|
||||
U8 last_joint_signature[LL_CHARACTER_MAX_ANIMATED_JOINTS];
|
||||
|
||||
memset(&last_joint_signature, 0, sizeof(U8) * LL_CHARACTER_MAX_ANIMATED_JOINTS);
|
||||
|
|
@ -568,11 +568,11 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
continue;
|
||||
}
|
||||
|
||||
BOOL update_motion = FALSE;
|
||||
bool update_motion = false;
|
||||
|
||||
if (motionp->getPose()->getWeight() < 1.f)
|
||||
{
|
||||
update_motion = TRUE;
|
||||
update_motion = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -584,7 +584,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
if ((*current_signature | test_signature) > (*current_signature))
|
||||
{
|
||||
*current_signature |= test_signature;
|
||||
update_motion = TRUE;
|
||||
update_motion = true;
|
||||
}
|
||||
|
||||
*((U32*)&last_joint_signature[i * 4]) = *(U32*)&(mJointSignature[1][i * 4]);
|
||||
|
|
@ -594,7 +594,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
if ((*current_signature | test_signature) > (*current_signature))
|
||||
{
|
||||
*current_signature |= test_signature;
|
||||
update_motion = TRUE;
|
||||
update_motion = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -620,7 +620,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
if (mLastTime <= motionp->mSendStopTimestamp)
|
||||
{
|
||||
mCharacter->requestStopMotion( motionp );
|
||||
stopMotionInstance(motionp, FALSE);
|
||||
stopMotionInstance(motionp, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -701,7 +701,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
if (mLastTime <= motionp->mSendStopTimestamp)
|
||||
{
|
||||
mCharacter->requestStopMotion( motionp );
|
||||
stopMotionInstance(motionp, FALSE);
|
||||
stopMotionInstance(motionp, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -747,12 +747,12 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
|
|||
// propagate this to the network
|
||||
// as not all viewers are guaranteed to have access to the same logic
|
||||
mCharacter->requestStopMotion( motionp );
|
||||
stopMotionInstance(motionp, FALSE);
|
||||
stopMotionInstance(motionp, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// even if onupdate returns FALSE, add this motion in to the blend one last time
|
||||
// even if onupdate returns false, add this motion in to the blend one last time
|
||||
mPoseBlender.addMotion(motionp);
|
||||
}
|
||||
}
|
||||
|
|
@ -815,7 +815,7 @@ void LLMotionController::updateMotions(bool force_update)
|
|||
// The use_quantum optimization or possibly the associated code in setTimeStamp()
|
||||
// does not work as implemented.
|
||||
// Currently setting mTimeStep to nonzero is disabled elsewhere.
|
||||
BOOL use_quantum = (mTimeStep != 0.f);
|
||||
bool use_quantum = (mTimeStep != 0.f);
|
||||
|
||||
// Always update mPrevTimerElapsed
|
||||
F32 cur_time = mTimer.getElapsedTimeF32();
|
||||
|
|
@ -885,7 +885,7 @@ void LLMotionController::updateMotions(bool force_update)
|
|||
|
||||
if (use_quantum)
|
||||
{
|
||||
mPoseBlender.blendAndCache(TRUE);
|
||||
mPoseBlender.blendAndCache(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -893,7 +893,7 @@ void LLMotionController::updateMotions(bool force_update)
|
|||
}
|
||||
}
|
||||
|
||||
mHasRunOnce = TRUE;
|
||||
mHasRunOnce = true;
|
||||
// LL_INFOS() << "Motion controller time " << motionTimer.getElapsedTimeF32() << LL_ENDL;
|
||||
}
|
||||
|
||||
|
|
@ -913,28 +913,28 @@ void LLMotionController::updateMotionsMinimal()
|
|||
|
||||
deactivateStoppedMotions();
|
||||
|
||||
mHasRunOnce = TRUE;
|
||||
mHasRunOnce = true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// activateMotionInstance()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionController::activateMotionInstance(LLMotion *motion, F32 time)
|
||||
bool LLMotionController::activateMotionInstance(LLMotion *motion, F32 time)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
|
||||
// It's not clear why the getWeight() line seems to be crashing this, but
|
||||
// hopefully this fixes it.
|
||||
if (motion == NULL || motion->getPose() == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mLoadingMotions.find(motion) != mLoadingMotions.end())
|
||||
{
|
||||
// we want to start this motion, but we can't yet, so flag it as started
|
||||
motion->setStopped(FALSE);
|
||||
motion->setStopped(false);
|
||||
// report pending animations as activated
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
motion->mResidualWeight = motion->getPose()->getWeight();
|
||||
|
|
@ -978,13 +978,13 @@ BOOL LLMotionController::activateMotionInstance(LLMotion *motion, F32 time)
|
|||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// deactivateMotionInstance()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLMotionController::deactivateMotionInstance(LLMotion *motion)
|
||||
bool LLMotionController::deactivateMotionInstance(LLMotion *motion)
|
||||
{
|
||||
motion->deactivate();
|
||||
|
||||
|
|
@ -1001,7 +1001,7 @@ BOOL LLMotionController::deactivateMotionInstance(LLMotion *motion)
|
|||
mActiveMotions.remove(motion);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLMotionController::deprecateMotionInstance(LLMotion* motion)
|
||||
|
|
@ -1009,7 +1009,7 @@ void LLMotionController::deprecateMotionInstance(LLMotion* motion)
|
|||
mDeprecatedMotions.insert(motion);
|
||||
|
||||
//fade out deprecated motion
|
||||
stopMotionInstance(motion, FALSE);
|
||||
stopMotionInstance(motion, false);
|
||||
//no longer canonical
|
||||
mAllMotions.erase(motion->getID());
|
||||
}
|
||||
|
|
@ -1124,7 +1124,7 @@ void LLMotionController::pauseAllMotions()
|
|||
if (!mPaused)
|
||||
{
|
||||
//LL_INFOS() << "Pausing animations..." << LL_ENDL;
|
||||
mPaused = TRUE;
|
||||
mPaused = true;
|
||||
mPausedFrame = LLFrameTimer::getFrameCount();
|
||||
}
|
||||
|
||||
|
|
@ -1138,7 +1138,7 @@ void LLMotionController::unpauseAllMotions()
|
|||
if (mPaused)
|
||||
{
|
||||
//LL_INFOS() << "Unpausing animations..." << LL_ENDL;
|
||||
mPaused = FALSE;
|
||||
mPaused = false;
|
||||
}
|
||||
}
|
||||
// End
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public:
|
|||
|
||||
// adds motion classes to the registry
|
||||
// returns true if successfull
|
||||
BOOL registerMotion( const LLUUID& id, LLMotionConstructor create);
|
||||
bool registerMotion( const LLUUID& id, LLMotionConstructor create);
|
||||
|
||||
// creates a new instance of a named motion
|
||||
// returns NULL motion is not registered
|
||||
|
|
@ -85,7 +85,7 @@ class LLMotionController
|
|||
public:
|
||||
typedef std::list<LLMotion*> motion_list_t;
|
||||
typedef std::set<LLMotion*> motion_set_t;
|
||||
BOOL mIsSelf;
|
||||
bool mIsSelf;
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
|
|
@ -102,7 +102,7 @@ public:
|
|||
// registers a motion with the controller
|
||||
// (actually just forwards call to motion registry)
|
||||
// returns true if successfull
|
||||
BOOL registerMotion( const LLUUID& id, LLMotionConstructor create );
|
||||
bool registerMotion( const LLUUID& id, LLMotionConstructor create );
|
||||
|
||||
// creates a motion from the registry
|
||||
LLMotion *createMotion( const LLUUID &id );
|
||||
|
|
@ -115,13 +115,13 @@ public:
|
|||
// start motion
|
||||
// begins playing the specified motion
|
||||
// returns true if successful
|
||||
BOOL startMotion( const LLUUID &id, F32 start_offset );
|
||||
bool startMotion( const LLUUID &id, F32 start_offset );
|
||||
|
||||
// stop motion
|
||||
// stops a playing motion
|
||||
// in reality, it begins the ease out transition phase
|
||||
// returns true if successful
|
||||
BOOL stopMotionLocally( const LLUUID &id, BOOL stop_immediate );
|
||||
bool stopMotionLocally( const LLUUID &id, bool stop_immediate );
|
||||
|
||||
// Move motions from loading to loaded
|
||||
void updateLoadingMotions();
|
||||
|
|
@ -147,7 +147,7 @@ public:
|
|||
// pause and continue all motions
|
||||
void pauseAllMotions();
|
||||
void unpauseAllMotions();
|
||||
BOOL isPaused() const { return mPaused; }
|
||||
bool isPaused() const { return mPaused; }
|
||||
S32 getPausedFrame() const { return mPausedFrame; }
|
||||
|
||||
void setTimeStep(F32 step);
|
||||
|
|
@ -178,10 +178,10 @@ protected:
|
|||
// internal operations act on motion instances directly
|
||||
// as there can be duplicate motions per id during blending overlap
|
||||
void deleteAllMotions();
|
||||
BOOL activateMotionInstance(LLMotion *motion, F32 time);
|
||||
BOOL deactivateMotionInstance(LLMotion *motion);
|
||||
bool activateMotionInstance(LLMotion *motion, F32 time);
|
||||
bool deactivateMotionInstance(LLMotion *motion);
|
||||
void deprecateMotionInstance(LLMotion* motion);
|
||||
BOOL stopMotionInstance(LLMotion *motion, BOOL stop_imemdiate);
|
||||
bool stopMotionInstance(LLMotion *motion, bool stop_imemdiate);
|
||||
void removeMotionInstance(LLMotion* motion);
|
||||
void updateRegularMotions();
|
||||
void updateAdditiveMotions();
|
||||
|
|
@ -220,8 +220,8 @@ protected:
|
|||
F32 mPrevTimerElapsed;
|
||||
F32 mAnimTime;
|
||||
F32 mLastTime;
|
||||
BOOL mHasRunOnce;
|
||||
BOOL mPaused;
|
||||
bool mHasRunOnce;
|
||||
bool mPaused;
|
||||
S32 mPausedFrame;
|
||||
F32 mTimeStep;
|
||||
S32 mTimeStepCount;
|
||||
|
|
|
|||
|
|
@ -54,15 +54,15 @@ LLMultiGesture::~LLMultiGesture()
|
|||
|
||||
void LLMultiGesture::reset()
|
||||
{
|
||||
mPlaying = FALSE;
|
||||
mPlaying = false;
|
||||
mCurrentStep = 0;
|
||||
mWaitTimer.reset();
|
||||
mWaitingAnimations = FALSE;
|
||||
mWaitingKeyRelease = FALSE;
|
||||
mWaitingTimer = FALSE;
|
||||
mTriggeredByKey = FALSE;
|
||||
mKeyReleased = FALSE;
|
||||
mWaitingAtEnd = FALSE;
|
||||
mWaitingAnimations = false;
|
||||
mWaitingKeyRelease = false;
|
||||
mWaitingTimer = false;
|
||||
mTriggeredByKey = false;
|
||||
mKeyReleased = false;
|
||||
mWaitingAtEnd = false;
|
||||
mRequestedAnimIDs.clear();
|
||||
mPlayingAnimIDs.clear();
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ S32 LLMultiGesture::getMaxSerialSize() const
|
|||
return max_size;
|
||||
}
|
||||
|
||||
BOOL LLMultiGesture::serialize(LLDataPacker& dp) const
|
||||
bool LLMultiGesture::serialize(LLDataPacker& dp) const
|
||||
{
|
||||
dp.packS32(GESTURE_VERSION, "version");
|
||||
dp.packU8(mKey, "key");
|
||||
|
|
@ -123,16 +123,16 @@ BOOL LLMultiGesture::serialize(LLDataPacker& dp) const
|
|||
LLGestureStep* step = mSteps[i];
|
||||
|
||||
dp.packS32(step->getType(), "step_type");
|
||||
BOOL ok = step->serialize(dp);
|
||||
bool ok = step->serialize(dp);
|
||||
if (!ok)
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLMultiGesture::deserialize(LLDataPacker& dp)
|
||||
bool LLMultiGesture::deserialize(LLDataPacker& dp)
|
||||
{
|
||||
S32 version;
|
||||
dp.unpackS32(version, "version");
|
||||
|
|
@ -141,7 +141,7 @@ BOOL LLMultiGesture::deserialize(LLDataPacker& dp)
|
|||
LL_WARNS() << "Bad LLMultiGesture version " << version
|
||||
<< " should be " << GESTURE_VERSION
|
||||
<< LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
dp.unpackU8(mKey, "key");
|
||||
|
|
@ -157,7 +157,7 @@ BOOL LLMultiGesture::deserialize(LLDataPacker& dp)
|
|||
if (count < 0)
|
||||
{
|
||||
LL_WARNS() << "Bad LLMultiGesture step count " << count << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 i;
|
||||
|
|
@ -172,43 +172,43 @@ BOOL LLMultiGesture::deserialize(LLDataPacker& dp)
|
|||
case STEP_ANIMATION:
|
||||
{
|
||||
LLGestureStepAnimation* step = new LLGestureStepAnimation();
|
||||
BOOL ok = step->deserialize(dp);
|
||||
if (!ok) return FALSE;
|
||||
bool ok = step->deserialize(dp);
|
||||
if (!ok) return false;
|
||||
mSteps.push_back(step);
|
||||
break;
|
||||
}
|
||||
case STEP_SOUND:
|
||||
{
|
||||
LLGestureStepSound* step = new LLGestureStepSound();
|
||||
BOOL ok = step->deserialize(dp);
|
||||
if (!ok) return FALSE;
|
||||
bool ok = step->deserialize(dp);
|
||||
if (!ok) return false;
|
||||
mSteps.push_back(step);
|
||||
break;
|
||||
}
|
||||
case STEP_CHAT:
|
||||
{
|
||||
LLGestureStepChat* step = new LLGestureStepChat();
|
||||
BOOL ok = step->deserialize(dp);
|
||||
if (!ok) return FALSE;
|
||||
bool ok = step->deserialize(dp);
|
||||
if (!ok) return false;
|
||||
mSteps.push_back(step);
|
||||
break;
|
||||
}
|
||||
case STEP_WAIT:
|
||||
{
|
||||
LLGestureStepWait* step = new LLGestureStepWait();
|
||||
BOOL ok = step->deserialize(dp);
|
||||
if (!ok) return FALSE;
|
||||
bool ok = step->deserialize(dp);
|
||||
if (!ok) return false;
|
||||
mSteps.push_back(step);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LL_WARNS() << "Bad LLMultiGesture step type " << type << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLMultiGesture::dump()
|
||||
|
|
@ -255,15 +255,15 @@ S32 LLGestureStepAnimation::getMaxSerialSize() const
|
|||
return max_size;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepAnimation::serialize(LLDataPacker& dp) const
|
||||
bool LLGestureStepAnimation::serialize(LLDataPacker& dp) const
|
||||
{
|
||||
dp.packString(mAnimName, "anim_name");
|
||||
dp.packUUID(mAnimAssetID, "asset_id");
|
||||
dp.packU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepAnimation::deserialize(LLDataPacker& dp)
|
||||
bool LLGestureStepAnimation::deserialize(LLDataPacker& dp)
|
||||
{
|
||||
dp.unpackString(mAnimName, "anim_name");
|
||||
|
||||
|
|
@ -277,7 +277,7 @@ BOOL LLGestureStepAnimation::deserialize(LLDataPacker& dp)
|
|||
|
||||
dp.unpackUUID(mAnimAssetID, "asset_id");
|
||||
dp.unpackU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||
std::vector<std::string> LLGestureStepAnimation::getLabel() const
|
||||
|
|
@ -337,21 +337,21 @@ S32 LLGestureStepSound::getMaxSerialSize() const
|
|||
return max_size;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepSound::serialize(LLDataPacker& dp) const
|
||||
bool LLGestureStepSound::serialize(LLDataPacker& dp) const
|
||||
{
|
||||
dp.packString(mSoundName, "sound_name");
|
||||
dp.packUUID(mSoundAssetID, "asset_id");
|
||||
dp.packU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepSound::deserialize(LLDataPacker& dp)
|
||||
bool LLGestureStepSound::deserialize(LLDataPacker& dp)
|
||||
{
|
||||
dp.unpackString(mSoundName, "sound_name");
|
||||
|
||||
dp.unpackUUID(mSoundAssetID, "asset_id");
|
||||
dp.unpackU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||
std::vector<std::string> LLGestureStepSound::getLabel() const
|
||||
|
|
@ -397,19 +397,19 @@ S32 LLGestureStepChat::getMaxSerialSize() const
|
|||
return max_size;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepChat::serialize(LLDataPacker& dp) const
|
||||
bool LLGestureStepChat::serialize(LLDataPacker& dp) const
|
||||
{
|
||||
dp.packString(mChatText, "chat_text");
|
||||
dp.packU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepChat::deserialize(LLDataPacker& dp)
|
||||
bool LLGestureStepChat::deserialize(LLDataPacker& dp)
|
||||
{
|
||||
dp.unpackString(mChatText, "chat_text");
|
||||
|
||||
dp.unpackU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||
std::vector<std::string> LLGestureStepChat::getLabel() const
|
||||
|
|
@ -452,18 +452,18 @@ S32 LLGestureStepWait::getMaxSerialSize() const
|
|||
return max_size;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepWait::serialize(LLDataPacker& dp) const
|
||||
bool LLGestureStepWait::serialize(LLDataPacker& dp) const
|
||||
{
|
||||
dp.packF32(mWaitSeconds, "wait_seconds");
|
||||
dp.packU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL LLGestureStepWait::deserialize(LLDataPacker& dp)
|
||||
bool LLGestureStepWait::deserialize(LLDataPacker& dp)
|
||||
{
|
||||
dp.unpackF32(mWaitSeconds, "wait_seconds");
|
||||
dp.unpackU32(mFlags, "flags");
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
// *NOTE: result is translated in LLPreviewGesture::getLabel()
|
||||
std::vector<std::string> LLGestureStepWait::getLabel() const
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ public:
|
|||
// Maximum number of bytes this could hold once serialized.
|
||||
S32 getMaxSerialSize() const;
|
||||
|
||||
BOOL serialize(LLDataPacker& dp) const;
|
||||
BOOL deserialize(LLDataPacker& dp);
|
||||
bool serialize(LLDataPacker& dp) const;
|
||||
bool deserialize(LLDataPacker& dp);
|
||||
|
||||
void dump();
|
||||
|
||||
|
|
@ -75,28 +75,28 @@ public:
|
|||
std::vector<LLGestureStep*> mSteps;
|
||||
|
||||
// Is the gesture currently playing?
|
||||
BOOL mPlaying { FALSE };
|
||||
bool mPlaying { false };
|
||||
|
||||
// "instruction pointer" for steps
|
||||
S32 mCurrentStep { 0 };
|
||||
|
||||
// We're waiting for triggered animations to stop playing
|
||||
BOOL mWaitingAnimations { FALSE };
|
||||
bool mWaitingAnimations { false };
|
||||
|
||||
// We're waiting for key release
|
||||
BOOL mWaitingKeyRelease { FALSE };
|
||||
bool mWaitingKeyRelease { false };
|
||||
|
||||
// We're waiting a fixed amount of time
|
||||
BOOL mWaitingTimer { FALSE };
|
||||
bool mWaitingTimer { false };
|
||||
|
||||
// We're waiting for triggered animations to stop playing
|
||||
BOOL mTriggeredByKey { FALSE };
|
||||
bool mTriggeredByKey { false };
|
||||
|
||||
// Has the key been released?
|
||||
BOOL mKeyReleased { FALSE };
|
||||
bool mKeyReleased { false };
|
||||
|
||||
// Waiting after the last step played for all animations to complete
|
||||
BOOL mWaitingAtEnd { FALSE };
|
||||
bool mWaitingAtEnd { false };
|
||||
|
||||
// Timer for waiting
|
||||
LLFrameTimer mWaitTimer;
|
||||
|
|
@ -138,8 +138,8 @@ public:
|
|||
virtual std::vector<std::string> getLabel() const = 0;
|
||||
|
||||
virtual S32 getMaxSerialSize() const = 0;
|
||||
virtual BOOL serialize(LLDataPacker& dp) const = 0;
|
||||
virtual BOOL deserialize(LLDataPacker& dp) = 0;
|
||||
virtual bool serialize(LLDataPacker& dp) const = 0;
|
||||
virtual bool deserialize(LLDataPacker& dp) = 0;
|
||||
|
||||
virtual void dump() = 0;
|
||||
};
|
||||
|
|
@ -160,8 +160,8 @@ public:
|
|||
virtual std::vector<std::string> getLabel() const;
|
||||
|
||||
virtual S32 getMaxSerialSize() const;
|
||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||
virtual BOOL deserialize(LLDataPacker& dp);
|
||||
virtual bool serialize(LLDataPacker& dp) const;
|
||||
virtual bool deserialize(LLDataPacker& dp);
|
||||
|
||||
virtual void dump();
|
||||
|
||||
|
|
@ -183,8 +183,8 @@ public:
|
|||
virtual std::vector<std::string> getLabel() const;
|
||||
|
||||
virtual S32 getMaxSerialSize() const;
|
||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||
virtual BOOL deserialize(LLDataPacker& dp);
|
||||
virtual bool serialize(LLDataPacker& dp) const;
|
||||
virtual bool deserialize(LLDataPacker& dp);
|
||||
|
||||
virtual void dump();
|
||||
|
||||
|
|
@ -206,8 +206,8 @@ public:
|
|||
virtual std::vector<std::string> getLabel() const;
|
||||
|
||||
virtual S32 getMaxSerialSize() const;
|
||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||
virtual BOOL deserialize(LLDataPacker& dp);
|
||||
virtual bool serialize(LLDataPacker& dp) const;
|
||||
virtual bool deserialize(LLDataPacker& dp);
|
||||
|
||||
virtual void dump();
|
||||
|
||||
|
|
@ -232,8 +232,8 @@ public:
|
|||
virtual std::vector<std::string> getLabel() const;
|
||||
|
||||
virtual S32 getMaxSerialSize() const;
|
||||
virtual BOOL serialize(LLDataPacker& dp) const;
|
||||
virtual BOOL deserialize(LLDataPacker& dp);
|
||||
virtual bool serialize(LLDataPacker& dp) const;
|
||||
virtual bool deserialize(LLDataPacker& dp);
|
||||
|
||||
virtual void dump();
|
||||
|
||||
|
|
|
|||
|
|
@ -81,31 +81,31 @@ LLJointState *LLPose::getNextJointState()
|
|||
//-----------------------------------------------------------------------------
|
||||
// addJointState()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPose::addJointState(const LLPointer<LLJointState>& jointState)
|
||||
bool LLPose::addJointState(const LLPointer<LLJointState>& jointState)
|
||||
{
|
||||
if (mJointMap.find(jointState->getJoint()->getName()) == mJointMap.end())
|
||||
{
|
||||
mJointMap[jointState->getJoint()->getName()] = jointState;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// removeJointState()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPose::removeJointState(const LLPointer<LLJointState>& jointState)
|
||||
bool LLPose::removeJointState(const LLPointer<LLJointState>& jointState)
|
||||
{
|
||||
mJointMap.erase(jointState->getJoint()->getName());
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// removeAllJointStates()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPose::removeAllJointStates()
|
||||
bool LLPose::removeAllJointStates()
|
||||
{
|
||||
mJointMap.clear();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -181,7 +181,7 @@ LLJointStateBlender::LLJointStateBlender()
|
|||
{
|
||||
mJointStates[i] = NULL;
|
||||
mPriorities[i] = S32_MIN;
|
||||
mAdditiveBlends[i] = FALSE;
|
||||
mAdditiveBlends[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -193,13 +193,13 @@ LLJointStateBlender::~LLJointStateBlender()
|
|||
//-----------------------------------------------------------------------------
|
||||
// addJointState()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_state, S32 priority, BOOL additive_blend)
|
||||
bool LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_state, S32 priority, bool additive_blend)
|
||||
{
|
||||
llassert(joint_state);
|
||||
|
||||
if (!joint_state->getJoint())
|
||||
// this joint state doesn't point to an actual joint, so we don't care about applying it
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
for(S32 i = 0; i < JSB_NUM_JOINT_STATES; i++)
|
||||
{
|
||||
|
|
@ -208,7 +208,7 @@ BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_sta
|
|||
mJointStates[i] = joint_state;
|
||||
mPriorities[i] = priority;
|
||||
mAdditiveBlends[i] = additive_blend;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
else if (priority > mPriorities[i])
|
||||
{
|
||||
|
|
@ -225,17 +225,17 @@ BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_sta
|
|||
mJointStates[i] = joint_state;
|
||||
mPriorities[i] = priority;
|
||||
mAdditiveBlends[i] = additive_blend;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// blendJointStates()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLJointStateBlender::blendJointStates(BOOL apply_now)
|
||||
void LLJointStateBlender::blendJointStates(bool apply_now)
|
||||
{
|
||||
// we need at least one joint to blend
|
||||
// if there is one, it will be in slot zero according to insertion logic
|
||||
|
|
@ -468,7 +468,7 @@ LLPoseBlender::~LLPoseBlender()
|
|||
//-----------------------------------------------------------------------------
|
||||
// addMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLPoseBlender::addMotion(LLMotion* motion)
|
||||
bool LLPoseBlender::addMotion(LLMotion* motion)
|
||||
{
|
||||
LLPose* pose = motion->getPose();
|
||||
|
||||
|
|
@ -503,7 +503,7 @@ BOOL LLPoseBlender::addMotion(LLMotion* motion)
|
|||
mActiveBlenders.push_front(joint_blender);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -525,7 +525,7 @@ void LLPoseBlender::blendAndApply()
|
|||
//-----------------------------------------------------------------------------
|
||||
// blendAndCache()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLPoseBlender::blendAndCache(BOOL reset_cached_joints)
|
||||
void LLPoseBlender::blendAndCache(bool reset_cached_joints)
|
||||
{
|
||||
for (blender_list_t::iterator iter = mActiveBlenders.begin();
|
||||
iter != mActiveBlenders.end(); ++iter)
|
||||
|
|
@ -535,7 +535,7 @@ void LLPoseBlender::blendAndCache(BOOL reset_cached_joints)
|
|||
{
|
||||
jsbp->resetCachedJoint();
|
||||
}
|
||||
jsbp->blendJointStates(FALSE);
|
||||
jsbp->blendJointStates(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,11 +65,11 @@ public:
|
|||
// Destructor
|
||||
~LLPose();
|
||||
// add a joint state in this pose
|
||||
BOOL addJointState(const LLPointer<LLJointState>& jointState);
|
||||
bool addJointState(const LLPointer<LLJointState>& jointState);
|
||||
// remove a joint state from this pose
|
||||
BOOL removeJointState(const LLPointer<LLJointState>& jointState);
|
||||
bool removeJointState(const LLPointer<LLJointState>& jointState);
|
||||
// removes all joint states from this pose
|
||||
BOOL removeAllJointStates();
|
||||
bool removeAllJointStates();
|
||||
// set weight for all joint states in this pose
|
||||
void setWeight(F32 weight);
|
||||
// get weight for this pose
|
||||
|
|
@ -87,12 +87,12 @@ class LLJointStateBlender
|
|||
protected:
|
||||
LLPointer<LLJointState> mJointStates[JSB_NUM_JOINT_STATES];
|
||||
S32 mPriorities[JSB_NUM_JOINT_STATES];
|
||||
BOOL mAdditiveBlends[JSB_NUM_JOINT_STATES];
|
||||
bool mAdditiveBlends[JSB_NUM_JOINT_STATES];
|
||||
public:
|
||||
LLJointStateBlender();
|
||||
~LLJointStateBlender();
|
||||
void blendJointStates(BOOL apply_now = TRUE);
|
||||
BOOL addJointState(const LLPointer<LLJointState>& joint_state, S32 priority, BOOL additive_blend);
|
||||
void blendJointStates(bool apply_now = true);
|
||||
bool addJointState(const LLPointer<LLJointState>& joint_state, S32 priority, bool additive_blend);
|
||||
void interpolate(F32 u);
|
||||
void clear();
|
||||
void resetCachedJoint();
|
||||
|
|
@ -120,7 +120,7 @@ public:
|
|||
~LLPoseBlender();
|
||||
|
||||
// request motion joint states to be added to pose blender joint state records
|
||||
BOOL addMotion(LLMotion* motion);
|
||||
bool addMotion(LLMotion* motion);
|
||||
|
||||
// blend all joint states and apply to skeleton
|
||||
void blendAndApply();
|
||||
|
|
@ -129,7 +129,7 @@ public:
|
|||
void clearBlenders();
|
||||
|
||||
// blend all joint states and cache results
|
||||
void blendAndCache(BOOL reset_cached_joints);
|
||||
void blendAndCache(bool reset_cached_joints);
|
||||
|
||||
// interpolate all joints towards cached values
|
||||
void interpolate(F32 u);
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ bool operator!=(const LLUniqueID &a, const LLUniqueID &b)
|
|||
LLStateDiagram::LLStateDiagram()
|
||||
{
|
||||
mDefaultState = NULL;
|
||||
mUseDefaultState = FALSE;
|
||||
mUseDefaultState = false;
|
||||
}
|
||||
|
||||
LLStateDiagram::~LLStateDiagram()
|
||||
|
|
@ -58,14 +58,14 @@ LLStateDiagram::~LLStateDiagram()
|
|||
}
|
||||
|
||||
// add a state to the state graph
|
||||
BOOL LLStateDiagram::addState(LLFSMState *state)
|
||||
bool LLStateDiagram::addState(LLFSMState *state)
|
||||
{
|
||||
mStates[state] = Transitions();
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// add a directed transition between 2 states
|
||||
BOOL LLStateDiagram::addTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition)
|
||||
bool LLStateDiagram::addTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition)
|
||||
{
|
||||
StateMap::iterator state_it;
|
||||
state_it = mStates.find(&start_state);
|
||||
|
|
@ -89,17 +89,17 @@ BOOL LLStateDiagram::addTransition(LLFSMState& start_state, LLFSMState& end_stat
|
|||
if (transition_it != state_transitions->end())
|
||||
{
|
||||
LL_ERRS() << "LLStateTable::addDirectedTransition() : transition already exists" << LL_ENDL;
|
||||
return FALSE; // transition already exists
|
||||
return false; // transition already exists
|
||||
}
|
||||
|
||||
(*state_transitions)[&transition] = &end_state;
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
// add an undirected transition between 2 states
|
||||
BOOL LLStateDiagram::addUndirectedTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition)
|
||||
bool LLStateDiagram::addUndirectedTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition)
|
||||
{
|
||||
BOOL result;
|
||||
bool result;
|
||||
result = addTransition(start_state, end_state, transition);
|
||||
if (result)
|
||||
{
|
||||
|
|
@ -162,7 +162,7 @@ LLFSMState* LLStateDiagram::processTransition(LLFSMState& start_state, LLFSMTran
|
|||
|
||||
void LLStateDiagram::setDefaultState(LLFSMState& default_state)
|
||||
{
|
||||
mUseDefaultState = TRUE;
|
||||
mUseDefaultState = true;
|
||||
mDefaultState = &default_state;
|
||||
}
|
||||
|
||||
|
|
@ -179,13 +179,13 @@ S32 LLStateDiagram::numDeadendStates()
|
|||
return numDeadends;
|
||||
}
|
||||
|
||||
BOOL LLStateDiagram::stateIsValid(LLFSMState& state)
|
||||
bool LLStateDiagram::stateIsValid(LLFSMState& state)
|
||||
{
|
||||
if (mStates.find(&state) != mStates.end())
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLFSMState* LLStateDiagram::getState(U32 state_id)
|
||||
|
|
@ -200,7 +200,7 @@ LLFSMState* LLStateDiagram::getState(U32 state_id)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
BOOL LLStateDiagram::saveDotFile(const std::string& filename)
|
||||
bool LLStateDiagram::saveDotFile(const std::string& filename)
|
||||
{
|
||||
LLAPRFile outfile ;
|
||||
outfile.open(filename, LL_APR_W);
|
||||
|
|
@ -209,7 +209,7 @@ BOOL LLStateDiagram::saveDotFile(const std::string& filename)
|
|||
if (!dot_file)
|
||||
{
|
||||
LL_WARNS() << "LLStateDiagram::saveDotFile() : Couldn't open " << filename << " to save state diagram." << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
apr_file_printf(dot_file, "digraph StateMachine {\n\tsize=\"100,100\";\n\tfontsize=40;\n\tlabel=\"Finite State Machine\";\n\torientation=landscape\n\tratio=.77\n");
|
||||
|
||||
|
|
@ -248,7 +248,7 @@ BOOL LLStateDiagram::saveDotFile(const std::string& filename)
|
|||
|
||||
apr_file_printf(dot_file, "}\n");
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream &s, LLStateDiagram &FSM)
|
||||
|
|
@ -308,7 +308,7 @@ void LLStateMachine::runCurrentState(void *data)
|
|||
}
|
||||
|
||||
// set current state
|
||||
BOOL LLStateMachine::setCurrentState(LLFSMState *initial_state, void* user_data, BOOL skip_entry)
|
||||
bool LLStateMachine::setCurrentState(LLFSMState *initial_state, void* user_data, bool skip_entry)
|
||||
{
|
||||
llassert(mStateDiagram);
|
||||
|
||||
|
|
@ -319,13 +319,13 @@ BOOL LLStateMachine::setCurrentState(LLFSMState *initial_state, void* user_data,
|
|||
{
|
||||
initial_state->onEntry(user_data);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL LLStateMachine::setCurrentState(U32 state_id, void* user_data, BOOL skip_entry)
|
||||
bool LLStateMachine::setCurrentState(U32 state_id, void* user_data, bool skip_entry)
|
||||
{
|
||||
llassert(mStateDiagram);
|
||||
|
||||
|
|
@ -338,10 +338,10 @@ BOOL LLStateMachine::setCurrentState(U32 state_id, void* user_data, BOOL skip_en
|
|||
{
|
||||
state->onEntry(user_data);
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLStateMachine::processTransition(LLFSMTransition& transition, void* user_data)
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ protected:
|
|||
StateMap mStates;
|
||||
Transitions mDefaultTransitions;
|
||||
LLFSMState* mDefaultState;
|
||||
BOOL mUseDefaultState;
|
||||
bool mUseDefaultState;
|
||||
|
||||
public:
|
||||
LLStateDiagram();
|
||||
|
|
@ -82,13 +82,13 @@ public:
|
|||
|
||||
protected:
|
||||
// add a state to the state graph, executed implicitly when adding transitions
|
||||
BOOL addState(LLFSMState *state);
|
||||
bool addState(LLFSMState *state);
|
||||
|
||||
// add a directed transition between 2 states
|
||||
BOOL addTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition);
|
||||
bool addTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition);
|
||||
|
||||
// add an undirected transition between 2 states
|
||||
BOOL addUndirectedTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition);
|
||||
bool addUndirectedTransition(LLFSMState& start_state, LLFSMState& end_state, LLFSMTransition& transition);
|
||||
|
||||
// add a transition that is taken if none other exist
|
||||
void addDefaultTransition(LLFSMState& end_state, LLFSMTransition& transition);
|
||||
|
|
@ -103,14 +103,14 @@ protected:
|
|||
S32 numDeadendStates();
|
||||
|
||||
// does this state exist in the state diagram?
|
||||
BOOL stateIsValid(LLFSMState& state);
|
||||
bool stateIsValid(LLFSMState& state);
|
||||
|
||||
// get a state pointer by ID
|
||||
LLFSMState* getState(U32 state_id);
|
||||
|
||||
public:
|
||||
// save the graph in a DOT file for rendering and visualization
|
||||
BOOL saveDotFile(const std::string& filename);
|
||||
bool saveDotFile(const std::string& filename);
|
||||
};
|
||||
|
||||
class LLStateMachine
|
||||
|
|
@ -138,10 +138,10 @@ public:
|
|||
void runCurrentState(void *data);
|
||||
|
||||
// set state by state pointer
|
||||
BOOL setCurrentState(LLFSMState *initial_state, void* user_data, BOOL skip_entry = TRUE);
|
||||
bool setCurrentState(LLFSMState *initial_state, void* user_data, bool skip_entry = true);
|
||||
|
||||
// set state by unique ID
|
||||
BOOL setCurrentState(U32 state_id, void* user_data, BOOL skip_entry = TRUE);
|
||||
bool setCurrentState(U32 state_id, void* user_data, bool skip_entry = true);
|
||||
};
|
||||
|
||||
#endif //_LL_LLSTATEMACHINE_H
|
||||
|
|
|
|||
|
|
@ -93,15 +93,15 @@ LLMotion::LLMotionInitStatus LLTargetingMotion::onInitialize(LLCharacter *charac
|
|||
//-----------------------------------------------------------------------------
|
||||
// LLTargetingMotion::onActivate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLTargetingMotion::onActivate()
|
||||
bool LLTargetingMotion::onActivate()
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTargetingMotion::onUpdate()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLTargetingMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
bool LLTargetingMotion::onUpdate(F32 time, U8* joint_mask)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
F32 slerp_amt = LLSmoothInterpolation::getInterpolant(TORSO_TARGET_HALF_LIFE);
|
||||
|
|
@ -109,11 +109,11 @@ BOOL LLTargetingMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
LLVector3 target;
|
||||
LLVector3* lookAtPoint = (LLVector3*)mCharacter->getAnimationData("LookAtPoint");
|
||||
|
||||
BOOL result = TRUE;
|
||||
bool result = true;
|
||||
|
||||
if (!lookAtPoint)
|
||||
{
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public:
|
|||
//-------------------------------------------------------------------------
|
||||
|
||||
// motions must specify whether or not they loop
|
||||
virtual BOOL getLoop() { return TRUE; }
|
||||
virtual bool getLoop() { return true; }
|
||||
|
||||
// motions must report their total duration
|
||||
virtual F32 getDuration() { return 0.0; }
|
||||
|
|
@ -91,14 +91,14 @@ public:
|
|||
virtual LLMotionInitStatus onInitialize(LLCharacter *character);
|
||||
|
||||
// called when a motion is activated
|
||||
// must return TRUE to indicate success, or else
|
||||
// must return true to indicate success, or else
|
||||
// it will be deactivated
|
||||
virtual BOOL onActivate();
|
||||
virtual bool onActivate();
|
||||
|
||||
// called per time step
|
||||
// must return TRUE while it is active, and
|
||||
// must return FALSE when the motion is completed.
|
||||
virtual BOOL onUpdate(F32 time, U8* joint_mask);
|
||||
// must return true while it is active, and
|
||||
// must return true when the motion is completed.
|
||||
virtual bool onUpdate(F32 time, U8* joint_mask);
|
||||
|
||||
// called when a motion is deactivated
|
||||
virtual void onDeactivate();
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ LLVisualParamInfo::LLVisualParamInfo()
|
|||
//-----------------------------------------------------------------------------
|
||||
// parseXml()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
||||
bool LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
||||
{
|
||||
// attribute: id
|
||||
static LLStdStringHandle id_string = LLXmlTree::addAttributeString("id");
|
||||
|
|
@ -102,7 +102,7 @@ BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
|||
else
|
||||
{
|
||||
LL_WARNS() << "Avatar file: <param> has invalid sex attribute: " << sex << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// attribute: name
|
||||
|
|
@ -110,7 +110,7 @@ BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
|||
if( !node->getFastAttributeString( name_string, mName ) )
|
||||
{
|
||||
LL_WARNS() << "Avatar file: <param> is missing name attribute" << LL_ENDL;
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// attribute: label
|
||||
|
|
@ -138,7 +138,7 @@ BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
|
|||
mMaxName = "More";
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -164,8 +164,8 @@ LLVisualParam::LLVisualParam()
|
|||
mLastWeight( 0.f ),
|
||||
mNext( NULL ),
|
||||
mTargetWeight( 0.f ),
|
||||
mIsAnimating( FALSE ),
|
||||
mIsDummy(FALSE),
|
||||
mIsAnimating( false ),
|
||||
mIsDummy(false),
|
||||
mID( -1 ),
|
||||
mInfo( 0 ),
|
||||
mParamLocation(LOC_UNKNOWN)
|
||||
|
|
@ -207,29 +207,29 @@ LLVisualParam::~LLVisualParam()
|
|||
// setInfo()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
BOOL LLVisualParam::setInfo(LLVisualParamInfo *info)
|
||||
bool LLVisualParam::setInfo(LLVisualParamInfo *info)
|
||||
{
|
||||
llassert(mInfo == NULL);
|
||||
if (info->mID < 0)
|
||||
return FALSE;
|
||||
return false;
|
||||
mInfo = info;
|
||||
mID = info->mID;
|
||||
setWeight(getDefaultWeight(), FALSE );
|
||||
return TRUE;
|
||||
setWeight(getDefaultWeight(), false );
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// parseData()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL LLVisualParam::parseData(LLXmlTreeNode *node)
|
||||
bool LLVisualParam::parseData(LLXmlTreeNode *node)
|
||||
{
|
||||
LLVisualParamInfo *info = new LLVisualParamInfo;
|
||||
|
||||
info->parseXml(node);
|
||||
if (!setInfo(info))
|
||||
return FALSE;
|
||||
return false;
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
|
|
@ -282,7 +282,7 @@ void LLVisualParam::setAnimationTarget(F32 target_value)
|
|||
{
|
||||
mTargetWeight = target_value;
|
||||
}
|
||||
mIsAnimating = TRUE;
|
||||
mIsAnimating = true;
|
||||
|
||||
if (mNext)
|
||||
{
|
||||
|
|
@ -327,16 +327,16 @@ void LLVisualParam::stopAnimating()
|
|||
{
|
||||
if (mIsAnimating && isTweakable())
|
||||
{
|
||||
mIsAnimating = FALSE;
|
||||
mIsAnimating = false;
|
||||
setWeight(mTargetWeight);
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLVisualParam::linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params)
|
||||
bool LLVisualParam::linkDrivenParams(visual_param_mapper mapper, bool only_cross_params)
|
||||
{
|
||||
// nothing to do for non-driver parameters
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue