Ansariel 2024-08-02 12:00:46 +02:00
commit b0a053d447
37 changed files with 247 additions and 98 deletions

View File

@ -1976,18 +1976,6 @@
</map>
<key>mikktspace</key>
<map>
<key>canonical_repo</key>
<string>https://bitbucket.org/lindenlab/3p-mikktspace</string>
<key>copyright</key>
<string>Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors</string>
<key>description</key>
<string>Mikktspace Tangent Generator</string>
<key>license</key>
<string>Apache 2.0</string>
<key>license_file</key>
<string>mikktspace.txt</string>
<key>name</key>
<string>mikktspace</string>
<key>platforms</key>
<map>
<key>darwin64</key>
@ -2033,8 +2021,20 @@
<string>windows64</string>
</map>
</map>
<key>license</key>
<string>Apache 2.0</string>
<key>license_file</key>
<string>mikktspace.txt</string>
<key>copyright</key>
<string>Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors</string>
<key>version</key>
<string>1</string>
<key>name</key>
<string>mikktspace</string>
<key>canonical_repo</key>
<string>https://bitbucket.org/lindenlab/3p-mikktspace</string>
<key>description</key>
<string>Mikktspace Tangent Generator</string>
</map>
<key>minizip-ng</key>
<map>
@ -3002,6 +3002,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>LICENSE</string>
<key>copyright</key>
<string>Copyright (c) 2000-2012, Linden Research, Inc.</string>
<key>version</key>
<string>3.0-f14b5ec</string>
<key>name</key>
<string>viewer-manager</string>
<key>description</key>
@ -3010,8 +3012,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>https://bitbucket.org/lindenlab/vmp-standalone</string>
<key>source_type</key>
<string>hg</string>
<key>version</key>
<string>3.0-f14b5ec</string>
</map>
<key>vlc-bin</key>
<map>
@ -3160,11 +3160,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>0a0a972036f2b2c9c97dead40c91f7443b8ab339</string>
<string>baabb11f324be350253b1fb58cf262c1aa19fa70</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.61-debug/webrtc-m114.5735.08.61-debug.9571929057-darwin64-9571929057.tar.zst</string>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.67-debug/webrtc-m114.5735.08.67-debug.10190042668-darwin64-10190042668.tar.zst</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -3174,11 +3174,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>8725ad23f33d946bd5a4e5f28e8c8324925c71a7</string>
<string>a13776c8f99f8975665be66ff8b51a80ba46c718</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.61-debug/webrtc-m114.5735.08.61-debug.9571929057-linux64-9571929057.tar.zst</string>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.67-debug/webrtc-m114.5735.08.67-debug.10190042668-linux64-10190042668.tar.zst</string>
</map>
<key>name</key>
<string>linux64</string>
@ -3188,11 +3188,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>db560661807db276a3c7d1e7d9531198c9268f68</string>
<string>965ef5d65a14191a52ee9ec6a9a8a1d2ce3f2ffb</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.61-debug/webrtc-m114.5735.08.61-debug.9571929057-windows64-9571929057.tar.zst</string>
<string>https://github.com/secondlife/3p-webrtc-build/releases/download/m114.5735.08.67-debug/webrtc-m114.5735.08.67-debug.10190042668-windows64-10190042668.tar.zst</string>
</map>
<key>name</key>
<string>windows64</string>
@ -3205,7 +3205,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>copyright</key>
<string>Copyright (c) 2011, The WebRTC project authors. All rights reserved.</string>
<key>version</key>
<string>m114.5735.08.61-debug.9571929057</string>
<string>m114.5735.08.67-debug.10190042668</string>
<key>name</key>
<string>webrtc</string>
<key>vcs_branch</key>

View File

@ -154,7 +154,8 @@ void LLCustomProcessor::Process(webrtc::AudioBuffer *audio_in)
// LLWebRTCImpl implementation
//
LLWebRTCImpl::LLWebRTCImpl() :
LLWebRTCImpl::LLWebRTCImpl(LLWebRTCLogCallback* logCallback) :
mLogSink(new LLWebRTCLogSink(logCallback)),
mPeerCustomProcessor(nullptr),
mMute(true),
mTuningMode(false),
@ -173,6 +174,7 @@ void LLWebRTCImpl::init()
// Normal logging is rather spammy, so turn it off.
rtc::LogMessage::LogToDebug(rtc::LS_NONE);
rtc::LogMessage::SetLogToStderr(true);
rtc::LogMessage::AddLogToStream(mLogSink, rtc::LS_VERBOSE);
mTaskQueueFactory = webrtc::CreateDefaultTaskQueueFactory();
@ -312,6 +314,7 @@ void LLWebRTCImpl::terminate()
mPeerDeviceModule = nullptr;
mTaskQueueFactory = nullptr;
});
rtc::LogMessage::RemoveLogToStream(mLogSink);
}
//
@ -1327,9 +1330,9 @@ void freePeerConnection(LLWebRTCPeerConnectionInterface* peer_connection)
}
void init()
void init(LLWebRTCLogCallback* logCallback)
{
gWebRTCImpl = new LLWebRTCImpl();
gWebRTCImpl = new LLWebRTCImpl(logCallback);
gWebRTCImpl->init();
}

View File

@ -56,6 +56,20 @@
namespace llwebrtc
{
class LLWebRTCLogCallback
{
public:
typedef enum {
LOG_LEVEL_VERBOSE = 0,
LOG_LEVEL_INFO,
LOG_LEVEL_WARNING,
LOG_LEVEL_ERROR
} LogLevel;
virtual void LogMessage(LogLevel level, const std::string& message) = 0;
};
// LLWebRTCVoiceDevice is a simple representation of the
// components of a device, used to communicate this
// information to the viewer.
@ -262,7 +276,7 @@ class LLWebRTCPeerConnectionInterface
// exports.
// This library must be initialized before use.
LLSYMEXPORT void init();
LLSYMEXPORT void init(LLWebRTCLogCallback* logSink);
// And should be terminated as part of shutdown.
LLSYMEXPORT void terminate();

View File

@ -69,6 +69,54 @@ namespace llwebrtc
class LLWebRTCPeerConnectionImpl;
class LLWebRTCLogSink : public rtc::LogSink {
public:
LLWebRTCLogSink(LLWebRTCLogCallback* callback) :
mCallback(callback)
{
}
// Destructor: close the log file
~LLWebRTCLogSink() override
{
}
void OnLogMessage(const std::string& msg,
rtc::LoggingSeverity severity) override
{
if (mCallback)
{
switch(severity)
{
case rtc::LS_VERBOSE:
mCallback->LogMessage(LLWebRTCLogCallback::LOG_LEVEL_VERBOSE, msg);
break;
case rtc::LS_INFO:
mCallback->LogMessage(LLWebRTCLogCallback::LOG_LEVEL_VERBOSE, msg);
break;
case rtc::LS_WARNING:
mCallback->LogMessage(LLWebRTCLogCallback::LOG_LEVEL_VERBOSE, msg);
break;
case rtc::LS_ERROR:
mCallback->LogMessage(LLWebRTCLogCallback::LOG_LEVEL_VERBOSE, msg);
break;
default:
break;
}
}
}
void OnLogMessage(const std::string& message) override
{
if (mCallback)
{
mCallback->LogMessage(LLWebRTCLogCallback::LOG_LEVEL_VERBOSE, message);
}
}
private:
LLWebRTCLogCallback* mCallback;
};
// Implements a class allowing capture of audio data
// to determine audio level of the microphone.
@ -139,8 +187,11 @@ class LLCustomProcessor : public webrtc::CustomProcessing
class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceSink
{
public:
LLWebRTCImpl();
~LLWebRTCImpl() {}
LLWebRTCImpl(LLWebRTCLogCallback* logCallback);
~LLWebRTCImpl()
{
delete mLogSink;
}
void init();
void terminate();
@ -228,6 +279,8 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceS
void setRecording(bool recording);
protected:
LLWebRTCLogSink* mLogSink;
// The native webrtc threads
std::unique_ptr<rtc::Thread> mNetworkThread;
std::unique_ptr<rtc::Thread> mWorkerThread;

View File

@ -2999,7 +2999,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled, const LLVector3 &
// Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been
// "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking.
//-----------------------------------------------------------------------------------------------------------------
if (LLVoiceClient::getInstance()->getIsSpeaking( mID ))
if (LLVoiceClient::getInstance()->getIsSpeaking( mID ) && (!isInMuteList() || isSelf()))
{
if (!mVoiceVisualizer->getCurrentlySpeaking())
{

View File

@ -768,6 +768,7 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID &session_id,
mReceivedCall(false),
mOutgoingCallInterface(outgoing_call_interface)
{
mChannelInfo = LLVoiceClient::getInstance()->getP2PChannelInfoTemplate(other_user_id);
}
void LLVoiceChannelP2P::handleStatusChange(EStatusType type)

View File

@ -889,7 +889,7 @@ void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)
LLWebRTCVoiceClient::getInstance()->removeObserver(observer);
}
std::string LLVoiceClient::sipURIFromID(const LLUUID &id)
std::string LLVoiceClient::sipURIFromID(const LLUUID &id) const
{
if (mNonSpatialVoiceModule)
{
@ -905,6 +905,22 @@ std::string LLVoiceClient::sipURIFromID(const LLUUID &id)
}
}
LLSD LLVoiceClient::getP2PChannelInfoTemplate(const LLUUID& id) const
{
if (mNonSpatialVoiceModule)
{
return mNonSpatialVoiceModule->getP2PChannelInfoTemplate(id);
}
else if (mSpatialVoiceModule)
{
return mSpatialVoiceModule->getP2PChannelInfoTemplate(id);
}
else
{
return LLSD();
}
}
LLVoiceEffectInterface* LLVoiceClient::getVoiceEffectInterface() const
{
return NULL;

View File

@ -284,7 +284,8 @@ public:
virtual void removeObserver(LLVoiceClientParticipantObserver* observer)=0;
//@}
virtual std::string sipURIFromID(const LLUUID &id)=0;
virtual std::string sipURIFromID(const LLUUID &id) const=0;
virtual LLSD getP2PChannelInfoTemplate(const LLUUID& id) const=0;
//@}
};
@ -519,7 +520,8 @@ public:
void addObserver(LLVoiceClientParticipantObserver* observer);
void removeObserver(LLVoiceClientParticipantObserver* observer);
std::string sipURIFromID(const LLUUID &id);
std::string sipURIFromID(const LLUUID &id) const;
LLSD getP2PChannelInfoTemplate(const LLUUID& id) const;
//////////////////////////
/// @name Voice effects

View File

@ -298,7 +298,6 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() :
mDevicesListUpdated(false),
mAudioSession(), // TBD - should be NULL
mAudioSessionChanged(false),
mNextAudioSession(),
mCurrentParcelLocalID(0),
@ -1742,7 +1741,6 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession)
LL_INFOS("Voice") << "Adding or joining voice session " << nextSession->mHandle << LL_ENDL;
mAudioSession = nextSession;
mAudioSessionChanged = true;
if (!mAudioSession || !mAudioSession->mReconnect)
{
mNextAudioSession.reset();
@ -2001,9 +1999,8 @@ bool LLVivoxVoiceClient::terminateAudioSession(bool wait)
sessionStatePtr_t oldSession = mAudioSession;
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL); // needs mAudioSession for uri
mAudioSession.reset();
// We just notified status observers about this change. Don't do it again.
mAudioSessionChanged = false;
// The old session may now need to be deleted.
reapSession(oldSession);
@ -2011,9 +2008,9 @@ bool LLVivoxVoiceClient::terminateAudioSession(bool wait)
else
{
LL_WARNS("Voice") << "terminateAudioSession(" << wait << ") with NULL mAudioSession" << LL_ENDL;
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL);
}
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_LEFT_CHANNEL);
// Always reset the terminate request flag when we get here.
// Some slower PCs have a race condition where they can switch to an incoming P2P call faster than the state machine leaves
@ -3971,7 +3968,6 @@ void LLVivoxVoiceClient::joinedAudioSession(const sessionStatePtr_t &session)
sessionStatePtr_t oldSession = mAudioSession;
mAudioSession = session;
mAudioSessionChanged = true;
// The old session may now need to be deleted.
reapSession(oldSession);
@ -5285,7 +5281,7 @@ bool LLVivoxVoiceClient::inProximalChannel()
return result;
}
std::string LLVivoxVoiceClient::sipURIFromID(const LLUUID &id)
std::string LLVivoxVoiceClient::sipURIFromID(const LLUUID &id) const
{
std::string result;
result = "sip:";
@ -5296,6 +5292,14 @@ std::string LLVivoxVoiceClient::sipURIFromID(const LLUUID &id)
return result;
}
LLSD LLVivoxVoiceClient::getP2PChannelInfoTemplate(const LLUUID& id) const
{
LLSD result;
result["channel_uri"] = sipURIFromID(id);
result["voice_server_type"] = VIVOX_VOICE_SERVER_TYPE;
return result;
}
std::string LLVivoxVoiceClient::sipURIFromAvatar(LLVOAvatar *avatar)
{
std::string result;
@ -5310,7 +5314,7 @@ std::string LLVivoxVoiceClient::sipURIFromAvatar(LLVOAvatar *avatar)
return result;
}
std::string LLVivoxVoiceClient::nameFromID(const LLUUID &uuid)
std::string LLVivoxVoiceClient::nameFromID(const LLUUID &uuid) const
{
std::string result;
@ -6290,7 +6294,6 @@ void LLVivoxVoiceClient::deleteSession(const sessionStatePtr_t &session)
if(mAudioSession == session)
{
mAudioSession.reset();
mAudioSessionChanged = true;
}
// ditto for the next audio session
@ -6399,9 +6402,10 @@ void LLVivoxVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::ESta
}
}
LLSD channel_info = getAudioSessionChannelInfo();
LL_DEBUGS("Voice")
<< " " << LLVoiceClientStatusObserver::status2string(status)
<< ", session channelInfo " << getAudioSessionChannelInfo()
<< ", session channelInfo " << channel_info
<< ", proximal is " << inSpatialChannel()
<< LL_ENDL;
@ -6416,7 +6420,7 @@ void LLVivoxVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::ESta
)
{
LLVoiceClientStatusObserver* observer = *it;
observer->onChange(status, getAudioSessionChannelInfo(), inSpatialChannel());
observer->onChange(status, channel_info, inSpatialChannel());
// In case onError() deleted an entry.
it = mStatusObservers.upper_bound(observer);
}

View File

@ -221,7 +221,8 @@ public:
void removeObserver(LLVoiceClientParticipantObserver* observer) override;
//@}
std::string sipURIFromID(const LLUUID &id) override;
std::string sipURIFromID(const LLUUID &id) const override;
LLSD getP2PChannelInfoTemplate(const LLUUID& id) const override;
//@}
/// @name LLVoiceEffectInterface virtual implementations
@ -706,7 +707,6 @@ private:
std::string mChannelName; // Name of the channel to be looked up
sessionStatePtr_t mAudioSession; // Session state for the current audio session
bool mAudioSessionChanged; // set to true when the above pointer gets changed, so observers can be notified.
sessionStatePtr_t mNextAudioSession; // Session state for the audio session we're trying to join
@ -748,7 +748,7 @@ private:
bool switchChannel(std::string uri = std::string(), bool spatial = true, bool no_reconnect = false, bool is_p2p = false, std::string hash = "");
void joinSession(const sessionStatePtr_t &session);
std::string nameFromID(const LLUUID &id);
std::string nameFromID(const LLUUID &id) const;
bool IDFromName(const std::string name, LLUUID &uuid);
std::string sipURIFromAvatar(LLVOAvatar *avatar);
std::string sipURIFromName(std::string &name);

View File

@ -248,7 +248,7 @@ LLWebRTCVoiceClient::~LLWebRTCVoiceClient()
void LLWebRTCVoiceClient::init(LLPumpIO* pump)
{
// constructor will set up LLVoiceClient::getInstance()
llwebrtc::init();
llwebrtc::init(this);
mWebRTCDeviceInterface = llwebrtc::getDeviceInterface();
mWebRTCDeviceInterface->setDevicesObserver(this);
@ -279,6 +279,29 @@ void LLWebRTCVoiceClient::cleanUp()
LL_DEBUGS("Voice") << "Exiting" << LL_ENDL;
}
void LLWebRTCVoiceClient::LogMessage(llwebrtc::LLWebRTCLogCallback::LogLevel level, const std::string& message)
{
switch (level)
{
case llwebrtc::LLWebRTCLogCallback::LOG_LEVEL_VERBOSE:
LL_DEBUGS("Voice") << message << LL_ENDL;
break;
case llwebrtc::LLWebRTCLogCallback::LOG_LEVEL_INFO:
LL_INFOS("Voice") << message << LL_ENDL;
break;
case llwebrtc::LLWebRTCLogCallback::LOG_LEVEL_WARNING:
LL_WARNS("Voice") << message << LL_ENDL;
break;
case llwebrtc::LLWebRTCLogCallback::LOG_LEVEL_ERROR:
// use WARN so that we don't crash on a webrtc error.
// webrtc will force a crash on a fatal error.
LL_WARNS("Voice") << message << LL_ENDL;
break;
default:
break;
}
}
// --------------------------------------------------
const LLVoiceVersionInfo& LLWebRTCVoiceClient::getVersion()
@ -2067,11 +2090,16 @@ void LLWebRTCVoiceClient::avatarNameResolved(const LLUUID &id, const std::string
}
// Leftover from vivox PTSN
std::string LLWebRTCVoiceClient::sipURIFromID(const LLUUID& id)
std::string LLWebRTCVoiceClient::sipURIFromID(const LLUUID& id) const
{
return id.asString();
}
LLSD LLWebRTCVoiceClient::getP2PChannelInfoTemplate(const LLUUID& id) const
{
return LLSD();
}
/////////////////////////////
// LLVoiceWebRTCConnection

View File

@ -62,7 +62,8 @@ extern const std::string WEBRTC_VOICE_SERVER_TYPE;
class LLWebRTCVoiceClient : public LLSingleton<LLWebRTCVoiceClient>,
virtual public LLVoiceModuleInterface,
public llwebrtc::LLWebRTCDevicesObserver,
public LLMuteListObserver
public LLMuteListObserver,
public llwebrtc::LLWebRTCLogCallback
{
LLSINGLETON(LLWebRTCVoiceClient);
LOG_CLASS(LLWebRTCVoiceClient);
@ -84,7 +85,15 @@ public:
// Returns true if WebRTC has successfully logged in and is not in error state
bool isVoiceWorking() const override;
std::string sipURIFromID(const LLUUID &id) override;
std::string sipURIFromID(const LLUUID &id) const override;
LLSD getP2PChannelInfoTemplate(const LLUUID& id) const override;
///////////////////
/// @name Logging
/// @{
void LogMessage(llwebrtc::LLWebRTCLogCallback::LogLevel level, const std::string& message) override;
//@}
/////////////////////
/// @name Tuning

View File

@ -58,7 +58,7 @@
<combo_box.item label="Bütün avatarlar və obyektlər" name="3"/>
<combo_box.item label="Hər şeyi əksləndir" name="4"/>
</combo_box>
<text name="local lights_label" tool_tip="Əlavə işıqlandırma modeli söndürüldüyü zaman təqdim edilən işıqlandırma mənbələrinin sayına təsir edir. Yenidən başlatma tələb olunur">
<text name="local lights_label" tool_tip="Göstərilən işıq mənbələrinin sayına təsir göstərir. Yenidən başlatma tələb olunur">
Nöqtəvi işıqlandırma:
</text>
<combo_box name="LocalLightsDetail">

View File

@ -421,7 +421,7 @@
layout="topleft"
left_delta="-5"
name="local lights_label"
tool_tip="Affects the number of rendered. A restart is required to change mode.">
tool_tip="Affects the number of rendered light sources. A restart is required to change mode.">
Point Lighting (restart required)
</text>
<combo_box

View File

@ -53,7 +53,7 @@
<combo_box.item label="Todos los avatares y objetos" name="3"/>
<combo_box.item label="Todo" name="4"/>
</combo_box>
<text name="local lights_label" width="180" tool_tip="Afecta al número de fuentes de luz dibujadas cuando 'Modelo avanzado de iluminación' está desactivado. Se requiere reiniciar para efectuar los cambios.">
<text name="local lights_label" width="180" tool_tip="Afecta al número de fuentes de luz dibujadas. Se requiere reiniciar para efectuar los cambios.">
Puntos de luz (requiere reiniciar):
</text>
<combo_box name="LocalLightsDetail" width="165">

View File

@ -41,7 +41,7 @@
<combo_box.item label="Manuels &amp; terrain" name="2"/>
<combo_box.item label="Scène complète" name="3"/>
</combo_box>
<text width="185" name="local lights_label" tool_tip="Affecte le nombre de sources de lumière lorsque l'éclairage avancé est désactivé. Un redémarrage est requis pour changer de mode.">
<text width="185" name="local lights_label" tool_tip="Affecte le nombre de sources de lumière. Un redémarrage est requis pour changer de mode.">
Éclairage ponctuel (redémarrage) :
</text>
<combo_box name="LocalLightsDetail">

View File

@ -27,6 +27,8 @@
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Orbita la camera intorno al centro focale"/>
<button name="roll_left" tool_tip="Inclina la camera a sinistra" />
<button name="roll_right" tool_tip="Inclina la camera a destra" />
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/>

View File

@ -16,6 +16,8 @@
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Orbita la camera intorno al centro focale"/>
<button name="roll_left" tool_tip="Inclina la camera a sinistra" />
<button name="roll_right" tool_tip="Inclina la camera a destra" />
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/>

View File

@ -46,10 +46,10 @@
<button name="chat_search_btn" tool_tip="Cerca nella chat" />
</layout_panel>
<layout_panel name="support_panel">
<check_box label="Specifica versione" name="FSSupportGroupChatPrefix_toggle" tool_tip="Aggiunge la versione del viewer e le info sulla modalità in testa ai messaggi inviati a questo gruppo; questo può aiutare il gruppo di supporto a diagnosticare i problemi e può migliorare l&apos;accuratezza delle risposte"/>
<check_box label="Specifica versione" name="FSSupportGroupChatPrefix_toggle" tool_tip="Aggiungi la versione, la skin del viewer, il sistema operativo e lo stato RLVa davanti ai tuoi messaggi in questa chat di gruppo. Questo aiuterà il team di supporto a diagnosticare correttamente i tuoi problemi e a migliorare la precisione delle risposte alle tue domande."/>
</layout_panel>
<layout_panel name="testing_panel">
<check_box label="Specifica versione" name="FSSupportGroupChatPrefixTesting_toggle" tool_tip="Aggiungi la versione e la skin del viewer, il sistema operativo e lo stato RLVa davanti ai messaggi inviati da te a questo gruppo, il che aiuterà il team di supporto a diagnosticare correttamente i tuoi problemi e a migliorare la precisione nel rispondere alle tue domande. (questo è separato dai gruppi di supporto)" />
<check_box label="Specifica build" name="FSSupportGroupChatPrefixTesting_toggle" tool_tip="Aggiungi il numero di build, la skin del viewer, il sistema operativo e lo stato RLVa davanti ai tuoi messaggi in questa chat di gruppo. Questo aiuterà il team di supporto a diagnosticare correttamente i tuoi problemi e a migliorare la precisione delle risposte alle tue domande. Questa opzione non ha effetto nel gruppo di supporto." />
</layout_panel>
</layout_stack>
<layout_stack name="chat_stack">

View File

@ -52,8 +52,10 @@
</combo_box>
<check_box label="Interfaccia" name="ui_check"/>
<check_box label="Credito L$" name="currency_check" />
<check_box label="Cattura schermo (tutto schermo)" name="freeze_frame_check"/>
<check_box label="HUD" name="hud_check" />
<check_box label="Fermo immagine (tutto schermo)" name="freeze_frame_check"/>
<check_box label="Aggiornamento automatico" name="auto_snapshot_check"/>
<check_box label="Nessuna post-elaborazione" name="no_post_check" />
<text name="filter_list_label">
Filtro:
</text>
@ -79,7 +81,7 @@
</text>
</view>
<text name="image_res_text">
[WIDTH] px (larghezza) x [HEIGHT] px (altezza)
[WIDTH] x [HEIGHT] pixel (base x altezza)
</text>
<button label="Foto a 360°" name="360_label" />
</floater>

View File

@ -48,6 +48,6 @@
<button name="btn_add" label="Aggiungi" />
<button name="btn_remove" label="Rimuovi" />
<button name="btn_reload" label="Ricarica" />
<button name="btn_clear" label="Cancella Param." />
<button name="btn_clear" label="Cancella" />
<button name="btn_rez" label="Rez Selezion." tool_tip="Crea una mesh vuota nel mondo e applica ad essa la mesh locale scelta. Questo crea un oggetto vuoto nel mondo." />
</floater>

View File

@ -1501,7 +1501,7 @@ La texture del terreno [TEXTURE_NUM] non è completamente caricata, ma sembra co
Se la texture [TEXTURE_NUM] è opaca, attendi fino al completo caricamento, quindi fai clic su &quot;Applica&quot; di nuovo.
L'alfa è supportata solo per i materiali del terreno (rugosità metallica PBR) quando alphaMode="MASK" e doubleSided=false.
L'alfa è supportata solo per i materiali del terreno (rugosità/metallicità PBR) quando alphaMode="MASK" e doubleSided=false.
</notification>
<notification name="InvalidTerrainAlpha">
Impossibile impostare le texture della regione:
@ -1509,7 +1509,7 @@ La texture del terreno [TEXTURE_NUM] contiene trasparenza. La trasparenza attual
Sostituisci la texture [TEXTURE_NUM] con una RGB opaca, quindi fai clic su &quot;Applica&quot; di nuovo.
L'alfa è supportata solo per i materiali del terreno (rugosità metallica PBR) quando alphaMode="MASK" e doubleSided=false.
L'alfa è supportata solo per i materiali del terreno (rugosità/metallicità PBR) quando alphaMode="MASK" e doubleSided=false.
</notification>
<notification name="InvalidTerrainSize">
Impossibile impostare le texture della regione:

View File

@ -22,7 +22,7 @@
<texture_picker name="normal_map_picker" label="Normale" tool_tip="Clicca per scegliere la mappa normale" />
<texture_picker name="emissive_map_picker" label="Emissiva" tool_tip="Clicca per scegliere la mappa emissiva" />
<color_swatch name="emissive_color_tint_picker" label="Tinta" tool_tip="Clicca per scegliere la tonalità di colore di emissività" />
<texture_picker name="metallic_map_picker" tool_tip="Clicca per scegliere la mappa di rugosità metallica, che può contenere un canale di occlusione opzionale" />
<texture_picker name="metallic_map_picker" tool_tip="Clicca per scegliere la mappa di rugosità/metallicità, che può contenere un canale di occlusione opzionale" />
</panel>
<panel name="panel_material_parameters">
<check_box label="Doppia faccia" name="double sided" />
@ -36,7 +36,7 @@
<combo_box.item label="Maschera" name="Alpha masking" />
</combo_box>
<spinner label="Ritaglio" name="alpha cutoff" />
<spinner label="Metallità" name="metalness factor" />
<spinner label="Metallicità" name="metalness factor" />
<spinner label="Rugosità" name="roughness factor" />
<button name="save_selected_pbr" label="Salva" />
</panel>
@ -151,10 +151,10 @@
<button name="btn_select_same_spec" tool_tip="Seleziona tutte le facce con la stessa mappa speculare di questa" />
</layout_panel>
<layout_panel name="panel_blinn_phong_options">
<check_box label="Max luminos." name="checkbox fullbright" width="90" />
<check_box label="Max lumin." name="checkbox fullbright" width="90" />
<spinner name="ColorTrans" label="Trasparenza" />
<text name="label alphamode">
Modalità alfa
Modal. alfa
</text>
<combo_box name="combobox alphamode">
<combo_box.item label="Nessuna" name="None" />
@ -162,7 +162,7 @@
<combo_box.item label="Maschera alfa" name="Alpha masking" />
<combo_box.item label="Maschera emissiva" name="Emissive mask" />
</combo_box>
<spinner label="Ritaglio maschera" name="maskcutoff" label_width="90" />
<spinner label="Ritaglio maschera" name="maskcutoff" label_width="100" />
<text name="label bumpiness">
Superficie
</text>
@ -301,5 +301,5 @@
</panel>
<button name="copy_face_btn" tool_tip="Copia i parametri della texture negli appunti" />
<button name="paste_face_btn" tool_tip="Incolla i parametri della texture dagli appunti" />
<spinner label="Bagliore" name="glow" label_width="43" />
<spinner label="Bagliore" name="glow" label_width="44" />
</panel>

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="panel_gltf_material">
<check_box label="Doppio lato" name="double sided"/>
<check_box label="Doppia faccia" name="double sided"/>
<panel name="base_color_texture_pnl">
<text name="base_color_lbl">
Colore di base:
</text>
<texture_picker name="base_color_texture" tool_tip="Mappa del colore di base. Il canale alfa è facoltativo e viene utilizzato per la trasparenza."/>
<text name="base_color_upload_fee">
Nessun costo upload
No costi di upload
</text>
<text name="base_color_tint_lbl">
Tinta
@ -29,14 +29,14 @@
</panel>
<panel name="metallic_texture_pnl">
<text name="metallic_roughness_lbl">
Metallità-Rugosità:
Metallicità-Rugosità:
</text>
<texture_picker name="metallic_roughness_texture" tool_tip="Mappa di metallità-rugosità GLTF con occlusione opzionale. Il canale rosso è l'occlusione, il canale verde è la rugosità, il canale blu è la metallità."/>
<texture_picker name="metallic_roughness_texture" tool_tip="Mappa di metallicità-rugosità GLTF con occlusione opzionale. Il canale rosso è l'occlusione, il canale verde è la rugosità, il canale blu è la metallicità."/>
<text name="metallic_upload_fee">
Nessun costo upload
No costi di upload
</text>
<text name="metallic_factor_lbl">
Fattore metallità
Fattore metallici
</text>
<text name="roughness_factor_lbl">
Fattore rugosità
@ -47,7 +47,7 @@
Emissiva:
</text>
<text name="emissive_upload_fee">
Nessun costo upload
No costi di upload
</text>
<text name="emissive_tint_lbl">
Tinta
@ -58,7 +58,7 @@
Normale:
</text>
<text name="normal_upload_fee">
Nessun costo upload
No costi di upload
</text>
</panel>
</panel>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="panel_outfit_snapshot_inventory">
<text name="title">
Inventario
</text>
<text name="hint_lbl">
Il caricamento di un'immagine costa [UPLOAD_COST]L$.
La tariffa dipende dal livello di abbonamento. Ai livelli più alti le tariffe sono inferiori.
</text>
<button label="Annulla" name="cancel_btn" />
<button label="Salva" name="save_btn" />
</panel>

View File

@ -46,12 +46,12 @@
<combo_box.item label="Senza limiti per gli HUD" name="ScriptDialogOption_4"/>
<combo_box.item label="Senza limiti" name="ScriptDialogOption_5" />
</combo_box>
<check_box label="Togli bottone &quot;Blocca&quot;" name="FSRemoveScriptBlockButton"/>
<check_box label="Togli pulsante &quot;Blocca&quot;" name="FSRemoveScriptBlockButton"/>
<text name="ScriptDialogsPositionLabel">
Posizione dialogo script:
</text>
<combo_box name="ScriptDialogsPositionDropdown" tool_tip="Dove compaiono le finestre di dialogo (menu) degli script sullo schermo.">
<combo_box.item label="Attacca a messaggi" name="ScriptDialogPositionOption_1" />
<combo_box.item label="Ancorato al chiclet" name="ScriptDialogPositionOption_1" />
<combo_box.item label="Alto sinistra" name="ScriptDialogPositionOption_2"/>
<combo_box.item label="Alto destra" name="ScriptDialogPositionOption_3"/>
<combo_box.item label="Basso sinistra" name="ScriptDialogPositionOption_4" />

View File

@ -70,7 +70,7 @@
<combo_box.item label="Tutti gli avatar e gli oggetti" name="3"/>
<combo_box.item label="Tutto" name="4"/>
</combo_box> -->
<text name="local lights_label" tool_tip="Imposta il numero di punti luce resi quando &apos;Ombre ambiente&apos; non è attivo. Richiede riavvio per cambiare modalità">
<text name="local lights_label" tool_tip="Imposta il numero di punti luce resi. Richiede riavvio per cambiare modalità">
Punti Luce (richiede riavvio):
</text>
<combo_box name="LocalLightsDetail">

View File

@ -19,7 +19,7 @@
Le impostazioni ambientali non sono disponibili in questa regione.
</string>
<string name="str_disallowed">
Il gestore della proprietà immobiliare non permette di cambiare l'ambiente del lotto in questa regione.
Il gestore della regione non permette di cambiare l'ambiente del lotto.
</string>
<string name="str_too_small">
Il lotto deve essere di almeno 128 metri quadri per supportare le funzionalità per l'ambiente.

View File

@ -15,7 +15,7 @@
<text name="detail_material_text">
Materiali terreno
</text>
<check_box label="Rugosità metallica PBR" name="terrain_material_type" tool_tip="Se selezionato, utilizza materiali di rugosità metallica PBR per il terreno. Altrimenti, usa le texture." />
<check_box label="Rugosità/Metallicità PBR" name="terrain_material_type" tool_tip="Se selezionato, utilizza i materiali PBR per il terreno, altrimenti utilizza le texture." />
<text name="height_text_lbl">
1 (basso)
</text>

View File

@ -10,11 +10,11 @@
<combo_box.item label="Finestra attuale" name="CurrentWindow"/>
<combo_box.item label="Personalizza" name="Custom"/>
</combo_box>
<spinner label="L x A" name="inventory_snapshot_width"/>
<spinner label="Base x Altezza" name="inventory_snapshot_width"/>
<check_box label="Mantieni proporzioni" name="inventory_keep_aspect_check"/>
<check_box label="Temporaneo" name="inventory_temp_upload" />
<text name="hint_lbl">
Per salvare come texture, selezionare un formato quadrato.
Per salvare come texture, seleziona un formato quadrato.
</text>
<button label="&#x25B6; Seleziona" name="cancel_btn"/>
<button label="Salva" name="save_btn"/>

View File

@ -1,14 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_local">
<text name="title">
Disco
Disco fisso
</text>
<combo_box label="Risoluzione" name="local_size_combo">
<combo_box.item label="Finestra attuale" name="CurrentWindow"/>
<combo_box.item label="Personalizza" name="Custom"/>
</combo_box>
<spinner label="L x A" name="local_snapshot_width"/>
<spinner label="Base x Altezza" name="local_snapshot_width"/>
<check_box label="Mantieni le proporzioni" name="local_keep_aspect_check"/>
<text name="local_format_label"> <!-- width="50" -->
Formato:
</text>
<combo_box label="Formato" name="local_format_combo">
<combo_box.item label="PNG (senza perdite)" name="PNG"/>
<combo_box.item label="BMP (senza perdite)" name="BMP"/>

View File

@ -2,19 +2,13 @@
<panel name="panel_snapshot_options">
<layout_stack name="option_buttons">
<layout_panel name="lp_download">
<button label="Salva su disco" name="save_to_computer_btn"/>
<button label="Salva sul disco fisso" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="Salva in inventario (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Salva in inventario ([AMOUNT]L$)" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="Carica su profilo web" name="save_to_profile_btn"/>
</layout_panel>
<layout_panel name="lp_facebook">
<button label="Carica su Facebook" name="send_to_facebook_btn"/>
</layout_panel>
<layout_panel name="lp_twitter">
<button label="Carica su Twitter" name="send_to_twitter_btn"/>
<button label="Condividi sul feed" name="save_to_profile_btn"/>
</layout_panel>
<layout_panel name="lp_flickr">
<button label="Carica su Flickr" name="send_to_flickr_btn"/>
@ -23,4 +17,7 @@
<button label="Invia per e-mail" name="save_to_email_btn"/>
</layout_panel>
</layout_stack>
<text name="fee_hint_lbl">
La tariffa dipende dal livello di abbonamento. Ai livelli più alti le tariffe sono inferiori.
</text>
</panel>

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_profile">
<text name="title">
Profilo web
Feed Profilo
</text>
<combo_box label="Risoluzione" name="profile_size_combo">
<combo_box.item label="Finestra attuale" name="CurrentWindow"/>
<combo_box.item label="Personalizza" name="Custom"/>
</combo_box>
<spinner label="L x A" name="profile_snapshot_width"/>
<spinner label="Base x Altezza" name="profile_snapshot_width"/>
<check_box label="Mantieni le proporzioni" name="profile_keep_aspect_check"/>
<text name="caption_label">
Didascalia:

View File

@ -41,7 +41,7 @@
<radio_group name="radio_pbr_type">
<radio_item label="Materiale completo" name="Complete material"/>
<radio_item label="Colore di base" name="Base color"/>
<radio_item label="Metallità/rugosità" name="Metallic/roughness"/>
<radio_item label="Metallicità/rugosità" name="Metallic/roughness"/>
<radio_item label="Emissiva" name="Emissive"/>
<radio_item label="Normale" name="Normal"/>
</radio_group>

View File

@ -1801,7 +1801,7 @@ Se il messaggio persiste, contattare il supporto Second Life per assistenza http
in aggiornamento...
</string>
<string name="UploadFeeInfo">
Il costo si basa sul tuo livello di iscrizione. Più alto è il livello, più basso è il costo. [https://secondlife.com/my/account/membership.php? Scopri di più]
La tariffa dipende dal livello di abbonamento. Ai livelli più alti le tariffe sono inferiori. [https://secondlife.com/my/account/membership.php? Scopri di più]
</string>
<string name="Open landmarks">
Apri segnaposto

View File

@ -58,7 +58,7 @@
<combo_box.item label="Ręczne + podłoże" name="2" />
<combo_box.item label="Pełna scena" name="3" />
</combo_box>
<text name="local lights_label" tool_tip="Wpływa na liczbę renderowanych źródeł światła, gdy 'zaawansowane oświetlenie' jest wyłączone. Aby zmienić tryb wymagany jest restart.">
<text name="local lights_label" tool_tip="Wpływa na liczbę renderowanych źródeł światła. Aby zmienić tryb wymagany jest restart.">
Oświetlenie punktowe:
</text>
<combo_box name="LocalLightsDetail">

View File

@ -57,7 +57,7 @@
<combo_box.item label="Вручную + местность" name="2"/>
<combo_box.item label="Полная сцена" name="3"/>
</combo_box>
<text name="local lights_label" tool_tip="Влияет на количество отрисованых источников света, когда расширенная модель освещения отключена. Требуется перезапуск">
<text name="local lights_label" tool_tip="Влияет на количество отрисованых источников света. Требуется перезапуск">
Точечное освещение:
</text>
<combo_box name="LocalLightsDetail">