Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
b7d3cab3f2
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
|
||||
|
|
|
|||
|
|
@ -112,8 +112,8 @@ public:
|
|||
void interruptLanguageTextInput() override;
|
||||
void spawnWebBrowser(const std::string& escaped_url, bool async) override;
|
||||
F32 getSystemUISize() override;
|
||||
/*virtual*/ void openFile(const std::string& file_name);
|
||||
/*virtual*/ void setTitle(const std::string& title);
|
||||
void openFile(const std::string& file_name) override;
|
||||
void setTitle(const std::string& title) override;
|
||||
|
||||
static std::vector<std::string> getDisplaysResolutionList();
|
||||
|
||||
|
|
|
|||
|
|
@ -3024,4 +3024,26 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
|
|||
return rtns;
|
||||
}
|
||||
|
||||
void* LLWindowSDL::createSharedContext()
|
||||
{
|
||||
LL_WARNS() << "Not available" << LL_ENDL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void LLWindowSDL::makeContextCurrent(void* contextPtr)
|
||||
{
|
||||
LL_WARNS() << "Not available" << LL_ENDL;
|
||||
LL_PROFILER_GPU_CONTEXT;
|
||||
}
|
||||
|
||||
void LLWindowSDL::destroySharedContext(void* contextPtr)
|
||||
{
|
||||
LL_WARNS() << "Not available" << LL_ENDL;
|
||||
}
|
||||
|
||||
void LLWindowSDL::toggleVSync(bool enable_vsync)
|
||||
{
|
||||
LL_WARNS() << "Not available" << LL_ENDL;
|
||||
}
|
||||
|
||||
#endif // LL_SDL
|
||||
|
|
|
|||
|
|
@ -151,7 +151,11 @@ public:
|
|||
static Window get_SDL_XWindowID(void);
|
||||
static Display* get_SDL_Display(void);
|
||||
#endif // LL_X11
|
||||
|
||||
void* createSharedContext() override;
|
||||
void makeContextCurrent(void* context) override;
|
||||
void destroySharedContext(void* context) override;
|
||||
void toggleVSync(bool enable_vsync) override;
|
||||
|
||||
protected:
|
||||
LLWindowSDL(LLWindowCallbacks* callbacks,
|
||||
const std::string& title, int x, int y, int width, int height, U32 flags,
|
||||
|
|
|
|||
|
|
@ -78,7 +78,10 @@ static bool ATIbug = false;
|
|||
// be only one object of this class at any time. Currently this is true.
|
||||
static LLWindowSDL *gWindowImplementation = NULL;
|
||||
|
||||
|
||||
// extern "C" Bool XineramaIsActive (Display *dpy)
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
void maybe_lock_display(void)
|
||||
{
|
||||
if (gWindowImplementation && gWindowImplementation->Lock_Display) {
|
||||
|
|
@ -649,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 )
|
||||
{
|
||||
|
|
@ -713,6 +717,8 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
|
|||
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mFSAASamples);
|
||||
}
|
||||
|
||||
// <FS:Zi> Make shared context work on Linux for multithreaded OpenGL
|
||||
SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1);
|
||||
mWindow = SDL_CreateWindow( mWindowTitle.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, mSDLFlags );
|
||||
|
||||
if( mWindow )
|
||||
|
|
@ -863,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
|
||||
|
|
@ -1773,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;
|
||||
}
|
||||
|
|
@ -1787,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)
|
||||
|
|
@ -1806,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
|
||||
|
||||
|
|
@ -1909,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)
|
||||
|
|
@ -2560,4 +2582,57 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
|
|||
return rtns;
|
||||
}
|
||||
|
||||
// <FS:Zi> Make shared context work on Linux for multithreaded OpenGL
|
||||
class sharedContext
|
||||
{
|
||||
public:
|
||||
SDL_GLContext mContext;
|
||||
};
|
||||
|
||||
void* LLWindowSDL::createSharedContext()
|
||||
{
|
||||
sharedContext* sc = new sharedContext();
|
||||
sc->mContext = SDL_GL_CreateContext(mWindow);
|
||||
if (sc->mContext)
|
||||
{
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
SDL_GL_MakeCurrent(mWindow, mContext);
|
||||
|
||||
LLCoordScreen size;
|
||||
if (getSize(&size))
|
||||
{
|
||||
setSize(size);
|
||||
}
|
||||
|
||||
LL_DEBUGS() << "Creating shared OpenGL context successful!" << LL_ENDL;
|
||||
|
||||
return (void*)sc;
|
||||
}
|
||||
|
||||
LL_WARNS() << "Creating shared OpenGL context failed!" << LL_ENDL;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void LLWindowSDL::makeContextCurrent(void* context)
|
||||
{
|
||||
LL_PROFILER_GPU_CONTEXT;
|
||||
SDL_GL_MakeCurrent(mWindow, ((sharedContext*)context)->mContext);
|
||||
}
|
||||
|
||||
void LLWindowSDL::destroySharedContext(void* context)
|
||||
{
|
||||
sharedContext* sc = (sharedContext*)context;
|
||||
|
||||
SDL_GL_DeleteContext(sc->mContext);
|
||||
|
||||
delete sc;
|
||||
}
|
||||
|
||||
void LLWindowSDL::toggleVSync(bool enable_vsync)
|
||||
{
|
||||
SDL_GL_SetSwapInterval(enable_vsync);
|
||||
}
|
||||
// </FS:Zi>
|
||||
|
||||
#endif // LL_SDL
|
||||
|
|
|
|||
|
|
@ -66,6 +66,12 @@ public:
|
|||
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
|
||||
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
|
||||
// <FS:Zi> Make shared context work on Linux for multithreaded OpenGL
|
||||
void* createSharedContext() override;
|
||||
void makeContextCurrent(void* context) override;
|
||||
void destroySharedContext(void* context) override;
|
||||
/*virtual*/ void toggleVSync(bool enable_vsync);
|
||||
// </FS:Zi>
|
||||
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
|
||||
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
|
||||
/*virtual*/ void showCursor();
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
@ -2272,6 +2274,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
|
||||
|
|
@ -2521,6 +2528,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}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ RenderAvatarLODFactor 1 1.0
|
|||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxNonImpostors 1 16
|
||||
RenderAvatarMaxComplexity 1 350000
|
||||
RenderAvatarVP 1 1
|
||||
RenderAutoMuteSurfaceAreaLimit 1 1000.0
|
||||
RenderCubeMap 1 1
|
||||
RenderDelayVBUpdate 1 0
|
||||
|
|
@ -70,7 +69,7 @@ RenderShadowDetail 1 2
|
|||
RenderUseStreamVBO 1 1
|
||||
RenderFSAASamples 1 16
|
||||
RenderMaxTextureIndex 1 16
|
||||
RenderGLCoreProfile 1 1
|
||||
RenderGLContextCoreProfile 1 1
|
||||
RenderGLMultiThreaded 1 1
|
||||
|
||||
|
||||
|
|
@ -316,12 +315,12 @@ RenderAnisotropic 1 0
|
|||
RenderCubeMap 0 0
|
||||
RenderFSAASamples 1 0
|
||||
RenderGLMultiThreaded 1 0
|
||||
RenderGLCoreProfile 1 0
|
||||
RenderGLContextCoreProfile 1 0
|
||||
|
||||
// AMD cards generally perform better when not using VBOs for streaming data
|
||||
// AMD cards also prefer an OpenGL Compatibility Profile Context
|
||||
list AMD
|
||||
RenderUseStreamVBO 1 0
|
||||
RenderGLCoreProfile 1 0
|
||||
RenderGLContextCoreProfile 1 0
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -825,6 +825,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;
|
||||
|
|
@ -1961,6 +1964,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
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ bool LLModelPreview::sIgnoreLoadedCallback = false;
|
|||
static const std::string DEFAULT_PHYSICS_MESH_NAME = "default_physics_shape";
|
||||
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
|
||||
|
|
@ -104,6 +105,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);
|
||||
|
|
@ -223,6 +243,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)
|
||||
|
|
@ -235,7 +261,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);
|
||||
|
||||
|
|
@ -933,7 +959,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);
|
||||
|
||||
|
|
@ -1076,12 +1107,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();
|
||||
|
|
@ -1235,6 +1285,7 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
}
|
||||
|
||||
mBaseModel = mModel[loaded_lod];
|
||||
clearGLODGroup(); // <FS:Beq/> Improved LOD generation
|
||||
|
||||
mBaseScene = mScene[loaded_lod];
|
||||
mVertexBuffer[5].clear();
|
||||
|
|
@ -1471,6 +1522,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
|
||||
|
|
@ -4384,8 +4882,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);
|
||||
|
|
@ -4399,9 +4902,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);
|
||||
|
||||
|
|
@ -287,6 +291,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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -475,7 +475,7 @@ public:
|
|||
RENDER_TYPE_PASS_SIMPLE_RIGGED = LLRenderPass::PASS_SIMPLE_RIGGED,
|
||||
RENDER_TYPE_PASS_GRASS = LLRenderPass::PASS_GRASS,
|
||||
RENDER_TYPE_PASS_FULLBRIGHT = LLRenderPass::PASS_FULLBRIGHT,
|
||||
RENDER_TYPE_PASS_FULLBRIGHT_RIGGED = LLRenderPass::PASS_FULLBRIGHT,
|
||||
RENDER_TYPE_PASS_FULLBRIGHT_RIGGED = LLRenderPass::PASS_FULLBRIGHT_RIGGED, // <FS:Ansariel> Fix apparent copy&paste issue
|
||||
RENDER_TYPE_PASS_INVISIBLE = LLRenderPass::PASS_INVISIBLE,
|
||||
RENDER_TYPE_PASS_INVISIBLE_RIGGED = LLRenderPass::PASS_INVISIBLE_RIGGED,
|
||||
RENDER_TYPE_PASS_INVISI_SHINY = LLRenderPass::PASS_INVISI_SHINY,
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -6790,6 +6790,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"
|
||||
|
|
@ -1172,7 +1188,7 @@
|
|||
name="modifiers_panel"
|
||||
help_topic="upload_model_modifiers">
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
|
|
@ -1479,7 +1495,7 @@
|
|||
name="lod_suffix_label"
|
||||
top_pad="5"
|
||||
width="110">
|
||||
LOD Suffixes:
|
||||
LOD Suffixes:
|
||||
</text>
|
||||
<combo_box
|
||||
follows="left|top"
|
||||
|
|
@ -1503,7 +1519,7 @@
|
|||
top_pad="10"
|
||||
halign="right"
|
||||
width="60">
|
||||
Lowest:
|
||||
Lowest:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshLowestLodSuffix"
|
||||
|
|
@ -1528,7 +1544,7 @@
|
|||
name="suf_low_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Low:
|
||||
Low:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshLowLodSuffix"
|
||||
|
|
@ -1553,7 +1569,7 @@
|
|||
name="suf_medium_lab"
|
||||
halign="right"
|
||||
width="40">
|
||||
Medium:
|
||||
Medium:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshMediumLodSuffix"
|
||||
|
|
@ -1578,7 +1594,7 @@
|
|||
name="suf_high_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
High:
|
||||
High:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshHighLodSuffix"
|
||||
|
|
@ -1602,7 +1618,7 @@
|
|||
name="suf_physics_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Physics:
|
||||
Physics:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshPhysicsSuffix"
|
||||
|
|
|
|||
|
|
@ -3052,6 +3052,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]
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
<string name="mesh_status_invalid_material_list">Les options du niveau de détail ne sont pas une sous-ensemble d'un modèle de référence.</string>
|
||||
<string name="phys_status_vertex_limit_exceeded">Certaines enveloppes physiques dépassent les limites de sommets.</string>
|
||||
<string name="phys_status_hull_limit_exceeded">Certains modèles dépassent la limite de la coque (256) ; essayez de "simplifier"..</string>
|
||||
<string name="phys_status_degenerate_triangles">Maillage physique trop dense ; supprimez les petits et fins triangles (voir aperçu).</string>
|
||||
<string name="phys_status_degenerate_triangles">Le maillage physique est trop dense ou contient des triangles non cohérents. Utilisez Analyser/Simplifier pour résoudre ce problème.</string>
|
||||
<string name="phys_status_no_havok">Cette version ne contient pas de support Havok et n'est pas recommandée pour le chargement de physiques dans Second Life. Les résultats peuvent être imprévisibles.</string>
|
||||
<string name="phys_status_too_thin">Une ou plusieurs dimensions sont inférieures à 0,5 m, seules les formes physiques basées sur la coque (analysées) fonctionneront correctement.</string>
|
||||
<string name="phys_status_unknown_error">Une erreur inconnue a été détectée.</string>
|
||||
|
|
@ -34,7 +34,22 @@
|
|||
<string name="UnrecognizedJoint">Riggé à une articulation au nom inconnu [NAME]</string>
|
||||
<string name="UnknownJoints">Skinning désactivé à cause de [COUNT] articulation inconnues.</string>
|
||||
<string name="ModelLoaded">Modèle [MODEL_NAME] chargé</string>
|
||||
|
||||
<string name="IncompleteTC">Les données des coordonnées de la texture ne sont pas complètes.</string>
|
||||
<string name="PositionNaN">Trouvé NaN lors du chargement des données de position depuis le fichier DAE, modèle invalide.</string>
|
||||
<string name="NormalsNaN">Trouvé NaN lors du chargement des normales depuis le fichier DAE, modèle invalide.</string>
|
||||
<string name="NegativeScaleTrans">Échelle négative détectée, transformation non prise en charge. domInstance_geometry : [LABEL]</string>
|
||||
<string name="NegativeScaleNormTrans">Échelle négative détectée, transformation post-normalisation non prise en charge. domInstance_geometry : [LABEL]</string>
|
||||
<string name="CantResolveGeometryUrl">Impossible de résoudre l'URL de la géométrie.</string>
|
||||
<string name="ParsingErrorBadElement">Mauvais élément</string>
|
||||
<string name="ParsingErrorCantParseScene">La scène n'a pas pu être analysée</string>
|
||||
<string name="ParsingErrorCorrupt">Erreur avec le dae - indique traditionnellement un fichier corrompu.</string>
|
||||
<string name="ParsingErrorNoController">Impossible de vérifier le contrôleur</string>
|
||||
<string name="ParsingErrorNoDoc">Impossible de trouver le document interne</string>
|
||||
<string name="ParsingErrorNoRoot">Le document n'a pas de racine</string>
|
||||
<string name="ParsingErrorNoScene">Le document n'a pas de visual_scene</string>
|
||||
<string name="ParsingErrorPositionInvalidModel">Impossible de traiter le maillage sans données de position. Modèle invalide.</string>
|
||||
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
<text name="name_label">
|
||||
|
|
@ -62,7 +77,10 @@
|
|||
<text initial_value="Élevé" name="high_label" value="Élevé"/>
|
||||
<combo_box name="lod_source_high">
|
||||
<item label="Depuis un fichier" name="Load from file" value="Depuis un fichier"/>
|
||||
<item label="Génération" name="Generate" value="Génération"/>
|
||||
<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">
|
||||
|
|
@ -74,7 +92,10 @@
|
|||
<text initial_value="Moyen" name="medium_label" value="Moyen"/>
|
||||
<combo_box name="lod_source_medium">
|
||||
<item label="Depuis un fichier" name="Load from file" value="Depuis un fichier"/>
|
||||
<item label="Génération" name="Generate" value="Génération"/>
|
||||
<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"/>
|
||||
|
|
@ -87,7 +108,10 @@
|
|||
<text initial_value="Faible" name="low_label" value="Faible"/>
|
||||
<combo_box name="lod_source_low">
|
||||
<item label="Depuis un fichier" name="Load from file" value="Depuis un fichier"/>
|
||||
<item label="Génération" name="Generate" value="Génération"/>
|
||||
<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"/>
|
||||
|
|
@ -100,7 +124,10 @@
|
|||
<text initial_value="Le plus faible" name="lowest_label" value="Le plus faible"/>
|
||||
<combo_box name="lod_source_lowest">
|
||||
<item label="Depuis un fichier" name="Load from file" value="Depuis un fichier"/>
|
||||
<item label="Génération" name="Generate" value="Génération"/>
|
||||
<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"/>
|
||||
|
|
@ -252,10 +279,48 @@
|
|||
</text>
|
||||
<check_box label="Activation automatique des poids" tool_tip="Régler automatiquement le poids des mesh avec les informations de rigging" name="mesh_preview_auto_weights"/>
|
||||
<check_box label="Visualisation automatique des poids" tool_tip="Visualiser automatiquement les poids dans l'aperçu des meshes avec les info de rigging" name="mesh_preview_auto_show_weights"/>
|
||||
<text name="mesh_preview_ud_preset_label">
|
||||
Physique défini par l'utilisateur :
|
||||
<text name="lod_suffix_label">
|
||||
Suffixes LOD :
|
||||
</text>
|
||||
<line_editor name="ud_physics" tool_tip="Chemin d'accès complet vers un fichier Collada à utiliser pour les propriétés physiques."/>
|
||||
<combo_box name="lod_suffix_combo" tool_tip="Choisissez une option ou créez la vôtre">
|
||||
<combo_item name="choose_one">
|
||||
Choisissez un standard ou éditez manuellement...
|
||||
</combo_item>
|
||||
<combo_item name="suff_sl">
|
||||
Standard SL (Le plus bas = LOD0)
|
||||
</combo_item>
|
||||
<combo_item name="suff_unity">
|
||||
Standard moteur de jeu (Le plus bas = LOD3)
|
||||
</combo_item>
|
||||
<combo_item name="suff_descriptive">
|
||||
Mots (haut, moyen...)
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<text name="suf_lowest_lab">
|
||||
Le plus bas :
|
||||
</text>
|
||||
<line_editor name="suf_lowest" tool_tip="Le suffixe utilisé pour identifier le fichier LOD le plus bas sur le disque et les modèles dans un fichier."/>
|
||||
<text name="suf_low_lab">
|
||||
Bas :
|
||||
</text>
|
||||
<line_editor name="suf_low" tool_tip="Le suffixe utilisé pour identifier le fichier LOD faible sur le disque et les modèles dans un fichier."/>
|
||||
<text name="suf_medium_lab">
|
||||
Moyen :
|
||||
</text>
|
||||
<line_editor name="suf_medium" tool_tip="Le suffixe utilisé pour identifier le fichier LOD moyen sur le disque et les modèles dans un fichier."/>
|
||||
<text name="suf_high_lab">
|
||||
Élevé :
|
||||
</text>
|
||||
<line_editor name="suf_high" tool_tip="Le suffixe utilisé pour identifier le fichier LOD élevé sur le disque et les modèles dans un fichier."/>
|
||||
<text name="suf_physics_lab">
|
||||
Physiques :
|
||||
</text>
|
||||
<line_editor name="suf_physics" tool_tip="Le suffixe utilisé pour identifier le fichier physique sur le disque et les modèles dans un fichier."/>
|
||||
<text name="mesh_preview_ud_preset_label">
|
||||
Physique prédéfini par l'utilisateur :
|
||||
</text>
|
||||
<line_editor name="ud_physics" tool_tip="Chemin d'accès complet à une définition de maillage Collada simple à utiliser pour le physique."/>
|
||||
<button label_selected="Parcourir" name="set_user_def_phys"/>
|
||||
<text name="mesh_preview_colors_label">
|
||||
Couleurs de l'aperçu des modèles :
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
<text name="PostProcessText">
|
||||
Faible
|
||||
</text>
|
||||
<check_box label="Activer VSync" name="vsync" tool_tip="Synchronise la fréquence d'images avec la fréquence de rafraîchissement du moniteur, ce qui permet d'obtenir des performances fluides."/>
|
||||
<text name="AvatarText">
|
||||
Avatar
|
||||
</text>
|
||||
|
|
@ -41,7 +42,6 @@
|
|||
(0 = défaut, valeur faible = plus lumineux)
|
||||
</text>
|
||||
<check_box label="Filtre anisotrope (plus lent quand activé)" name="ani"/>
|
||||
<check_box initial_value="true" label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="L’activation de cette option sur le matériel récent permet un gain de performance. Cependant, les implémentations VBO pour le matériel plus ancien sont souvent médiocres et votre système risque de se planter quand cette option est activée."/>
|
||||
<check_box initial_value="true" label="Activer la compression des textures (redémarrage requis)" name="texture compression" tool_tip="Comprime les textures en mémoire vidéo afin de permettre de charger des textures de résolution plus élevée au prix d’une certaine qualité de couleur."/>
|
||||
<check_box initial_value="true" label="Activer le support pour l'affichage en HiDPI (redémarrage requis)" name="use HiDPI" tool_tip="Activer OpenFL pour les dessins en haute résolution"/>
|
||||
<text name="antialiasing label">
|
||||
|
|
@ -86,7 +86,6 @@
|
|||
<text name="TerrainDetailText">
|
||||
Faible
|
||||
</text>
|
||||
<check_box initial_value="true" label="Accélération du rendu des avatars" name="AvatarVertexProgram"/>
|
||||
<check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
|
||||
<text name="ReflectionsText">
|
||||
Reflets dans l’eau :
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@
|
|||
<container_view name="statistics_view">
|
||||
<stat_view label="Basique" name="basic">
|
||||
<stat_bar label="FPS" name="fps"/>
|
||||
<stat_bar name="frame_mean" label="image (moyen)"/>
|
||||
<stat_bar name="frame_median" label="image (médian)"/>
|
||||
<stat_bar name="framet_jitter" label="scintillement"/>
|
||||
<stat_bar label="Données UDP Reçues" name="bandwidth"/>
|
||||
<stat_bar label="Perte de Paquets" name="packet_loss"/>
|
||||
<stat_bar label="Ping Sim" name="ping"/>
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@
|
|||
<menu_item_call label="Arrêter les animations de l'avatar" name="Stop Animating My Avatar"/>
|
||||
<menu_item_call label="Arrêter les animations de l'avatar & révoquer les permissions" name="Stop Animating My Avatar With Revoke"/>
|
||||
<menu_item_call label="Remettre en forme l'avatar" name="undeform_avatar"/>
|
||||
<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
|
||||
<menu_item_call label="Réinitialisation du squelette et les animations" name="Reset Skeleton And Animations"/>
|
||||
<menu_item_call label="Forcer l'actualisation de l'apparence (Rebake)" name="Rebake Texture"/>
|
||||
<menu_item_call label="Actualiser les attachements" name="Refresh Attachments"/>
|
||||
<menu_item_call label="Utiliser l'avatar masculin de base (Character Test)" name="ResetDefaultAvM"/>
|
||||
|
|
@ -448,7 +450,7 @@
|
|||
<menu_item_check label="Modèle d'éclairage avancé" name="Advanced Lighting Model"/>
|
||||
<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
|
||||
<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
|
||||
<menu_item_check label="Débogage GL" name="Debug GL"/>
|
||||
<menu_item_check label="Débogage GL au prochain démarrage" name="Debug GL"/>
|
||||
<menu_item_check label="Débogage pipeline" name="Debug Pipeline"/>
|
||||
<menu_item_check label="Masques alpha automatiques (différés)" name="Automatic Alpha Masks (deferred)"/>
|
||||
<menu_item_check label="Masques alpha automatiques (non différés)" name="Automatic Alpha Masks (non-deferred)"/>
|
||||
|
|
|
|||
|
|
@ -1932,7 +1932,7 @@ jusqu'à [MAX_PREMIUM_PLUS]. [https://secondlife.com/my/account/membership.php?
|
|||
Comme dans la vie réelle, il faut quelque temps aux gens pour qu'ils se familiarisent avec un nouveau nom. Veuillez compter quelques jours avant la [http://wiki.secondlife.com/wiki/Setting_your_display_name mise à jour de votre nom] au niveau des objets, scripts, recherches, etc.
|
||||
</notification>
|
||||
<notification name="SetDisplayNameBlocked">
|
||||
Impossible de changer de nom d'affichage. Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance.
|
||||
Impossible de changer de nom d'affichage. Si vous pensez qu'il s'agit d'une erreur, contactez l'Assistance du réseau.
|
||||
</notification>
|
||||
<notification name="SetDisplayNameFailedLength">
|
||||
Le nom saisi est trop long. Le nombre de caractères maximum est de [LENGTH].
|
||||
|
|
@ -5032,7 +5032,7 @@ Veuillez sélectionner un terrain plus petit.
|
|||
</form>
|
||||
</notification>
|
||||
<notification name="InventoryValidationFailed" label="Erreurs de validation de l'inventaire">
|
||||
Une corruption a été trouvée dans votre inventaire.
|
||||
Une corruption a été trouvée dans votre inventaire.
|
||||
Veuillez contacter [HELP] avec la liste de problèmes suivante.
|
||||
Ils peuvent utiliser http://opensimulator.org/wiki/inventory pour résoudre les problèmes.
|
||||
|
||||
|
|
|
|||
|
|
@ -13,13 +13,14 @@
|
|||
<combo_box label="Nom d'utilisateur" name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
|
||||
<line_editor label="Mot de passe" name="password_edit"/>
|
||||
<button label="Connexion" name="connect_btn"/>
|
||||
<check_box font="SansSerifSmall" label="Mémoriser mes informations" name="remember_check"/>
|
||||
<text name="sign_up_text">
|
||||
S'inscrire
|
||||
</text>
|
||||
<check_box label="Mémoriser mes informations" name="remember_name" tool_tip="L'utilisateur déjà mémorisé peut être oublié à partir de Moi > Préférences > Avancées > Utilisateurs enregistrés."/>
|
||||
<check_box label="Enregistrer le mot de passe" name="remember_password"/>
|
||||
<text name="forgot_password_text">
|
||||
Mot de passe oublié
|
||||
</text>
|
||||
<text name="sign_up_text">
|
||||
S'inscrire
|
||||
</text>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
</panel>
|
||||
<panel label="Paramètres matériels" name="Hardware Settings">
|
||||
<check_box label="Filtrage Anisotrope (plus lent lorsqu'il est activé)" name="ani"/>
|
||||
<check_box label="Activer les Vertex Buffer Objects OpenGL" name="vbo" tool_tip="Activer cette fonction offre un gain un gain de performance. Toutefois, le matériel très ancien peut ne pas implémenter cette technologie et provoquera une instabilité du Viewer s'il est actif."/>
|
||||
<check_box label="Activer VSync" name="vsync" tool_tip="Synchronise la fréquence d'images avec la fréquence de rafraîchissement du moniteur, ce qui permet d'obtenir des performances fluides."/>
|
||||
<check_box label="Activer les Streamed VBOs" name="vbo_stream" tool_tip="Désactiver cette option peut améliorer les performances lorsque les VBO sont activés. La désactivation de ce paramètre améliore grandement les performances sur certaines cartes graphiques Intel et AMD."/>
|
||||
<check_box label="Activer la compression de textures sans pertes (Redémarrage requis)" name="texture compression" tool_tip="Activer la compression des textures dans la mémoire graphique permet de charger des textures de résolution supérieure et une prise en charge d'un nombre de textures plus élevé pour le même cout mémoire."/>
|
||||
<check_box label="Active la prise en charge des écrans HiDPI (Mac OSX seulement; Redémarrage requis)" name="use HiDPI" tool_tip="Active OpenGL pour l'affichage haute résolution."/>
|
||||
|
|
|
|||
|
|
@ -223,6 +223,10 @@ http://secondlife.com/download
|
|||
|
||||
Pour plus d'informations, consultez la page FAQ ci-dessous :
|
||||
http://secondlife.com/viewer-access-faq
|
||||
</string>
|
||||
<string name="LoginFailed">
|
||||
Échec de la connexion d'urgence de la grille.
|
||||
Si vous pensez qu'il s'agit d'une erreur, veuillez contacter le support du réseau.
|
||||
</string>
|
||||
<string name="LoginIntermediateOptionalUpdateAvailable">
|
||||
Mise à jour facultative du client disponible : [VERSION]
|
||||
|
|
@ -6634,6 +6638,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" />
|
||||
|
|
@ -224,7 +228,7 @@
|
|||
<check_box label="Auto-włączanie wag" tool_tip="Automatycznie włącz wagi dla meszy z informacjami o riggowaniu" name="mesh_preview_auto_weights" />
|
||||
<check_box label="Auto-podgląd wag" tool_tip="Automatycznie wyświetlaj wagi w podglądzie dla meszy z informacjami o riggowaniu" name="mesh_preview_auto_show_weights" />
|
||||
<text name="lod_suffix_label">
|
||||
Sufiksy LOD:
|
||||
Sufiksy LOD:
|
||||
</text>
|
||||
<combo_box name="lod_suffix_combo" tool_tip="Wybierz ustawienie wstępne lub ustaw własne">
|
||||
<combo_item name="choose_one">Wybierz standard lub edytuj ręcznie...</combo_item>
|
||||
|
|
@ -233,23 +237,23 @@
|
|||
<combo_item name="suff_descriptive">Słowa (high, med...)</combo_item>
|
||||
</combo_box>
|
||||
<text name="suf_lowest_lab">
|
||||
Najniższy:
|
||||
Najniższy:
|
||||
</text>
|
||||
<line_editor name="suf_lowest" tool_tip="Sufiks używany do identyfikacji pliku na dysku z najniższym LOD oraz modelami." />
|
||||
<text name="suf_low_lab">
|
||||
Niski:
|
||||
Niski:
|
||||
</text>
|
||||
<line_editor name="suf_low" tool_tip="Sufiks używany do identyfikacji pliku na dysku z niskim LOD oraz modelami." />
|
||||
<text name="suf_medium_lab">
|
||||
Średni:
|
||||
Średni:
|
||||
</text>
|
||||
<line_editor name="suf_medium" tool_tip="Sufiks używany do identyfikacji pliku na dysku ze średnim LOD oraz modelami." />
|
||||
<text name="suf_high_lab">
|
||||
Wysoki:
|
||||
Wysoki:
|
||||
</text>
|
||||
<line_editor name="suf_high" tool_tip="Sufiks używany do identyfikacji pliku na dysku z wysokim LOD oraz modelami." />
|
||||
<text name="suf_physics_lab">
|
||||
Fizyka:
|
||||
Fizyka:
|
||||
</text>
|
||||
<line_editor name="suf_physics" tool_tip="Sufiks używany do identyfikacji pliku na dysku z fizyką oraz modelami." />
|
||||
<text name="mesh_preview_ud_preset_label">
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
@ -6402,6 +6412,7 @@ ID объекта: [INSPECTING_KEY]
|
|||
Выложено: [OBJECT_REZZER_KEY]
|
||||
Группа: [OBJECT_GROUP]
|
||||
Время создания: [OBJECT_CREATION_TIME]
|
||||
Время размещения: [OBJECT_REZ_TIME]
|
||||
Тип поиска пути: [OBJECT_PATHFINDING_TYPE]
|
||||
Присоединено к: [OBJECT_ATTACHED_POINT]
|
||||
Временно присоединено: [OBJECT_TEMP_ATTACHED]
|
||||
|
|
@ -6627,10 +6638,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'):
|
||||
|
|
@ -1445,6 +1453,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.
|
||||
|
|
@ -2139,6 +2148,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