Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
8d7d75d1a8
114
autobuild.xml
114
autobuild.xml
|
|
@ -235,6 +235,72 @@
|
|||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>glod</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2003 Jonathan Cohen, Nat Duca, David Luebke, Brenden Schubert - Johns Hopkins University and University of Virginia</string>
|
||||
<key>license</key>
|
||||
<string>GLOD Open-Source License Version 1.0</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/GLOD.txt</string>
|
||||
<key>name</key>
|
||||
<string>glod</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>94fc457c46e1fb94b31251bd4747d10f</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/glod-1.0pre3.171101143-darwin64-171101143.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>acc1181cd31ef32c3724eda84ae4b580</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/glod-1.0pre3.180990827-linux64-180990827.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e1f8da12a2b7a6c31830b4bb86d31ed6</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows-vs2017-1906061512.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e906cf08bfbfbd9d4fc78557e021e7d0</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/glod-1.0pre3.vs2017-1906061512-windows64-vs2017-1906061512.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.0pre3.532346</string>
|
||||
</map>
|
||||
<key>gntp-growl</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
|
|
@ -552,9 +618,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>401f317fbb67623c97a7b9d8b6627ef1</string>
|
||||
<string>8d96a9d1a9a208b1f48ac677edb7ca4d</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/boost-1.72-linux64_bionic-220402045.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/boost-1.72-linux64-222121224.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -670,9 +736,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>88ee58d6548deae6c306f125b6461d61</string>
|
||||
<string>e1a8e9eca2894687b3532474ffc9b326</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/colladadom-2.3.220402056-linux64_bionic-220402056.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/colladadom-2.3.222130404-linux64-222130404.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -800,9 +866,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0bcccd248a5e4084af4026eee439816b</string>
|
||||
<string>bacaa5403be0f1cba52b2250c2c227d9</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/curl-7.81.0.220511906-linux64_bionic-220511906.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/curl-7.81.0.222121724-linux64-222121724.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -1934,9 +2000,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0bc56fa68f59537486c75b04646d65a9</string>
|
||||
<string>c68bbfe6c9bd59d182c4d20d966492b4</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/libxml2-2.9.4.180841555-linux64-180841555.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/libxml2-2.9.4.222130358-linux64-222130358.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -2252,6 +2318,18 @@
|
|||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>50d647afc4e510af72f09dcd7a77e920</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/meshoptimizer-0.16.222121104-linux64-222121104.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -2308,6 +2386,18 @@
|
|||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ee4e3a02ad4669a4d84e9c32e509530e</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/minizip_ng-3.0.2.222121607-linux64-222121607.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -2696,9 +2786,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ea82e634334bccf088daf3d15eab07b7</string>
|
||||
<string>cdd9c6c484542a2e1be99149c4f0e75f</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/openssl-1.1.1l.212872015-linux64-212872015.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/openssl-1.1.1l.222121440-linux64-222121440.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -3296,9 +3386,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>15a645809cb2f14074f22e7848bb42cf</string>
|
||||
<string>5ee7cda65cede06190c811e59b3880b0</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/zlib-1.2.8.180841547-linux64-180841547.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/zlib_ng-2.0.5.222121000-linux64-222121000.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ if (LINUX)
|
|||
include(LLAppearanceUtility)
|
||||
add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
|
||||
endif (INSTALL_PROPRIETARY)
|
||||
add_dependencies(viewer linux-crash-logger-strip-target)
|
||||
# add_dependencies(viewer linux-crash-logger-strip-target)
|
||||
elseif (WINDOWS)
|
||||
# cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
|
||||
if (EXISTS ${VIEWER_DIR}win_setup)
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ set(cmake_SOURCE_FILES
|
|||
FreeType.cmake
|
||||
GLEXT.cmake
|
||||
GLH.cmake
|
||||
GLOD.cmake
|
||||
## GStreamer010Plugin.cmake
|
||||
GoogleMock.cmake
|
||||
Growl.cmake
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ if(WINDOWS)
|
|||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
nghttp2.dll
|
||||
glod.dll # <FS:Beq> restore GLOD
|
||||
libhunspell.dll
|
||||
uriparser.dll
|
||||
)
|
||||
|
|
@ -198,6 +199,7 @@ elseif(DARWIN)
|
|||
libaprutil-1.0.dylib
|
||||
libaprutil-1.dylib
|
||||
${EXPAT_COPY}
|
||||
libGLOD.dylib # <FS:Beq> restore GLOD
|
||||
libhunspell-1.3.0.dylib
|
||||
libndofdev.dylib
|
||||
libnghttp2.dylib
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
# -*- cmake -*-
|
||||
|
||||
#if (USESYSTEMLIBS)
|
||||
# set(GLOD_FIND_REQUIRED true)
|
||||
# include(FindGLOD)
|
||||
#else (USESYSTEMLIBS)
|
||||
include(Prebuilt)
|
||||
use_prebuilt_binary(glod)
|
||||
set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
|
||||
if(LINUX)
|
||||
set(GLOD_LIBRARIES GLOD vds)
|
||||
else()
|
||||
set(GLOD_LIBRARIES GLOD)
|
||||
endif()
|
||||
#endif (USESYSTEMLIBS)
|
||||
|
|
@ -8,7 +8,7 @@ use_prebuilt_binary(meshoptimizer)
|
|||
if (WINDOWS)
|
||||
set(MESHOPTIMIZER_LIBRARIES meshoptimizer.lib)
|
||||
elseif (LINUX)
|
||||
set(MESHOPTIMIZER_LIBRARIES meshoptimizer.o)
|
||||
set(MESHOPTIMIZER_LIBRARIES libmeshoptimizer.a)
|
||||
elseif (DARWIN)
|
||||
set(MESHOPTIMIZER_LIBRARIES libmeshoptimizer.a)
|
||||
endif (WINDOWS)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ include(Linking)
|
|||
include(UI)
|
||||
include(CURL)
|
||||
include(OpenSSL)
|
||||
include(ZLIB)
|
||||
include(ZLIBNG)
|
||||
|
||||
include_directories(
|
||||
${LLCOREHTTP_INCLUDE_DIRS}
|
||||
|
|
@ -54,12 +54,12 @@ set(LIBRT_LIBRARY rt)
|
|||
|
||||
target_link_libraries(linux-crash-logger
|
||||
${UI_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${OPENSSL_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${OPENSSL_LIBRARIES}
|
||||
${CRYPTO_LIBRARIES}
|
||||
${ZLIBNG_LIBRARIES}
|
||||
${LIBRT_LIBRARY}
|
||||
X11
|
||||
X11
|
||||
)
|
||||
|
||||
add_custom_target(linux-crash-logger-target ALL
|
||||
|
|
|
|||
|
|
@ -452,7 +452,9 @@ ElementT LLThreadSafeQueue<ElementT, QueueT>::pop(void)
|
|||
// so we can finish draining the queue.
|
||||
pop_result popped = pop_(lock1, value);
|
||||
if (popped == POPPED)
|
||||
return std::move(value);
|
||||
// <FS:Ansariel> Prevent RVO elision
|
||||
//return std::move(value);
|
||||
return value;
|
||||
|
||||
// Once the queue is DONE, there will never be any more coming.
|
||||
if (popped == DONE)
|
||||
|
|
|
|||
|
|
@ -248,7 +248,9 @@ namespace LL
|
|||
TimePoint until = TimePoint::clock::now() + std::chrono::hours(24);
|
||||
pop_result popped = tryPopUntil_(lock, until, tt);
|
||||
if (popped == POPPED)
|
||||
return std::move(tt);
|
||||
// <FS:Ansariel> Prevent RVO elision
|
||||
//return std::move(tt);
|
||||
return tt;
|
||||
|
||||
// DONE: throw, just as super::pop() does
|
||||
if (popped == DONE)
|
||||
|
|
|
|||
|
|
@ -2434,6 +2434,16 @@ LLImageGLThread::LLImageGLThread(LLWindow* window)
|
|||
mFinished = false;
|
||||
|
||||
mContext = mWindow->createSharedContext();
|
||||
|
||||
// <FS:ND> If context creating is not supported (SDL1), mark texture thread disabled and exit
|
||||
if( !mContext )
|
||||
{
|
||||
sEnabled = false;
|
||||
mFinished = true;
|
||||
return;
|
||||
}
|
||||
// </FS:ND>
|
||||
|
||||
ThreadPool::start();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ LLKeyboardSDL::LLKeyboardSDL()
|
|||
mTranslateKeyMap[SDLK_LCTRL] = KEY_CONTROL;
|
||||
mTranslateKeyMap[SDLK_RCTRL] = KEY_CONTROL;
|
||||
mTranslateKeyMap[SDLK_LALT] = KEY_ALT;
|
||||
mTranslateKeyMap[SDLK_RALT] = KEY_ALT;
|
||||
// mTranslateKeyMap[SDLK_RALT] = KEY_ALT;
|
||||
mTranslateKeyMap[SDLK_HOME] = KEY_HOME;
|
||||
mTranslateKeyMap[SDLK_END] = KEY_END;
|
||||
mTranslateKeyMap[SDLK_PAGEUP] = KEY_PAGE_UP;
|
||||
|
|
@ -148,7 +148,7 @@ void LLKeyboardSDL::resetMaskKeys()
|
|||
mKeyLevel[KEY_CONTROL] = TRUE;
|
||||
}
|
||||
|
||||
if(mask & KMOD_ALT)
|
||||
if(mask & KMOD_LALT)
|
||||
{
|
||||
mKeyLevel[KEY_ALT] = TRUE;
|
||||
}
|
||||
|
|
@ -170,7 +170,7 @@ MASK LLKeyboardSDL::updateModifiers(const U32 mask)
|
|||
out_mask |= MASK_CONTROL;
|
||||
}
|
||||
|
||||
if(mask & KMOD_ALT)
|
||||
if(mask & KMOD_LALT)
|
||||
{
|
||||
out_mask |= MASK_ALT;
|
||||
}
|
||||
|
|
@ -252,7 +252,7 @@ MASK LLKeyboardSDL::currentMask(BOOL for_mouse_event)
|
|||
result |= MASK_SHIFT;
|
||||
if (mask & KMOD_CTRL)
|
||||
result |= MASK_CONTROL;
|
||||
if (mask & KMOD_ALT)
|
||||
if (mask & KMOD_LALT)
|
||||
result |= MASK_ALT;
|
||||
|
||||
// For keyboard events, consider Meta keys equivalent to Control
|
||||
|
|
|
|||
|
|
@ -3024,8 +3024,6 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
|
|||
return rtns;
|
||||
}
|
||||
|
||||
#pragma GCC error "Unimplemented. Either disable threaded texture decoding, implent those methods or switch to SDL2."
|
||||
|
||||
void* LLWindowSDL::createSharedContext()
|
||||
{
|
||||
LL_WARNS() << "Not available" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -652,6 +652,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
|
|||
mReallyCapturedCount = 0;
|
||||
|
||||
SDL_SetHint( SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0" );
|
||||
SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 )
|
||||
{
|
||||
|
|
@ -868,6 +869,10 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
|
|||
}
|
||||
#endif // LL_X11
|
||||
|
||||
// clear screen to black right at the start so it doesn't look like a crash
|
||||
glClearColor(0.0f, 0.0f, 0.0f ,1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
SDL_GL_SwapWindow(mWindow);
|
||||
|
||||
SDL_StartTextInput();
|
||||
//make sure multisampling is disabled by default
|
||||
|
|
@ -1778,11 +1783,7 @@ void LLWindowSDL::gatherInput()
|
|||
for( auto key: string )
|
||||
{
|
||||
mKeyVirtualKey = key;
|
||||
|
||||
if( (MASK_CONTROL|MASK_ALT)&mKeyModifiers )
|
||||
gKeyboard->handleKeyDown(mKeyVirtualKey, mKeyModifiers );
|
||||
else
|
||||
handleUnicodeUTF16( key, mKeyModifiers );
|
||||
handleUnicodeUTF16( key, mKeyModifiers );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1792,13 +1793,23 @@ void LLWindowSDL::gatherInput()
|
|||
mKeyModifiers = event.key.keysym.mod;
|
||||
mInputType = "keydown";
|
||||
|
||||
// treat all possible Enter/Return keys the same
|
||||
if (mKeyVirtualKey == SDLK_RETURN2 || mKeyVirtualKey == SDLK_KP_ENTER)
|
||||
{
|
||||
mKeyVirtualKey = SDLK_RETURN;
|
||||
}
|
||||
|
||||
gKeyboard->handleKeyDown(mKeyVirtualKey, mKeyModifiers );
|
||||
|
||||
// <FS:ND> Slightly hacky :| To make the viewer honor enter (eg to accept form input) we've to not only send handleKeyDown but also send a
|
||||
// invoke handleUnicodeUTF16 in case the user hits return.
|
||||
// Note that we cannot blindly use handleUnicodeUTF16 for each SDL_KEYDOWN. Doing so will create bogus keyboard input (like % for cursor left).
|
||||
if( mKeyVirtualKey == SDLK_RETURN )
|
||||
{
|
||||
// fix return key not working when capslock, scrolllock or numlock are enabled
|
||||
mKeyModifiers &= (~(KMOD_NUM | KMOD_CAPS | KMOD_MODE | KMOD_SCROLL));
|
||||
handleUnicodeUTF16( mKeyVirtualKey, mKeyModifiers );
|
||||
}
|
||||
|
||||
// part of the fix for SL-13243
|
||||
if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0)
|
||||
|
|
@ -1811,6 +1822,12 @@ void LLWindowSDL::gatherInput()
|
|||
mKeyModifiers = event.key.keysym.mod;
|
||||
mInputType = "keyup";
|
||||
|
||||
// treat all possible Enter/Return keys the same
|
||||
if (mKeyVirtualKey == SDLK_RETURN2 || mKeyVirtualKey == SDLK_KP_ENTER)
|
||||
{
|
||||
mKeyVirtualKey = SDLK_RETURN;
|
||||
}
|
||||
|
||||
if (SDLCheckGrabbyKeys(mKeyVirtualKey, FALSE) == 0)
|
||||
SDLReallyCaptureInput(FALSE); // part of the fix for SL-13243
|
||||
|
||||
|
|
@ -1914,7 +1931,7 @@ void LLWindowSDL::gatherInput()
|
|||
// <FS:ND> I think is is not
|
||||
// SDL_SetWindowSize(mWindow, width, height);
|
||||
//
|
||||
|
||||
|
||||
mCallbacks->handleResize(this, width, height);
|
||||
}
|
||||
else if( event.window.event == SDL_WINDOWEVENT_FOCUS_GAINED ) // <FS:ND> What about SDL_WINDOWEVENT_ENTER (mouse focus)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ include(GLIB)
|
|||
include(DragDrop)
|
||||
include(EXPAT)
|
||||
include(FMODSTUDIO)
|
||||
include(GLOD) # <FS:Beq/> restore GLOD
|
||||
include(Hunspell)
|
||||
include(JPEGEncoderBasic)
|
||||
include(JsonCpp)
|
||||
|
|
@ -83,6 +84,7 @@ endif(FMODSTUDIO)
|
|||
include_directories(
|
||||
${DBUSGLIB_INCLUDE_DIRS}
|
||||
${JSONCPP_INCLUDE_DIR}
|
||||
${GLOD_INCLUDE_DIR} # <FS:Beq/> restore GLOD
|
||||
${LLAUDIO_INCLUDE_DIRS}
|
||||
${LLCHARACTER_INCLUDE_DIRS}
|
||||
${LLCOMMON_INCLUDE_DIRS}
|
||||
|
|
@ -2266,6 +2268,11 @@ if (WINDOWS)
|
|||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libapr-1.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libaprutil-1.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/libapriconv-1.dll
|
||||
# <FS:Beq> Restore GLOD build dependencies
|
||||
${SHARED_LIB_STAGING_DIR}/Release/glod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/glod.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/glod.dll
|
||||
# </FS:Beq>
|
||||
${SHARED_LIB_STAGING_DIR}/Release/libcollada14dom22.dll
|
||||
${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/libcollada14dom22.dll
|
||||
${SHARED_LIB_STAGING_DIR}/Debug/libcollada14dom22-d.dll
|
||||
|
|
@ -2515,6 +2522,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
|
|||
${OPENGL_LIBRARIES}
|
||||
${FMODWRAPPER_LIBRARY} # must come after LLAudio
|
||||
${OPENAL_LIBRARIES}
|
||||
${GLOD_LIBRARIES} # <FS:Beq/> restore GLOD dependencies
|
||||
${OPENGL_LIBRARIES}
|
||||
${JSONCPP_LIBRARIES}
|
||||
${SDL_LIBRARY}
|
||||
|
|
|
|||
|
|
@ -6,160 +6,159 @@
|
|||
// Global variables and CONSTANTS
|
||||
//
|
||||
|
||||
// Bridge platform
|
||||
string BRIDGE_VERSION = "2.28"; // This should match fslslbridge.cpp
|
||||
string gLatestURL;
|
||||
integer gViewerIsFirestorm;
|
||||
integer gTryHandshakeOnce = TRUE;
|
||||
key gOwner;
|
||||
// Bridge platform
|
||||
string BRIDGE_VERSION = "2.29"; // This should match fslslbridge.cpp
|
||||
string gLatestURL;
|
||||
integer gViewerIsFirestorm;
|
||||
integer gTryHandshakeOnce = TRUE;
|
||||
key gOwner;
|
||||
|
||||
// Teleport
|
||||
float TP_TARGET_DISTANCE = 1.0; // Distance to target when move to target should stop
|
||||
integer MAX_TIME_TO_TP = 10; // (seconds) Should be set to 10 for normal use
|
||||
float TP_TIMER_TICK = 0.05;
|
||||
vector gMttVector; // Target for llMoveToTarget() teleport
|
||||
integer gStartTPTimer;
|
||||
// Teleport
|
||||
float TP_TARGET_DISTANCE = 1.0; // Distance to target when move to target should stop
|
||||
integer MAX_TIME_TO_TP = 10; // (seconds) Should be set to 10 for normal use
|
||||
float TP_TIMER_TICK = 0.05;
|
||||
vector gMttVector; // Target for llMoveToTarget() teleport
|
||||
integer gStartTPTimer;
|
||||
|
||||
// Movelock
|
||||
integer gUseMoveLock;
|
||||
integer gRelockMoveLockAfterMovement;
|
||||
integer gRelockIsUserMoving;
|
||||
// Movelock
|
||||
integer gUseMoveLock;
|
||||
integer gRelockMoveLockAfterMovement;
|
||||
integer gRelockIsUserMoving;
|
||||
|
||||
// Flight assist
|
||||
integer gIsFlyingNow;
|
||||
float FLIGHT_CHECK_NORMAL = 0.5;
|
||||
float FLIGHT_CHECK_SLOW = 3.0;
|
||||
float gFlightAssistPushForce;
|
||||
// Flight assist
|
||||
integer gIsFlyingNow;
|
||||
float FLIGHT_CHECK_NORMAL = 0.5;
|
||||
float FLIGHT_CHECK_SLOW = 3.0;
|
||||
float gFlightAssistPushForce;
|
||||
|
||||
// OpenCollar/LockMeister AO interface
|
||||
integer gAO_EnabledOC;
|
||||
integer gAO_EnabledLM;
|
||||
integer gAO_ChannelOC;
|
||||
integer AO_CHANNEL_LM = -8888;
|
||||
integer gAO_ListenerOC;
|
||||
integer gAO_ListenerLM;
|
||||
key gAO_CollarKey;
|
||||
// OpenCollar/LockMeister AO interface
|
||||
integer gAO_EnabledOC;
|
||||
integer gAO_EnabledLM;
|
||||
integer gAO_ChannelOC;
|
||||
integer AO_CHANNEL_LM = -8888;
|
||||
integer gAO_ListenerOC;
|
||||
integer gAO_ListenerLM;
|
||||
key gAO_CollarKey;
|
||||
|
||||
//
|
||||
// Bridge platform helper functions
|
||||
//
|
||||
|
||||
requestBridgeURL()
|
||||
{
|
||||
llReleaseURL(gLatestURL);
|
||||
gLatestURL = "";
|
||||
llRequestSecureURL();
|
||||
// llRequestURL(); -- Uncomment this line and comment the previous one for HTTP instead of HTTPS
|
||||
}
|
||||
requestBridgeURL()
|
||||
{
|
||||
llReleaseURL(gLatestURL);
|
||||
gLatestURL = "";
|
||||
llRequestSecureURL();
|
||||
}
|
||||
|
||||
detachBridge()
|
||||
{
|
||||
llReleaseURL(gLatestURL);
|
||||
llRequestPermissions(gOwner, PERMISSION_ATTACH);
|
||||
}
|
||||
detachBridge()
|
||||
{
|
||||
llReleaseURL(gLatestURL);
|
||||
llRequestPermissions(gOwner, PERMISSION_ATTACH);
|
||||
}
|
||||
|
||||
//
|
||||
// OpenCollar/LockMeister AO interface functions
|
||||
//
|
||||
|
||||
aoListenOC(key collarid, integer enabled)
|
||||
aoListenOC(key collarid, integer enabled)
|
||||
{
|
||||
llListenRemove(gAO_ListenerOC);
|
||||
if (enabled)
|
||||
{
|
||||
llListenRemove(gAO_ListenerOC);
|
||||
if (enabled)
|
||||
{
|
||||
gAO_ListenerOC = llListen(gAO_ChannelOC, "", collarid, "");
|
||||
gAO_CollarKey = collarid;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAO_CollarKey = NULL_KEY;
|
||||
}
|
||||
gAO_ListenerOC = llListen(gAO_ChannelOC, "", collarid, "");
|
||||
gAO_CollarKey = collarid;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAO_CollarKey = NULL_KEY;
|
||||
}
|
||||
}
|
||||
|
||||
aoState(string newstate)
|
||||
{
|
||||
llOwnerSay("<clientAO state="+newstate+">");
|
||||
}
|
||||
aoState(string newstate)
|
||||
{
|
||||
llOwnerSay("<clientAO state="+newstate+">");
|
||||
}
|
||||
|
||||
integrationCheckOC()
|
||||
integrationCheckOC()
|
||||
{
|
||||
if (gAO_EnabledOC)
|
||||
{
|
||||
if (gAO_EnabledOC)
|
||||
if (gAO_ChannelOC != PUBLIC_CHANNEL)
|
||||
{
|
||||
if (gAO_ChannelOC != PUBLIC_CHANNEL)
|
||||
{
|
||||
aoListenOC(NULL_KEY, TRUE);
|
||||
llWhisper(gAO_ChannelOC, "OpenCollar?");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
aoListenOC(NULL_KEY, FALSE);
|
||||
aoListenOC(NULL_KEY, TRUE);
|
||||
llWhisper(gAO_ChannelOC, "OpenCollar?");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
aoListenOC(NULL_KEY, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
integrationCheckLM()
|
||||
integrationCheckLM()
|
||||
{
|
||||
if (gAO_EnabledLM)
|
||||
{
|
||||
if (gAO_EnabledLM)
|
||||
{
|
||||
gAO_ListenerLM = llListen(AO_CHANNEL_LM, "", NULL_KEY, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
llListenRemove(gAO_ListenerLM);
|
||||
}
|
||||
gAO_ListenerLM = llListen(AO_CHANNEL_LM, "", NULL_KEY, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
llListenRemove(gAO_ListenerLM);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Teleport Helper functions
|
||||
//
|
||||
|
||||
setTimerEvent2(float time)
|
||||
setTimerEvent2(float time)
|
||||
{
|
||||
if (time <= 0)
|
||||
{
|
||||
if (time <= 0)
|
||||
{
|
||||
llSensorRemove();
|
||||
}
|
||||
else
|
||||
{
|
||||
llSensorRepeat("set-Timer-Event-2", NULL_KEY, AGENT_BY_LEGACY_NAME, 0.001, 0.001, time);
|
||||
}
|
||||
llSensorRemove();
|
||||
}
|
||||
else
|
||||
{
|
||||
llSensorRepeat("set-Timer-Event-2", NULL_KEY, AGENT_BY_LEGACY_NAME, 0.001, 0.001, time);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Flight Assist
|
||||
//
|
||||
|
||||
flightHover(integer yes)
|
||||
flightHover(integer yes)
|
||||
{
|
||||
if (yes)
|
||||
{
|
||||
if (yes)
|
||||
{
|
||||
llSetForce((<0.0, 0.0, 9.8> * llGetMass()), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
llSetForce(ZERO_VECTOR, 1);
|
||||
}
|
||||
llSetForce((<0.0, 0.0, 9.8> * llGetMass()), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
llSetForce(ZERO_VECTOR, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Movelock
|
||||
//
|
||||
|
||||
movelockMe(integer lock)
|
||||
movelockMe(integer lock)
|
||||
{
|
||||
if (lock)
|
||||
{
|
||||
if (lock)
|
||||
{
|
||||
llMoveToTarget(llGetPos() - <0, 0, 0.1>, 0.05);
|
||||
llSetVehicleType(VEHICLE_TYPE_SLED);
|
||||
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 0.05);
|
||||
llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.05);
|
||||
}
|
||||
else
|
||||
{
|
||||
llStopMoveToTarget();
|
||||
llSetVehicleType(VEHICLE_TYPE_NONE);
|
||||
}
|
||||
llMoveToTarget(llGetPos() - <0, 0, 0.1>, 0.05);
|
||||
llSetVehicleType(VEHICLE_TYPE_SLED);
|
||||
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 0.05);
|
||||
llSetVehicleFloatParam(VEHICLE_ANGULAR_FRICTION_TIMESCALE, 0.05);
|
||||
}
|
||||
else
|
||||
{
|
||||
llStopMoveToTarget();
|
||||
llSetVehicleType(VEHICLE_TYPE_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// MAIN
|
||||
|
|
@ -365,8 +364,6 @@ default
|
|||
vector targ = gMttVector - loc;
|
||||
float dist = llVecMag(targ);
|
||||
|
||||
// llOwnerSay("current: " + (string)loc + " target: " + (string)targ + " tp distance: " + (string)dist);
|
||||
|
||||
// If we are out of time or distance - stop
|
||||
if (dist < TP_TARGET_DISTANCE || llGetUnixTime() - MAX_TIME_TO_TP > gStartTPTimer || gMttVector == loc)
|
||||
{
|
||||
|
|
@ -391,7 +388,6 @@ default
|
|||
|
||||
http_request(key httpReqID, string Method, string Body)
|
||||
{
|
||||
// llOwnerSay("Received HTTP " + Method + " message. Command body: " + Body);
|
||||
if (Method == URL_REQUEST_GRANTED)
|
||||
{
|
||||
gLatestURL = Body;
|
||||
|
|
@ -429,11 +425,10 @@ default
|
|||
// Radar-specific command to get high-rez altitude data.
|
||||
// Input is list of UUIDs to query, output is list of UUID:Altitude pairs.
|
||||
|
||||
// Get parameters
|
||||
list tUUIDs = llCSV2List(llList2String(commandList, 1));
|
||||
commandList = []; // Free memory
|
||||
integer tLength = llGetListLength(tUUIDs);
|
||||
key tUUID; // Key for llGetobjectDetails()
|
||||
key tUUID;
|
||||
vector tPos;
|
||||
integer i = 0;
|
||||
list responses;
|
||||
|
|
@ -507,9 +502,9 @@ default
|
|||
if (extended)
|
||||
{
|
||||
currentPosition = llGetPos();
|
||||
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED]));
|
||||
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_REZ_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED]));
|
||||
details = details + [currentPosition, targetkey];
|
||||
elements = 26;
|
||||
elements = 27;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -522,7 +517,7 @@ default
|
|||
list returnedList = [llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0];
|
||||
if (extended)
|
||||
{
|
||||
returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2Integer(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llStringToBase64(llList2String(details, 24)), llList2Key(details, 25)];
|
||||
returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2String(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llList2Integer(details, 24), llStringToBase64(llList2String(details, 25)), llList2Key(details, 26)];
|
||||
}
|
||||
llOwnerSay("<bridgeGetScriptInfo>" + llList2CSV(returnedList) + "</bridgeGetScriptInfo>");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
static const std::string FS_BRIDGE_FOLDER = "#LSL Bridge";
|
||||
static const std::string FS_BRIDGE_CONTAINER_FOLDER = "Landscaping";
|
||||
static const U32 FS_BRIDGE_MAJOR_VERSION = 2;
|
||||
static const U32 FS_BRIDGE_MINOR_VERSION = 28;
|
||||
static const U32 FS_BRIDGE_MINOR_VERSION = 29;
|
||||
static const U32 FS_MAX_MINOR_VERSION = 99;
|
||||
static const std::string UPLOAD_SCRIPT_CURRENT = "EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt";
|
||||
static const std::string FS_STATE_ATTRIBUTE = "state=";
|
||||
|
|
@ -410,7 +410,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
while (std::getline(strStreamGetScriptInfo, scriptInfoToken, ','))
|
||||
{
|
||||
LLStringUtil::trim(scriptInfoToken);
|
||||
if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 24)
|
||||
if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 25)
|
||||
{
|
||||
// First value, OBJECT_NAME, should be passed from Bridge as encoded in base64
|
||||
// Encoding eliminates problems with special characters and commas for CSV
|
||||
|
|
@ -433,7 +433,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
++scriptInfoArrayCount;
|
||||
}
|
||||
|
||||
if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 26)
|
||||
if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 27)
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["OBJECT_NAME"] = scriptInfoArray[0].asString();
|
||||
|
|
@ -452,7 +452,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
args["PATHFINDING_TEXT"] = "";
|
||||
}
|
||||
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info"), args));
|
||||
if (scriptInfoArrayCount == 26)
|
||||
if (scriptInfoArrayCount == 27)
|
||||
{
|
||||
LLStringUtil::format_map_t args3;
|
||||
args3["OBJECT_DESC"] = scriptInfoArray[6].asString();
|
||||
|
|
@ -470,11 +470,12 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
args3["OBJECT_REZZER_KEY"] = scriptInfoArray[18].asString();
|
||||
args3["OBJECT_GROUP"] = scriptInfoArray[19].asUUID().notNull() ? LLSLURL("group", scriptInfoArray[19].asUUID(), "inspect").getSLURLString() : "---";
|
||||
args3["OBJECT_CREATION_TIME"] = scriptInfoArray[20].asString();
|
||||
args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[21].asString();
|
||||
args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[22].asInteger() < 1 || scriptInfoArray[22].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[22].asInteger()));
|
||||
args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[23].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No");
|
||||
args3["AVATAR_POS"] = scriptInfoArray[24].asString();
|
||||
args3["INSPECTING_KEY"] = scriptInfoArray[25].asString();
|
||||
args3["OBJECT_REZ_TIME"] = scriptInfoArray[21].asString();
|
||||
args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[22].asString();
|
||||
args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[23].asInteger() < 1 || scriptInfoArray[23].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[23].asInteger()));
|
||||
args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[24].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No");
|
||||
args3["AVATAR_POS"] = scriptInfoArray[25].asString();
|
||||
args3["INSPECTING_KEY"] = scriptInfoArray[26].asString();
|
||||
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info_ext"), args3));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
#ifdef TRACY_ENABLE
|
||||
// USAGE_TRACKING - displays overlapping stats that may imply double counting.
|
||||
// ATTACHMENT_TRACKING - displays detailed tracking info for Avatar and Attachment. very heavy overhead.
|
||||
#define USAGE_TRACKING
|
||||
// #define USAGE_TRACKING
|
||||
#define ATTACHMENT_TRACKING
|
||||
#else
|
||||
#undef USAGE_TRACKING
|
||||
|
|
|
|||
|
|
@ -796,3 +796,69 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||
SOFTWARE.
|
||||
|
||||
|
||||
|
||||
=============
|
||||
GLOD license
|
||||
=============
|
||||
The GLOD Open-Source License Version 1.0 June 16, 2004
|
||||
|
||||
Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns
|
||||
Hopkins University and David Luebke, Brenden Schubert, University of
|
||||
Virginia. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, is permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer and
|
||||
request.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer and
|
||||
request in the documentation and/or other materials provided with
|
||||
the distribution.
|
||||
|
||||
3. The name "GLOD" must not be used to endorse or promote products
|
||||
derived from this software without prior written permission.
|
||||
|
||||
4. Redistributions of any modified version of this source, whether in
|
||||
source or binary form , must include a form of the following
|
||||
acknowledgment: "This product is derived from the GLOD library,
|
||||
which is available from http://www.cs.jhu.edu/~graphics/GLOD."
|
||||
|
||||
5. Redistributions of any modified version of this source in binary
|
||||
form must provide, free of charge, access to the modified version
|
||||
of the code.
|
||||
|
||||
6. This license shall be governed by and construed and enforced in
|
||||
accordance with the laws of the State of Maryland, without
|
||||
reference to its conflicts of law provisions. The exclusive
|
||||
jurisdiction and venue for all legal actions relating to this
|
||||
license shall be in courts of competent subject matter jurisdiction
|
||||
located in the State of Maryland.
|
||||
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, GLOD IS PROVIDED
|
||||
UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND,
|
||||
EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
||||
THAT GLOD IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
|
||||
PURPOSE OR NON-INFRINGING. ALL WARRANTIES ARE DISCLAIMED AND THE
|
||||
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE CODE IS WITH
|
||||
YOU. SHOULD ANY CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
|
||||
COPYRIGHT HOLDER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
|
||||
NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
|
||||
CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY CODE IS
|
||||
AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL
|
||||
THE COPYRIGHT HOLDER OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
|
||||
SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES FOR LOSS OF
|
||||
PROFITS, REVENUE, OR FOR LOSS OF INFORMATION OR ANY OTHER LOSS.
|
||||
|
||||
YOU EXPRESSLY AGREE TO FOREVER INDEMNIFY, DEFEND AND HOLD HARMLESS THE
|
||||
COPYRIGHT HOLDERS AND CONTRIBUTORS OF GLOD AGAINST ALL CLAIMS,
|
||||
DEMANDS, SUITS OR OTHER ACTIONS ARISING DIRECTLY OR INDIRECTLY FROM
|
||||
YOUR ACCEPTANCE AND USE OF GLOD.
|
||||
|
||||
Although NOT REQUIRED, we would appreciate it if active users of GLOD
|
||||
put a link on their web site to the GLOD web site when possible.
|
||||
|
|
|
|||
|
|
@ -828,6 +828,9 @@ void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit)
|
|||
case LLModelPreview::MESH_OPTIMIZER_COMBINE:
|
||||
mModelPreview->onLODMeshOptimizerParamCommit(lod, enforce_tri_limit, mode);
|
||||
break;
|
||||
case LLModelPreview::GENERATE:
|
||||
mModelPreview->onLODGLODParamCommit(lod, enforce_tri_limit);
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "Only supposed to be called to generate models" << LL_ENDL;
|
||||
break;
|
||||
|
|
@ -1957,6 +1960,7 @@ void LLFloaterModelPreview::onLoDSourceCommit(S32 lod)
|
|||
|
||||
S32 index = lod_source_combo->getCurrentIndex();
|
||||
if (index == LLModelPreview::MESH_OPTIMIZER_AUTO
|
||||
|| index == LLModelPreview::GENERATE // <FS:Beq/> Improved LOD generation
|
||||
|| index == LLModelPreview::MESH_OPTIMIZER_SLOPPY
|
||||
|| index == LLModelPreview::MESH_OPTIMIZER_COMBINE)
|
||||
{ //rebuild LoD to update triangle counts
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ bool LLModelPreview::sIgnoreLoadedCallback = false;
|
|||
// </FS:Beq>
|
||||
const F32 SKIN_WEIGHT_CAMERA_DISTANCE = 16.f;
|
||||
|
||||
#include "glod/glod.h" // <FS:Beq/> More flexible LOD generation
|
||||
// <FS:Beq> mesh loader suffix configuration
|
||||
//static
|
||||
const std::array<std::string,5> LLModelPreview::sSuffixVarNames
|
||||
|
|
@ -103,6 +104,25 @@ const std::array<std::string,5> LLModelPreview::sSuffixVarNames
|
|||
"FSMeshPhysicsSuffix"
|
||||
};
|
||||
// </FS:Beq>
|
||||
|
||||
// <FS:Beq> More flexible LOD generation
|
||||
BOOL stop_gloderror()
|
||||
{
|
||||
GLuint error = glodGetError();
|
||||
|
||||
if (error != GLOD_NO_ERROR)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "GLOD error detected, cannot generate LOD (try another method?): " << std::hex << error;
|
||||
LL_WARNS("MeshUpload") << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
LLViewerFetchedTexture* bindMaterialDiffuseTexture(const LLImportMaterial& material)
|
||||
{
|
||||
LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(material.getDiffuseMap(), FTT_DEFAULT, TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
|
|
@ -222,6 +242,12 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
|
|||
mLoadState = LLModelLoader::STARTING;
|
||||
mGroup = 0;
|
||||
mLODFrozen = false;
|
||||
// <FS:Beq> Improved LOD generation
|
||||
mBuildShareTolerance = 0.f;
|
||||
mBuildQueueMode = GLOD_QUEUE_GREEDY;
|
||||
mBuildBorderMode = GLOD_BORDER_UNLOCK;
|
||||
mBuildOperator = GLOD_OPERATOR_EDGE_COLLAPSE;
|
||||
// </FS:Beq>
|
||||
mUVGuideTexture = LLViewerTextureManager::getFetchedTextureFromFile(gSavedSettings.getString("FSMeshPreviewUVGuideFile"), FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_PREVIEW); // <FS:Beq> - Add UV guide overlay to pmesh preview
|
||||
|
||||
for (U32 i = 0; i < LLModel::NUM_LODS; ++i)
|
||||
|
|
@ -234,7 +260,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
|
|||
|
||||
mViewOption["show_textures"] = false;
|
||||
mFMP = fmp;
|
||||
|
||||
glodInit(); // <FS:Beq/> Improved LOD generation
|
||||
mHasPivot = false;
|
||||
mModelPivot = LLVector3(0.0f, 0.0f, 0.0f);
|
||||
|
||||
|
|
@ -918,7 +944,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
|
|||
}
|
||||
|
||||
mLODFile[lod] = filename;
|
||||
|
||||
// <FS:Beq> Improved LOD generation
|
||||
if (lod == LLModel::LOD_HIGH)
|
||||
{
|
||||
clearGLODGroup();
|
||||
}
|
||||
// </FS:Beq>
|
||||
std::map<std::string, std::string> joint_alias_map;
|
||||
getJointAliases(joint_alias_map);
|
||||
|
||||
|
|
@ -1061,12 +1092,31 @@ void LLModelPreview::clearIncompatible(S32 lod)
|
|||
mBaseModel = mModel[lod];
|
||||
mBaseScene = mScene[lod];
|
||||
mVertexBuffer[5].clear();
|
||||
clearGLODGroup(); // <FS:Beq/> Improved LOD generation
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> Improved LOD generation
|
||||
void LLModelPreview::clearGLODGroup()
|
||||
{
|
||||
if (mGroup)
|
||||
{
|
||||
for (std::map<LLPointer<LLModel>, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter)
|
||||
{
|
||||
glodDeleteObject(iter->second);
|
||||
stop_gloderror();
|
||||
}
|
||||
mObject.clear();
|
||||
|
||||
glodDeleteGroup(mGroup);
|
||||
stop_gloderror();
|
||||
mGroup = 0;
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
||||
{
|
||||
assert_main_thread();
|
||||
|
|
@ -1220,6 +1270,7 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
}
|
||||
|
||||
mBaseModel = mModel[loaded_lod];
|
||||
clearGLODGroup(); // <FS:Beq/> Improved LOD generation
|
||||
|
||||
mBaseScene = mScene[loaded_lod];
|
||||
mVertexBuffer[5].clear();
|
||||
|
|
@ -1450,6 +1501,453 @@ void LLModelPreview::restoreNormals()
|
|||
updateStatusMessages();
|
||||
}
|
||||
|
||||
// <FS:Beq> Improved LOD generation
|
||||
// Restore the GLOD entry point.
|
||||
// There would appear to be quite a lot of commonality which would be well suited to refactoring but
|
||||
// LL are still playing with Mesh Optimiser code.
|
||||
void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit)
|
||||
{
|
||||
// Allow LoD from -1 to LLModel::LOD_PHYSICS
|
||||
if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "Invalid level of detail: " << which_lod;
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, false);
|
||||
assert(which_lod >= -1 && which_lod < LLModel::NUM_LODS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mBaseModel.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLVertexBuffer::unbind();
|
||||
|
||||
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
|
||||
|
||||
if (shader)
|
||||
{
|
||||
shader->unbind();
|
||||
}
|
||||
|
||||
stop_gloderror();
|
||||
static U32 cur_name = 1;
|
||||
|
||||
S32 limit = -1;
|
||||
|
||||
U32 triangle_count = 0;
|
||||
|
||||
U32 instanced_triangle_count = 0;
|
||||
|
||||
//get the triangle count for the whole scene
|
||||
for (LLModelLoader::scene::iterator iter = mBaseScene.begin(), endIter = mBaseScene.end(); iter != endIter; ++iter)
|
||||
{
|
||||
for (LLModelLoader::model_instance_list::iterator instance = iter->second.begin(), end_instance = iter->second.end(); instance != end_instance; ++instance)
|
||||
{
|
||||
LLModel* mdl = instance->mModel;
|
||||
if (mdl)
|
||||
{
|
||||
instanced_triangle_count += mdl->getNumTriangles();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//get the triangle count for the non-instanced set of models
|
||||
for (U32 i = 0; i < mBaseModel.size(); ++i)
|
||||
{
|
||||
triangle_count += mBaseModel[i]->getNumTriangles();
|
||||
}
|
||||
|
||||
//get ratio of uninstanced triangles to instanced triangles
|
||||
F32 triangle_ratio = (F32)triangle_count / (F32)instanced_triangle_count;
|
||||
|
||||
U32 base_triangle_count = triangle_count;
|
||||
|
||||
U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
|
||||
|
||||
U32 lod_mode = 0;
|
||||
|
||||
F32 lod_error_threshold = 0;
|
||||
|
||||
// The LoD should be in range from Lowest to High
|
||||
if (which_lod > -1 && which_lod < NUM_LOD)
|
||||
{
|
||||
LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]);
|
||||
if (iface)
|
||||
{
|
||||
lod_mode = iface->getFirstSelectedIndex();
|
||||
}
|
||||
|
||||
lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal();
|
||||
}
|
||||
|
||||
if (which_lod != -1)
|
||||
{
|
||||
mRequestedLoDMode[which_lod] = lod_mode;
|
||||
}
|
||||
|
||||
if (lod_mode == 0)
|
||||
{
|
||||
lod_mode = GLOD_TRIANGLE_BUDGET;
|
||||
|
||||
// The LoD should be in range from Lowest to High
|
||||
if (which_lod > -1 && which_lod < NUM_LOD)
|
||||
{
|
||||
limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger();
|
||||
//convert from "scene wide" to "non-instanced" triangle limit
|
||||
limit = (S32)((F32)limit*triangle_ratio);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lod_mode = GLOD_ERROR_THRESHOLD;
|
||||
}
|
||||
|
||||
bool object_dirty = false;
|
||||
|
||||
if (mGroup == 0)
|
||||
{
|
||||
object_dirty = true;
|
||||
mGroup = cur_name++;
|
||||
glodNewGroup(mGroup);
|
||||
}
|
||||
|
||||
if (object_dirty)
|
||||
{
|
||||
for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter)
|
||||
{ //build GLOD objects for each model in base model list
|
||||
LLModel* mdl = *iter;
|
||||
|
||||
if (mObject[mdl] != 0)
|
||||
{
|
||||
glodDeleteObject(mObject[mdl]);
|
||||
}
|
||||
|
||||
mObject[mdl] = cur_name++;
|
||||
|
||||
glodNewObject(mObject[mdl], mGroup, GLOD_DISCRETE);
|
||||
stop_gloderror();
|
||||
|
||||
if (iter == mBaseModel.begin() && !mdl->mSkinWeights.empty())
|
||||
{ //regenerate vertex buffer for skinned models to prevent animation feedback during LOD generation
|
||||
mVertexBuffer[5].clear();
|
||||
}
|
||||
|
||||
if (mVertexBuffer[5].empty())
|
||||
{
|
||||
genBuffers(5, false);
|
||||
}
|
||||
|
||||
U32 tri_count = 0;
|
||||
for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i)
|
||||
{
|
||||
LLVertexBuffer* buff = mVertexBuffer[5][mdl][i];
|
||||
buff->setBuffer(type_mask & buff->getTypeMask());
|
||||
|
||||
U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices();
|
||||
if (num_indices > 2)
|
||||
{
|
||||
// <FS:ND> Fix glod so it works when just using the opengl core profile
|
||||
//glodInsertElements(mObject[mdl], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, (U8*)mVertexBuffer[5][mdl][i]->getIndicesPointer(), 0, 0.f);
|
||||
LLStrider<LLVector3> vertex_strider;
|
||||
LLStrider<LLVector3> normal_strider;
|
||||
LLStrider<LLVector2> tc_strider;
|
||||
|
||||
LLStrider< U16 > index_strider;
|
||||
buff->getIndexStrider( index_strider );
|
||||
|
||||
glodVBO vbo = {};
|
||||
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_VERTEX ) )
|
||||
{
|
||||
buff->getVertexStrider( vertex_strider );
|
||||
vbo.mV.p = vertex_strider.get();
|
||||
vbo.mV.size = 3;
|
||||
vbo.mV.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_VERTEX ];
|
||||
vbo.mV.type = GL_FLOAT;
|
||||
}
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_NORMAL ) )
|
||||
{
|
||||
buff->getNormalStrider( normal_strider );
|
||||
vbo.mN.p = normal_strider.get();
|
||||
vbo.mN.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_NORMAL ];
|
||||
vbo.mN.type = GL_FLOAT;
|
||||
}
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_TEXCOORD0 ) )
|
||||
{
|
||||
buff->getTexCoord0Strider( tc_strider );
|
||||
vbo.mT.p = tc_strider.get();
|
||||
vbo.mT.size = 2;
|
||||
vbo.mT.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_TEXCOORD0 ];
|
||||
vbo.mT.type = GL_FLOAT;
|
||||
}
|
||||
|
||||
glodInsertElements( mObject[ mdl ], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, (U8*)index_strider.get(), 0, 0.f, &vbo );
|
||||
// </FS:ND>
|
||||
}
|
||||
tri_count += num_indices / 3;
|
||||
stop_gloderror();
|
||||
}
|
||||
|
||||
glodBuildObject(mObject[mdl]);
|
||||
stop_gloderror();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
S32 start = LLModel::LOD_HIGH;
|
||||
S32 end = 0;
|
||||
|
||||
if (which_lod != -1)
|
||||
{
|
||||
start = end = which_lod;
|
||||
}
|
||||
|
||||
mMaxTriangleLimit = base_triangle_count;
|
||||
|
||||
for (S32 lod = start; lod >= end; --lod)
|
||||
{
|
||||
if (which_lod == -1)
|
||||
{
|
||||
if (lod < start)
|
||||
{
|
||||
triangle_count /= decimation;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (enforce_tri_limit)
|
||||
{
|
||||
triangle_count = limit;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (S32 j = LLModel::LOD_HIGH; j>which_lod; --j)
|
||||
{
|
||||
triangle_count /= decimation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mModel[lod].clear();
|
||||
mModel[lod].resize(mBaseModel.size());
|
||||
mVertexBuffer[lod].clear();
|
||||
|
||||
U32 actual_tris = 0;
|
||||
U32 actual_verts = 0;
|
||||
U32 submeshes = 0;
|
||||
|
||||
mRequestedTriangleCount[lod] = (S32)((F32)triangle_count / triangle_ratio);
|
||||
mRequestedErrorThreshold[lod] = lod_error_threshold;
|
||||
|
||||
glodGroupParameteri(mGroup, GLOD_ADAPT_MODE, lod_mode);
|
||||
stop_gloderror();
|
||||
|
||||
glodGroupParameteri(mGroup, GLOD_ERROR_MODE, GLOD_OBJECT_SPACE_ERROR);
|
||||
stop_gloderror();
|
||||
|
||||
glodGroupParameterf(mGroup, GLOD_OBJECT_SPACE_ERROR_THRESHOLD, lod_error_threshold);
|
||||
stop_gloderror();
|
||||
|
||||
if (lod_mode != GLOD_TRIANGLE_BUDGET)
|
||||
{
|
||||
glodGroupParameteri(mGroup, GLOD_MAX_TRIANGLES, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//SH-632: always add 1 to desired amount to avoid decimating below desired amount
|
||||
glodGroupParameteri(mGroup, GLOD_MAX_TRIANGLES, triangle_count + 1);
|
||||
}
|
||||
|
||||
stop_gloderror();
|
||||
glodAdaptGroup(mGroup);
|
||||
stop_gloderror();
|
||||
|
||||
for (U32 mdl_idx = 0; mdl_idx < mBaseModel.size(); ++mdl_idx)
|
||||
{
|
||||
LLModel* base = mBaseModel[mdl_idx];
|
||||
|
||||
GLint patch_count = 0;
|
||||
glodGetObjectParameteriv(mObject[base], GLOD_NUM_PATCHES, &patch_count);
|
||||
stop_gloderror();
|
||||
|
||||
LLVolumeParams volume_params;
|
||||
volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE);
|
||||
mModel[lod][mdl_idx] = new LLModel(volume_params, 0.f);
|
||||
|
||||
std::string name = base->mLabel + getLodSuffix(lod);
|
||||
|
||||
mModel[lod][mdl_idx]->mLabel = name;
|
||||
mModel[lod][mdl_idx]->mSubmodelID = base->mSubmodelID;
|
||||
|
||||
GLint* sizes = new GLint[patch_count * 2];
|
||||
glodGetObjectParameteriv(mObject[base], GLOD_PATCH_SIZES, sizes);
|
||||
stop_gloderror();
|
||||
|
||||
GLint* names = new GLint[patch_count];
|
||||
glodGetObjectParameteriv(mObject[base], GLOD_PATCH_NAMES, names);
|
||||
stop_gloderror();
|
||||
|
||||
mModel[lod][mdl_idx]->setNumVolumeFaces(patch_count);
|
||||
|
||||
LLModel* target_model = mModel[lod][mdl_idx];
|
||||
|
||||
for (GLint i = 0; i < patch_count; ++i)
|
||||
{
|
||||
type_mask = mVertexBuffer[5][base][i]->getTypeMask();
|
||||
|
||||
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(type_mask, 0);
|
||||
|
||||
if (sizes[i * 2 + 1] > 0 && sizes[i * 2] > 0)
|
||||
{
|
||||
if (!buff->allocateBuffer(sizes[i * 2 + 1], sizes[i * 2], true))
|
||||
{
|
||||
// Todo: find a way to stop preview in this case instead of crashing
|
||||
LL_ERRS() << "Failed buffer allocation during preview LOD generation."
|
||||
<< " Vertices: " << sizes[i * 2 + 1]
|
||||
<< " Indices: " << sizes[i * 2] << LL_ENDL;
|
||||
}
|
||||
buff->setBuffer(type_mask);
|
||||
// <FS:ND> Fix glod so it works when just using the opengl core profile
|
||||
//glodFillElements(mObject[base], names[i], GL_UNSIGNED_SHORT, (U8*)buff->getIndicesPointer());
|
||||
LLStrider<LLVector3> vertex_strider;
|
||||
LLStrider<LLVector3> normal_strider;
|
||||
LLStrider<LLVector2> tc_strider;
|
||||
|
||||
LLStrider< U16 > index_strider;
|
||||
buff->getIndexStrider( index_strider );
|
||||
|
||||
glodVBO vbo = {};
|
||||
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_VERTEX ) )
|
||||
{
|
||||
buff->getVertexStrider( vertex_strider );
|
||||
vbo.mV.p = vertex_strider.get();
|
||||
vbo.mV.size = 3;
|
||||
vbo.mV.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_VERTEX ];
|
||||
vbo.mV.type = GL_FLOAT;
|
||||
}
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_NORMAL ) )
|
||||
{
|
||||
buff->getNormalStrider( normal_strider );
|
||||
vbo.mN.p = normal_strider.get();
|
||||
vbo.mN.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_NORMAL ];
|
||||
vbo.mN.type = GL_FLOAT;
|
||||
}
|
||||
if( buff->hasDataType( LLVertexBuffer::TYPE_TEXCOORD0 ) )
|
||||
{
|
||||
buff->getTexCoord0Strider( tc_strider );
|
||||
vbo.mT.p = tc_strider.get();
|
||||
vbo.mT.size = 2;
|
||||
vbo.mT.stride = LLVertexBuffer::sTypeSize[ LLVertexBuffer::TYPE_TEXCOORD0 ];
|
||||
vbo.mT.type = GL_FLOAT;
|
||||
}
|
||||
|
||||
glodFillElements( mObject[ base ], names[ i ], GL_UNSIGNED_SHORT, (U8*)index_strider.get(), &vbo );
|
||||
// </FS:ND>
|
||||
stop_gloderror();
|
||||
}
|
||||
else
|
||||
{
|
||||
// This face was eliminated or we failed to allocate buffer,
|
||||
// attempt to create a dummy triangle (one vertex, 3 indices, all 0)
|
||||
buff->allocateBuffer(1, 3, true);
|
||||
memset((U8*)buff->getMappedData(), 0, buff->getSize());
|
||||
// <FS:ND> Fix when running with opengl core profile
|
||||
//memset((U8*)buff->getIndicesPointer(), 0, buff->getIndicesSize());
|
||||
LLStrider< U16 > index_strider;
|
||||
buff->getIndexStrider( index_strider );
|
||||
|
||||
memset( (U8*)index_strider.get(), 0, buff->getIndicesSize() );
|
||||
// </FS:ND>
|
||||
}
|
||||
|
||||
buff->validateRange(0, buff->getNumVerts() - 1, buff->getNumIndices(), 0);
|
||||
|
||||
LLStrider<LLVector3> pos;
|
||||
LLStrider<LLVector3> norm;
|
||||
LLStrider<LLVector2> tc;
|
||||
LLStrider<U16> index;
|
||||
|
||||
buff->getVertexStrider(pos);
|
||||
if (type_mask & LLVertexBuffer::MAP_NORMAL)
|
||||
{
|
||||
buff->getNormalStrider(norm);
|
||||
}
|
||||
if (type_mask & LLVertexBuffer::MAP_TEXCOORD0)
|
||||
{
|
||||
buff->getTexCoord0Strider(tc);
|
||||
}
|
||||
|
||||
buff->getIndexStrider(index);
|
||||
|
||||
target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices());
|
||||
actual_tris += buff->getNumIndices() / 3;
|
||||
actual_verts += buff->getNumVerts();
|
||||
++submeshes;
|
||||
|
||||
if (!validate_face(target_model->getVolumeFace(names[i])))
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "Invalid face generated during LOD generation.";
|
||||
LLFloaterModelPreview::addStringToLog(out,true);
|
||||
LL_ERRS() << out.str() << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
//blind copy skin weights and just take closest skin weight to point on
|
||||
//decimated mesh for now (auto-generating LODs with skin weights is still a bit
|
||||
//of an open problem).
|
||||
target_model->mPosition = base->mPosition;
|
||||
target_model->mSkinWeights = base->mSkinWeights;
|
||||
target_model->mSkinInfo = base->mSkinInfo;
|
||||
//copy material list
|
||||
target_model->mMaterialList = base->mMaterialList;
|
||||
|
||||
if (!validate_model(target_model))
|
||||
{
|
||||
LL_ERRS() << "Invalid model generated when creating LODs" << LL_ENDL;
|
||||
}
|
||||
|
||||
delete[] sizes;
|
||||
delete[] names;
|
||||
}
|
||||
|
||||
//rebuild scene based on mBaseScene
|
||||
mScene[lod].clear();
|
||||
mScene[lod] = mBaseScene;
|
||||
|
||||
for (U32 i = 0; i < mBaseModel.size(); ++i)
|
||||
{
|
||||
LLModel* mdl = mBaseModel[i];
|
||||
LLModel* target = mModel[lod][i];
|
||||
if (target)
|
||||
{
|
||||
for (LLModelLoader::scene::iterator iter = mScene[lod].begin(); iter != mScene[lod].end(); ++iter)
|
||||
{
|
||||
for (U32 j = 0; j < iter->second.size(); ++j)
|
||||
{
|
||||
if (iter->second[j].mModel == mdl)
|
||||
{
|
||||
iter->second[j].mModel = target;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLVertexBuffer::unbind();
|
||||
if (shader)
|
||||
{
|
||||
shader->bind();
|
||||
}
|
||||
refresh(); // <FS:ND/> refresh once to make sure render gets called with the updated vbos
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
// Runs per object, but likely it is a better way to run per model+submodels
|
||||
// returns a ratio of base model indices to resulting indices
|
||||
// returns -1 in case of failure
|
||||
|
|
@ -4368,8 +4866,13 @@ bool LLModelPreview::lodQueryCallback()
|
|||
{
|
||||
S32 lod = preview->mLodsQuery.back();
|
||||
preview->mLodsQuery.pop_back();
|
||||
// <FS:Beq> Improved LOD generation
|
||||
#ifdef USE_GLOD_AS_DEFAULT
|
||||
preview->genGlodLODs(lod, 3, false);
|
||||
#else
|
||||
preview->genMeshOptimizerLODs(lod, MESH_OPTIMIZER_AUTO, 3, false);
|
||||
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
if (preview->mLookUpLodFiles && (lod == LLModel::LOD_HIGH))
|
||||
{
|
||||
preview->lookupLODModelFiles(LLModel::LOD_HIGH);
|
||||
|
|
@ -4383,9 +4886,21 @@ bool LLModelPreview::lodQueryCallback()
|
|||
return true;
|
||||
}
|
||||
|
||||
// <FS:Beq> Improved LOD generation
|
||||
void LLModelPreview::onLODGLODParamCommit(S32 lod, bool enforce_tri_limit)
|
||||
{
|
||||
if (mFMP && !mLODFrozen)
|
||||
{
|
||||
genGlodLODs(lod, 3, enforce_tri_limit);
|
||||
mFMP->refresh();
|
||||
refresh();
|
||||
mDirty = true;
|
||||
}
|
||||
|
||||
}
|
||||
void LLModelPreview::onLODMeshOptimizerParamCommit(S32 requested_lod, bool enforce_tri_limit, S32 mode)
|
||||
{
|
||||
if (!mLODFrozen)
|
||||
if (mFMP && !mLODFrozen) // <FS:Beq> minor sidestep of potential crash
|
||||
{
|
||||
genMeshOptimizerLODs(requested_lod, mode, 3, enforce_tri_limit);
|
||||
mFMP->refresh(); // <FS:Beq/> BUG-231970 Fix b0rken upload floater refresh
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@ public:
|
|||
MESH_OPTIMIZER_AUTO, // automatically selects method based on model or face
|
||||
MESH_OPTIMIZER_COMBINE, // combines faces into a single model, simplifies, then splits back into faces
|
||||
MESH_OPTIMIZER_SLOPPY, // uses sloppy method, works per face
|
||||
GENERATE, // Use GLOD <FS:Beq/> Improved LOD generation
|
||||
USE_LOD_ABOVE,
|
||||
} eLoDMode;
|
||||
|
||||
|
|
@ -165,6 +166,7 @@ public:
|
|||
void loadModelCallback(S32 lod);
|
||||
bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); }
|
||||
void queryLODs() { mGenLOD = true; };
|
||||
void genGlodLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
|
||||
void genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 decimation = 3, bool enforce_tri_limit = false);
|
||||
void generateNormals();
|
||||
void restoreNormals();
|
||||
|
|
@ -175,6 +177,8 @@ public:
|
|||
void clearIncompatible(S32 lod);
|
||||
void updateStatusMessages();
|
||||
void updateLodControls(S32 lod);
|
||||
void clearGLODGroup();
|
||||
void onLODGLODParamCommit(S32 lod, bool enforce_tri_limit);
|
||||
void onLODMeshOptimizerParamCommit(S32 lod, bool enforce_tri_limit, S32 mode);
|
||||
void addEmptyFace(LLModel* pTarget);
|
||||
|
||||
|
|
@ -272,6 +276,16 @@ protected:
|
|||
S32 mRequestedTriangleCount[LLModel::NUM_LODS];
|
||||
F32 mRequestedErrorThreshold[LLModel::NUM_LODS];
|
||||
F32 mRequestedCreaseAngle[LLModel::NUM_LODS];
|
||||
// <FS:Beq> Improved LOD generation
|
||||
F32 mBuildShareTolerance;
|
||||
U32 mBuildQueueMode;
|
||||
U32 mBuildOperator;
|
||||
U32 mBuildBorderMode;
|
||||
U32 mRequestedBuildOperator[LLModel::NUM_LODS];
|
||||
U32 mRequestedQueueMode[LLModel::NUM_LODS];
|
||||
U32 mRequestedBorderMode[LLModel::NUM_LODS];
|
||||
F32 mRequestedShareTolerance[LLModel::NUM_LODS];
|
||||
// </FS:Beq>
|
||||
|
||||
LLModelLoader* mModelLoader;
|
||||
|
||||
|
|
|
|||
|
|
@ -694,8 +694,12 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force)
|
|||
|
||||
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
|
||||
LLVector4 sunDiffuse = LLVector4(psky->getSunlightColor().mV);
|
||||
LLVector4 moonDiffuse = LLVector4(psky->getMoonlightColor().mV);
|
||||
// <FS:Zi> Fix array out of bounds on assigning LLColor3() to llVector4()
|
||||
// LLVector4 sunDiffuse = LLVector4(psky->getSunlightColor().mV);
|
||||
// LLVector4 moonDiffuse = LLVector4(psky->getMoonlightColor().mV);
|
||||
LLVector4 sunDiffuse = LLVector4(LLVector3(psky->getSunlightColor().mV));
|
||||
LLVector4 moonDiffuse = LLVector4(LLVector3(psky->getMoonlightColor().mV));
|
||||
// </FS:Zi>
|
||||
|
||||
shader->uniform4fv(LLShaderMgr::SUNLIGHT_COLOR, sunDiffuse);
|
||||
shader->uniform4fv(LLShaderMgr::MOONLIGHT_COLOR, moonDiffuse);
|
||||
|
|
|
|||
|
|
@ -100,8 +100,12 @@ LLSkyTex::LLSkyTex() :
|
|||
void LLSkyTex::init(bool isShiny)
|
||||
{
|
||||
mIsShiny = isShiny;
|
||||
mSkyData = new LLColor4[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION];
|
||||
mSkyDirs = new LLVector3[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION];
|
||||
// <FS_Zi> Compiler fix - make sure the array size is an integer value
|
||||
// mSkyData = new LLColor4[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION];
|
||||
// mSkyDirs = new LLVector3[SKYTEX_RESOLUTION * SKYTEX_RESOLUTION];
|
||||
mSkyData = new LLColor4[(U32)(SKYTEX_RESOLUTION * SKYTEX_RESOLUTION)];
|
||||
mSkyDirs = new LLVector3[(U32)(SKYTEX_RESOLUTION * SKYTEX_RESOLUTION)];
|
||||
// </FS:Zi>
|
||||
|
||||
for (S32 i = 0; i < 2; ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@
|
|||
<item name="MeshOpt Auto" label="Automatisch generieren"/>
|
||||
<item name="MeshOptCombine" label="Präzise generieren"/>
|
||||
<item name="MeshOptSloppy" label="Nachlässig generieren"/>
|
||||
<item name="Generate" label="Zuverlässig generieren"/>
|
||||
</combo_box>
|
||||
<button label="Auswählen" name="lod_browse_high"/>
|
||||
<combo_box name="lod_mode_high">
|
||||
|
|
@ -190,6 +191,7 @@
|
|||
<item name="MeshOpt Auto" label="Automatisch generieren"/>
|
||||
<item name="MeshOptCombine" label="Präzise generieren"/>
|
||||
<item name="MeshOptSloppy" label="Nachlässig generieren"/>
|
||||
<item name="Generate" label="Zuverlässig generieren"/>
|
||||
<item name="Use LoD above" label="Obiges LoD verwenden"/>
|
||||
</combo_box>
|
||||
<button label="Auswählen" name="lod_browse_medium"/>
|
||||
|
|
@ -205,6 +207,7 @@
|
|||
<item name="MeshOpt Auto" label="Automatisch generieren"/>
|
||||
<item name="MeshOptCombine" label="Präzise generieren"/>
|
||||
<item name="MeshOptSloppy" label="Nachlässig generieren"/>
|
||||
<item name="Generate" label="Zuverlässig generieren"/>
|
||||
<item name="Use LoD above" label="Obiges LoD verwenden"/>
|
||||
</combo_box>
|
||||
<button label="Auswählen" name="lod_browse_low"/>
|
||||
|
|
@ -220,6 +223,7 @@
|
|||
<item name="MeshOpt Auto" label="Automatisch generieren"/>
|
||||
<item name="MeshOptCombine" label="Präzise generieren"/>
|
||||
<item name="MeshOptSloppy" label="Nachlässig generieren"/>
|
||||
<item name="Generate" label="Zuverlässig generieren"/>
|
||||
<item name="Use LoD above" label="Obiges LoD verwenden"/>
|
||||
</combo_box>
|
||||
<button label="Auswählen" name="lod_browse_lowest"/>
|
||||
|
|
|
|||
|
|
@ -6804,6 +6804,7 @@ Vorheriger Besitzer: [OBJECT_LAST_OWNER_ID]
|
|||
Gerezt von: [OBJECT_REZZER_KEY]
|
||||
Gruppe: [OBJECT_GROUP]
|
||||
Erstellungszeit: [OBJECT_CREATION_TIME]
|
||||
Rez-Zeit: [OBJECT_REZ_TIME]
|
||||
Pathfinding-Typ: [OBJECT_PATHFINDING_TYPE]
|
||||
Angehängt an: [OBJECT_ATTACHED_POINT]
|
||||
Temporär angehängt: [OBJECT_TEMP_ATTACHED]
|
||||
|
|
|
|||
|
|
@ -248,6 +248,7 @@ expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
|
|||
FMOD Sound System, Copyright (C) Firelight Technologies Pty, Ltd., 1994-2020
|
||||
FreeType Copyright (C) 1996-2002, 2006 David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
GL Copyright (C) 1999-2004 Brian Paul.
|
||||
GLOD Copyright (C) 2003-04 Jonathan Cohen, Nat Duca, Chris Niski, Johns Hopkins University and David Luebke, Brenden Schubert, University of Virginia.
|
||||
Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited.
|
||||
HACD Copyright (C) 2011, Khaled Mamou (kmamou@gmail.com)
|
||||
jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW)
|
||||
|
|
|
|||
|
|
@ -203,6 +203,10 @@
|
|||
name="MeshOptSloppy"
|
||||
label="Generate Sloppy"
|
||||
value="MeshOptSloppy" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate Reliable"
|
||||
value="Generate" />
|
||||
</combo_box>
|
||||
<line_editor
|
||||
follows="left|top"
|
||||
|
|
@ -340,6 +344,10 @@
|
|||
name="MeshOptSloppy"
|
||||
label="Generate Sloppy"
|
||||
value="MeshOptSloppy" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate Reliable"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
|
|
@ -481,6 +489,10 @@
|
|||
name="MeshOptSloppy"
|
||||
label="Generate Sloppy"
|
||||
value="MeshOptSloppy" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate Reliable"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
|
|
@ -622,6 +634,10 @@
|
|||
name="MeshOptSloppy"
|
||||
label="Generate Sloppy"
|
||||
value="MeshOptSloppy" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate Reliable"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
|
|
@ -1171,7 +1187,7 @@
|
|||
name="modifiers_panel"
|
||||
help_topic="upload_model_modifiers">
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
|
|
@ -1478,7 +1494,7 @@
|
|||
name="lod_suffix_label"
|
||||
top_pad="5"
|
||||
width="110">
|
||||
LOD Suffixes:
|
||||
LOD Suffixes:
|
||||
</text>
|
||||
<combo_box
|
||||
follows="left|top"
|
||||
|
|
@ -1502,7 +1518,7 @@
|
|||
top_pad="10"
|
||||
halign="right"
|
||||
width="60">
|
||||
Lowest:
|
||||
Lowest:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshLowestLodSuffix"
|
||||
|
|
@ -1527,7 +1543,7 @@
|
|||
name="suf_low_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Low:
|
||||
Low:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshLowLodSuffix"
|
||||
|
|
@ -1552,7 +1568,7 @@
|
|||
name="suf_medium_lab"
|
||||
halign="right"
|
||||
width="40">
|
||||
Medium:
|
||||
Medium:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshMediumLodSuffix"
|
||||
|
|
@ -1577,7 +1593,7 @@
|
|||
name="suf_high_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
High:
|
||||
High:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshHighLodSuffix"
|
||||
|
|
@ -1601,7 +1617,7 @@
|
|||
name="suf_physics_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Physics:
|
||||
Physics:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshPhysicsSuffix"
|
||||
|
|
|
|||
|
|
@ -3056,6 +3056,7 @@ Previous owner: [OBJECT_LAST_OWNER_ID]
|
|||
Rezzed by: [OBJECT_REZZER_KEY]
|
||||
Group: [OBJECT_GROUP]
|
||||
Creation time: [OBJECT_CREATION_TIME]
|
||||
Rez time: [OBJECT_REZ_TIME]
|
||||
Pathfinding type: [OBJECT_PATHFINDING_TYPE]
|
||||
Attachment point: [OBJECT_ATTACHED_POINT]
|
||||
Temporarily attached: [OBJECT_TEMP_ATTACHED]
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@
|
|||
<item name="MeshOpt Auto" label="Générer Auto" />
|
||||
<item name="MeshOptCombine" label="Générer précis" />
|
||||
<item name="MeshOptSloppy" label="Générer imprécis" />
|
||||
<item name="Generate" label="Générer fiable"/>
|
||||
</combo_box>
|
||||
<button label="Parcourir..." name="lod_browse_high"/>
|
||||
<combo_box name="lod_mode_high">
|
||||
|
|
@ -94,6 +95,7 @@
|
|||
<item name="MeshOpt Auto" label="Générer Auto" />
|
||||
<item name="MeshOptCombine" label="Générer précis" />
|
||||
<item name="MeshOptSloppy" label="Générer imprécis" />
|
||||
<item name="Generate" label="Générer fiable"/>
|
||||
<item label="Niveau de détail du dessus" name="Use LoD above" value="Niveau de détail du dessus"/>
|
||||
</combo_box>
|
||||
<button label="Parcourir..." name="lod_browse_medium"/>
|
||||
|
|
@ -109,6 +111,7 @@
|
|||
<item name="MeshOpt Auto" label="Générer Auto" />
|
||||
<item name="MeshOptCombine" label="Générer précis" />
|
||||
<item name="MeshOptSloppy" label="Générer imprécis" />
|
||||
<item name="Generate" label="Générer fiable"/>
|
||||
<item label="Niveau de détail du dessus" name="Use LoD above" value="Niveau de détail du dessus"/>
|
||||
</combo_box>
|
||||
<button label="Parcourir..." name="lod_browse_low"/>
|
||||
|
|
@ -124,6 +127,7 @@
|
|||
<item name="MeshOpt Auto" label="Générer Auto" />
|
||||
<item name="MeshOptCombine" label="Générer précis" />
|
||||
<item name="MeshOptSloppy" label="Générer imprécis" />
|
||||
<item name="Generate" label="Générer fiable"/>
|
||||
<item label="Niveau de détail du dessus" name="Use LoD above" value="Niveau de détail du dessus"/>
|
||||
</combo_box>
|
||||
<button label="Parcourir..." name="lod_browse_lowest"/>
|
||||
|
|
|
|||
|
|
@ -6671,6 +6671,7 @@ Propriétaire précédent : [OBJECT_LAST_OWNER_ID]
|
|||
Posé par : [OBJECT_REZZER_KEY]
|
||||
Groupe : [OBJECT_GROUP]
|
||||
Date de création : [OBJECT_CREATION_TIME]
|
||||
Rezz time: [OBJECT_REZ_TIME]
|
||||
Type de cheminement : [OBJECT_PATHFINDING_TYPE]
|
||||
Point d'attache : [OBJECT_ATTACHED_POINT]
|
||||
Attaché temporairement : [OBJECT_TEMP_ATTACHED]
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
<item name="MeshOpt Auto" label="Generuj: Auto" />
|
||||
<item name="MeshOptCombine" label="Generuj: Dokładny" />
|
||||
<item name="MeshOptSloppy" label="Generuj: Niestaranny" />
|
||||
<item name="Generate" label="Generuj: Wiarygodny" />
|
||||
</combo_box>
|
||||
<button label="Przeglądaj" name="lod_browse_high" />
|
||||
<combo_box name="lod_mode_high">
|
||||
|
|
@ -77,6 +78,7 @@
|
|||
<item name="MeshOpt Auto" label="Generuj: Auto" />
|
||||
<item name="MeshOptCombine" label="Generuj: Dokładny" />
|
||||
<item name="MeshOptSloppy" label="Generuj: Niestaranny" />
|
||||
<item name="Generate" label="Generuj: Wiarygodny" />
|
||||
<item name="Use LoD above" label="Użyj poziomu detali (LoD) powyżej" />
|
||||
</combo_box>
|
||||
<button label="Przeglądaj" name="lod_browse_medium" />
|
||||
|
|
@ -90,6 +92,7 @@
|
|||
<item name="MeshOpt Auto" label="Generuj: Auto" />
|
||||
<item name="MeshOptCombine" label="Generuj: Dokładny" />
|
||||
<item name="MeshOptSloppy" label="Generuj: Niestaranny" />
|
||||
<item name="Generate" label="Generuj: Wiarygodny" />
|
||||
<item name="Use LoD above" label="Użyj poziomu detali (LoD) powyżej" />
|
||||
</combo_box>
|
||||
<button label="Przeglądaj" name="lod_browse_low" />
|
||||
|
|
@ -103,6 +106,7 @@
|
|||
<item name="MeshOpt Auto" label="Generuj: Auto" />
|
||||
<item name="MeshOptCombine" label="Generuj: Dokładny" />
|
||||
<item name="MeshOptSloppy" label="Generuj: Niestaranny" />
|
||||
<item name="Generate" label="Generuj: Wiarygodny" />
|
||||
<item name="Use LoD above" label="Użyj poziomu detali (LoD) powyżej" />
|
||||
</combo_box>
|
||||
<button label="Przeglądaj" name="lod_browse_lowest" />
|
||||
|
|
|
|||
|
|
@ -6107,6 +6107,7 @@ Poprzedni właściciel: [OBJECT_LAST_OWNER_ID]
|
|||
Zrezzowany przez: [OBJECT_REZZER_KEY]
|
||||
Grupa: [OBJECT_GROUP]
|
||||
Czas utworzenia: [OBJECT_CREATION_TIME]
|
||||
Czas zrezzowania: [OBJECT_REZ_TIME]
|
||||
Typ odnajdywania ścieżki: [OBJECT_PATHFINDING_TYPE]
|
||||
Punkt dołączenia: [OBJECT_ATTACHED_POINT]
|
||||
Tymczasowo dołączone: [OBJECT_TEMP_ATTACHED]
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
<string name="mesh_status_invalid_material_list">Материалы уровня детализации не входят в эталонную модель.</string>
|
||||
<string name="phys_status_vertex_limit_exceeded">Для некоторых физических оболочек превышен лимит вершин(256); попробуйте другой 'Метод Анализа'.</string>
|
||||
<string name="phys_status_hull_limit_exceeded">Некоторые модели превышают предел оболочек (256); попробуйте 'Упрощение'.</string>
|
||||
<string name="phys_status_degenerate_triangles">Физика меша слишком плотная; удалить маленькие, тонкие треугольники (смотри просмотр).</string>
|
||||
<string name="phys_status_degenerate_triangles">Физика меша слишком плотная или содержит вырожденные треугольники. Используйте Анализ/Упрощение для решения.</string>
|
||||
<string name="phys_status_no_havok">Эта версия не поддерживает Havok и не рекомендуется для загрузки физики в Second Life. Результаты могут быть непредсказуемыми.</string>
|
||||
<string name="phys_status_too_thin">Один или несколько размеров меньше 0,5м, корректно будут работать только физические формы, основанные на корпусе (проанализированные).</string>
|
||||
<string name="phys_status_unknown_error">Обнаружена нераспознанная ошибка.</string>
|
||||
|
|
@ -38,6 +38,19 @@
|
|||
<string name="UnknownJoints">Текстурирование отключено, слишком много [COUNT] неизвестных суставов</string>
|
||||
<string name="ModelLoaded">Модель [MODEL_NAME] загружена</string>
|
||||
<string name="IncompleteTC">Данные координат текстуры не полны.</string>
|
||||
<string name="PositionNaN">Обнаружен NaN при загрузке данных о местоположении из DAE-модели, недопустимая модель.</string>
|
||||
<string name="NormalsNaN">Найдено NaN при загрузке нормалей из DAE-модели, недопустимая модель.</string>
|
||||
<string name="NegativeScaleTrans">Обнаружен отрицательный масштаб, неподдерживаемое преобразование. domInstance_geometry: [LABEL]</string>
|
||||
<string name="NegativeScaleNormTrans">Обнаружен отрицательный масштаб, неподдерживаемое преобразование после нормализации. domInstance_geometry: [LABEL]</string>
|
||||
<string name="CantResolveGeometryUrl">Не удается разрешить геометрию URL.</string>
|
||||
<string name="ParsingErrorBadElement">Плохой элемент</string>
|
||||
<string name="ParsingErrorCantParseScene">Сцена не может быть проанализирована</string>
|
||||
<string name="ParsingErrorCorrupt">Ошибка с dae - традиционно указывает на поврежденный файл.</string>
|
||||
<string name="ParsingErrorNoController">Не удалось проверить контроллер</string>
|
||||
<string name="ParsingErrorNoDoc">Не удается найти внутренние документы</string>
|
||||
<string name="ParsingErrorNoRoot">Документ не имеет корня</string>
|
||||
<string name="ParsingErrorNoScene">Документ не имеет visual_scene</string>
|
||||
<string name="ParsingErrorPositionInvalidModel">Невозможно обработать сетку без данных о местоположении. Недопустимая модель.</string>
|
||||
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
|
|
@ -50,8 +63,11 @@
|
|||
<text initial_value="Вершины" name="vertices" value="Вершины"/>
|
||||
<text initial_value="Высокий" name="high_label" value="Высокий"/>
|
||||
<combo_box name="lod_source_high">
|
||||
<item label="Загрузка из файла" name="Load from file"/>
|
||||
<item label="Сгенерировать" name="Generate"/>
|
||||
<item name="Load from file" label="Загрузка из файла"/>
|
||||
<item name="MeshOpt Auto" label="Генерировать Авто"/>
|
||||
<item name="MeshOptCombine" label="Генерировать Точно"/>
|
||||
<item name="MeshOptSloppy" label="Генерировать Небрежно"/>
|
||||
<item name="Generate" label="Генерировать Надежный"/>
|
||||
</combo_box>
|
||||
<button label="Обзор..." name="lod_browse_high"/>
|
||||
<combo_box name="lod_mode_high">
|
||||
|
|
@ -60,9 +76,12 @@
|
|||
</combo_box>
|
||||
<text initial_value="Средний" name="medium_label" value="Средний"/>
|
||||
<combo_box name="lod_source_medium">
|
||||
<item label="Загрузка из файла" name="Load from file"/>
|
||||
<item label="Сгенерировать" name="Generate"/>
|
||||
<item label="Использовать УД выше" name="Use LoD above"/>
|
||||
<item name="Load from file" label="Загрузка из файла"/>
|
||||
<item name="MeshOpt Auto" label="Генерировать Авто"/>
|
||||
<item name="MeshOptCombine" label="Генерировать Точно"/>
|
||||
<item name="MeshOptSloppy" label="Генерировать Небрежно"/>
|
||||
<item name="Generate" label="Генерировать Надежный"/>
|
||||
<item name="Use LoD above" label="Использовать сверху"/>
|
||||
</combo_box>
|
||||
<button label="Обзор..." name="lod_browse_medium"/>
|
||||
<combo_box name="lod_mode_medium">
|
||||
|
|
@ -71,9 +90,11 @@
|
|||
</combo_box>
|
||||
<text initial_value="Низкий" name="low_label" value="Низкий"/>
|
||||
<combo_box name="lod_source_low">
|
||||
<item label="Загрузка из файла" name="Load from file"/>
|
||||
<item label="Сгенерировать" name="Generate"/>
|
||||
<item label="Использовать УД выше" name="Use LoD above"/>
|
||||
<item name="MeshOpt Auto" label="Генерировать Авто"/>
|
||||
<item name="MeshOptCombine" label="Генерировать Точно"/>
|
||||
<item name="MeshOptSloppy" label="Генерировать Небрежно"/>
|
||||
<item name="Generate" label="Генерировать Надежный"/>
|
||||
<item name="Use LoD above" label="Использовать сверху"/>
|
||||
</combo_box>
|
||||
<button label="Обзор..." name="lod_browse_low"/>
|
||||
<combo_box name="lod_mode_low">
|
||||
|
|
@ -82,9 +103,11 @@
|
|||
</combo_box>
|
||||
<text initial_value="Низший" name="lowest_label" value="Низший"/>
|
||||
<combo_box name="lod_source_lowest">
|
||||
<item label="Загрузка из файла" name="Load from file"/>
|
||||
<item label="Сгенерировать" name="Generate"/>
|
||||
<item label="Использовать УД выше" name="Use LoD above"/>
|
||||
<item name="MeshOpt Auto" label="Генерировать Авто"/>
|
||||
<item name="MeshOptCombine" label="Генерировать Точно"/>
|
||||
<item name="MeshOptSloppy" label="Генерировать Небрежно"/>
|
||||
<item name="Generate" label="Генерировать Надежный"/>
|
||||
<item name="Use LoD above" label="Использовать сверху"/>
|
||||
</combo_box>
|
||||
<button label="Обзор..." name="lod_browse_lowest"/>
|
||||
<combo_box name="lod_mode_lowest">
|
||||
|
|
@ -172,10 +195,40 @@
|
|||
<check_box label="Автоматический просмотр весов"
|
||||
tool_tip="Автоматически показывать веса в предпросмотре для ригованых мешей"
|
||||
name="mesh_preview_auto_show_weights"/>
|
||||
<text name="lod_suffix_label" width="110">
|
||||
LOD суффиксы:
|
||||
</text>
|
||||
<combo_box name="lod_suffix_combo" width="250" tool_tip="Выберите предустановку или установите свой собственный">
|
||||
<combo_item name="choose_one">Выберите стандарт или отредактируйте вручную...</combo_item>
|
||||
<combo_item name="suff_sl">Стандарт SL (Низший=LOD0)</combo_item>
|
||||
<combo_item name="suff_unity">Стандарт игровых движков (Низший=LOD3)</combo_item>
|
||||
<combo_item name="suff_descriptive">Слова (high,med...)</combo_item>
|
||||
</combo_box>
|
||||
<text name="suf_lowest_lab" width="60">
|
||||
Низший:
|
||||
</text>
|
||||
<line_editor name="suf_lowest" tool_tip="Суффикс, используемый для идентификации файла с низшим уровнем детализации на диске и моделей в файле."/>
|
||||
<text name="suf_low_lab" width="60">
|
||||
Низкий:
|
||||
</text>
|
||||
<line_editor name="suf_low" tool_tip="Суффикс, используемый для идентификации файла с низким уровнем детализации на диске и моделей в файле."/>
|
||||
<text name="suf_medium_lab" width="60">
|
||||
Средний:
|
||||
</text>
|
||||
<line_editor name="suf_medium" tool_tip="Суффикс, используемый для идентификации файла со средним уровнем детализации на диске и моделей в файле."/>
|
||||
<text name="suf_high_lab" width="60">
|
||||
Высокий:
|
||||
</text>
|
||||
<line_editor name="suf_high" tool_tip="Суффикс, используемый для идентификации файла с высоким уровнем детализации на диске и моделей в файле."/>
|
||||
<text name="suf_physics_lab" width="60">
|
||||
Физика:
|
||||
</text>
|
||||
<line_editor name="suf_physics" tool_tip="Суффикс, используемый для идентификации файла физики на диске и моделей в файле."/>
|
||||
<text name="mesh_preview_ud_preset_label">
|
||||
Предустановки физики:
|
||||
</text>
|
||||
<line_editor name="ud_physics" tool_tip="Полный системный путь к простому определению сетки Collada для использования в физике."/>
|
||||
<button label="Просмотр" label_selected="Просмотр" name="set_user_def_phys"/>
|
||||
<text name="mesh_preview_colors_label">
|
||||
Цвета предварительного просмотра:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
<text name="PostProcessText">
|
||||
Низкое
|
||||
</text>
|
||||
<check_box label="Включить VSync" name="vsync" tool_tip="Синхронизирует частоту кадров с частотой обновления монитора, что обеспечивает плавную работу."/>
|
||||
<text name="AvatarText">
|
||||
Аватар
|
||||
</text>
|
||||
|
|
@ -41,7 +42,6 @@
|
|||
(чем меньше, тем ярче, 0 – яркость по умолчанию)
|
||||
</text>
|
||||
<check_box label="Анизотропная фильтрация (медленнее, если включено)" name="ani"/>
|
||||
<check_box label="Включить буфер вершин объектов OpenGL" name="vbo" tool_tip="Включение этого параметра на современном оборудовании даст увеличение производительности. Однако на старом оборудовании это может привести к сбою приложения."/>
|
||||
<check_box label="Разрешить сжатие текстур (требует перезагрузки)" name="texture compression" tool_tip="Сжатие текстур в видеопамяти, что позволяет загружать текстуры большего размера за счет некоторого падения качества цвета."/>
|
||||
<check_box label="Включить поддержку HiDPI дисплея (нужен перезапуск)" name="use HiDPI" tool_tip="Разрешить OpenGL отображение с высоким разрешением."/>
|
||||
<text name="antialiasing label">
|
||||
|
|
@ -86,7 +86,6 @@
|
|||
<text name="TerrainDetailText">
|
||||
Низкая
|
||||
</text>
|
||||
<check_box label="Аппаратная отрисовка аватаров" name="AvatarVertexProgram"/>
|
||||
<check_box label="Одежда аватара" name="AvatarCloth"/>
|
||||
<text name="ReflectionsText">
|
||||
Вода отражает:
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@
|
|||
<container_view name="statistics_view">
|
||||
<stat_view label="Базовая" name="basic">
|
||||
<stat_bar label="Кадров/с" name="fps"/>
|
||||
<stat_bar name="frame_mean" label="кадр (значение)"/>
|
||||
<stat_bar name="frame_median" label="кадр (средний)"/>
|
||||
<stat_bar name="framet_jitter" label="дрожание"/>
|
||||
<stat_bar label="Ширина канала" name="bandwidth"/>
|
||||
<stat_bar label="Потери пакетов" name="packet_loss"/>
|
||||
<stat_bar label="Пинг" name="ping"/>
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
<menu_item_call label="Остановить анимации аватара" name="Stop Animating My Avatar"/>
|
||||
<menu_item_call label="Остановить анимации аватара и отменить разрешения" name="Stop Animating My Avatar With Revoke"/>
|
||||
<menu_item_call label="Раздеформировать аватара" name="undeform_avatar"/>
|
||||
<menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
|
||||
<menu_item_call label="Сброс скелета и анимаций" name="Reset Skeleton And Animations"/>
|
||||
<menu_item_call label="Принудительное обновление внешности (Rebake)" name="Rebake Texture"/>
|
||||
<menu_item_call label="Обновить присоединения" name="Refresh Attachments"/>
|
||||
<menu_item_call label="Сброс настроек мужского аватара (Тест персонажа)" name="ResetDefaultAvM"/>
|
||||
|
|
@ -537,7 +539,7 @@
|
|||
<menu_item_check label="Расширенное освещение" name="Advanced Lighting Model"/>
|
||||
<menu_item_check label="Тени для Солнца/Луны/Прожекторо" name="Shadows from Sun/Moon/Projectors"/>
|
||||
<menu_item_check label="SSAO и сглаживание теней" name="SSAO and Shadow Smoothing"/>
|
||||
<menu_item_check label="Отладка GL" name="Debug GL"/>
|
||||
<menu_item_check label="Запустить Отладку GL при следующем запуске" name="Debug GL"/>
|
||||
<menu_item_check label="Отладка конвейера" name="Debug Pipeline"/>
|
||||
<menu_item_check label="Автоматические альфа-маски (отложенные)" name="Automatic Alpha Masks (deferred)"/>
|
||||
<menu_item_check label="Автоматические альфа-маски (не отложенные)" name="Automatic Alpha Masks (non-deferred)"/>
|
||||
|
|
|
|||
|
|
@ -3962,16 +3962,6 @@ https://wiki.firestormviewer.org/fs_voice
|
|||
Выбранный объект влияет на навигационную сетку. Если заменить его на гибкий путь, он будет удален из навигационной сетки.
|
||||
<usetemplate ignoretext="Выбранный объект влияет на навигационную сетку. Если заменить его на гибкий путь, он будет удален из навигационной сетки." name="okcancelignore" notext="Отмена" yestext="OK"/>
|
||||
</notification>
|
||||
<global name="UnsupportedShaderRequirements">
|
||||
Ваше оборудование не соответствуете требованиям для [APP_NAME]. [APP_NAME] требуется поддержка шейдеров OpenGL 2.0 или новее. В этом случае вы можете убедиться, что у вас установлены последние версии драйверов для вашей видеокарты, а также пакеты обновления и исправления для вашей операционной системы.
|
||||
|
||||
Если проблема не исчезнет, посетите [SUPPORT_SITE].
|
||||
</global>
|
||||
<global name="UnsupportedGLRequirements">
|
||||
По-видимому, ваше оборудование не удовлетворяет требованиям [APP_NAME]. Для работы [APP_NAME] необходима графическая карта OpenGL с поддержкой мультитекстур. Если у вас есть такая карта, убедитесь, что установлены новейшие версии драйверов для нее и пакеты обновлений и исправления для операционной системы.
|
||||
|
||||
Если неполадки продолжаются, посетите сайт [SUPPORT_SITE].
|
||||
</global>
|
||||
<global name="UnsupportedIntelDriver">
|
||||
Установленный графический драйвер Intel для [GPUNAME], версия [VERSION], значительно устарел и, как известно, вызывает чрезмерно частые сбои программы. Настоятельно рекомендуется установить последнюю версию драйвера Intel.
|
||||
|
||||
|
|
|
|||
|
|
@ -4,13 +4,15 @@
|
|||
<layout_stack name="widget_stack">
|
||||
<layout_panel name="widget_container">
|
||||
<combo_box label="Пользователь"
|
||||
tool_tip="Имя пользователя, которое вы выбирали при регистрации, например: bobsmith12 or Steller Sunshine"
|
||||
tool_tip="Имя пользователя, которое вы выбирали при регистрации, например: bobsmith12 или Steller Sunshine"
|
||||
name="username_combo"/>
|
||||
<line_editor name="password_edit" label="Пароль"/>
|
||||
<button label="Войти" name="connect_btn"/>
|
||||
<check_box label="Запомнить меня" name="remember_check"/>
|
||||
<text name="forgot_password_text">Забыли пароль</text>
|
||||
<text name="sign_up_text">Регистрация</text>
|
||||
<check_box label="Запомнить меня" name="remember_name"
|
||||
tool_tip="Уже запомнившийся пользователь может быть забыт из меню Аватар > Настройки > Дополнительно > Запомнившиеся имена пользователей."/>
|
||||
<check_box label="Запомнить пароль" name="remember_password"/>
|
||||
<text name="forgot_password_text">Забыли пароль</text>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@
|
|||
</panel>
|
||||
<panel label="Аппаратные установки" name="Hardware Settings">
|
||||
<check_box label="Анизотропная фильтрация (медленнее, когда включено)" name="ani" tool_tip = "Этот флажок включает анизотропную фильтрацию, которая представляет собой метод повышения качества текстур, когда они просматриваются под относительно большими углами по отношению к положению вашей камеры. Обычно заставляет их выглядеть менее размытыми на больших расстояниях."/>
|
||||
<check_box label="Включить OpenGL Vertex Buffer Object (VBO)" name="vbo" tool_tip="Включение этого на современном оборудовании дает выигрыш в производительности. Тем не менее, старое оборудование часто имеет плохую реализацию VBO и может вызвать сбой, если вы это включите."/>
|
||||
<check_box label="Включить VSync" name="vsync" tool_tip="Синхронизирует частоту кадров с частотой обновления монитора, что обеспечивает плавную работу."/>
|
||||
<check_box label="Включить потоковое VBO" name="vbo_stream" tool_tip="Отключение этого может улучшить производительность при включеном VBO. Наблюдение показало, что отключение давало улучшения на различных графических картах AMD и Intel."/>
|
||||
<check_box label="Включить сжатие текстур с потерями (требуется перезапуск)" name="texture compression" tool_tip="Сжатие текстур в видеопамяти, позволяет текстурам с высоким разрешение загружаться за счет некоторого потери качества цвета."/>
|
||||
<check_box label="Включить поддержку дисплеев HiDPI (только Mac OSX; требуется перезапуск)" name="use HiDPI" tool_tip="Включить OpenGL для отображения в высоком разрешении."/>
|
||||
|
|
|
|||
|
|
@ -114,6 +114,9 @@ SLURL: <nolink>[SLURL]</nolink>
|
|||
<string name="AboutTime">
|
||||
[day, datetime, slt] [month, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt] SLT
|
||||
</string>
|
||||
<string name="LocalTime">
|
||||
[day, datetime, local] [month, datetime, local] [year, datetime, local] [hour, datetime, local]:[min, datetime, local]:[second,datetime, local]
|
||||
</string>
|
||||
<string name="ErrorFetchingServerReleaseNotesURL">
|
||||
Ошибка при получении URL-адреса заметок о выпуске сервера.
|
||||
</string>
|
||||
|
|
@ -243,6 +246,10 @@ https://www.firestormviewer.org/choose-your-platform/
|
|||
|
||||
Дополнительные сведения смотрите в разделе вопросов и ответов по адресу:
|
||||
http://secondlife.com/viewer-access-faq
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
Аварийный сбой входа в сеть.
|
||||
Если вы считаете, что это ошибка, пожалуйста, свяжитесь со службой поддержки сети.
|
||||
</string>
|
||||
<string name="LoginIntermediateOptionalUpdateAvailable">
|
||||
Доступно необязательное обновление клиента: [VERSION]
|
||||
|
|
@ -288,9 +295,12 @@ http://secondlife.com/viewer-access-faq
|
|||
Если вы считаете, что это ошибка, отправьте сообщение по адресу
|
||||
support@secondlife.com.
|
||||
</string>
|
||||
<string name="PacificTime">
|
||||
Тихоокеанское время
|
||||
</string>
|
||||
<string name="LoginFailedAcountSuspended">
|
||||
Ваш аккаунт не будет доступен до
|
||||
[TIME] по тихоокеанскому времени. (PST)
|
||||
[TIME]
|
||||
</string>
|
||||
<string name="LoginFailedAccountDisabled">
|
||||
В данное время нам не удается выполнить ваш запрос.
|
||||
|
|
@ -303,7 +313,7 @@ support@secondlife.com.
|
|||
<string name="LoginFailedAccountMaintenance">
|
||||
Выполняется техническое обслуживание вашего аккаунта.
|
||||
Ваш аккаунт не будет доступен до
|
||||
[TIME] по тихоокеанскому времени.
|
||||
[TIME]
|
||||
Если вы считаете, что это ошибка, отправьте сообщение по адресу support@secondlife.com.
|
||||
</string>
|
||||
<string name="LoginFailedPendingLogoutFault">
|
||||
|
|
@ -6414,6 +6424,7 @@ ID объекта: [INSPECTING_KEY]
|
|||
Выложено: [OBJECT_REZZER_KEY]
|
||||
Группа: [OBJECT_GROUP]
|
||||
Время создания: [OBJECT_CREATION_TIME]
|
||||
Время размещения: [OBJECT_REZ_TIME]
|
||||
Тип поиска пути: [OBJECT_PATHFINDING_TYPE]
|
||||
Присоединено к: [OBJECT_ATTACHED_POINT]
|
||||
Временно присоединено: [OBJECT_TEMP_ATTACHED]
|
||||
|
|
@ -6639,10 +6650,10 @@ ID объекта: [INSPECTING_KEY]
|
|||
Ошибка кэширования подключенного файла '[FILENAME]'
|
||||
</string>
|
||||
<string name="skin_defaults_starlight_location">
|
||||
Отображение вашего текущего местоположения в меню было отключено по умолчанию для серии тем Starlight.
|
||||
Отображение вашего текущего местоположения в строке меню было отключено по умолчанию для серии скинов Starlight.
|
||||
</string>
|
||||
<string name="skin_defaults_starlight_navbar">
|
||||
Отображение панели навигации было включено по умолчанию для серии тем Starlight.
|
||||
Отображение панели навигации было включено по умолчанию для серии скинов Starlight.
|
||||
</string>
|
||||
<string name="fs_preprocessor_truncated">
|
||||
Предупреждение: Выходные данные препроцессора усечены из-за чрезмерного размера текста скрипта. Этот скрипт, скорее всего, не будет работать.
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@ with the same filename but different name
|
|||
<texture name="Checker" file_name="checker.png" preload="false" />
|
||||
|
||||
<texture name="Command_AboutLand_Icon" file_name="toolbar_icons/land.png" preload="true" />
|
||||
<texture name="Command_ALM_Icon" file_name="toolbar_icons/alm.png" preload="true" />
|
||||
<texture name="Command_Appearance_Icon" file_name="toolbar_icons/appearance.png" preload="true" />
|
||||
<texture name="Command_Avatar_Icon" file_name="toolbar_icons/avatars.png" preload="true" />
|
||||
<texture name="Command_Build_Icon" file_name="toolbar_icons/build.png" preload="true" />
|
||||
|
|
@ -869,7 +868,6 @@ with the same filename but different name
|
|||
<texture name="Inv_OutboxClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_SettingsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_SettingsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Parcel_Windlight" file_name="icons/Parcel_WindLight.png" preload="false" />
|
||||
<texture name="TabIcon_Translate_Off" file_name="taskpanel/translate_icon_24x24.png" preload="false" />
|
||||
<texture name="ao_toggle_18" file_name="toolbar_icons/animation_override.png" preload="false" />
|
||||
<texture name="groundsit" file_name="toolbar_icons/groundsit.png" preload="true" />
|
||||
|
|
@ -914,7 +912,6 @@ with the same filename but different name
|
|||
<texture name="Icon_Legacy_Event_PG" file_name="icon_legacy_event.tga" preload="false" />
|
||||
<texture name="Icon_Legacy_Event_Mature" file_name="icon_legacy_event_mature.tga" preload="false" />
|
||||
<texture name="Icon_Legacy_Event_Adult" file_name="icon_legacy_event_adult.tga" preload="false" />
|
||||
<texture name="Icon_Lightshare" file_name="icons/Icon_Lightshare.png" preload="false" />
|
||||
<texture name="ExternalBrowser_Over" file_name="icons/ExternalBrowser_Over.png" preload="false" />
|
||||
<texture name="ExternalBrowser_Press" file_name="icons/ExternalBrowser_Press.png" preload="false" />
|
||||
<texture name="radar" file_name="toolbar_icons/radar.png" preload="true" />
|
||||
|
|
@ -956,9 +953,6 @@ with the same filename but different name
|
|||
<texture name="Payment_Info_Filled" file_name="legacy/payment_info_filled.tga" preload="false" />
|
||||
<texture name="Payment_Info_Used" file_name="legacy/payment_info_used.tga" preload="false" />
|
||||
|
||||
<!-- <exodus> inc in FS -->
|
||||
<texture name="Snapshot_Exodus_Flickr" file_name="snapshot_flickr.png" preload="false" />
|
||||
<!-- </exodus> inc in FS -->
|
||||
<!-- FS:Ansariel: Icons for V1 status bar -->
|
||||
<texture name="Pathfinding_Dirty_Light" file_name="icons/Pathfinding_Dirty_Light.png" preload="false" />
|
||||
<texture name="Pathfinding_Disabled_Light" file_name="icons/Pathfinding_Disabled_Light.png" preload="false" />
|
||||
|
|
@ -1011,72 +1005,4 @@ with the same filename but different name
|
|||
<texture name="OutboxPush_Selected_Disabled" file_name="icons/OutboxPush_Selected_Disabled.png" preload="true" />
|
||||
<texture name="OutboxPush_Selected_Over" file_name="icons/OutboxPush_Selected_Over.png" preload="true" />
|
||||
<texture name="OutboxPush_Selected_Press" file_name="icons/OutboxPush_Selected_Press.png" preload="true" />
|
||||
|
||||
<!-- Dolphin Textures -->
|
||||
|
||||
<texture name="Avatar_Offset" file_name="icons/Arrow_UpDown.png" preload="true" />
|
||||
<texture name="DrawDistance" file_name="icons/Icon_Horizon.png" preload="true" />
|
||||
<texture name="Command_AOMenu_Icon" file_name="toolbar_icons/ao_toggle_18.png" preload="true" />
|
||||
<texture name="Command_AreaSearch_Icon" file_name="toolbar_icons/areasearch.png" preload="true" />
|
||||
<texture name="Command_AOSwitch_Icon" file_name="toolbar_icons/ao_onoff.png" preload="true" />
|
||||
<texture name="Command_Machinima_Icon" file_name="toolbar_icons/video-icon.png" preload="true" />
|
||||
<texture name="Land_Off" file_name="navbar/Land_Off.png" preload="false" />
|
||||
<texture name="Object_Sculpt" file_name="build/Object_Sculpt.png" preload="false" />
|
||||
<texture name="Object_Sculpt_Selected" file_name="build/Object_Sculpt_Selected.png" preload="false" />
|
||||
<texture name="Snapshot_Flickr" file_name="snapshot_flickr.png" preload="false" />
|
||||
<!-- Also in Catznip -->
|
||||
<texture name="Permission_Ungranted" file_name="icons/Permission_Ungranted.png" preload="false" />
|
||||
<!-- Also in RLV -->
|
||||
<texture name="Command_Conversations_Icon" file_name="toolbar_icons/conversations.png" preload="true" />
|
||||
|
||||
<!-- Catznip Textures -->
|
||||
|
||||
<texture name="Icon_Collapse_Foreground" file_name="windows/Icon_Collapse_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Collapse_Press" file_name="windows/Icon_Collapse_Press.png" preload="true" />
|
||||
<texture name="Arrow_Small_Down" file_name="widgets/Arrow_Small_Down.png" preload="true" />
|
||||
<texture name="Sort" file_name="icons/Sort.png" preload="false" />
|
||||
<texture name="Inv_Collapse" file_name="icons/Inv_Collapse.png" preload="false" />
|
||||
|
||||
<!-- Exodus Textures -->
|
||||
|
||||
<texture name="Corner_Checkbox_Off" file_name="widgets/Corner_Checkbox_Off.png" preload="true" />
|
||||
<texture name="Corner_Checkbox_On" file_name="widgets/Corner_Checkbox_On.png" preload="true" />
|
||||
<texture name="Corner_Checkbox_Disabled" file_name="widgets/Corner_Checkbox_Disabled.png" preload="true" />
|
||||
|
||||
<texture name="Command_Exodus_Advanced_Graphics_Icon" file_name="exo_toolbar_icons/visuals.png" preload="true" />
|
||||
<texture name="Command_Exodus_Animation_Overrider_Icon" file_name="exo_toolbar_icons/animations.png" preload="true" />
|
||||
<texture name="Command_Exodus_Communicate_Icon" file_name="exo_toolbar_icons/communicate.png" preload="true" />
|
||||
<texture name="Command_Exodus_Debug_Settings_Icon" file_name="exo_toolbar_icons/debug.png" preload="true" />
|
||||
<texture name="Command_Exodus_Preferences_Icon" file_name="exo_toolbar_icons/exodus.png" preload="true" />
|
||||
<texture name="Command_Exodus_Ground_Sit_Icon" file_name="exo_toolbar_icons/groundsit.png" preload="true" />
|
||||
<texture name="Command_Exodus_Minimal_Radar_Icon" file_name="exo_toolbar_icons/miniradar.png" preload="true" />
|
||||
<texture name="Command_Exodus_Minimal_Statistics_Icon" file_name="exo_toolbar_icons/ministats.png" preload="true" />
|
||||
<texture name="Command_Exodus_Quick_Preferences_Icon" file_name="exo_toolbar_icons/quicktools.png" preload="true" />
|
||||
<texture name="Command_Exodus_Raid_Advisor_Icon" file_name="exo_toolbar_icons/raidadvisor.png" preload="true" />
|
||||
<texture name="Command_Exodus_Redraw_Icon" file_name="exo_toolbar_icons/redraw.png" preload="true" />
|
||||
<texture name="Command_Exodus_Set_Home_Icon" file_name="exo_toolbar_icons/sethome.png" preload="true" />
|
||||
<texture name="Command_Exodus_Statistics_Icon" file_name="exo_toolbar_icons/stats.png" preload="true" />
|
||||
<texture name="Command_Exodus_Teleport_Home_Icon" file_name="exo_toolbar_icons/teleporthome.png" preload="true" />
|
||||
<texture name="Command_Exodus_Panic_Icon" file_name="exo_toolbar_icons/panic.png" preload="true" />
|
||||
<texture name="Command_Exodus_Web_Icon" file_name="exo_toolbar_icons/web.png" preload="true" />
|
||||
|
||||
<texture name="Caret_Top_Icon" file_name="toolbar_icons/caret_top.png" preload="true" scale.left="1" scale.top="15" scale.right="23" scale.bottom="1" />
|
||||
<texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
|
||||
|
||||
<texture name="Icon_Left_Align_Foreground" file_name="windows/Icon_Left_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Left_Align_Press" file_name="windows/Icon_Left_Align_Press.png" preload="true" />
|
||||
<texture name="Icon_Center_Align_Foreground" file_name="windows/Icon_Center_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Center_Align_Press" file_name="windows/Icon_Center_Align_Press.png" preload="true" />
|
||||
<texture name="Icon_Right_Align_Foreground" file_name="windows/Icon_Right_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Right_Align_Press" file_name="windows/Icon_Right_Align_Press.png" preload="true" />
|
||||
|
||||
<texture name="Inv_FolderClosed_White" file_name="icons/Inv_FolderClosed_White.png" preload="false" />
|
||||
<texture name="Inv_FolderOpen_White" file_name="icons/Inv_FolderOpen_White.png" preload="false" />
|
||||
<texture name="Inv_Evon" file_name="icons/Inv_Evon.png" preload="false" />
|
||||
|
||||
<texture name="Snapshot_Exodus_Flickr_Feature" file_name="snapshot_flickr_feature.png" preload="false" />
|
||||
|
||||
<texture name="Inventory_Icons" file_name="inventory_icons.png" preload="false" />
|
||||
<texture name="Script_Themes" file_name="script_themes.png" preload="false" />
|
||||
|
||||
</textures>
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@ with the same filename but different name
|
|||
<texture name="Checker" file_name="checker.png" preload="false" />
|
||||
|
||||
<texture name="Command_AboutLand_Icon" file_name="toolbar_icons/land.png" preload="true" />
|
||||
<texture name="Command_ALM_Icon" file_name="toolbar_icons/alm.png" preload="true" />
|
||||
<texture name="Command_Appearance_Icon" file_name="toolbar_icons/appearance.png" preload="true" />
|
||||
<texture name="Command_Avatar_Icon" file_name="toolbar_icons/avatars.png" preload="true" />
|
||||
<texture name="Command_Build_Icon" file_name="toolbar_icons/build.png" preload="true" />
|
||||
|
|
@ -869,7 +868,6 @@ with the same filename but different name
|
|||
<texture name="Inv_OutboxClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_SettingsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_SettingsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Parcel_Windlight" file_name="icons/Parcel_WindLight.png" preload="false" />
|
||||
<texture name="TabIcon_Translate_Off" file_name="taskpanel/translate_icon_24x24.png" preload="false" />
|
||||
<texture name="ao_toggle_18" file_name="toolbar_icons/animation_override.png" preload="false" />
|
||||
<texture name="groundsit" file_name="toolbar_icons/groundsit.png" preload="true" />
|
||||
|
|
@ -914,7 +912,6 @@ with the same filename but different name
|
|||
<texture name="Icon_Legacy_Event_PG" file_name="icon_legacy_event.tga" preload="false" />
|
||||
<texture name="Icon_Legacy_Event_Mature" file_name="icon_legacy_event_mature.tga" preload="false" />
|
||||
<texture name="Icon_Legacy_Event_Adult" file_name="icon_legacy_event_adult.tga" preload="false" />
|
||||
<texture name="Icon_Lightshare" file_name="icons/Icon_Lightshare.png" preload="false" />
|
||||
<texture name="ExternalBrowser_Over" file_name="icons/ExternalBrowser_Over.png" preload="false" />
|
||||
<texture name="ExternalBrowser_Press" file_name="icons/ExternalBrowser_Press.png" preload="false" />
|
||||
<texture name="radar" file_name="toolbar_icons/radar.png" preload="true" />
|
||||
|
|
@ -956,9 +953,6 @@ with the same filename but different name
|
|||
<texture name="Payment_Info_Filled" file_name="legacy/payment_info_filled.tga" preload="false" />
|
||||
<texture name="Payment_Info_Used" file_name="legacy/payment_info_used.tga" preload="false" />
|
||||
|
||||
<!-- <exodus> inc in FS -->
|
||||
<texture name="Snapshot_Exodus_Flickr" file_name="snapshot_flickr.png" preload="false" />
|
||||
<!-- </exodus> inc in FS -->
|
||||
<!-- FS:Ansariel: Icons for V1 status bar -->
|
||||
<texture name="Pathfinding_Dirty_Light" file_name="icons/Pathfinding_Dirty_Light.png" preload="false" />
|
||||
<texture name="Pathfinding_Disabled_Light" file_name="icons/Pathfinding_Disabled_Light.png" preload="false" />
|
||||
|
|
@ -984,8 +978,6 @@ with the same filename but different name
|
|||
<texture name="StarLight_Map" file_name="bottomtray/starlight_map.png" preload="true" />
|
||||
<texture name="StarLight_Minimap" file_name="bottomtray/starlight_minimap.png" preload="true" />
|
||||
<texture name="StarLight_Search" file_name="bottomtray/starlight_search.png" preload="true" />
|
||||
<texture name="StarLight_Build" file_name="bottomtray/starlight_build.png" preload="true" />
|
||||
<texture name="StarLight_Gesture" file_name="bottomtray/starlight_gesture.png" preload="true" />
|
||||
<texture name="AddItem_Over" file_name="icons/AddItem_Over.png" preload="false" />
|
||||
<texture name="Cam_FreeCam_Off_Pref" file_name="bottomtray/Cam_FreeCam_Off_Pref.png" preload="false" />
|
||||
<texture name="Move_Walk_Off_Pref" file_name="bottomtray/Move_Walk_Off_Pref.png" preload="false" />
|
||||
|
|
@ -1011,72 +1003,4 @@ with the same filename but different name
|
|||
<texture name="OutboxPush_Selected_Disabled" file_name="icons/OutboxPush_Selected_Disabled.png" preload="true" />
|
||||
<texture name="OutboxPush_Selected_Over" file_name="icons/OutboxPush_Selected_Over.png" preload="true" />
|
||||
<texture name="OutboxPush_Selected_Press" file_name="icons/OutboxPush_Selected_Press.png" preload="true" />
|
||||
|
||||
<!-- Dolphin Textures -->
|
||||
|
||||
<texture name="Avatar_Offset" file_name="icons/Arrow_UpDown.png" preload="true" />
|
||||
<texture name="DrawDistance" file_name="icons/Icon_Horizon.png" preload="true" />
|
||||
<texture name="Command_AOMenu_Icon" file_name="toolbar_icons/ao_toggle_18.png" preload="true" />
|
||||
<texture name="Command_AreaSearch_Icon" file_name="toolbar_icons/areasearch.png" preload="true" />
|
||||
<texture name="Command_AOSwitch_Icon" file_name="toolbar_icons/ao_onoff.png" preload="true" />
|
||||
<texture name="Command_Machinima_Icon" file_name="toolbar_icons/video-icon.png" preload="true" />
|
||||
<texture name="Land_Off" file_name="navbar/Land_Off.png" preload="false" />
|
||||
<texture name="Object_Sculpt" file_name="build/Object_Sculpt.png" preload="false" />
|
||||
<texture name="Object_Sculpt_Selected" file_name="build/Object_Sculpt_Selected.png" preload="false" />
|
||||
<texture name="Snapshot_Flickr" file_name="snapshot_flickr.png" preload="false" />
|
||||
<!-- Also in Catznip -->
|
||||
<texture name="Permission_Ungranted" file_name="icons/Permission_Ungranted.png" preload="false" />
|
||||
<!-- Also in RLV -->
|
||||
<texture name="Command_Conversations_Icon" file_name="toolbar_icons/conversations.png" preload="true" />
|
||||
|
||||
<!-- Catznip Textures -->
|
||||
|
||||
<texture name="Icon_Collapse_Foreground" file_name="windows/Icon_Collapse_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Collapse_Press" file_name="windows/Icon_Collapse_Press.png" preload="true" />
|
||||
<texture name="Arrow_Small_Down" file_name="widgets/Arrow_Small_Down.png" preload="true" />
|
||||
<texture name="Sort" file_name="icons/Sort.png" preload="false" />
|
||||
<texture name="Inv_Collapse" file_name="icons/Inv_Collapse.png" preload="false" />
|
||||
|
||||
<!-- Exodus Textures -->
|
||||
|
||||
<texture name="Corner_Checkbox_Off" file_name="widgets/Corner_Checkbox_Off.png" preload="true" />
|
||||
<texture name="Corner_Checkbox_On" file_name="widgets/Corner_Checkbox_On.png" preload="true" />
|
||||
<texture name="Corner_Checkbox_Disabled" file_name="widgets/Corner_Checkbox_Disabled.png" preload="true" />
|
||||
|
||||
<texture name="Command_Exodus_Advanced_Graphics_Icon" file_name="exo_toolbar_icons/visuals.png" preload="true" />
|
||||
<texture name="Command_Exodus_Animation_Overrider_Icon" file_name="exo_toolbar_icons/animations.png" preload="true" />
|
||||
<texture name="Command_Exodus_Communicate_Icon" file_name="exo_toolbar_icons/communicate.png" preload="true" />
|
||||
<texture name="Command_Exodus_Debug_Settings_Icon" file_name="exo_toolbar_icons/debug.png" preload="true" />
|
||||
<texture name="Command_Exodus_Preferences_Icon" file_name="exo_toolbar_icons/exodus.png" preload="true" />
|
||||
<texture name="Command_Exodus_Ground_Sit_Icon" file_name="exo_toolbar_icons/groundsit.png" preload="true" />
|
||||
<texture name="Command_Exodus_Minimal_Radar_Icon" file_name="exo_toolbar_icons/miniradar.png" preload="true" />
|
||||
<texture name="Command_Exodus_Minimal_Statistics_Icon" file_name="exo_toolbar_icons/ministats.png" preload="true" />
|
||||
<texture name="Command_Exodus_Quick_Preferences_Icon" file_name="exo_toolbar_icons/quicktools.png" preload="true" />
|
||||
<texture name="Command_Exodus_Raid_Advisor_Icon" file_name="exo_toolbar_icons/raidadvisor.png" preload="true" />
|
||||
<texture name="Command_Exodus_Redraw_Icon" file_name="exo_toolbar_icons/redraw.png" preload="true" />
|
||||
<texture name="Command_Exodus_Set_Home_Icon" file_name="exo_toolbar_icons/sethome.png" preload="true" />
|
||||
<texture name="Command_Exodus_Statistics_Icon" file_name="exo_toolbar_icons/stats.png" preload="true" />
|
||||
<texture name="Command_Exodus_Teleport_Home_Icon" file_name="exo_toolbar_icons/teleporthome.png" preload="true" />
|
||||
<texture name="Command_Exodus_Panic_Icon" file_name="exo_toolbar_icons/panic.png" preload="true" />
|
||||
<texture name="Command_Exodus_Web_Icon" file_name="exo_toolbar_icons/web.png" preload="true" />
|
||||
|
||||
<texture name="Caret_Top_Icon" file_name="toolbar_icons/caret_top.png" preload="true" scale.left="1" scale.top="15" scale.right="23" scale.bottom="1" />
|
||||
<texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
|
||||
|
||||
<texture name="Icon_Left_Align_Foreground" file_name="windows/Icon_Left_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Left_Align_Press" file_name="windows/Icon_Left_Align_Press.png" preload="true" />
|
||||
<texture name="Icon_Center_Align_Foreground" file_name="windows/Icon_Center_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Center_Align_Press" file_name="windows/Icon_Center_Align_Press.png" preload="true" />
|
||||
<texture name="Icon_Right_Align_Foreground" file_name="windows/Icon_Right_Align_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Right_Align_Press" file_name="windows/Icon_Right_Align_Press.png" preload="true" />
|
||||
|
||||
<texture name="Inv_FolderClosed_White" file_name="icons/Inv_FolderClosed_White.png" preload="false" />
|
||||
<texture name="Inv_FolderOpen_White" file_name="icons/Inv_FolderOpen_White.png" preload="false" />
|
||||
<texture name="Inv_Evon" file_name="icons/Inv_Evon.png" preload="false" />
|
||||
|
||||
<texture name="Snapshot_Exodus_Flickr_Feature" file_name="snapshot_flickr_feature.png" preload="false" />
|
||||
|
||||
<texture name="Inventory_Icons" file_name="inventory_icons.png" preload="false" />
|
||||
<texture name="Script_Themes" file_name="script_themes.png" preload="false" />
|
||||
|
||||
</textures>
|
||||
|
|
|
|||
|
|
@ -600,6 +600,14 @@ class WindowsManifest(ViewerManifest):
|
|||
# Get shared libs from the shared libs staging directory
|
||||
with self.prefix(src=os.path.join(self.args['build'], os.pardir,
|
||||
'sharedlibs', self.args['configuration'])):
|
||||
|
||||
# Mesh 3rd party libs needed for auto LOD and collada reading
|
||||
try:
|
||||
self.path("glod.dll")
|
||||
except RuntimeError as err:
|
||||
print (err.message)
|
||||
print ("Skipping GLOD library (assumming linked statically)")
|
||||
|
||||
# Get fmodstudio dll if needed
|
||||
if self.args['fmodstudio'] == 'ON':
|
||||
if(self.args['configuration'].lower() == 'debug'):
|
||||
|
|
@ -1442,6 +1450,7 @@ class DarwinManifest(ViewerManifest):
|
|||
"libapr-1.0.dylib",
|
||||
"libaprutil-1.0.dylib",
|
||||
"libexpat.1.dylib",
|
||||
"libGLOD.dylib",
|
||||
# libnghttp2.dylib is a symlink to
|
||||
# libnghttp2.major.dylib, which is a symlink
|
||||
# to libnghttp2.version.dylib. Get all of them.
|
||||
|
|
@ -2135,6 +2144,7 @@ class Linux_i686_Manifest(LinuxManifest):
|
|||
self.path("libaprutil-1.so.0.4.1")
|
||||
self.path("libdb*.so")
|
||||
self.path("libexpat.so.*")
|
||||
self.path("libGLOD.so")
|
||||
self.path("libuuid.so*")
|
||||
self.path("libSDL-1.2.so.*")
|
||||
self.path("libdirectfb-1.*.so.*")
|
||||
|
|
|
|||
Loading…
Reference in New Issue